JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
PixelCanvasGeometry.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 Valentin Eloy
2// SPDX-License-Identifier: GPL-3.0-or-later
3
4#pragma once
5
6#include <optional>
7#include <utility>
8
10
20
21namespace hmi {
22
25inline constexpr int PIXEL_CANVAS_MIN_ZOOM = 1;
26inline constexpr int PIXEL_CANVAS_MAX_ZOOM = 32;
27
30inline constexpr int PIXEL_CANVAS_GRID_VISIBLE_MIN_ZOOM = 4;
31
36 int zoom = 8;
37 int panX = 0;
38 int panY = 0;
44
45 [[nodiscard]] friend bool operator==(const PixelCanvasView&,
46 const PixelCanvasView&) noexcept = default;
47};
48
51 double x = 0.0;
52 double y = 0.0;
53 double width = 0.0;
54 double height = 0.0;
55};
56
64[[nodiscard]] PixelScreenRect imagePixelScreenRect(const PixelCanvasView& view, int x,
65 int y) noexcept;
66
77[[nodiscard]] std::optional<std::pair<int, int>> screenToImagePixel(const PixelCanvasView& view,
78 int imageWidth, int imageHeight,
79 double screenX,
80 double screenY) noexcept;
81
83[[nodiscard]] constexpr int clampPixelCanvasZoom(int zoom) noexcept {
84 if (zoom < PIXEL_CANVAS_MIN_ZOOM) {
86 }
87 if (zoom > PIXEL_CANVAS_MAX_ZOOM) {
89 }
90 return zoom;
91}
92
94[[nodiscard]] constexpr int pixelCanvasZoomIn(int zoom) noexcept {
95 return clampPixelCanvasZoom(zoom + 1);
96}
97
99[[nodiscard]] constexpr int pixelCanvasZoomOut(int zoom) noexcept {
100 return clampPixelCanvasZoom(zoom - 1);
101}
102
105[[nodiscard]] constexpr bool pixelCanvasGridVisible(int zoom) noexcept {
107}
108
111inline constexpr int PIXEL_CANVAS_MAX_DENOMINATOR = 8;
112
114[[nodiscard]] constexpr bool isValidPixelCanvasDenominator(int denominator) noexcept {
115 return denominator == 1 || denominator == 2 || denominator == 4 ||
116 denominator == PIXEL_CANVAS_MAX_DENOMINATOR;
117}
118
127[[nodiscard]] constexpr double pixelCanvasScale(const PixelCanvasView& view) noexcept {
128 if (view.zoom <= 0 || view.zoomDenominator <= 0) {
129 return 0.0;
130 }
131 return static_cast<double>(view.zoom) / static_cast<double>(view.zoomDenominator);
132}
133
142[[nodiscard]] constexpr PixelCanvasView pixelCanvasZoomIn(const PixelCanvasView& view) noexcept {
143 PixelCanvasView next = view;
144 if (next.zoomDenominator > 1) {
145 next.zoomDenominator /= 2;
146 return next;
147 }
148 next.zoom = clampPixelCanvasZoom(next.zoom + 1);
149 return next;
150}
151
157[[nodiscard]] constexpr PixelCanvasView pixelCanvasZoomOut(const PixelCanvasView& view) noexcept {
158 PixelCanvasView next = view;
159 if (next.zoom > PIXEL_CANVAS_MIN_ZOOM) {
160 next.zoom = clampPixelCanvasZoom(next.zoom - 1);
161 return next;
162 }
164 next.zoomDenominator *= 2;
165 }
166 return next;
167}
168
171[[nodiscard]] constexpr bool pixelCanvasGridVisible(const PixelCanvasView& view) noexcept {
172 return view.zoomDenominator == 1 && view.zoom >= PIXEL_CANVAS_GRID_VISIBLE_MIN_ZOOM;
173}
174
178 int width = 0;
179 int height = 0;
180};
181
193[[nodiscard]] PixelCanvasRealSize pixelCanvasRealSize(int imageWidth, int imageHeight, int zoom,
194 double scaleFactor) noexcept;
195
203[[nodiscard]] PixelCanvasRealSize pixelCanvasRealSize(int imageWidth, int imageHeight,
204 const PixelCanvasView& view,
205 double scaleFactor) noexcept;
206
207} // namespace hmi
Dimensionnement des vignettes de l'éditeur à l'échelle d'affichage réelle (LOT-56 TACHE-05,...
Definition AudioEngine.cpp:15
constexpr int clampPixelCanvasZoom(int zoom) noexcept
Zoom borné à [PIXEL_CANVAS_MIN_ZOOM, PIXEL_CANVAS_MAX_ZOOM].
Definition PixelCanvasGeometry.h:83
constexpr int pixelCanvasZoomIn(int zoom) noexcept
Zoom suivant (plus grand), borné — toujours entier.
Definition PixelCanvasGeometry.h:94
constexpr bool isValidPixelCanvasDenominator(int denominator) noexcept
Definition PixelCanvasGeometry.h:114
std::optional< std::pair< int, int > > screenToImagePixel(const PixelCanvasView &view, int imageWidth, int imageHeight, double screenX, double screenY) noexcept
Pixel image sous une position écran donnée.
Definition PixelCanvasGeometry.cpp:23
PixelCanvasRealSize pixelCanvasRealSize(int imageWidth, int imageHeight, int zoom, double scaleFactor) noexcept
Taille en pixels réels du canevas entier à un facteur d'échelle d'affichage donné.
Definition PixelCanvasGeometry.cpp:40
constexpr int pixelCanvasZoomOut(int zoom) noexcept
Zoom précédent (plus petit), borné — toujours entier.
Definition PixelCanvasGeometry.h:99
constexpr int PIXEL_CANVAS_MAX_ZOOM
Definition PixelCanvasGeometry.h:26
constexpr int PIXEL_CANVAS_MAX_DENOMINATOR
Dénominateur de zoom maximal : au-delà, un pixel image occuperait moins d'un huitième de pixel écran,...
Definition PixelCanvasGeometry.h:111
PixelScreenRect imagePixelScreenRect(const PixelCanvasView &view, int x, int y) noexcept
Rectangle écran du pixel image (x, y), au zoom et décalage de vue donnés.
Definition PixelCanvasGeometry.cpp:10
constexpr int PIXEL_CANVAS_MIN_ZOOM
Zoom minimal (1 pixel image = 1 pixel écran) et maximal admis par les commandes de zoom du canevas — ...
Definition PixelCanvasGeometry.h:25
constexpr double pixelCanvasScale(const PixelCanvasView &view) noexcept
Échelle effective d'une vue : numérateur / dénominateur.
Definition PixelCanvasGeometry.h:127
constexpr bool pixelCanvasGridVisible(int zoom) noexcept
true si la grille de pixels doit être dessinée à ce zoom (PIXEL_CANVAS_GRID_VISIBLE_MIN_ZOOM).
Definition PixelCanvasGeometry.h:105
constexpr int PIXEL_CANVAS_GRID_VISIBLE_MIN_ZOOM
Facteur de zoom à partir duquel la grille de pixels est dessinée : en-deçà, elle ne ferait que du bru...
Definition PixelCanvasGeometry.h:30
Taille en pixels réels de l'image entière affichée (largeur/hauteur image × zoom, à l'échelle d'affic...
Definition PixelCanvasGeometry.h:177
int height
Definition PixelCanvasGeometry.h:179
int width
Definition PixelCanvasGeometry.h:178
État de la vue du canevas : zoom entier et décalage de défilement, en pixels image.
Definition PixelCanvasGeometry.h:33
friend bool operator==(const PixelCanvasView &, const PixelCanvasView &) noexcept=default
int panX
Colonne de l'image affichée au coin haut-gauche du viewport.
Definition PixelCanvasGeometry.h:37
int panY
Ligne de l'image affichée au coin haut-gauche du viewport.
Definition PixelCanvasGeometry.h:38
int zoomDenominator
Dénominateur du zoom (LOT-69 TACHE-07) : 1, 2, 4 ou 8.
Definition PixelCanvasGeometry.h:43
int zoom
Numérateur du zoom.
Definition PixelCanvasGeometry.h:36
Rectangle écran (pixels logiques, relatifs au coin haut-gauche du widget) d'un pixel image.
Definition PixelCanvasGeometry.h:50
double x
Definition PixelCanvasGeometry.h:51
double width
Definition PixelCanvasGeometry.h:53
double y
Definition PixelCanvasGeometry.h:52
double height
Definition PixelCanvasGeometry.h:54