diff --git a/sc2/src/sc2code/libs/graphics/sdl/canvas.c b/sc2/src/sc2code/libs/graphics/sdl/canvas.c index adf3b1ec1..359d4d8bd 100644 --- a/sc2/src/sc2code/libs/graphics/sdl/canvas.c +++ b/sc2/src/sc2code/libs/graphics/sdl/canvas.c @@ -477,11 +477,12 @@ TFB_DrawCanvas_Rescale_Nearest (TFB_Canvas src_canvas, TFB_Canvas dest_canvas, E SDL_Surface *src = (SDL_Surface *)src_canvas; SDL_Surface *dst = (SDL_Surface *)dest_canvas; int x, y, sx, sy, *csax, *csay, csx, csy; - int sax[321], say[241]; + int saspace[602]; + int *sax, *say; - if (size.width > 320 || size.height > 240) + if (size.width + size.height > 600) { - fprintf (stderr, "TFB_DrawCanvas_Scale: Tried to zoom an image to be larger than the screen! Failing.\n"); + fprintf (stderr, "TFB_DrawCanvas_Scale: Tried to zoom an image to unreasonable size! Failing.\n"); return; } if (size.width > dst->w || size.height > dst->h) @@ -494,6 +495,8 @@ TFB_DrawCanvas_Rescale_Nearest (TFB_Canvas src_canvas, TFB_Canvas dest_canvas, E sx = (int) (65536.0 * (float) src->w / (float) size.width); sy = (int) (65536.0 * (float) src->h / (float) size.height); + sax = saspace; + say = saspace + size.width + 1; /* * Precalculate row increments */ @@ -1004,6 +1007,7 @@ TFB_DrawCanvas_Rotate (TFB_Canvas src_canvas, TFB_Canvas dst_canvas, int angle, SDL_Surface *src = (SDL_Surface *)src_canvas; SDL_Surface *dst = (SDL_Surface *)dst_canvas; int ret; + int r, g, b; if (size.width > dst->w || size.height > dst->h) { @@ -1012,6 +1016,13 @@ TFB_DrawCanvas_Rotate (TFB_Canvas src_canvas, TFB_Canvas dst_canvas, int angle, return; } + if (TFB_DrawCanvas_GetTransparentColor (src, &r, &g, &b)) + { + TFB_DrawCanvas_SetTransparentColor (dst, r, g, b, FALSE); + /* fill destination with transparent color before rotating */ + SDL_FillRect(dst, NULL, SDL_MapRGB(dst->format, r, g, b)); + } + ret = rotateSurface (src, dst, angle, 0); if (ret != 0) { diff --git a/sc2/src/sc2code/libs/graphics/tfb_draw.c b/sc2/src/sc2code/libs/graphics/tfb_draw.c index d67bfc2bd..4617d1b67 100644 --- a/sc2/src/sc2code/libs/graphics/tfb_draw.c +++ b/sc2/src/sc2code/libs/graphics/tfb_draw.c @@ -330,11 +330,14 @@ TFB_DrawImage_New_Rotated (TFB_Image *img, int angle) { TFB_Canvas dst; EXTENT size; + TFB_Image* newimg; + int r, g, b; /* sanity check */ if (!img->NormalImg) { - fprintf (stderr, "TFB_DrawImage_New_Rotated: source canvas is NULL! Failing.\n"); + fprintf (stderr, "TFB_DrawImage_New_Rotated: " + "source canvas is NULL! Failing.\n"); return NULL; } @@ -342,12 +345,21 @@ TFB_DrawImage_New_Rotated (TFB_Image *img, int angle) dst = TFB_DrawCanvas_New_RotationTarget (img->NormalImg, angle); if (!dst) { - fprintf (stderr, "TFB_DrawImage_New_Rotated: rotation target canvas not created! Failing.\n"); + fprintf (stderr, "TFB_DrawImage_New_Rotated: " + "rotation target canvas not created! Failing.\n"); return NULL; } TFB_DrawCanvas_Rotate (img->NormalImg, dst, angle, size); + + newimg = TFB_DrawImage_New (dst); + if (newimg && TFB_DrawCanvas_GetTransparentColor ( + newimg->NormalImg, &r, &g, &b)) + { /* reset colorkey info to clear potential SRCALPHA */ + TFB_DrawCanvas_SetTransparentColor (newimg->NormalImg, + r, g, b, FALSE); + } - return TFB_DrawImage_New (dst); + return newimg; } void