Interaction du bouton d'objet au clic

This commit is contained in:
Mattéo Delabre 2016-04-20 22:54:28 +02:00
parent 972c246385
commit 192152ecc3
3 changed files with 31 additions and 5 deletions

View File

@ -53,6 +53,11 @@ protected:
* Recalcule la place occupée par le widget
*/
sf::Vector2f CalculateRequisition() override;
/**
* Recalcule la place occupée par le widget
*/
void HandleStateChange(State old_state) override;
};
#endif

View File

@ -48,6 +48,10 @@ ObjectButton {
BackgroundColor: #D2D2D2ff;
}
ObjectButton:PRELIGHT {
BackgroundColor: #E6E6E6ff;
}
Button:PRELIGHT, ComboBox:PRELIGHT, ComboBox:ACTIVE {
Color: #000000ff;
BackgroundColor: #D2D2D2ff;

View File

@ -59,8 +59,8 @@ std::unique_ptr<sfg::RenderQueue> ObjectButton::InvalidateImpl() const {
"Padding", shared_from_this()
);
// si le bouton est sélectionné, on l'entoure
if (IsActive()) {
// si le bouton est actif ou a la souris dessus, on l'entoure
if (GetState() != sfg::Widget::State::NORMAL) {
sf::Vector2f position;
sf::Vector2f size;
@ -69,18 +69,35 @@ std::unique_ptr<sfg::RenderQueue> ObjectButton::InvalidateImpl() const {
size.x = std::min(GetAllocation().width, GetRequisition().x);
size.y = std::min(GetAllocation().height, GetRequisition().y);
// si on est en train de cliquer, on décale le fond
if (GetState() == sfg::Widget::State::ACTIVE) {
position.x += 1;
position.y += 1;
}
queue->Add(sfg::Renderer::Get().CreatePane(
position, size, 1.f,
background_color, border_color, 0
));
}
// demande à l'image de recalculer sa géométrie
GetChild()->SetAllocation(sf::FloatRect(
// positionnement de l'image du bouton selon l'état
sf::FloatRect allocation(
padding, padding, GetAllocation().width - 2 * padding,
GetAllocation().height - 2 * padding
));
);
if (GetState() == sfg::Widget::State::ACTIVE) {
allocation.left += 1;
allocation.top += 1;
}
GetChild()->SetAllocation(allocation);
GetChild()->Invalidate();
return queue;
}
void ObjectButton::HandleStateChange(sfg::Widget::State old_state) {
Invalidate();
}