mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-17 06:06:00 -06:00
.rainbow
git-svn-id: svn://ultimatepp.org/upp/trunk@6393 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
d3209f8de9
commit
da5cfaf409
13 changed files with 240 additions and 308 deletions
|
|
@ -6,6 +6,7 @@ private:
|
|||
|
||||
static Point fbCursorPos;
|
||||
static Image fbCursorImage;
|
||||
static bool sdlMouseIsIn;
|
||||
|
||||
static Rect fbCaretRect;
|
||||
static int fbCaretTm;
|
||||
|
|
@ -13,7 +14,7 @@ private:
|
|||
static bool fbEndSession;
|
||||
static int64 fbEventLoop;
|
||||
static int64 fbEndSessionLoop;
|
||||
|
||||
|
||||
static void CursorSync();
|
||||
|
||||
int FindTopCtrl() const;
|
||||
|
|
@ -45,6 +46,8 @@ protected:
|
|||
static int PaintLock;
|
||||
|
||||
public:
|
||||
static void HandleSDLEvent(SDL_Event* event);
|
||||
|
||||
static void DoMouseFB(int event, Point p, int zdelta = 0);
|
||||
static bool DoKeyFB(dword key, int cnt);
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,213 @@ Point GetMousePos() {
|
|||
return fbmousepos;
|
||||
}
|
||||
|
||||
dword mouseb = 0;
|
||||
dword modkeys = 0;
|
||||
|
||||
enum KM {
|
||||
KM_NONE = 0x00,
|
||||
|
||||
KM_LSHIFT= 0x01,
|
||||
KM_RSHIFT= 0x02,
|
||||
KM_LCTRL = 0x04,
|
||||
KM_RCTRL = 0x08,
|
||||
KM_LALT = 0x10,
|
||||
KM_RALT = 0x20,
|
||||
|
||||
KM_CAPS = 0x40,
|
||||
KM_NUM = 0x80,
|
||||
|
||||
KM_CTRL = KM_LCTRL | KM_RCTRL,
|
||||
KM_SHIFT = KM_LSHIFT | KM_RSHIFT,
|
||||
KM_ALT = KM_LALT | KM_RALT,
|
||||
};
|
||||
|
||||
bool GetMouseLeft() { return mouseb & (1<<0); }
|
||||
bool GetMouseRight() { return mouseb & (1<<1); }
|
||||
bool GetMouseMiddle() { return mouseb & (1<<2); }
|
||||
bool GetShift() { return modkeys & KM_SHIFT; }
|
||||
bool GetCtrl() { return modkeys & KM_CTRL; }
|
||||
bool GetAlt() { return modkeys & KM_ALT; }
|
||||
bool GetCapsLock() { return modkeys & KM_CAPS; }
|
||||
|
||||
dword fbKEYtoK(dword chr) {
|
||||
if(chr == SDLK_TAB)
|
||||
chr = K_TAB;
|
||||
else
|
||||
if(chr == SDLK_SPACE)
|
||||
chr = K_SPACE;
|
||||
else
|
||||
if(chr == SDLK_RETURN)
|
||||
chr = K_RETURN;
|
||||
else
|
||||
chr = chr + K_DELTA;
|
||||
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;
|
||||
}
|
||||
|
||||
dword lastbdowntime[8] = {0};
|
||||
dword isdblclick[8] = {0};
|
||||
|
||||
void Ctrl::HandleSDLEvent(SDL_Event* event)
|
||||
{
|
||||
LLOG("HandleSDLEvent " << event->type);
|
||||
SDL_Event next_event;
|
||||
dword keycode;
|
||||
switch(event->type) {
|
||||
// case SDL_ACTIVEEVENT: //SDL_ActiveEvent
|
||||
// break;
|
||||
case SDL_TEXTINPUT: {
|
||||
//send respective keyup things as char events as well
|
||||
WString text = FromUtf8(event->text.text);
|
||||
for(int i = 0; i < text.GetCount(); i++) {
|
||||
int c = text[i];
|
||||
if(c != 127)
|
||||
Ctrl::DoKeyFB(c, 1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SDL_KEYDOWN:
|
||||
switch(event->key.keysym.sym) {
|
||||
case SDLK_LSHIFT: modkeys |= KM_LSHIFT; break;
|
||||
case SDLK_RSHIFT: modkeys |= KM_RSHIFT; break;
|
||||
case SDLK_LCTRL: modkeys |= KM_LCTRL; break;
|
||||
case SDLK_RCTRL: modkeys |= KM_RCTRL; break;
|
||||
case SDLK_LALT: modkeys |= KM_LALT; break;
|
||||
case SDLK_RALT: modkeys |= KM_RALT; break;
|
||||
}
|
||||
|
||||
keycode = fbKEYtoK((dword)event->key.keysym.sym);
|
||||
|
||||
if(keycode != K_SPACE) { //dont send space on keydown
|
||||
static int repeat_count;
|
||||
SDL_PumpEvents();
|
||||
if(SDL_PeepEvents(&next_event, 1, SDL_PEEKEVENT, SDL_KEYDOWN, SDL_KEYDOWN) &&
|
||||
next_event.key.keysym.sym == event->key.keysym.sym) {
|
||||
repeat_count++; // Keyboard repeat compression
|
||||
break;
|
||||
}
|
||||
Ctrl::DoKeyFB(keycode, 1 + repeat_count);
|
||||
repeat_count = 0;
|
||||
}
|
||||
break;
|
||||
case SDL_KEYUP: //SDL_KeyboardEvent
|
||||
switch(event->key.keysym.sym) {
|
||||
case SDLK_LSHIFT: modkeys &= ~KM_LSHIFT; break;
|
||||
case SDLK_RSHIFT: modkeys &= ~KM_RSHIFT; break;
|
||||
case SDLK_LCTRL: modkeys &= ~KM_LCTRL; break;
|
||||
case SDLK_RCTRL: modkeys &= ~KM_RCTRL; break;
|
||||
case SDLK_LALT: modkeys &= ~KM_LALT; break;
|
||||
case SDLK_RALT: modkeys &= ~KM_RALT; break;
|
||||
}
|
||||
|
||||
Ctrl::DoKeyFB(fbKEYtoK((dword)event->key.keysym.sym) | K_KEYUP, 1);
|
||||
break;
|
||||
case SDL_MOUSEMOTION:
|
||||
SDL_PumpEvents();
|
||||
if(SDL_PeepEvents(&next_event, 1, SDL_PEEKEVENT, SDL_MOUSEMOTION, SDL_MOUSEMOTION) > 0)
|
||||
break; // MouseMove compression
|
||||
Ctrl::DoMouseFB(Ctrl::MOUSEMOVE, Point(event->motion.x, event->motion.y));
|
||||
break;
|
||||
case SDL_MOUSEWHEEL:
|
||||
Ctrl::DoMouseFB(Ctrl::MOUSEWHEEL, GetMousePos(), sgn(event->wheel.y) * 120);
|
||||
break;
|
||||
case SDL_MOUSEBUTTONDOWN: {
|
||||
Point p(event->button.x, event->button.y);
|
||||
int bi = event->button.button;
|
||||
dword ct = SDL_GetTicks();
|
||||
if(isdblclick[bi] && (abs(int(ct) - int(lastbdowntime[bi])) < 400))
|
||||
{
|
||||
switch(bi)
|
||||
{
|
||||
case SDL_BUTTON_LEFT: Ctrl::DoMouseFB(Ctrl::LEFTDOUBLE, p); break;
|
||||
case SDL_BUTTON_RIGHT: Ctrl::DoMouseFB(Ctrl::RIGHTDOUBLE, p); break;
|
||||
case SDL_BUTTON_MIDDLE: Ctrl::DoMouseFB(Ctrl::MIDDLEDOUBLE, p); break;
|
||||
}
|
||||
isdblclick[bi] = 0; //reset, to go ahead sending repeats
|
||||
}
|
||||
else
|
||||
{
|
||||
lastbdowntime[bi] = ct;
|
||||
isdblclick[bi] = 0; //prepare for repeat
|
||||
switch(bi)
|
||||
{
|
||||
case SDL_BUTTON_LEFT: mouseb |= (1<<0); Ctrl::DoMouseFB(Ctrl::LEFTDOWN, p); break;
|
||||
case SDL_BUTTON_RIGHT: mouseb |= (1<<1); Ctrl::DoMouseFB(Ctrl::RIGHTDOWN, p); break;
|
||||
case SDL_BUTTON_MIDDLE: mouseb |= (1<<2); Ctrl::DoMouseFB(Ctrl::MIDDLEDOWN, p); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SDL_MOUSEBUTTONUP: {
|
||||
int bi = event->button.button;
|
||||
isdblclick[bi] = 1; //indicate maybe a dblclick
|
||||
|
||||
Point p(event->button.x, event->button.y);
|
||||
switch(bi)
|
||||
{
|
||||
case SDL_BUTTON_LEFT: mouseb &= ~(1<<0); Ctrl::DoMouseFB(Ctrl::LEFTUP, p); break;
|
||||
case SDL_BUTTON_RIGHT: mouseb &= ~(1<<1); Ctrl::DoMouseFB(Ctrl::RIGHTUP, p); break;
|
||||
case SDL_BUTTON_MIDDLE: mouseb &= ~(1<<2); Ctrl::DoMouseFB(Ctrl::MIDDLEUP, p); break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
/* case SDL_VIDEORESIZE: //SDL_ResizeEvent
|
||||
{
|
||||
width = event->resize.w;
|
||||
height = event->resize.h;
|
||||
|
||||
SDL_FreeSurface(screen);
|
||||
screen = CreateScreen(width, height, bpp, videoflags);
|
||||
ASSERT(screen);
|
||||
Ctrl::SetFramebufferSize(Size(width, height));
|
||||
}
|
||||
break;
|
||||
case SDL_VIDEOEXPOSE: //SDL_ExposeEvent
|
||||
break;*/
|
||||
case SDL_WINDOWEVENT:
|
||||
switch (event->window.event) {
|
||||
case SDL_WINDOWEVENT_SHOWN:
|
||||
break;
|
||||
case SDL_WINDOWEVENT_HIDDEN:
|
||||
break;
|
||||
case SDL_WINDOWEVENT_EXPOSED:
|
||||
break;
|
||||
case SDL_WINDOWEVENT_MOVED:
|
||||
break;
|
||||
case SDL_WINDOWEVENT_RESIZED:
|
||||
break;
|
||||
case SDL_WINDOWEVENT_MINIMIZED:
|
||||
break;
|
||||
case SDL_WINDOWEVENT_MAXIMIZED:
|
||||
break;
|
||||
case SDL_WINDOWEVENT_RESTORED:
|
||||
break;
|
||||
case SDL_WINDOWEVENT_ENTER:
|
||||
sdlMouseIsIn = true;
|
||||
Invalidate();
|
||||
break;
|
||||
case SDL_WINDOWEVENT_LEAVE:
|
||||
sdlMouseIsIn = false;
|
||||
Invalidate();
|
||||
break;
|
||||
case SDL_WINDOWEVENT_FOCUS_GAINED:
|
||||
break;
|
||||
case SDL_WINDOWEVENT_FOCUS_LOST:
|
||||
break;
|
||||
case SDL_WINDOWEVENT_CLOSE:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SDL_QUIT: //SDL_QuitEvent
|
||||
Ctrl::EndSession();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Ctrl::MouseEventFB(Ptr<Ctrl> t, int event, Point p, int zdelta)
|
||||
{
|
||||
if(!t->IsEnabled())
|
||||
|
|
@ -132,27 +339,25 @@ bool Ctrl::ProcessEvent(bool *quit)
|
|||
ASSERT(IsMainThread());
|
||||
if(!GetMouseLeft() && !GetMouseRight() && !GetMouseMiddle())
|
||||
ReleaseCtrlCapture();
|
||||
|
||||
bool ret = false;
|
||||
SDL_Event event;
|
||||
if(SDL_PollEvent(&event)) {
|
||||
if(event.type == SDL_QUIT && quit)
|
||||
*quit = true;
|
||||
HandleSDLEvent(&event);
|
||||
SyncTopWindows();
|
||||
DefferedFocusSync();
|
||||
SyncCaret();
|
||||
SyncTopWindows();
|
||||
return true;
|
||||
ret = true;
|
||||
}
|
||||
return false;
|
||||
DefferedFocusSync();
|
||||
SyncCaret();
|
||||
SyncTopWindows();
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool Ctrl::ProcessEvents(bool *quit)
|
||||
{
|
||||
//LOGBLOCK("@ ProcessEvents");
|
||||
// MemoryCheckDebug();
|
||||
if(!ProcessEvent(quit))
|
||||
return false;
|
||||
bool ret = ProcessEvent(quit);
|
||||
while(ProcessEvent(quit) && (!LoopCtrl || LoopCtrl->InLoop()));
|
||||
TimeStop tm;
|
||||
LLOG("TimerProc invoked at " << msecs());
|
||||
|
|
@ -160,7 +365,7 @@ bool Ctrl::ProcessEvents(bool *quit)
|
|||
LLOG("TimerProc elapsed: " << tm);
|
||||
SweepMkImageCache();
|
||||
DoPaint();
|
||||
return true;
|
||||
return ret;
|
||||
}
|
||||
|
||||
void Ctrl::EventLoop(Ctrl *ctrl)
|
||||
|
|
|
|||
|
|
@ -58,12 +58,11 @@ public:
|
|||
TopWindowFrame();
|
||||
};
|
||||
|
||||
void HandleSDLEvent(SDL_Event* event);
|
||||
void HandleUserEvent(SDL_Event* event);
|
||||
|
||||
extern Size screen_size;
|
||||
extern SDLWindow screen;
|
||||
|
||||
extern dword SDLsettings;
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -6,6 +6,13 @@ NAMESPACE_UPP
|
|||
|
||||
#define LLOG(x) //LOG(x)
|
||||
|
||||
dword SDLsettings;
|
||||
|
||||
void USDLSetup(dword flags)
|
||||
{
|
||||
SDLsettings = flags;
|
||||
}
|
||||
|
||||
Size screen_size;
|
||||
SDLWindow screen;
|
||||
|
||||
|
|
@ -58,7 +65,7 @@ void FBInit()
|
|||
|
||||
SDL_ShowCursor(0);
|
||||
|
||||
screen_size = Size(1024, 768);
|
||||
screen_size = Size(1500, 900);
|
||||
screen.Create(screen_size, "First test");
|
||||
|
||||
Ctrl::SetDesktopSize(screen_size);
|
||||
|
|
|
|||
|
|
@ -105,6 +105,8 @@ public:
|
|||
~PrinterJob() {}
|
||||
};
|
||||
|
||||
void USDLSetup(dword flags);
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#define GUIPLATFORM_INCLUDE_AFTER <SDL20/After.h>
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@ file
|
|||
Local.h,
|
||||
Window.cpp,
|
||||
Image.cpp,
|
||||
Util.cpp,
|
||||
FB.iml,
|
||||
Ctrl.h,
|
||||
DrawDragRect.cpp,
|
||||
|
|
@ -27,6 +26,5 @@ file
|
|||
Clip.cpp,
|
||||
DnD.cpp,
|
||||
ChSysInit.cpp,
|
||||
SDL.cpp,
|
||||
SDLProc.cpp;
|
||||
SDL.cpp;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,220 +0,0 @@
|
|||
#include "Local.h"
|
||||
|
||||
#ifdef GUI_SDL20GL
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
#define LLOG(x) LOG(x)
|
||||
|
||||
dword mouseb = 0;
|
||||
dword modkeys = 0;
|
||||
|
||||
enum KM {
|
||||
KM_NONE = 0x00,
|
||||
|
||||
KM_LSHIFT= 0x01,
|
||||
KM_RSHIFT= 0x02,
|
||||
KM_LCTRL = 0x04,
|
||||
KM_RCTRL = 0x08,
|
||||
KM_LALT = 0x10,
|
||||
KM_RALT = 0x20,
|
||||
|
||||
KM_CAPS = 0x40,
|
||||
KM_NUM = 0x80,
|
||||
|
||||
KM_CTRL = KM_LCTRL | KM_RCTRL,
|
||||
KM_SHIFT = KM_LSHIFT | KM_RSHIFT,
|
||||
KM_ALT = KM_LALT | KM_RALT,
|
||||
};
|
||||
|
||||
bool GetMouseLeft() { return mouseb & (1<<0); }
|
||||
bool GetMouseRight() { return mouseb & (1<<1); }
|
||||
bool GetMouseMiddle() { return mouseb & (1<<2); }
|
||||
bool GetShift() { return modkeys & KM_SHIFT; }
|
||||
bool GetCtrl() { return modkeys & KM_CTRL; }
|
||||
bool GetAlt() { return modkeys & KM_ALT; }
|
||||
bool GetCapsLock() { return modkeys & KM_CAPS; }
|
||||
|
||||
dword fbKEYtoK(dword chr) {
|
||||
if(chr == SDLK_TAB)
|
||||
chr = K_TAB;
|
||||
else
|
||||
if(chr == SDLK_SPACE)
|
||||
chr = K_SPACE;
|
||||
else
|
||||
if(chr == SDLK_RETURN)
|
||||
chr = K_RETURN;
|
||||
else
|
||||
chr = chr + K_DELTA;
|
||||
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;
|
||||
}
|
||||
|
||||
dword lastbdowntime[8] = {0};
|
||||
dword isdblclick[8] = {0};
|
||||
void HandleSDLEvent(SDL_Event* event)
|
||||
{
|
||||
LLOG("HandleSDLEvent " << event->type);
|
||||
switch(event->type) {
|
||||
// case SDL_ACTIVEEVENT: //SDL_ActiveEvent
|
||||
// break;
|
||||
case SDL_TEXTINPUT: {
|
||||
//send respective keyup things as char events as well
|
||||
WString text = FromUtf8(event->text.text);
|
||||
for(int i = 0; i < text.GetCount(); i++) {
|
||||
int c = text[i];
|
||||
if(c != 127)
|
||||
Ctrl::DoKeyFB(c, 1);
|
||||
}
|
||||
}
|
||||
case SDL_KEYDOWN:
|
||||
case SDL_KEYUP: //SDL_KeyboardEvent
|
||||
{
|
||||
// bool b = false;
|
||||
dword keycode = 0;
|
||||
if(event->type == SDL_KEYDOWN) {
|
||||
switch(event->key.keysym.sym)
|
||||
{
|
||||
case SDLK_LSHIFT: modkeys |= KM_LSHIFT; break;
|
||||
case SDLK_RSHIFT: modkeys |= KM_RSHIFT; break;
|
||||
case SDLK_LCTRL: modkeys |= KM_LCTRL; break;
|
||||
case SDLK_RCTRL: modkeys |= KM_RCTRL; break;
|
||||
case SDLK_LALT: modkeys |= KM_LALT; break;
|
||||
case SDLK_RALT: modkeys |= KM_RALT; break;
|
||||
default:;
|
||||
}
|
||||
|
||||
keycode = fbKEYtoK((dword)event->key.keysym.sym);
|
||||
|
||||
if(keycode != K_SPACE) //dont send space on keydown
|
||||
/*b = */Ctrl::DoKeyFB(keycode, 1);
|
||||
}
|
||||
else
|
||||
if(event->type == SDL_KEYUP)
|
||||
{
|
||||
switch(event->key.keysym.sym)
|
||||
{
|
||||
case SDLK_LSHIFT: modkeys &= ~KM_LSHIFT; break;
|
||||
case SDLK_RSHIFT: modkeys &= ~KM_RSHIFT; break;
|
||||
case SDLK_LCTRL: modkeys &= ~KM_LCTRL; break;
|
||||
case SDLK_RCTRL: modkeys &= ~KM_RCTRL; break;
|
||||
case SDLK_LALT: modkeys &= ~KM_LALT; break;
|
||||
case SDLK_RALT: modkeys &= ~KM_RALT; break;
|
||||
default:;
|
||||
}
|
||||
|
||||
keycode = fbKEYtoK((dword)event->key.keysym.sym) | K_KEYUP;
|
||||
/*b = */Ctrl::DoKeyFB(keycode, 1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SDL_MOUSEMOTION:
|
||||
{
|
||||
SDL_PumpEvents();
|
||||
SDL_Event next_event;
|
||||
if(SDL_PeepEvents(&next_event, 1, SDL_PEEKEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT) > 0 &&
|
||||
next_event.type == SDL_MOUSEMOTION)
|
||||
break; // MouseMove compression
|
||||
Ctrl::DoMouseFB(Ctrl::MOUSEMOVE, Point(event->motion.x, event->motion.y));
|
||||
break;
|
||||
}
|
||||
case SDL_MOUSEWHEEL: Ctrl::DoMouseFB(Ctrl::MOUSEWHEEL, GetMousePos(), sgn(event->wheel.y) * 120); break;
|
||||
case SDL_MOUSEBUTTONDOWN: //SDL_MouseButtonEvent, FIXME DoubleClick
|
||||
{
|
||||
Point p(event->button.x, event->button.y);
|
||||
int bi = event->button.button;
|
||||
dword ct = SDL_GetTicks();
|
||||
if(isdblclick[bi] && (abs(int(ct) - int(lastbdowntime[bi])) < 400))
|
||||
{
|
||||
switch(bi)
|
||||
{
|
||||
case SDL_BUTTON_LEFT: Ctrl::DoMouseFB(Ctrl::LEFTDOUBLE, p); break;
|
||||
case SDL_BUTTON_RIGHT: Ctrl::DoMouseFB(Ctrl::RIGHTDOUBLE, p); break;
|
||||
case SDL_BUTTON_MIDDLE: Ctrl::DoMouseFB(Ctrl::MIDDLEDOUBLE, p); break;
|
||||
}
|
||||
isdblclick[bi] = 0; //reset, to go ahead sending repeats
|
||||
}
|
||||
else
|
||||
{
|
||||
lastbdowntime[bi] = ct;
|
||||
isdblclick[bi] = 0; //prepare for repeat
|
||||
switch(bi)
|
||||
{
|
||||
case SDL_BUTTON_LEFT: mouseb |= (1<<0); Ctrl::DoMouseFB(Ctrl::LEFTDOWN, p); break;
|
||||
case SDL_BUTTON_RIGHT: mouseb |= (1<<1); Ctrl::DoMouseFB(Ctrl::RIGHTDOWN, p); break;
|
||||
case SDL_BUTTON_MIDDLE: mouseb |= (1<<2); Ctrl::DoMouseFB(Ctrl::MIDDLEDOWN, p); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SDL_MOUSEBUTTONUP:
|
||||
{
|
||||
int bi = event->button.button;
|
||||
isdblclick[bi] = 1; //indicate maybe a dblclick
|
||||
|
||||
Point p(event->button.x, event->button.y);
|
||||
switch(bi)
|
||||
{
|
||||
case SDL_BUTTON_LEFT: mouseb &= ~(1<<0); Ctrl::DoMouseFB(Ctrl::LEFTUP, p); break;
|
||||
case SDL_BUTTON_RIGHT: mouseb &= ~(1<<1); Ctrl::DoMouseFB(Ctrl::RIGHTUP, p); break;
|
||||
case SDL_BUTTON_MIDDLE: mouseb &= ~(1<<2); Ctrl::DoMouseFB(Ctrl::MIDDLEUP, p); break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SDL_JOYAXISMOTION: //SDL_JoyAxisEvent
|
||||
break;
|
||||
case SDL_JOYBALLMOTION: //SDL_JoyBallEvent
|
||||
break;
|
||||
case SDL_JOYHATMOTION: //SDL_JoyHatEvent
|
||||
break;
|
||||
case SDL_JOYBUTTONDOWN:
|
||||
case SDL_JOYBUTTONUP: //SDL_JoyButtonEvent
|
||||
break;
|
||||
/* case SDL_VIDEORESIZE: //SDL_ResizeEvent
|
||||
{
|
||||
width = event->resize.w;
|
||||
height = event->resize.h;
|
||||
|
||||
SDL_FreeSurface(screen);
|
||||
screen = CreateScreen(width, height, bpp, videoflags);
|
||||
ASSERT(screen);
|
||||
Ctrl::SetFramebufferSize(Size(width, height));
|
||||
}
|
||||
break;
|
||||
case SDL_VIDEOEXPOSE: //SDL_ExposeEvent
|
||||
break;
|
||||
*/ case SDL_QUIT: //SDL_QuitEvent
|
||||
Ctrl::EndSession();
|
||||
break;
|
||||
case SDL_USEREVENT: //SDL_UserEvent
|
||||
HandleUserEvent(event);
|
||||
break;
|
||||
case SDL_SYSWMEVENT: //SDL_SysWMEvent
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
} // End switch
|
||||
}
|
||||
|
||||
void HandleUserEvent(SDL_Event* event)
|
||||
{
|
||||
/*
|
||||
switch (event->user.code) {
|
||||
case RUN_GAME_LOOP:
|
||||
GameLoop();
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -56,9 +56,8 @@ void TopWindow::SyncRect()
|
|||
{
|
||||
frame->SyncRect();
|
||||
Rect r = frame->GetClient();
|
||||
if(r != GetRect()) {
|
||||
if(r != GetRect())
|
||||
SetRect(r);
|
||||
}
|
||||
}
|
||||
|
||||
void TopWindow::Open(Ctrl *owner)
|
||||
|
|
|
|||
|
|
@ -1,65 +0,0 @@
|
|||
#include <CtrlCore/CtrlCore.h>
|
||||
|
||||
#ifdef GUI_SDL20GL
|
||||
|
||||
NAMESPACE_UPP
|
||||
|
||||
/*
|
||||
static void sRenderLine(SystemDraw& w, int x, int y, int dx, int dy, int cx, int cy, int len, byte pattern)
|
||||
{
|
||||
DLOG(len);
|
||||
for(int i = 0; i < len; i++)
|
||||
if((128 >> (i & 7)) & pattern)
|
||||
w.DrawRect(x + dx * i, y + dy * i, cx, cy, Black);
|
||||
DDUMP("~sRenderLine");
|
||||
}
|
||||
|
||||
static void sRenderRect(SystemDraw& w, const Rect& r, int n, byte pattern)
|
||||
{
|
||||
sRenderLine(w, r.left, r.top, 1, 0, 1, n, r.GetWidth(), pattern);
|
||||
sRenderLine(w, r.left, r.bottom - 1, 1, 0, 1, n, r.GetWidth(), pattern);
|
||||
sRenderLine(w, r.left, r.top, 0, 1, n, 1, r.GetHeight(), pattern);
|
||||
sRenderLine(w, r.right - 1, r.top, 0, 1, n, 1, r.GetHeight(), pattern);
|
||||
}
|
||||
|
||||
void DrawDragRect(SystemDraw& w, const Rect& rect1, const Rect& rect2,
|
||||
const Rect& clip, int n, Color color, uint64 pattern)
|
||||
{
|
||||
DLOG("@ DrawDragRect " << rect1 << " " << rect2 << ", clip: " << clip << ", pattern: " << pattern);
|
||||
TIMING("DrawDrawRect");
|
||||
w.Clip(clip);
|
||||
w.Invert();
|
||||
sRenderRect(w, rect1, n, (byte)pattern);
|
||||
sRenderRect(w, rect2, n, (byte)pattern);
|
||||
Ctrl::AddUpdate((rect1 | rect2).Offseted(w.GetOffset()));
|
||||
// MemoryProfile mem;
|
||||
// DDUMP(mem);
|
||||
w.End();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static uint64 sGetAniPat(uint64 src, int pos)
|
||||
{
|
||||
uint64 out = 0;
|
||||
pos &= 7;
|
||||
for(int i = 8; --i >= 0;) {
|
||||
byte sr = (byte)(src >> (8 * ((7 - i - pos) & 7)));
|
||||
out = (out << 8) | (byte)((sr | (sr << 8)) >> pos);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
Size GetScreenSize()
|
||||
{
|
||||
return ScreenInfo().GetPageSize();
|
||||
}
|
||||
*/
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
@ -14,6 +14,8 @@ Vector<Ctrl *> Ctrl::topctrl;
|
|||
|
||||
bool Ctrl::invalid;
|
||||
|
||||
bool Ctrl::sdlMouseIsIn;
|
||||
|
||||
Point Ctrl::fbCursorPos = Null;
|
||||
Image Ctrl::fbCursorImage;
|
||||
Rect Ctrl::fbCaretRect;
|
||||
|
|
@ -233,7 +235,8 @@ void Ctrl::PaintCaretCursor(SystemDraw& draw)
|
|||
{
|
||||
if(!IsNull(fbCaretRect))
|
||||
draw.DrawRect(fbCaretRect, InvertColor);
|
||||
draw.DrawImage(fbCursorPos.x, fbCursorPos.y, fbCursorImage);
|
||||
if(sdlMouseIsIn)
|
||||
draw.DrawImage(fbCursorPos.x, fbCursorPos.y, fbCursorImage);
|
||||
}
|
||||
|
||||
void Ctrl::DoPaint()
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
uses
|
||||
CtrlLib,
|
||||
RichEdit,
|
||||
SDL20GL;
|
||||
SDL20GL,
|
||||
plugin/DroidFonts;
|
||||
|
||||
file
|
||||
main.cpp,
|
||||
|
|
|
|||
|
|
@ -3,4 +3,5 @@
|
|||
#include "CtrlLib/init"
|
||||
#include "RichEdit/init"
|
||||
#include "SDL20GL/init"
|
||||
#include "plugin/DroidFonts/init"
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -251,7 +251,6 @@ GUI_APP_MAIN
|
|||
|
||||
LoadFromFile(callback(UWord::SerializeApp));
|
||||
UWord uword;
|
||||
new UWord;
|
||||
Ctrl::EventLoop();
|
||||
StoreToFile(callback(UWord::SerializeApp));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue