1
// This file is part of hnefatafl-copenhagen.
2
//
3
// hnefatafl-copenhagen is free software: you can redistribute it and/or modify
4
// it under the terms of the GNU Affero General Public License as published by
5
// the Free Software Foundation, either version 3 of the License, or
6
// (at your option) any later version.
7
//
8
// hnefatafl-copenhagen is distributed in the hope that it will be useful,
9
// but WITHOUT ANY WARRANTY; without even the implied warranty of
10
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
// GNU Affero General Public License for more details.
12
//
13
// You should have received a copy of the GNU Affero General Public License
14
// along with this program.  If not, see <https://www.gnu.org/licenses/>.
15
//
16
// SPDX-License-Identifier: AGPL-3.0-or-later
17
// SPDX-FileCopyrightText: 2025 David Campbell <david@hnefatafl.org>
18

            
19
use hnefatafl_copenhagen::board::BoardSize;
20

            
21
use crate::enums::Size;
22

            
23
#[derive(Clone, Debug)]
24
pub(crate) struct Dimensions {
25
    pub board_dimension: u32,
26
    pub letter_size: u32,
27
    pub piece_size: u32,
28
    pub spacing: u32,
29
}
30

            
31
impl Dimensions {
32
    pub(crate) fn new(board_size: BoardSize, screen_size: &Size) -> Self {
33
        let (board_dimension, letter_size, piece_size, spacing) = match board_size {
34
            BoardSize::_11 => match screen_size {
35
                Size::Large | Size::Giant => (75, 55, 60, 6),
36
                Size::Medium => (65, 45, 50, 8),
37
                Size::Small => (55, 35, 40, 11),
38
                Size::Tiny | Size::TinyWide => (40, 20, 25, 16),
39
            },
40
            BoardSize::_13 => match screen_size {
41
                Size::Large | Size::Giant => (65, 45, 50, 8),
42
                Size::Medium => (58, 38, 43, 10),
43
                Size::Small => (50, 30, 35, 12),
44
                Size::Tiny | Size::TinyWide => (40, 20, 25, 15),
45
            },
46
        };
47

            
48
        Dimensions {
49
            board_dimension,
50
            letter_size,
51
            piece_size,
52
            spacing,
53
        }
54
    }
55
}