diff --git a/src/video/SDL_surface.c b/src/video/SDL_surface.c index 13aae4601..994094c19 100644 --- a/src/video/SDL_surface.c +++ b/src/video/SDL_surface.c @@ -797,25 +797,25 @@ SDL_PrivateUpperBlitScaled(SDL_Surface * src, const SDL_Rect * srcrect, if (NULL == dstrect) { dst_x0 = 0; dst_y0 = 0; - dst_x1 = dst_w - 1; - dst_y1 = dst_h - 1; + dst_x1 = dst_w; + dst_y1 = dst_h; } else { dst_x0 = dstrect->x; dst_y0 = dstrect->y; - dst_x1 = dst_x0 + dst_w - 1; - dst_y1 = dst_y0 + dst_h - 1; + dst_x1 = dst_x0 + dst_w; + dst_y1 = dst_y0 + dst_h; } if (NULL == srcrect) { src_x0 = 0; src_y0 = 0; - src_x1 = src_w - 1; - src_y1 = src_h - 1; + src_x1 = src_w; + src_y1 = src_h; } else { src_x0 = srcrect->x; src_y0 = srcrect->y; - src_x1 = src_x0 + src_w - 1; - src_y1 = src_y0 + src_h - 1; + src_x1 = src_x0 + src_w; + src_y1 = src_y0 + src_h; /* Clip source rectangle to the source surface */ @@ -824,9 +824,9 @@ SDL_PrivateUpperBlitScaled(SDL_Surface * src, const SDL_Rect * srcrect, src_x0 = 0; } - if (src_x1 >= src->w) { - dst_x1 -= (src_x1 - src->w + 1) * scaling_w; - src_x1 = src->w - 1; + if (src_x1 > src->w) { + dst_x1 -= (src_x1 - src->w) * scaling_w; + src_x1 = src->w; } if (src_y0 < 0) { @@ -834,9 +834,9 @@ SDL_PrivateUpperBlitScaled(SDL_Surface * src, const SDL_Rect * srcrect, src_y0 = 0; } - if (src_y1 >= src->h) { - dst_y1 -= (src_y1 - src->h + 1) * scaling_h; - src_y1 = src->h - 1; + if (src_y1 > src->h) { + dst_y1 -= (src_y1 - src->h) * scaling_h; + src_y1 = src->h; } } @@ -853,9 +853,9 @@ SDL_PrivateUpperBlitScaled(SDL_Surface * src, const SDL_Rect * srcrect, dst_x0 = 0; } - if (dst_x1 >= dst->clip_rect.w) { - src_x1 -= (dst_x1 - dst->clip_rect.w + 1) / scaling_w; - dst_x1 = dst->clip_rect.w - 1; + if (dst_x1 > dst->clip_rect.w) { + src_x1 -= (dst_x1 - dst->clip_rect.w) / scaling_w; + dst_x1 = dst->clip_rect.w; } if (dst_y0 < 0) { @@ -863,9 +863,9 @@ SDL_PrivateUpperBlitScaled(SDL_Surface * src, const SDL_Rect * srcrect, dst_y0 = 0; } - if (dst_y1 >= dst->clip_rect.h) { - src_y1 -= (dst_y1 - dst->clip_rect.h + 1) / scaling_h; - dst_y1 = dst->clip_rect.h - 1; + if (dst_y1 > dst->clip_rect.h) { + src_y1 -= (dst_y1 - dst->clip_rect.h) / scaling_h; + dst_y1 = dst->clip_rect.h; } /* Translate back to surface coordinates */ @@ -876,13 +876,13 @@ SDL_PrivateUpperBlitScaled(SDL_Surface * src, const SDL_Rect * srcrect, final_src.x = (int)SDL_floor(src_x0 + 0.5); final_src.y = (int)SDL_floor(src_y0 + 0.5); - final_src.w = (int)SDL_floor(src_x1 + 1 + 0.5) - (int)SDL_floor(src_x0 + 0.5); - final_src.h = (int)SDL_floor(src_y1 + 1 + 0.5) - (int)SDL_floor(src_y0 + 0.5); + final_src.w = (int)SDL_floor(src_x1 + 0.5) - (int)SDL_floor(src_x0 + 0.5); + final_src.h = (int)SDL_floor(src_y1 + 0.5) - (int)SDL_floor(src_y0 + 0.5); final_dst.x = (int)SDL_floor(dst_x0 + 0.5); final_dst.y = (int)SDL_floor(dst_y0 + 0.5); - final_dst.w = (int)SDL_floor(dst_x1 - dst_x0 + 1.5); - final_dst.h = (int)SDL_floor(dst_y1 - dst_y0 + 1.5); + final_dst.w = (int)SDL_floor(dst_x1 - dst_x0 + 0.5); + final_dst.h = (int)SDL_floor(dst_y1 - dst_y0 + 0.5); if (final_dst.w < 0) final_dst.w = 0;