فهرست منبع

Fixed bug 2866 - testrelative.c: patch to make the orange box wrap around

Eric Wasylishen

Here's a patch to make the 'testrelative' demo program more useful: it just makes the orange rectangle wrap around. Previously, the orange cursor would just disappear off screen if you move the mouse a lot in one direction, so it was hard to tell if relative mouse mode was still working.
Philipp Wiesemann 11 سال پیش
والد
کامیت
c17a5b1177
1فایلهای تغییر یافته به همراه8 افزوده شده و 0 حذف شده
  1. 8 0
      test/testrelative.c

+ 8 - 0
test/testrelative.c

@@ -49,12 +49,20 @@ loop(){
         }
         }
     }
     }
     for (i = 0; i < state->num_windows; ++i) {
     for (i = 0; i < state->num_windows; ++i) {
+        SDL_Rect viewport;
         SDL_Renderer *renderer = state->renderers[i];
         SDL_Renderer *renderer = state->renderers[i];
         if (state->windows[i] == NULL)
         if (state->windows[i] == NULL)
             continue;
             continue;
         SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF);
         SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF);
         SDL_RenderClear(renderer);
         SDL_RenderClear(renderer);
 
 
+        /* Wrap the cursor rectangle at the screen edges to keep it visible */
+        SDL_RenderGetViewport(renderer, &viewport);
+        if (rect.x < viewport.x) rect.x += viewport.w;
+        if (rect.y < viewport.y) rect.y += viewport.h;
+        if (rect.x > viewport.x + viewport.w) rect.x -= viewport.w;
+        if (rect.y > viewport.y + viewport.h) rect.y -= viewport.h;
+
         DrawRects(renderer, &rect);
         DrawRects(renderer, &rect);
 
 
         SDL_RenderPresent(renderer);
         SDL_RenderPresent(renderer);