Skip to content

Commit 18cce12

Browse files
committed
[core] Fixed centered background positioning in GUI.
1 parent 48f1cdb commit 18cce12

File tree

1 file changed

+36
-38
lines changed

1 file changed

+36
-38
lines changed

lib/SDL_gui/Drawable.cc

Lines changed: 36 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -365,56 +365,54 @@ void GUI_Drawable::TileImage(GUI_Surface *surface, const SDL_Rect *rp, int x_off
365365
void 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

Comments
 (0)