diff src/video/SDL_surface.c @ 462:1be0cdaf8092

Fixed offset bug in hardware accelerated fills and blits
author Sam Lantinga <slouken@libsdl.org>
date Tue, 20 Aug 2002 16:58:49 +0000
parents 598b25b9bffe
children c7da0cd5ae5e
line wrap: on
line diff
--- a/src/video/SDL_surface.c	Tue Aug 20 06:08:42 2002 +0000
+++ b/src/video/SDL_surface.c	Tue Aug 20 16:58:49 2002 +0000
@@ -399,6 +399,8 @@
 				SDL_Surface *dst, SDL_Rect *dstrect)
 {
 	SDL_blit do_blit;
+	SDL_Rect hw_srcrect;
+	SDL_Rect hw_dstrect;
 
 	/* Check to make sure the blit mapping is valid */
 	if ( (src->map->dst != dst) ||
@@ -410,6 +412,18 @@
 
 	/* Figure out which blitter to use */
 	if ( (src->flags & SDL_HWACCEL) == SDL_HWACCEL ) {
+		if ( src == SDL_VideoSurface ) {
+			hw_srcrect = *dstrect;
+			hw_srcrect.x += current_video->offset_x;
+			hw_srcrect.y += current_video->offset_y;
+			srcrect = &hw_srcrect;
+		}
+		if ( dst == SDL_VideoSurface ) {
+			hw_dstrect = *dstrect;
+			hw_dstrect.x += current_video->offset_x;
+			hw_dstrect.y += current_video->offset_y;
+			dstrect = &hw_dstrect;
+		}
 		do_blit = src->map->hw_blit;
 	} else {
 		do_blit = src->map->sw_blit;
@@ -533,6 +547,13 @@
 	/* Check for hardware acceleration */
 	if ( ((dst->flags & SDL_HWSURFACE) == SDL_HWSURFACE) &&
 					video->info.blit_fill ) {
+		SDL_Rect hw_rect;
+		if ( dst == SDL_VideoSurface ) {
+			hw_rect = *dstrect;
+			hw_rect.x += current_video->offset_x;
+			hw_rect.y += current_video->offset_y;
+			dstrect = &hw_rect;
+		}
 		return(video->FillHWRect(this, dst, dstrect, color));
 	}