-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgraphicscase.cpp
More file actions
121 lines (103 loc) · 3.62 KB
/
graphicscase.cpp
File metadata and controls
121 lines (103 loc) · 3.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include "graphicscase.h"
#include <QFont>
#include <QGraphicsTextItem>
#include <QGraphicsPolygonItem>
#include <QVector>
#include <QPen>
#include "case.h"
/**
* @brief Constructeur de la classe GraphicsCase.
*
* Initialise un objet graphique représentant une case hexagonale et configure
* ses propriétés graphiques, telles que sa forme, son texte, et sa surbrillance.
*
* @param case_ Pointeur vers l'objet logique de type Case associé à cet objet graphique.
* @param parent Pointeur vers l'élément graphique parent (par défaut nullptr).
*/
GraphicsCase::GraphicsCase(Case* case_, QGraphicsItem* parent)
: QGraphicsPolygonItem(parent), case_logique(case_)
{
// Définit les points de l'hexagone
QVector<QPoint> points;
points << QPoint(0, 4) * SCALE << QPoint(4, 2) * SCALE << QPoint(4, -2) * SCALE
<< QPoint(0, -4) * SCALE << QPoint(-4, -2) * SCALE << QPoint(-4, 2) * SCALE;
setPolygon(QPolygonF(points));
setPolygon(polygon().translated(case_->get_position().x() * 4 * SCALE, case_->get_position().y() * 6 * SCALE));
// Création et configuration de l'élément texte
textItem = new QGraphicsTextItem("", this);
textItem->setDefaultTextColor(Qt::white); // Couleur du texte
textItem->setFont(QFont("Arial", 30)); // Police et taille du texte
// Positionne le texte au centre de l'hexagone
QRectF bounds = boundingRect();
textItem->setPos(bounds.center() - textItem->boundingRect().center());
setAcceptHoverEvents(true); // Active les événements de survol
pen.setWidth(3); // Largeur du contour de la case
reset_surbrillance();
}
/**
* @brief Ajoute une surbrillance à la case avec une couleur donnée.
*
* @param color La couleur utilisée pour la surbrillance.
*/
void GraphicsCase::surbrillance(QColor color)
{
pen.setColor(color);
setPen(pen);
setZValue(0.5); // Change la profondeur pour afficher la surbrillance
}
/**
* @brief Réinitialise la surbrillance de la case à sa couleur par défaut.
*/
void GraphicsCase::reset_surbrillance()
{
pen.setColor(default_color);
setPen(pen);
setZValue(0); // Réinitialise la profondeur de l'objet
}
/**
* @brief Gère l'événement de survol lorsque la souris entre dans la case.
*
* Cette méthode modifie la couleur de remplissage pour indiquer que la case
* est survolée par la souris.
*
* @param event Pointeur vers l'événement de survol.
*/
void GraphicsCase::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
{
wants_hovering = true;
setBrush(QBrush(Qt::blue, Qt::Dense4Pattern)); // Applique un motif de surbrillance
QGraphicsPolygonItem::hoverEnterEvent(event);
hovered = true;
wants_hovering = false;
}
/**
* @brief Gère l'événement de survol lorsque la souris quitte la case.
*
* Cette méthode réinitialise la couleur de remplissage lorsque la souris
* n'est plus au-dessus de la case.
*
* @param event Pointeur vers l'événement de survol.
*/
void GraphicsCase::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
{
hovered = false;
setBrush(QBrush(remplissage)); // Réinitialise le remplissage par défaut
QGraphicsPolygonItem::hoverLeaveEvent(event);
}
/**
* @brief Définit la couleur de remplissage de la case.
*
* Cette méthode gère également la persistance de la couleur de remplissage
* en fonction de l'état de survol.
*
* @param brush Le pinceau utilisé pour remplir la case.
*/
void GraphicsCase::setBrush(const QBrush &brush)
{
if (wants_hovering)
remplissage = QGraphicsPolygonItem::brush();
if (!hovered)
QGraphicsPolygonItem::setBrush(brush);
else
remplissage = brush;
}