Skip to content

Improve lobby sleeve icon downscaling#10952

Open
MostCromulent wants to merge 3 commits into
Card-Forge:masterfrom
MostCromulent:lobby-sleeve-quality
Open

Improve lobby sleeve icon downscaling#10952
MostCromulent wants to merge 3 commits into
Card-Forge:masterfrom
MostCromulent:lobby-sleeve-quality

Conversation

@MostCromulent

Copy link
Copy Markdown
Contributor

Minor polish for #10929

The lobby panel drew the full 360x500 sleeve source straight into a 58x80 label, a ~6x single-pass reduction that looked aliased and rough. Instead, scale via area-averaging resize() at 2x the label size. This looks much smoother at small icon size and avoids aliasing.

The scaled image is cached so the downscale runs once rather than on every repaint.


🤖 Generated with Claude Code

The lobby panel drew the full 360x500 sleeve source straight into a
58x80 label, a ~6x single-pass reduction that looked aliased and rough.
Route the three icon-set sites through a helper that pre-scales once via
the cached area-averaging resize() at 2x the label size, leaving HiDPI
headroom. The scaled image is cached per sleeve, so the heavy downscale
runs once rather than on every repaint.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@tool4ever tool4ever left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems wrong since FLabel already has some own logic for it:
maybe the current iconScaleFactor would be a better approach?

MostCromulent and others added 2 commits June 12, 2026 07:49
FLabel's background-icon paint path is the correct place for this fix — it's
where the scaling happens — but it was never adapted for large icons: it
draws the full-resolution source straight to the label in a single bicubic
pass, which aliases when the source is far larger than the draw size (e.g. a
360x500 card-back sleeve in a ~58x80 lobby label). The previous fix sidestepped
that at the call site by pre-scaling the sleeve before handing it to the label;
drop that bespoke workaround and fix the path itself.

When a background icon's source exceeds 3x its draw size, pre-scale it once
with area-averaging (cached, grow-only so resizing can't re-trigger it) and
let the existing bicubic finish. The sleeves are currently the only icons this
affects — every other background icon has a source at or near its draw size
and stays on the original path unchanged.

iconScaleFactor is not an alternative: it only changes the size the icon is
drawn at, not the interpolation, so it can't address aliasing. The background
path draws at device resolution, so the fix belongs there.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…by-sleeve-quality

# Conflicts:
#	forge-gui-desktop/src/main/java/forge/toolbox/FLabel.java
@MostCromulent

MostCromulent commented Jun 11, 2026

Copy link
Copy Markdown
Contributor Author

Tested a few different approaches using FLabel; it seems none of the existing paths are adapted for a downscale of this size and all resulted in same aliasing problem.

I thought most elegant solution was to just incorporate logic into the FLabel background icon painter so that where you have a very large downscale it applies the area-averaging. AI audited the call sites and currently the sleeves are the only case that hits this threshold. This should fix issue for any future cases though.

@MostCromulent MostCromulent requested a review from tool4ever June 11, 2026 22:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants