fix icon mapping in campaign ranking

This commit is contained in:
Maxime Réaux 2026-02-23 19:28:13 +01:00
parent 0bfe27e0d3
commit d766befd31
5 changed files with 113 additions and 58 deletions

View file

@ -50,13 +50,25 @@ class IconName(str, Enum):
NP3RD = "np3rd"
TIEBREAK_TOKEN = auto()
VP1STDRAW = auto()
VP1STTIEBREAK = auto()
VP1STBREAK = auto()
VP1STTIEDRAW = auto()
VP2NDDRAW = auto()
VP2NDTIEBREAK = auto()
VP2NDBREAK = auto()
VP2NDTIEDRAW = auto()
VP3RDDRAW = auto()
VP3RDTIEBREAK = auto()
VP3RDBREAK = auto()
VP3RDTIEDRAW = auto()
VPNTHDRAW = auto()
VPNTHTIEBREAK = auto()
VPNTHBREAK = auto()
VPNTHTIEDRAW = auto()
RANK_TO_ICON = {
1: IconName.VP1ST,
2: IconName.VP2ND,
3: IconName.VP3RD,
4: IconName.VPNTH,
}
class Icons:
@ -119,41 +131,65 @@ class Icons:
cls.get_pixmap(IconName.VP1ST),
cls.get_pixmap(IconName.DRAW),
)
elif name == IconName.VP1STTIEBREAK:
elif name == IconName.VP1STBREAK:
pix = cls._compose(
cls.get_pixmap(IconName.VP1ST),
cls.get_pixmap(IconName.TOKEN),
)
elif name == IconName.VP1STTIEDRAW:
pix = cls._compose(
cls.get_pixmap(IconName.VP1ST),
cls.get_pixmap(IconName.DRAW),
cls.get_pixmap(IconName.TOKEN),
)
elif name == IconName.VP2NDDRAW:
pix = cls._compose(
cls.get_pixmap(IconName.VP2ND),
cls.get_pixmap(IconName.DRAW),
)
elif name == IconName.VP2NDTIEBREAK:
elif name == IconName.VP2NDBREAK:
pix = cls._compose(
cls.get_pixmap(IconName.VP2ND),
cls.get_pixmap(IconName.TOKEN),
)
elif name == IconName.VP2NDTIEDRAW:
pix = cls._compose(
cls.get_pixmap(IconName.VP2ND),
cls.get_pixmap(IconName.DRAW),
cls.get_pixmap(IconName.TOKEN),
)
elif name == IconName.VP3RDDRAW:
pix = cls._compose(
cls.get_pixmap(IconName.VP3RD),
cls.get_pixmap(IconName.DRAW),
)
elif name == IconName.VP3RDTIEBREAK:
elif name == IconName.VP3RDBREAK:
pix = cls._compose(
cls.get_pixmap(IconName.VP3RD),
cls.get_pixmap(IconName.TOKEN),
)
elif name == IconName.VP3RDTIEDRAW:
pix = cls._compose(
cls.get_pixmap(IconName.VP3RD),
cls.get_pixmap(IconName.DRAW),
cls.get_pixmap(IconName.TOKEN),
)
elif name == IconName.VPNTHDRAW:
pix = cls._compose(
cls.get_pixmap(IconName.VPNTH),
cls.get_pixmap(IconName.DRAW),
)
elif name == IconName.VPNTHTIEBREAK:
elif name == IconName.VPNTHBREAK:
pix = cls._compose(
cls.get_pixmap(IconName.VPNTH),
cls.get_pixmap(IconName.TOKEN),
)
elif name == IconName.VPNTHTIEDRAW:
pix = cls._compose(
cls.get_pixmap(IconName.VPNTH),
cls.get_pixmap(IconName.DRAW),
cls.get_pixmap(IconName.TOKEN),
)
else:
path = RESOURCES_DIR / cls._paths[name]
pix = QPixmap(path.as_posix())
@ -161,14 +197,20 @@ class Icons:
return pix
@staticmethod
def _compose(left: QPixmap, right: QPixmap) -> QPixmap:
w = left.width() + right.width()
h = max(left.height(), right.height())
def _compose(*pixmaps: QPixmap) -> QPixmap:
if not pixmaps:
return QPixmap()
if len(pixmaps) == 1:
return pixmaps[0]
w = sum(p.width() for p in pixmaps)
h = max(p.height() for p in pixmaps)
result = QPixmap(w, h)
result.fill(Qt.GlobalColor.transparent)
painter = QPainter(result)
painter.drawPixmap(0, (h - left.height()) // 2, left)
painter.drawPixmap(left.width(), (h - right.height()) // 2, right)
x = 0
for p in pixmaps:
painter.drawPixmap(x, (h - p.height()) // 2, p)
x += p.width()
painter.end()
return result