mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-15 14:16:07 -06:00
rainbow: VirtualGui
git-svn-id: svn://ultimatepp.org/upp/trunk@11910 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
23009f86eb
commit
e22a6587f3
12 changed files with 204 additions and 30 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -13,13 +13,20 @@ dword fbKEYtoK(dword chr) {
|
|||
else
|
||||
if(chr == SDLK_RETURN)
|
||||
chr = K_RETURN;
|
||||
else
|
||||
chr = chr + K_DELTA;
|
||||
else {
|
||||
extern Tuple<int, int> 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;
|
||||
}
|
||||
|
||||
|
|
|
|||
133
rainbow/SDL2GUI/Keys.cpp
Normal file
133
rainbow/SDL2GUI/Keys.cpp
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
#include "SDL2GUI.h"
|
||||
|
||||
namespace Upp {
|
||||
|
||||
Tuple<int, int> 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 },
|
||||
};
|
||||
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@ file
|
|||
SDL2GUI.h,
|
||||
Window.cpp,
|
||||
Draw.cpp,
|
||||
Keys.cpp,
|
||||
Event.cpp,
|
||||
Cursor.cpp;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#include <RichEdit/RichEdit.h>
|
||||
#include <PdfDraw/PdfDraw.h>
|
||||
#include <SDL2GUI/SDL2GUI.h>
|
||||
|
||||
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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -76,6 +76,12 @@ String Ctrl::Name() const {
|
|||
return s;
|
||||
}
|
||||
|
||||
void Ctrl::SetMouseCursor(const Image& image)
|
||||
{
|
||||
GuiLock __;
|
||||
VirtualGuiPtr->SetMouseCursor(image);
|
||||
}
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -22,25 +22,25 @@ void SetSurface(SystemDraw& w, const Rect& dest, const RGBA *pixels, Size psz, P
|
|||
#define IMAGEFILE <SDL20GL/FB.iml>
|
||||
#include <Draw/iml_source.h>
|
||||
|
||||
#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
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -58,8 +58,6 @@ public:
|
|||
TopWindowFrame();
|
||||
};
|
||||
|
||||
extern Size screen_size;
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
};
|
||||
|
|
|
|||
|
|
@ -9,6 +9,8 @@ NAMESPACE_UPP
|
|||
#define LDUMPC(x) //DDUMPC(x)
|
||||
#define LTIMING(x) RTIMING(x)
|
||||
|
||||
VirtualGui *VirtualGuiPtr;
|
||||
|
||||
Ptr<Ctrl> Ctrl::desktop;
|
||||
Vector<Ctrl *> Ctrl::topctrl;
|
||||
|
||||
|
|
@ -213,7 +215,7 @@ void Ctrl::PaintScene(SystemDraw& draw)
|
|||
LTIMING("DoPaint paint");
|
||||
draw.Begin();
|
||||
Vector<Rect> 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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue