Files
uno-game/ui/MainWindow.slint
Kieran Kihn 150e29c25c feat(ui): add dynamic scaling support
- Introduced `scale` property across components for responsive design.
- Adjusted dimensions and positions dynamically based on scale.
- Enhanced flexibility for varying display resolutions.
2025-12-18 11:42:29 +08:00

89 lines
2.7 KiB
Plaintext

import { ConnectPage } from "ConnectPage.slint";
import { StartPage } from "StartPage.slint";
import {
GamePage,
OtherPlayer,
HandCard,
CardColor,
GameDirection,
} from "GamePage.slint";
enum PageType {
ConnectPage,
StartPage,
GamePage
}
export component MainWindow inherits Window {
in property <PageType> active-page: PageType.ConnectPage;
// ConnectPage
in property <bool> is-connecting;
// StartPage
in property <bool> is-ready;
in property <bool> is-restart;
// GamePage
in property <[OtherPlayer]> other-players;
in property <string> current-player-name;
in property <int> current-player-card-count;
in property <bool> current-player-has-uno;
in property <bool> is-current-player-turn;
in property <[HandCard]> hand-cards;
in property <image> discard-top-card;
in property <GameDirection> game-direction;
in property <CardColor> current-color;
callback request-connect(string, string, string);
callback request-start;
callback request-play-card(int, CardColor);
callback request-draw-card;
callback request-uno;
preferred-width: 1920px;
preferred-height: 1080px;
min-width: 960px;
min-height: 600px;
title: "UNO!";
property <float> scale: min(self.width / 1920px, self.height / 1080px);
if root.active-page == PageType.ConnectPage: connect-page := ConnectPage {
scale: root.scale;
is-connecting: root.is-connecting;
request-connect(server-address, server-port, player-name) => {
root.request-connect(server-address, server-port, player-name);
}
}
if root.active-page == PageType.StartPage: start-page := StartPage {
scale: root.scale;
is-ready: root.is-ready;
is-restart: root.is-restart;
request-start => {
root.request-start();
}
}
if root.active-page == PageType.GamePage: game-page := GamePage {
scale: root.scale;
other-players: root.other-players;
current-player-name: root.current-player-name;
current-player-card-count: root.current-player-card-count;
current-player-has-uno: root.current-player-has-uno;
is-current-player-turn: root.is-current-player-turn;
hand-cards: root.hand-cards;
discard-top-card: root.discard-top-card;
game-direction: root.game-direction;
current-color: root.current-color;
request-play-card(index, card-color) => {
root.request-play-card(index, card-color);
}
request-draw-card => {
root.request-draw-card();
}
request-uno => {
root.request-uno();
}
}
}