rainbow: VirtualGui

git-svn-id: svn://ultimatepp.org/upp/trunk@11910 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2018-04-24 12:15:43 +00:00
parent 23009f86eb
commit e22a6587f3
12 changed files with 204 additions and 30 deletions

View file

@ -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)

View file

@ -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
View 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 },
};
}

View file

@ -2,6 +2,7 @@ file
SDL2GUI.h,
Window.cpp,
Draw.cpp,
Keys.cpp,
Event.cpp,
Cursor.cpp;

View file

@ -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();
}

View file

@ -76,6 +76,12 @@ String Ctrl::Name() const {
return s;
}
void Ctrl::SetMouseCursor(const Image& image)
{
GuiLock __;
VirtualGuiPtr->SetMouseCursor(image);
}
END_UPP_NAMESPACE
#endif

View file

@ -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();

View file

@ -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

View file

@ -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,

View file

@ -58,8 +58,6 @@ public:
TopWindowFrame();
};
extern Size screen_size;
END_UPP_NAMESPACE
#endif

View file

@ -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();
};

View file

@ -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);