mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-16 06:05:58 -06:00
rainbow: SDLFb: support for doubleclick, repeat not yet supported, Events from reference added
git-svn-id: svn://ultimatepp.org/upp/trunk@3684 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
9669112b82
commit
41aa6ec378
5 changed files with 344 additions and 58 deletions
228
rainbow/Events/Events.cpp
Normal file
228
rainbow/Events/Events.cpp
Normal file
|
|
@ -0,0 +1,228 @@
|
|||
#include <CtrlLib/CtrlLib.h>
|
||||
|
||||
using namespace Upp;
|
||||
|
||||
struct App : TopWindow {
|
||||
ArrayCtrl log;
|
||||
|
||||
void Log(const String& s)
|
||||
{
|
||||
log.Add(s);
|
||||
log.GoEnd();
|
||||
}
|
||||
|
||||
virtual void Activate()
|
||||
{
|
||||
Log("Activate");
|
||||
}
|
||||
|
||||
virtual void Deactivate()
|
||||
{
|
||||
Log("Deactivate");
|
||||
}
|
||||
|
||||
virtual Image FrameMouseEvent(int event, Point p, int zdelta, dword keyflags)
|
||||
{
|
||||
if(event != CURSORIMAGE)
|
||||
Log(Format("FrameMouseEvent(%d, Point(%d, %d), %d, %x)",
|
||||
event, p.x, p.y, zdelta, (int)keyflags));
|
||||
return TopWindow::FrameMouseEvent(event, p, zdelta, keyflags);
|
||||
}
|
||||
|
||||
virtual Image MouseEvent(int event, Point p, int zdelta, dword keyflags)
|
||||
{
|
||||
if(event != CURSORIMAGE)
|
||||
Log(Format("MouseEvent(%d, Point(%d, %d), %d, %x)",
|
||||
event, p.x, p.y, zdelta, (int)keyflags));
|
||||
return TopWindow::MouseEvent(event, p, zdelta, keyflags);
|
||||
}
|
||||
|
||||
virtual void MouseEnter(Point p, dword keyflags)
|
||||
{
|
||||
Log(Format("MouseEnter(Point(%d, %d), %x)", p.x, p.y, (int)keyflags));
|
||||
}
|
||||
|
||||
virtual void MouseMove(Point p, dword keyflags)
|
||||
{
|
||||
Log(Format("MouseMove(Point(%d, %d), %x)", p.x, p.y, (int)keyflags));
|
||||
}
|
||||
|
||||
virtual void LeftDown(Point p, dword keyflags)
|
||||
{
|
||||
Log(Format("LeftDown(Point(%d, %d), %x)", p.x, p.y, (int)keyflags));
|
||||
SetFocus();
|
||||
}
|
||||
|
||||
virtual void LeftDouble(Point p, dword keyflags)
|
||||
{
|
||||
Log(Format("LeftDouble(Point(%d, %d), %x)", p.x, p.y, (int)keyflags));
|
||||
}
|
||||
|
||||
virtual void LeftTriple(Point p, dword keyflags)
|
||||
{
|
||||
Log(Format("LeftTriple(Point(%d, %d), %x)", p.x, p.y, (int)keyflags));
|
||||
}
|
||||
|
||||
virtual void LeftDrag(Point p, dword keyflags) {
|
||||
Log(Format("LeftDrag(Point(%d, %d), %x)", p.x, p.y, (int)keyflags));
|
||||
}
|
||||
|
||||
virtual void LeftHold(Point p, dword keyflags) {
|
||||
Log(Format("LeftHold(Point(%d, %d), %x)", p.x, p.y, (int)keyflags));
|
||||
}
|
||||
|
||||
virtual void LeftRepeat(Point p, dword keyflags)
|
||||
{
|
||||
Log(Format("LeftRepeat(Point(%d, %d), %x)", p.x, p.y, (int)keyflags));
|
||||
}
|
||||
|
||||
virtual void LeftUp(Point p, dword keyflags)
|
||||
{
|
||||
Log(Format("LeftUp(Point(%d, %d), %x)", p.x, p.y, (int)keyflags));
|
||||
}
|
||||
|
||||
virtual void RightDown(Point p, dword keyflags)
|
||||
{
|
||||
Log(Format("RightDown(Point(%d, %d), %x)", p.x, p.y, (int)keyflags));
|
||||
}
|
||||
|
||||
virtual void RightDouble(Point p, dword keyflags)
|
||||
{
|
||||
Log(Format("RightDouble(Point(%d, %d), %x)", p.x, p.y, (int)keyflags));
|
||||
}
|
||||
|
||||
virtual void RightTriple(Point p, dword keyflags)
|
||||
{
|
||||
Log(Format("RightTriple(Point(%d, %d), %x)", p.x, p.y, (int)keyflags));
|
||||
}
|
||||
|
||||
virtual void RightDrag(Point p, dword keyflags) {
|
||||
Log(Format("RightDrag(Point(%d, %d), %x)", p.x, p.y, (int)keyflags));
|
||||
}
|
||||
|
||||
virtual void RightHold(Point p, dword keyflags) {
|
||||
Log(Format("RightHold(Point(%d, %d), %x)", p.x, p.y, (int)keyflags));
|
||||
}
|
||||
|
||||
virtual void RightRepeat(Point p, dword keyflags)
|
||||
{
|
||||
Log(Format("RightRepeat(Point(%d, %d), %x)", p.x, p.y, (int)keyflags));
|
||||
}
|
||||
|
||||
virtual void RightUp(Point p, dword keyflags)
|
||||
{
|
||||
Log(Format("RightUp(Point(%d, %d), %x)", p.x, p.y, (int)keyflags));
|
||||
}
|
||||
|
||||
virtual void MiddleDown(Point p, dword keyflags)
|
||||
{
|
||||
Log(Format("MiddleDown(Point(%d, %d), %x)", p.x, p.y, (int)keyflags));
|
||||
}
|
||||
|
||||
virtual void MiddleDouble(Point p, dword keyflags)
|
||||
{
|
||||
Log(Format("MiddleDouble(Point(%d, %d), %x)", p.x, p.y, (int)keyflags));
|
||||
}
|
||||
|
||||
virtual void MiddleTriple(Point p, dword keyflags)
|
||||
{
|
||||
Log(Format("MiddleTriple(Point(%d, %d), %x)", p.x, p.y, (int)keyflags));
|
||||
}
|
||||
|
||||
virtual void MiddleDrag(Point p, dword keyflags) {
|
||||
Log(Format("MiddleDrag(Point(%d, %d), %x)", p.x, p.y, (int)keyflags));
|
||||
}
|
||||
|
||||
virtual void MiddleHold(Point p, dword keyflags) {
|
||||
Log(Format("MiddleHold(Point(%d, %d), %x)", p.x, p.y, (int)keyflags));
|
||||
}
|
||||
|
||||
virtual void MiddleRepeat(Point p, dword keyflags)
|
||||
{
|
||||
Log(Format("MiddleRepeat(Point(%d, %d), %x)", p.x, p.y, (int)keyflags));
|
||||
}
|
||||
|
||||
virtual void MiddleUp(Point p, dword keyflags)
|
||||
{
|
||||
Log(Format("MiddleUp(Point(%d, %d), %x)", p.x, p.y, (int)keyflags));
|
||||
}
|
||||
|
||||
virtual void MouseWheel(Point p, int zdelta, dword keyflags)
|
||||
{
|
||||
Log(Format("MouseWheel(Point(%d, %d), %d, %x)", p.x, p.y, zdelta, (int)keyflags));
|
||||
}
|
||||
|
||||
virtual void MouseLeave()
|
||||
{
|
||||
Log("MouseLeave");
|
||||
}
|
||||
|
||||
virtual Image CursorImage(Point p, dword keyflags)
|
||||
{
|
||||
return keyflags & K_CTRL ? CtrlImg::swap_color_cursor() : Image::Arrow();
|
||||
}
|
||||
|
||||
virtual bool Key(dword key, int count)
|
||||
{
|
||||
Log(Format("Key(%x, %d) ", (int)key, count) + GetKeyDesc(key));
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual bool WKey(dword key, int count)
|
||||
{
|
||||
Log(Format("WKey(%x, %d) ", (int)key, count) + GetKeyDesc(key));
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual void GotFocus()
|
||||
{
|
||||
Log("GotFocus");
|
||||
}
|
||||
|
||||
virtual void LostFocus()
|
||||
{
|
||||
Log("LostFocus");
|
||||
}
|
||||
|
||||
virtual bool HotKey(dword key)
|
||||
{
|
||||
Log(Format("HotKey(%x) ", (int)key) + GetKeyDesc(key));
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual void ChildGotFocus()
|
||||
{
|
||||
Log("ChildGotFocus");
|
||||
}
|
||||
|
||||
virtual void ChildLostFocus()
|
||||
{
|
||||
Log("ChildLostFocus");
|
||||
}
|
||||
|
||||
virtual void Layout()
|
||||
{
|
||||
Log("Layout");
|
||||
}
|
||||
|
||||
App()
|
||||
{
|
||||
SetFrame(InsetFrame());
|
||||
AddFrame(InsetFrame());
|
||||
AddFrame(InsetFrame());
|
||||
AddFrame(InsetFrame());
|
||||
log.AddColumn("");
|
||||
log.NoHeader();
|
||||
Add(log.HSizePos().BottomPos(0, 200));
|
||||
}
|
||||
|
||||
~App()
|
||||
{
|
||||
Shutdown();
|
||||
}
|
||||
};
|
||||
|
||||
GUI_APP_MAIN
|
||||
{
|
||||
App().Run();
|
||||
}
|
||||
29
rainbow/Events/Events.upp
Normal file
29
rainbow/Events/Events.upp
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
description "Demonstration of basic input events";
|
||||
|
||||
uses
|
||||
CtrlLib;
|
||||
|
||||
uses(SKELETON) Skeleton;
|
||||
|
||||
uses(WINALT) WinAlt;
|
||||
|
||||
uses(WINFB) WinFb;
|
||||
|
||||
uses(LINUXFB) LinuxFb;
|
||||
|
||||
uses(SDLFB) SDLFb;
|
||||
|
||||
uses(WINGL) WinGl;
|
||||
|
||||
file
|
||||
Events.cpp;
|
||||
|
||||
mainconfig
|
||||
"" = "GUI SKELETON",
|
||||
"" = "GUI WINALT",
|
||||
"" = "GUI WINFB",
|
||||
"" = "GUI LINUXFB",
|
||||
"" = "GUI SDLFB",
|
||||
"" = "GUI WINGL",
|
||||
"" = "GUI";
|
||||
|
||||
|
|
@ -3,11 +3,12 @@
|
|||
K_BACK = SDLK_BACKSPACE + K_DELTA,
|
||||
K_BACKSPACE = SDLK_BACKSPACE + K_DELTA,
|
||||
|
||||
K_TAB = SDLK_TAB,
|
||||
//handled extra in fbKEYtoK
|
||||
K_TAB = 9, //SDLK_TAB,
|
||||
|
||||
K_SPACE = SDLK_SPACE,
|
||||
K_SPACE = 32, //SDLK_SPACE,
|
||||
|
||||
K_RETURN = SDLK_RETURN,
|
||||
K_RETURN = 13, //SDLK_RETURN,
|
||||
K_ENTER = K_RETURN,
|
||||
|
||||
K_SHIFT_KEY = SDLK_LSHIFT + K_DELTA,
|
||||
|
|
@ -59,42 +60,42 @@ K_F10 = SDLK_F10 + K_DELTA,
|
|||
K_F11 = SDLK_F11 + K_DELTA,
|
||||
K_F12 = SDLK_F12 + K_DELTA,
|
||||
|
||||
K_A = 'A' + K_DELTA,
|
||||
K_B = 'B' + K_DELTA,
|
||||
K_C = 'C' + K_DELTA,
|
||||
K_D = 'D' + K_DELTA,
|
||||
K_E = 'E' + K_DELTA,
|
||||
K_F = 'F' + K_DELTA,
|
||||
K_G = 'G' + K_DELTA,
|
||||
K_H = 'H' + K_DELTA,
|
||||
K_I = 'I' + K_DELTA,
|
||||
K_J = 'J' + K_DELTA,
|
||||
K_K = 'K' + K_DELTA,
|
||||
K_L = 'L' + K_DELTA,
|
||||
K_M = 'M' + K_DELTA,
|
||||
K_N = 'N' + K_DELTA,
|
||||
K_O = 'O' + K_DELTA,
|
||||
K_P = 'P' + K_DELTA,
|
||||
K_Q = 'Q' + K_DELTA,
|
||||
K_R = 'R' + K_DELTA,
|
||||
K_S = 'S' + K_DELTA,
|
||||
K_T = 'T' + K_DELTA,
|
||||
K_U = 'U' + K_DELTA,
|
||||
K_V = 'V' + K_DELTA,
|
||||
K_W = 'W' + K_DELTA,
|
||||
K_X = 'X' + K_DELTA,
|
||||
K_Y = 'Y' + K_DELTA,
|
||||
K_Z = 'Z' + K_DELTA,
|
||||
K_0 = '0' + K_DELTA,
|
||||
K_1 = '1' + K_DELTA,
|
||||
K_2 = '2' + K_DELTA,
|
||||
K_3 = '3' + K_DELTA,
|
||||
K_4 = '4' + K_DELTA,
|
||||
K_5 = '5' + K_DELTA,
|
||||
K_6 = '6' + K_DELTA,
|
||||
K_7 = '7' + K_DELTA,
|
||||
K_8 = '8' + K_DELTA,
|
||||
K_9 = '9' + K_DELTA,
|
||||
K_A = SDLK_a + K_DELTA,
|
||||
K_B = SDLK_b + K_DELTA,
|
||||
K_C = SDLK_c + K_DELTA,
|
||||
K_D = SDLK_d + K_DELTA,
|
||||
K_E = SDLK_e + K_DELTA,
|
||||
K_F = SDLK_f + K_DELTA,
|
||||
K_G = SDLK_g + K_DELTA,
|
||||
K_H = SDLK_h + K_DELTA,
|
||||
K_I = SDLK_i + K_DELTA,
|
||||
K_J = SDLK_j + K_DELTA,
|
||||
K_K = SDLK_k + K_DELTA,
|
||||
K_L = SDLK_l + K_DELTA,
|
||||
K_M = SDLK_m + K_DELTA,
|
||||
K_N = SDLK_n + K_DELTA,
|
||||
K_O = SDLK_o + K_DELTA,
|
||||
K_P = SDLK_p + K_DELTA,
|
||||
K_Q = SDLK_q + K_DELTA,
|
||||
K_R = SDLK_r + K_DELTA,
|
||||
K_S = SDLK_s + K_DELTA,
|
||||
K_T = SDLK_t + K_DELTA,
|
||||
K_U = SDLK_u + K_DELTA,
|
||||
K_V = SDLK_v + K_DELTA,
|
||||
K_W = SDLK_w + K_DELTA,
|
||||
K_X = SDLK_x + K_DELTA,
|
||||
K_Y = SDLK_y + K_DELTA,
|
||||
K_Z = SDLK_z + K_DELTA,
|
||||
K_0 = SDLK_0 + K_DELTA,
|
||||
K_1 = SDLK_1 + K_DELTA,
|
||||
K_2 = SDLK_2 + K_DELTA,
|
||||
K_3 = SDLK_3 + K_DELTA,
|
||||
K_4 = SDLK_4 + K_DELTA,
|
||||
K_5 = SDLK_5 + K_DELTA,
|
||||
K_6 = SDLK_6 + K_DELTA,
|
||||
K_7 = SDLK_7 + K_DELTA,
|
||||
K_8 = SDLK_8 + K_DELTA,
|
||||
K_9 = SDLK_9 + K_DELTA,
|
||||
|
||||
K_CTRL_LBRACKET = K_CTRL|219|K_DELTA,
|
||||
K_CTRL_RBRACKET = K_CTRL|221|K_DELTA,
|
||||
|
|
|
|||
|
|
@ -44,6 +44,8 @@ dword fbKEYtoK(dword chr) {
|
|||
return chr;
|
||||
}
|
||||
|
||||
dword lastbdowntime[8] = {0};
|
||||
dword isdblclick[8] = {0};
|
||||
void HandleSDLEvent(SDL_Event* event)
|
||||
{
|
||||
switch(event->type) {
|
||||
|
|
@ -52,15 +54,6 @@ void HandleSDLEvent(SDL_Event* event)
|
|||
case SDL_KEYDOWN:
|
||||
case SDL_KEYUP: //SDL_KeyboardEvent
|
||||
{
|
||||
String msgdump;
|
||||
switch(event->type)
|
||||
{
|
||||
case SDL_KEYDOWN: msgdump << "SDL_KEYDOWN"; break;
|
||||
case SDL_KEYUP: msgdump << "SDL_KEYUP"; break;
|
||||
}
|
||||
msgdump << (int)event->key.keysym.sym;
|
||||
LLOG(msgdump);
|
||||
|
||||
bool b = false;
|
||||
dword keycode = 0;
|
||||
if(event->type == SDL_KEYDOWN) {
|
||||
|
|
@ -70,8 +63,7 @@ void HandleSDLEvent(SDL_Event* event)
|
|||
|
||||
//send respective keyup things as char events as well
|
||||
keycode = (dword)event->key.keysym.unicode;
|
||||
if((keycode != 127 && keycode > 32 && keycode < 255)
|
||||
|| (keycode == 32 && fbKEYtoK(SDLK_SPACE) == K_SPACE))
|
||||
if((keycode != 127 && keycode >= 32 && keycode < 255))
|
||||
b = Ctrl::DoKeyFB(keycode, 1);
|
||||
}
|
||||
else
|
||||
|
|
@ -88,20 +80,55 @@ void HandleSDLEvent(SDL_Event* event)
|
|||
case SDL_MOUSEBUTTONDOWN: //SDL_MouseButtonEvent, FIXME DoubleClick
|
||||
{
|
||||
Point p(event->button.x, event->button.y);
|
||||
switch(event->button.button)
|
||||
int bi = event->button.button;
|
||||
dword ct = SDL_GetTicks();
|
||||
if(isdblclick[bi] && (abs(int(ct) - int(lastbdowntime[bi])) < 400))
|
||||
{
|
||||
case SDL_BUTTON_LEFT: Ctrl::DoMouseFB(Ctrl::LEFTDOWN, p); break;
|
||||
case SDL_BUTTON_RIGHT: Ctrl::DoMouseFB(Ctrl::RIGHTDOWN, p); break;
|
||||
case SDL_BUTTON_MIDDLE: Ctrl::DoMouseFB(Ctrl::MIDDLEDOWN, p); break;
|
||||
case SDL_BUTTON_WHEELUP: Ctrl::DoMouseFB(Ctrl::MOUSEWHEEL, p, +120); break;
|
||||
case SDL_BUTTON_WHEELDOWN: Ctrl::DoMouseFB(Ctrl::MOUSEWHEEL, p, -120); break;
|
||||
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;
|
||||
//case SDL_BUTTON_WHEELUP: Ctrl::DoMouseFB(Ctrl::MOUSEWHEELDOUBLE, p, +120); break;
|
||||
//case SDL_BUTTON_WHEELDOWN: Ctrl::DoMouseFB(Ctrl::MOUSEWHEELDOUBLE, p, -120); break;
|
||||
}
|
||||
isdblclick[bi] = 0; //reset, to go ahead sending repeats
|
||||
//but sdl doesnt send repeated mouse down
|
||||
//FIXME fake repeated mousedown
|
||||
}
|
||||
else if(!isdblclick[bi]) //events might not be right
|
||||
{
|
||||
switch(bi)
|
||||
{
|
||||
case SDL_BUTTON_LEFT: Ctrl::DoMouseFB(Ctrl::LEFTREPEAT, p); break;
|
||||
case SDL_BUTTON_RIGHT: Ctrl::DoMouseFB(Ctrl::RIGHTREPEAT, p); break;
|
||||
case SDL_BUTTON_MIDDLE: Ctrl::DoMouseFB(Ctrl::MIDDLEREPEAT, p); break;
|
||||
//case SDL_BUTTON_WHEELUP: Ctrl::DoMouseFB(Ctrl::MOUSEWHEELDOUBLE, p, +120); break;
|
||||
//case SDL_BUTTON_WHEELDOWN: Ctrl::DoMouseFB(Ctrl::MOUSEWHEELDOUBLE, p, -120); break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
lastbdowntime[bi] = ct;
|
||||
isdblclick[bi] = 0; //prepare for repeat
|
||||
switch(bi)
|
||||
{
|
||||
case SDL_BUTTON_LEFT: Ctrl::DoMouseFB(Ctrl::LEFTDOWN, p); break;
|
||||
case SDL_BUTTON_RIGHT: Ctrl::DoMouseFB(Ctrl::RIGHTDOWN, p); break;
|
||||
case SDL_BUTTON_MIDDLE: Ctrl::DoMouseFB(Ctrl::MIDDLEDOWN, p); break;
|
||||
case SDL_BUTTON_WHEELUP: Ctrl::DoMouseFB(Ctrl::MOUSEWHEEL, p, +120); break;
|
||||
case SDL_BUTTON_WHEELDOWN: Ctrl::DoMouseFB(Ctrl::MOUSEWHEEL, p, -120); 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(event->button.button)
|
||||
switch(bi)
|
||||
{
|
||||
case SDL_BUTTON_LEFT: Ctrl::DoMouseFB(Ctrl::LEFTUP, p); break;
|
||||
case SDL_BUTTON_RIGHT: Ctrl::DoMouseFB(Ctrl::RIGHTUP, p); break;
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ bool FBProcessEvent(bool *quit)
|
|||
*quit = true;
|
||||
HandleSDLEvent(&event);
|
||||
return true;
|
||||
} // End while
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -90,6 +90,7 @@ void FBInit()
|
|||
|
||||
SDL_EnableUNICODE(1); //for unicode keycode availability
|
||||
SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL/2);
|
||||
SDL_ShowCursor(0);
|
||||
|
||||
const SDL_VideoInfo* vi = SDL_GetVideoInfo();
|
||||
//ASSERT(vi->hw_available);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue