diff --git a/rainbow/SDL20GL/Ctrl.h b/rainbow/SDL20GL/Ctrl.h index 73798b795..c9b7fdf94 100644 --- a/rainbow/SDL20GL/Ctrl.h +++ b/rainbow/SDL20GL/Ctrl.h @@ -28,7 +28,6 @@ private: void NewTop() { top = new Top; top->owner_window = NULL; } void PutForeground(); static void MouseEventFB(Ptr t, int event, Point p, int zdelta); - Vector GetPaintRects(); static void DrawLine(const Vector& clip, int x, int y, int cx, int cy, bool horz, const byte *pattern, int animation); diff --git a/rainbow/SDL20GL/DrawDragRect.cpp b/rainbow/SDL20GL/DrawDragRect.cpp index 445f6a4aa..a1ce72c25 100644 --- a/rainbow/SDL20GL/DrawDragRect.cpp +++ b/rainbow/SDL20GL/DrawDragRect.cpp @@ -89,13 +89,4 @@ void FinishDragRect(Ctrl& q) SDL_GL_SwapWindow(screen.win); } -Vector Ctrl::GetPaintRects() // TODO: Remove(?) -{ - Vector r; - r.Add(GetScreenRect()); - for(int i = max(FindTopCtrl() + 1, 0); i < topctrl.GetCount(); i++) - Subtract(r, topctrl[i]->GetScreenRect()); - return r; -} - END_UPP_NAMESPACE diff --git a/rainbow/SDL20GL/Event.cpp b/rainbow/SDL20GL/Event.cpp index a901dd9a1..4b49289fb 100644 --- a/rainbow/SDL20GL/Event.cpp +++ b/rainbow/SDL20GL/Event.cpp @@ -126,6 +126,27 @@ void Ctrl::SetMouseCursor(const Image& image) } } +bool Ctrl::ProcessEvent(bool *quit) +{ + LLOG("@ ProcessEvent"); + ASSERT(IsMainThread()); + if(!GetMouseLeft() && !GetMouseRight() && !GetMouseMiddle()) + ReleaseCtrlCapture(); + + SDL_Event event; + if(SDL_PollEvent(&event)) { + if(event.type == SDL_QUIT && quit) + *quit = true; + HandleSDLEvent(&event); + SyncTopWindows(); + DefferedFocusSync(); + SyncCaret(); + SyncTopWindows(); + return true; + } + return false; +} + bool Ctrl::ProcessEvents(bool *quit) { //LOGBLOCK("@ ProcessEvents"); diff --git a/rainbow/SDL20GL/SDLProc.cpp b/rainbow/SDL20GL/SDLProc.cpp index d624defe3..5d12bb33f 100644 --- a/rainbow/SDL20GL/SDLProc.cpp +++ b/rainbow/SDL20GL/SDLProc.cpp @@ -112,9 +112,16 @@ void HandleSDLEvent(SDL_Event* event) } } break; - case SDL_MOUSEMOTION: //SDL_MouseMotionEvent + 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 { diff --git a/rainbow/SDL20GL/Wnd.cpp b/rainbow/SDL20GL/Wnd.cpp index 2e3888211..b94c65214 100644 --- a/rainbow/SDL20GL/Wnd.cpp +++ b/rainbow/SDL20GL/Wnd.cpp @@ -166,27 +166,6 @@ void Ctrl::SyncTopWindows() } } -bool Ctrl::ProcessEvent(bool *quit) -{ - LLOG("@ ProcessEvent"); - ASSERT(IsMainThread()); - if(!GetMouseLeft() && !GetMouseRight() && !GetMouseMiddle()) - ReleaseCtrlCapture(); - - SDL_Event event; - if(SDL_PollEvent(&event)) { - if(event.type == SDL_QUIT && quit) - *quit = true; - HandleSDLEvent(&event); - SyncTopWindows(); - DefferedFocusSync(); - SyncCaret(); - SyncTopWindows(); - return true; - } - return false; -} - /* ViewDraw::ViewDraw(Ctrl *ctrl) {