ps1: fit whole cover in ICON0 frame, show full PIC0 title

- ICON0: scale the cover to fit the case slot (no cropping), centred with
  the frame's dark background behind the letterbox bars.
- PIC0: shrink the title font until the full name fits instead of cutting
  it with an ellipsis (falls back to eliding only below 10px).
This commit is contained in:
2026-09-07 19:33:21 -04:00
parent 43263aa644
commit 78b57af79e
+15 -6
View File
@@ -885,7 +885,9 @@ def make_ps1_assets(cover_bytes, title="", description="", esrb=None):
tmpl = tmpl.convertToFormat(QImage.Format_ARGB32)
slot = _slot_rect(tmpl) or (0, 0, 80, 80)
sx, sy, sw, sh = slot
cover = art.scaled(sw, sh, Qt.KeepAspectRatioByExpanding, Qt.SmoothTransformation)
# Fit the whole cover inside the slot (no cropping), centred with the
# frame's dark background showing through the letterbox bars.
cover = art.scaled(sw, sh, Qt.KeepAspectRatio, Qt.SmoothTransformation)
p.drawImage(sx + (sw - cover.width()) // 2, sy + (sh - cover.height()) // 2, cover)
p.drawImage(0, 0, tmpl)
else:
@@ -952,16 +954,23 @@ def _make_pic0(title, description, esrb, QImage, QPainter, QPainterPath, QColor,
_draw_ps_glyphs(p, W - 34, 12, 22, QColor(200, 200, 205), QRectF, QPointF,
QPolygonF, QPen, Qt)
# Title (bold, upper-left), elided so long titles end with an ellipsis
# instead of clipping mid-character.
# Title (bold, upper-left). Shrink the font until the whole title fits, so
# long names are shown in full instead of being cut with an ellipsis.
f_title = QFont("DejaVu Sans")
f_title.setPixelSize(19)
f_title.setBold(True)
p.setFont(f_title)
p.setPen(QColor(255, 255, 255))
title_width = W - 70
fm_title = QFontMetrics(f_title)
title_text = fm_title.elidedText(title or "", Qt.ElideRight, title_width)
full = (title or "").strip()
size = 19
while size > 10 and fm_title.horizontalAdvance(full) > title_width:
size -= 1
f_title.setPixelSize(size)
fm_title = QFontMetrics(f_title)
title_text = full
if fm_title.horizontalAdvance(full) > title_width:
title_text = fm_title.elidedText(full, Qt.ElideRight, title_width)
p.setFont(f_title)
p.drawText(QRectF(18, 16, title_width, 28), Qt.AlignLeft | Qt.AlignVCenter,
title_text)