diff --git a/app/covers.py b/app/covers.py index 2ab8248..7f2b00d 100644 --- a/app/covers.py +++ b/app/covers.py @@ -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)