fixed loading starters on big screens
This commit is contained in:
parent
66e12a837e
commit
1fc0d61949
1 changed files with 64 additions and 12 deletions
|
|
@ -9359,7 +9359,61 @@ static void do_wait(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void autoscale_copy_smear_free(SDL_Surface *src, SDL_Surface *dst)
|
static int SDLCALL NondefectiveBlit(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect)
|
||||||
|
{
|
||||||
|
int dstx = 0;
|
||||||
|
int dsty = 0;
|
||||||
|
int srcx = 0;
|
||||||
|
int srcy = 0;
|
||||||
|
int srcw = src->w;
|
||||||
|
int srch = src->h;
|
||||||
|
if(srcrect)
|
||||||
|
{
|
||||||
|
srcx = srcrect->x;
|
||||||
|
srcy = srcrect->y;
|
||||||
|
srcw = srcrect->w;
|
||||||
|
srch = srcrect->h;
|
||||||
|
}
|
||||||
|
if(dstrect)
|
||||||
|
{
|
||||||
|
dstx = dstrect->x;
|
||||||
|
dsty = dstrect->y;
|
||||||
|
}
|
||||||
|
if(dsty<0)
|
||||||
|
{
|
||||||
|
srcy += -dsty;
|
||||||
|
srch -= -dsty;
|
||||||
|
dsty = 0;
|
||||||
|
}
|
||||||
|
if(dstx<0)
|
||||||
|
{
|
||||||
|
srcx += -dstx;
|
||||||
|
srcw -= -dstx;
|
||||||
|
dstx = 0;
|
||||||
|
}
|
||||||
|
if(dstx+srcw > dst->w-1)
|
||||||
|
{
|
||||||
|
srcw -= (dstx+srcw) - (dst->w-1);
|
||||||
|
}
|
||||||
|
if(dsty+srch > dst->h-1)
|
||||||
|
{
|
||||||
|
srch -= (dsty+srch) - (dst->h-1);
|
||||||
|
}
|
||||||
|
if(srcw<1 || srch<1)
|
||||||
|
return /* no idea what to return if nothing done */ ;
|
||||||
|
while(srch--)
|
||||||
|
{
|
||||||
|
int i = srcw;
|
||||||
|
while(i--)
|
||||||
|
{
|
||||||
|
putpixel(dst, i+dstx, srch+dsty, getpixel(src, i+srcx, srch+srcy));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// For the 3rd arg, pass either NondefectiveBlit or SDL_BlitSurface.
|
||||||
|
static void autoscale_copy_smear_free(SDL_Surface *src, SDL_Surface *dst, int SDLCALL (*blit)(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect))
|
||||||
{
|
{
|
||||||
SDL_Surface *src1;
|
SDL_Surface *src1;
|
||||||
SDL_Rect dest;
|
SDL_Rect dest;
|
||||||
|
|
@ -9379,7 +9433,7 @@ static void autoscale_copy_smear_free(SDL_Surface *src, SDL_Surface *dst)
|
||||||
|
|
||||||
dest.x = (dst->w - src->w) / 2;
|
dest.x = (dst->w - src->w) / 2;
|
||||||
dest.y = (dst->h - src->h) / 2;
|
dest.y = (dst->h - src->h) / 2;
|
||||||
SDL_BlitSurface(src, NULL, dst, &dest);
|
blit(src, NULL, dst, &dest);
|
||||||
|
|
||||||
if(src->w != dst->w)
|
if(src->w != dst->w)
|
||||||
{
|
{
|
||||||
|
|
@ -9393,14 +9447,14 @@ static void autoscale_copy_smear_free(SDL_Surface *src, SDL_Surface *dst)
|
||||||
while(i-- > 0)
|
while(i-- > 0)
|
||||||
{
|
{
|
||||||
dest.x = i;
|
dest.x = i;
|
||||||
SDL_BlitSurface(src, &sour, dst, &dest);
|
blit(src, &sour, dst, &dest);
|
||||||
}
|
}
|
||||||
sour.x = src->w - 1;
|
sour.x = src->w - 1;
|
||||||
i = (dst->w - src->w) / 2 + src->w - 1;
|
i = (dst->w - src->w) / 2 + src->w - 1;
|
||||||
while(++i < dst->w)
|
while(++i < dst->w)
|
||||||
{
|
{
|
||||||
dest.x = i;
|
dest.x = i;
|
||||||
SDL_BlitSurface(src, &sour, dst, &dest);
|
blit(src, &sour, dst, &dest);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -9416,14 +9470,14 @@ static void autoscale_copy_smear_free(SDL_Surface *src, SDL_Surface *dst)
|
||||||
while(i-- > 0)
|
while(i-- > 0)
|
||||||
{
|
{
|
||||||
dest.y = i;
|
dest.y = i;
|
||||||
SDL_BlitSurface(src, &sour, dst, &dest);
|
blit(src, &sour, dst, &dest);
|
||||||
}
|
}
|
||||||
sour.y = src->h - 1;
|
sour.y = src->h - 1;
|
||||||
i = (dst->h - src->h) / 2 + src->h - 1;
|
i = (dst->h - src->h) / 2 + src->h - 1;
|
||||||
while(++i < dst->h)
|
while(++i < dst->h)
|
||||||
{
|
{
|
||||||
dest.y = i;
|
dest.y = i;
|
||||||
SDL_BlitSurface(src, &sour, dst, &dest);
|
blit(src, &sour, dst, &dest);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -9483,7 +9537,6 @@ static void load_starter(char * img_id)
|
||||||
SDL_FreeSurface(tmp_surf);
|
SDL_FreeSurface(tmp_surf);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
if (img_starter != NULL &&
|
if (img_starter != NULL &&
|
||||||
(img_starter->w != canvas->w || img_starter->h != canvas->h))
|
(img_starter->w != canvas->w || img_starter->h != canvas->h))
|
||||||
{
|
{
|
||||||
|
|
@ -9499,10 +9552,9 @@ static void load_starter(char * img_id)
|
||||||
|
|
||||||
// 3rd arg ignored for RGBA surfaces
|
// 3rd arg ignored for RGBA surfaces
|
||||||
SDL_SetAlpha(tmp_surf, SDL_RLEACCEL, SDL_ALPHA_OPAQUE);
|
SDL_SetAlpha(tmp_surf, SDL_RLEACCEL, SDL_ALPHA_OPAQUE);
|
||||||
autoscale_copy_smear_free(tmp_surf,img_starter);
|
autoscale_copy_smear_free(tmp_surf,img_starter,NondefectiveBlit);
|
||||||
SDL_SetAlpha(img_starter, SDL_RLEACCEL|SDL_SRCALPHA, SDL_ALPHA_OPAQUE);
|
SDL_SetAlpha(img_starter, SDL_RLEACCEL|SDL_SRCALPHA, SDL_ALPHA_OPAQUE);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Try to load the a background image: */
|
/* Try to load the a background image: */
|
||||||
|
|
||||||
|
|
@ -9536,7 +9588,7 @@ static void load_starter(char * img_id)
|
||||||
canvas->format->Bmask,
|
canvas->format->Bmask,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
autoscale_copy_smear_free(tmp_surf,img_starter_bkgd);
|
autoscale_copy_smear_free(tmp_surf,img_starter_bkgd,SDL_BlitSurface);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(dirname);
|
free(dirname);
|
||||||
|
|
@ -9607,7 +9659,7 @@ static void load_current(void)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
autoscale_copy_smear_free(tmp,canvas);
|
autoscale_copy_smear_free(tmp,canvas,SDL_BlitSurface);
|
||||||
load_starter_id(file_id);
|
load_starter_id(file_id);
|
||||||
load_starter(starter_id);
|
load_starter(starter_id);
|
||||||
|
|
||||||
|
|
@ -11903,7 +11955,7 @@ static int do_open(int want_new_tool)
|
||||||
starter_mirrored = 0;
|
starter_mirrored = 0;
|
||||||
starter_flipped = 0;
|
starter_flipped = 0;
|
||||||
|
|
||||||
autoscale_copy_smear_free(img,canvas);
|
autoscale_copy_smear_free(img,canvas,SDL_BlitSurface);
|
||||||
|
|
||||||
cur_undo = 0;
|
cur_undo = 0;
|
||||||
oldest_undo = 0;
|
oldest_undo = 0;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue