changeset 2908:aa6ba38c1714

Added clipping for render copy
author Sam Lantinga <slouken@libsdl.org>
date Tue, 23 Dec 2008 01:28:06 +0000
parents 5f89d3751ce7
children 3da0bb421d83
files src/video/SDL_video.c
diffstat 1 files changed, 17 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/video/SDL_video.c	Mon Dec 22 05:29:55 2008 +0000
+++ b/src/video/SDL_video.c	Tue Dec 23 01:28:06 2008 +0000
@@ -2155,6 +2155,7 @@
         return -1;
     }
     window = SDL_GetWindowFromID(renderer->window);
+
     real_rect.x = 0;
     real_rect.y = 0;
     real_rect.w = window->w;
@@ -2189,21 +2190,25 @@
         return -1;
     }
     window = SDL_GetWindowFromID(renderer->window);
+
+    real_srcrect.x = 0;
+    real_srcrect.y = 0;
+    real_srcrect.w = texture->w;
+    real_srcrect.h = texture->h;
     if (srcrect) {
-        real_srcrect = *srcrect;
-    } else {
-        real_srcrect.x = 0;
-        real_srcrect.y = 0;
-        real_srcrect.w = texture->w;
-        real_srcrect.h = texture->h;
+        if (!SDL_IntersectRect(srcrect, &real_srcrect, &real_srcrect)) {
+            return 0;
+        }
     }
+
+    real_dstrect.x = 0;
+    real_dstrect.y = 0;
+    real_dstrect.w = window->w;
+    real_dstrect.h = window->h;
     if (dstrect) {
-        real_dstrect = *dstrect;
-    } else {
-        real_dstrect.x = 0;
-        real_dstrect.y = 0;
-        real_dstrect.w = window->w;
-        real_dstrect.h = window->h;
+        if (!SDL_IntersectRect(dstrect, &real_dstrect, &real_dstrect)) {
+            return 0;
+        }
     }
 
     return renderer->RenderCopy(renderer, texture, &real_srcrect,