summaryrefslogtreecommitdiff
path: root/src/ui/window.c
diff options
context:
space:
mode:
authorJaakko Keränen <jaakko.keranen@iki.fi>2020-08-25 13:01:44 +0300
committerJaakko Keränen <jaakko.keranen@iki.fi>2020-08-25 13:01:44 +0300
commit770313365c781ca52518340c57e2f06e093cfebe (patch)
treeb6aa1829519f1726af2e91dfadf43bf136800a6f /src/ui/window.c
parent5c51b99cffed9d3d48470446b8d5dd724e8c03f1 (diff)
Window: Avoid setting cursor multiple times per event
Diffstat (limited to 'src/ui/window.c')
-rw-r--r--src/ui/window.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/ui/window.c b/src/ui/window.c
index 82109c07..ef8aea71 100644
--- a/src/ui/window.c
+++ b/src/ui/window.c
@@ -420,6 +420,7 @@ static void drawBlank_Window_(iWindow *d) {
420void init_Window(iWindow *d, iRect rect) { 420void init_Window(iWindow *d, iRect rect) {
421 theWindow_ = d; 421 theWindow_ = d;
422 iZap(d->cursors); 422 iZap(d->cursors);
423 d->pendingCursor = NULL;
423 d->isDrawFrozen = iTrue; 424 d->isDrawFrozen = iTrue;
424 uint32_t flags = SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI; 425 uint32_t flags = SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI;
425#if defined (iPlatformApple) 426#if defined (iPlatformApple)
@@ -515,6 +516,13 @@ static iBool handleWindowEvent_Window_(iWindow *d, const SDL_WindowEvent *ev) {
515 return iFalse; 516 return iFalse;
516} 517}
517 518
519static void applyCursor_Window_(iWindow *d) {
520 if (d->pendingCursor) {
521 SDL_SetCursor(d->pendingCursor);
522 d->pendingCursor = NULL;
523 }
524}
525
518iBool processEvent_Window(iWindow *d, const SDL_Event *ev) { 526iBool processEvent_Window(iWindow *d, const SDL_Event *ev) {
519 switch (ev->type) { 527 switch (ev->type) {
520 case SDL_WINDOWEVENT: { 528 case SDL_WINDOWEVENT: {
@@ -552,6 +560,9 @@ iBool processEvent_Window(iWindow *d, const SDL_Event *ev) {
552 if (oldHover != hover_Widget()) { 560 if (oldHover != hover_Widget()) {
553 postRefresh_App(); 561 postRefresh_App();
554 } 562 }
563 if (event.type == SDL_MOUSEMOTION) {
564 applyCursor_Window_(d);
565 }
555 return wasUsed; 566 return wasUsed;
556 } 567 }
557 } 568 }
@@ -610,11 +621,11 @@ void setFreezeDraw_Window(iWindow *d, iBool freezeDraw) {
610 d->isDrawFrozen = freezeDraw; 621 d->isDrawFrozen = freezeDraw;
611} 622}
612 623
613void setCursor_Window(iWindow *d, int cursor) { 624void setCursor_Window(iWindow *d, int cursor) {
614 if (!d->cursors[cursor]) { 625 if (!d->cursors[cursor]) {
615 d->cursors[cursor] = SDL_CreateSystemCursor(cursor); 626 d->cursors[cursor] = SDL_CreateSystemCursor(cursor);
616 } 627 }
617 SDL_SetCursor(d->cursors[cursor]); 628 d->pendingCursor = d->cursors[cursor];
618} 629}
619 630
620iInt2 rootSize_Window(const iWindow *d) { 631iInt2 rootSize_Window(const iWindow *d) {