@@ -365,56 +365,54 @@ void GUI_Drawable::TileImage(GUI_Surface *surface, const SDL_Rect *rp, int x_off
365365void GUI_Drawable::CenterImage (GUI_Surface *surface, const SDL_Rect *rp, int x_offset, int y_offset)
366366{
367367 SDL_Rect sr, dr;
368- int bw, bh;// , cx, cy;
369368
370- if (surface == NULL ) return ;
369+ if (surface == NULL || rp == NULL ) return ;
371370
372- // ds_printf("%s: %d %d %d %d\n", __func__, rp->x, rp->y, rp->w, rp->h);
371+ int bw = surface->GetWidth ();
372+ int bh = surface->GetHeight ();
373373
374- bw = surface->GetWidth ();
375- bh = surface->GetHeight ();
374+ dr.x = rp->x + (rp->w - bw) / 2 + x_offset;
375+ dr.y = rp->y + (rp->h - bh) / 2 + y_offset;
376+ dr.w = bw;
377+ dr.h = bh;
376378
377379 sr.x = 0 ;
378380 sr.y = 0 ;
379381 sr.w = bw;
380382 sr.h = bh;
381383
382- dr.x = (area.w / 2 ) - (bw / 2 ) + x_offset;
383- dr.y = (area.h / 2 ) - (bh / 2 ) + y_offset;
384- dr.w = bw;
385- dr.h = bh;
386-
387- Draw (surface, &sr, &dr);
388-
389- // dr.x = rp->x;
390- // sr.x = (dr.x + x_offset) % bw;
391- // sr.w = dr.w = bw - sr.x;
392- //
393- // if (dr.x + dr.w > rp->x + rp->w)
394- // sr.w = dr.w = rp->x + rp->w - dr.x;
395- //
396- // dr.y = rp->y;
397- // sr.y = (dr.y + y_offset) % bh;
398- // sr.h = dr.h = bh - sr.y;
399- //
400- // if (dr.y + dr.h > rp->y + rp->h)
401- // sr.h = dr.h = rp->y + rp->h - dr.y;
402- //
403- // cx = (area.w / 2) - (bw / 2) + x_offset;
404- // cy = (area.h / 2) - (bh / 2) + y_offset;
384+ if (dr.x < rp->x )
385+ {
386+ sr.x = rp->x - dr.x ;
387+ sr.w -= sr.x ;
388+ dr.w -= sr.x ;
389+ dr.x = rp->x ;
390+ }
405391
406- // sr.x += cx;
407- // sr.y += cy;
408- // dr.x += cx;
409- // dr.y += cy;
392+ if (dr.y < rp->y )
393+ {
394+ sr.y = rp->y - dr.y ;
395+ sr.h -= sr.y ;
396+ dr.h -= sr.y ;
397+ dr.y = rp->y ;
398+ }
410399
400+ if (dr.x + dr.w > rp->x + rp->w )
401+ {
402+ sr.w -= (dr.x + dr.w ) - (rp->x + rp->w );
403+ dr.w = rp->x + rp->w - dr.x ;
404+ }
411405
412- // if(sr.x < cx + bw && sr.x >= cx + bw) {
413- // if(sr.y < cy + bh && sr.y >= cy + bh) {
414- // ds_printf("%s: %d %d %d %d -> %d %d %d %d\n", __func__, sr.x, sr.y, sr.w, sr.h, dr.x, dr.y, dr.w, dr.h);
415- // Draw(surface, &sr, &dr);
416- // }
417- // }
406+ if (dr.y + dr.h > rp->y + rp->h )
407+ {
408+ sr.h -= (dr.y + dr.h ) - (rp->y + rp->h );
409+ dr.h = rp->y + rp->h - dr.y ;
410+ }
411+
412+ if (sr.w > 0 && sr.h > 0 )
413+ {
414+ Draw (surface, &sr, &dr);
415+ }
418416}
419417
420418
0 commit comments