diff --git a/rainbow/SDL2GUI/Cursor.cpp b/rainbow/SDL2GUI/Cursor.cpp index bc953b54a..fbd1e3470 100644 --- a/rainbow/SDL2GUI/Cursor.cpp +++ b/rainbow/SDL2GUI/Cursor.cpp @@ -43,7 +43,7 @@ void SDL2GUI::SetMouseCursor(const Image& image) if(image.GetSerialId() != fbCursorImage.GetSerialId()) { fbCursorImage = image; fbCursorPos = Null; - SDL_ShowCursor(trye); + SDL_ShowCursor(true); if(sdl_cursor) SDL_FreeCursor(sdl_cursor); if(sdl_cursor_surface) diff --git a/rainbow/SDL2GUI/Event.cpp b/rainbow/SDL2GUI/Event.cpp index bfa811491..aba609895 100644 --- a/rainbow/SDL2GUI/Event.cpp +++ b/rainbow/SDL2GUI/Event.cpp @@ -13,13 +13,20 @@ dword fbKEYtoK(dword chr) { else if(chr == SDLK_RETURN) chr = K_RETURN; - else - chr = chr + K_DELTA; + else { + extern Tuple SDL_key_map[]; + for(int i = 0; SDL_key_map[i].a; i++) + if(chr == SDL_key_map[i].b) { + chr = SDL_key_map[i].a; + break; + } + } if(chr == K_ALT_KEY || chr == K_CTRL_KEY || chr == K_SHIFT_KEY) return chr; if(GetCtrl()) chr |= K_CTRL; if(GetAlt()) chr |= K_ALT; if(GetShift()) chr |= K_SHIFT; + return chr; } diff --git a/rainbow/SDL2GUI/Keys.cpp b/rainbow/SDL2GUI/Keys.cpp new file mode 100644 index 000000000..742c55eaa --- /dev/null +++ b/rainbow/SDL2GUI/Keys.cpp @@ -0,0 +1,133 @@ +#include "SDL2GUI.h" + +namespace Upp { + +Tuple SDL_key_map[] = { +#if 0 + { K_BACK, SDLK_BACKSPACE }, + { K_BACKSPACE, SDLK_BACKSPACE }, + + //handled extra in fbKEYtoK + { K_TAB, SDLK_TAB }, + + { K_SPACE, SDLK_SPACE }, + + { K_RETURN, SDLK_RETURN }, + { K_ENTER, K_RETURN }, +#endif + + { K_SHIFT_KEY, SDLK_LSHIFT }, + { K_CTRL_KEY, SDLK_LCTRL }, + { K_ALT_KEY, SDLK_LALT }, + { K_CAPSLOCK, SDLK_CAPSLOCK }, + { K_ESCAPE, SDLK_ESCAPE }, + { K_PAGEUP, SDLK_PAGEUP }, + { K_PAGEDOWN, SDLK_PAGEDOWN }, + { K_END, SDLK_END }, + { K_HOME, SDLK_HOME }, + { K_LEFT, SDLK_LEFT }, + { K_UP, SDLK_UP }, + { K_RIGHT, SDLK_RIGHT }, + { K_DOWN, SDLK_DOWN }, + { K_INSERT, SDLK_INSERT }, + { K_DELETE, SDLK_DELETE }, + + { K_NUMPAD0, SDLK_KP_0 }, + { K_NUMPAD1, SDLK_KP_1 }, + { K_NUMPAD2, SDLK_KP_2 }, + { K_NUMPAD3, SDLK_KP_3 }, + { K_NUMPAD4, SDLK_KP_4 }, + { K_NUMPAD5, SDLK_KP_5 }, + { K_NUMPAD6, SDLK_KP_6 }, + { K_NUMPAD7, SDLK_KP_7 }, + { K_NUMPAD8, SDLK_KP_8 }, + { K_NUMPAD9, SDLK_KP_9 }, + { K_MULTIPLY, SDLK_KP_MULTIPLY }, + { K_ADD, SDLK_KP_PLUS }, + { K_SEPARATOR, SDLK_KP_PERIOD }, + { K_SUBTRACT, SDLK_KP_MINUS }, + { K_DECIMAL, SDLK_KP_PERIOD }, + { K_DIVIDE, SDLK_KP_DIVIDE }, + { K_SCROLL, SDLK_SCROLLLOCK }, + + { K_F1, SDLK_F1 }, + { K_F2, SDLK_F2 }, + { K_F3, SDLK_F3 }, + { K_F4, SDLK_F4 }, + { K_F5, SDLK_F5 }, + { K_F6, SDLK_F6 }, + { K_F7, SDLK_F7 }, + { K_F8, SDLK_F8 }, + { K_F9, SDLK_F9 }, + { K_F10, SDLK_F10 }, + { K_F11, SDLK_F11 }, + { K_F12, SDLK_F12 }, + + { K_A, SDLK_a }, + { K_B, SDLK_b }, + { K_C, SDLK_c }, + { K_D, SDLK_d }, + { K_E, SDLK_e }, + { K_F, SDLK_f }, + { K_G, SDLK_g }, + { K_H, SDLK_h }, + { K_I, SDLK_i }, + { K_J, SDLK_j }, + { K_K, SDLK_k }, + { K_L, SDLK_l }, + { K_M, SDLK_m }, + { K_N, SDLK_n }, + { K_O, SDLK_o }, + { K_P, SDLK_p }, + { K_Q, SDLK_q }, + { K_R, SDLK_r }, + { K_S, SDLK_s }, + { K_T, SDLK_t }, + { K_U, SDLK_u }, + { K_V, SDLK_v }, + { K_W, SDLK_w }, + { K_X, SDLK_x }, + { K_Y, SDLK_y }, + { K_Z, SDLK_z }, + { K_0, SDLK_0 }, + { K_1, SDLK_1 }, + { K_2, SDLK_2 }, + { K_3, SDLK_3 }, + { K_4, SDLK_4 }, + { K_5, SDLK_5 }, + { K_6, SDLK_6 }, + { K_7, SDLK_7 }, + { K_8, SDLK_8 }, + { K_9, SDLK_9 }, + + { K_CTRL_LBRACKET, K_CTRL|219 }, + { K_CTRL_RBRACKET, K_CTRL|221 }, + { K_CTRL_MINUS, K_CTRL|0xbd }, + { K_CTRL_GRAVE, K_CTRL|0xc0 }, + { K_CTRL_SLASH, K_CTRL|0xbf }, + { K_CTRL_BACKSLASH, K_CTRL|0xdc }, + { K_CTRL_COMMA, K_CTRL|0xbc }, + { K_CTRL_PERIOD, K_CTRL|0xbe }, + { K_CTRL_SEMICOLON, K_CTRL|0xbe }, + { K_CTRL_EQUAL, K_CTRL|0xbb }, + { K_CTRL_APOSTROPHE, K_CTRL|0xde }, + + { K_BREAK, SDLK_PAUSE }, // Is it really? + + { K_PLUS, SDLK_PLUS }, + { K_MINUS, SDLK_MINUS }, + { K_COMMA, SDLK_COMMA }, + { K_PERIOD, SDLK_PERIOD }, + { K_SEMICOLON, SDLK_SEMICOLON }, + + { K_SLASH, SDLK_SLASH }, + { K_GRAVE, SDLK_CARET }, + { K_LBRACKET, SDLK_LEFTBRACKET }, + { K_BACKSLASH, SDLK_BACKSLASH }, + { K_RBRACKET, SDLK_RIGHTBRACKET }, + { K_QUOTEDBL, SDLK_QUOTEDBL }, + + { 0, 0 }, +}; + +} \ No newline at end of file diff --git a/rainbow/SDL2GUI/SDL2GUI.upp b/rainbow/SDL2GUI/SDL2GUI.upp index 85654326a..48095ba36 100644 --- a/rainbow/SDL2GUI/SDL2GUI.upp +++ b/rainbow/SDL2GUI/SDL2GUI.upp @@ -2,6 +2,7 @@ file SDL2GUI.h, Window.cpp, Draw.cpp, + Keys.cpp, Event.cpp, Cursor.cpp; diff --git a/rainbow/SlaveGuiUword/main.cpp b/rainbow/SlaveGuiUword/main.cpp index a358a0a04..9c7722876 100644 --- a/rainbow/SlaveGuiUword/main.cpp +++ b/rainbow/SlaveGuiUword/main.cpp @@ -1,5 +1,6 @@ #include #include +#include using namespace Upp; @@ -240,9 +241,11 @@ void UWord::SerializeApp(Stream& s) s % lrufile(); } -GUI_APP_MAIN +void AppMain() { - Ctrl::SystemCursor = true; +// Ctrl::SystemCursor = true; + + DUMPHEX(K_PAGEDOWN); SetLanguage(LNG_ENGLISH); SetDefaultCharset(CHARSET_UTF8); @@ -256,3 +259,24 @@ GUI_APP_MAIN Ctrl::EventLoop(); StoreToFile(callback(UWord::SerializeApp)); } + +extern "C" int main(int argc, char *argv[]) { + AppInit__(argc, (const char **)argv); + + SDL2GUI gui; + + gui.Create(Rect(0, 0, 2000, 1000), "Virtual Gui Test"); + + VirtualGuiPtr = &gui; + + Ctrl::InitFB(); + + Ctrl::SetDesktopSize(gui.GetSize()); + + AppMain(); + + Ctrl::ExitFB(); + Ctrl::CloseTopCtrls(); + + return GetExitCode(); +} diff --git a/rainbow/VirtualGui/Ctrl.cpp b/rainbow/VirtualGui/Ctrl.cpp index 1b56621ca..3661593e3 100644 --- a/rainbow/VirtualGui/Ctrl.cpp +++ b/rainbow/VirtualGui/Ctrl.cpp @@ -76,6 +76,12 @@ String Ctrl::Name() const { return s; } +void Ctrl::SetMouseCursor(const Image& image) +{ + GuiLock __; + VirtualGuiPtr->SetMouseCursor(image); +} + END_UPP_NAMESPACE #endif diff --git a/rainbow/VirtualGui/Event.cpp b/rainbow/VirtualGui/Event.cpp index 7e163b55e..2aac20fff 100644 --- a/rainbow/VirtualGui/Event.cpp +++ b/rainbow/VirtualGui/Event.cpp @@ -4,7 +4,7 @@ NAMESPACE_UPP -#define LLOG(x) LOG(x) +#define LLOG(x) // LOG(x) #define LDUMP(x) //DDUMP(x) static Point fbmousepos; @@ -87,7 +87,7 @@ void Ctrl::DoMouseFB(int event, Point p, int zdelta) bool Ctrl::DoKeyFB(dword key, int cnt) { LLOG("DoKeyFB " << GetKeyDesc(key) << ", " << cnt); - + bool b = DispatchKey(key, cnt); SyncCaret(); Ctrl *desktop = GetDesktop(); diff --git a/rainbow/VirtualGui/Image.cpp b/rainbow/VirtualGui/Image.cpp index e57cad43b..2d3caa427 100644 --- a/rainbow/VirtualGui/Image.cpp +++ b/rainbow/VirtualGui/Image.cpp @@ -22,25 +22,25 @@ void SetSurface(SystemDraw& w, const Rect& dest, const RGBA *pixels, Size psz, P #define IMAGEFILE #include -#define STD_CURSOR(name, sdl) \ -Image Image::name() { static Image img; ONCELOCK { img = FBImg::name(); img.SetAuxData(sdl + 1); } return img; } +#define STD_CURSOR(name) \ +Image Image::name() { static Image img; ONCELOCK { img = FBImg::name(); } return img; } -STD_CURSOR(Arrow, SDL_SYSTEM_CURSOR_ARROW) -STD_CURSOR(Wait, SDL_SYSTEM_CURSOR_WAIT) -STD_CURSOR(IBeam, SDL_SYSTEM_CURSOR_IBEAM) -STD_CURSOR(No, SDL_SYSTEM_CURSOR_NO) -STD_CURSOR(SizeAll, SDL_SYSTEM_CURSOR_SIZEALL) -STD_CURSOR(SizeHorz, SDL_SYSTEM_CURSOR_SIZEWE) -STD_CURSOR(SizeVert, SDL_SYSTEM_CURSOR_SIZENS) -STD_CURSOR(SizeTopLeft, SDL_SYSTEM_CURSOR_SIZENWSE) -STD_CURSOR(SizeTop, SDL_SYSTEM_CURSOR_SIZENS) -STD_CURSOR(SizeTopRight, SDL_SYSTEM_CURSOR_SIZENESW) -STD_CURSOR(SizeLeft, SDL_SYSTEM_CURSOR_SIZEWE) -STD_CURSOR(SizeRight, SDL_SYSTEM_CURSOR_SIZEWE) -STD_CURSOR(SizeBottomLeft, SDL_SYSTEM_CURSOR_SIZENWSE) -STD_CURSOR(SizeBottom, SDL_SYSTEM_CURSOR_SIZENS) -STD_CURSOR(SizeBottomRight, SDL_SYSTEM_CURSOR_SIZENESW) -STD_CURSOR(Hand, SDL_SYSTEM_CURSOR_HAND) +STD_CURSOR(Arrow) +STD_CURSOR(Wait) +STD_CURSOR(IBeam) +STD_CURSOR(No) +STD_CURSOR(SizeAll) +STD_CURSOR(SizeHorz) +STD_CURSOR(SizeVert) +STD_CURSOR(SizeTopLeft) +STD_CURSOR(SizeTop) +STD_CURSOR(SizeTopRight) +STD_CURSOR(SizeLeft) +STD_CURSOR(SizeRight) +STD_CURSOR(SizeBottomLeft) +STD_CURSOR(SizeBottom) +STD_CURSOR(SizeBottomRight) +STD_CURSOR(Hand) END_UPP_NAMESPACE diff --git a/rainbow/VirtualGui/Keys.h b/rainbow/VirtualGui/Keys.h index 867c02403..e88a86de0 100644 --- a/rainbow/VirtualGui/Keys.h +++ b/rainbow/VirtualGui/Keys.h @@ -14,9 +14,7 @@ K_CTRL_KEY, K_ALT_KEY, K_CAPSLOCK, K_ESCAPE, -K_PRIOR, K_PAGEUP, -K_NEXT, K_PAGEDOWN, K_END, K_HOME, @@ -121,3 +119,6 @@ K_LBRACKET, K_BACKSLASH, K_RBRACKET, K_QUOTEDBL, + +K_PRIOR = K_PAGEUP, +K_NEXT = K_PAGEDOWN, diff --git a/rainbow/VirtualGui/Local.h b/rainbow/VirtualGui/Local.h index 58e9ed55f..e98f4c22b 100644 --- a/rainbow/VirtualGui/Local.h +++ b/rainbow/VirtualGui/Local.h @@ -58,8 +58,6 @@ public: TopWindowFrame(); }; -extern Size screen_size; - END_UPP_NAMESPACE #endif diff --git a/rainbow/VirtualGui/VirtualGui.h b/rainbow/VirtualGui/VirtualGui.h index ff3d2509f..5a6ce2cfe 100644 --- a/rainbow/VirtualGui/VirtualGui.h +++ b/rainbow/VirtualGui/VirtualGui.h @@ -74,6 +74,8 @@ public: void SetPaintingDraw(Draw& w, Point off) { painting = &w; painting_offset = off; } + Point GetOffset() const { return Point(0, 0); } + BackDraw(); ~BackDraw(); }; diff --git a/rainbow/VirtualGui/Wnd.cpp b/rainbow/VirtualGui/Wnd.cpp index cfaa5818c..db553b980 100644 --- a/rainbow/VirtualGui/Wnd.cpp +++ b/rainbow/VirtualGui/Wnd.cpp @@ -9,6 +9,8 @@ NAMESPACE_UPP #define LDUMPC(x) //DDUMPC(x) #define LTIMING(x) RTIMING(x) +VirtualGui *VirtualGuiPtr; + Ptr Ctrl::desktop; Vector Ctrl::topctrl; @@ -213,7 +215,7 @@ void Ctrl::PaintScene(SystemDraw& draw) LTIMING("DoPaint paint"); draw.Begin(); Vector invalid; - invalid.Add(screen_size); + invalid.Add(VirtualGuiPtr->GetSize()); for(int i = topctrl.GetCount() - 1; i >= 0; i--) { Rect r = topctrl[i]->GetRect(); Rect ri = GetClipBound(invalid, r);