Interaction du bouton d'objet au clic
This commit is contained in:
parent
972c246385
commit
192152ecc3
|
@ -53,6 +53,11 @@ protected:
|
||||||
* Recalcule la place occupée par le widget
|
* Recalcule la place occupée par le widget
|
||||||
*/
|
*/
|
||||||
sf::Vector2f CalculateRequisition() override;
|
sf::Vector2f CalculateRequisition() override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recalcule la place occupée par le widget
|
||||||
|
*/
|
||||||
|
void HandleStateChange(State old_state) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -48,6 +48,10 @@ ObjectButton {
|
||||||
BackgroundColor: #D2D2D2ff;
|
BackgroundColor: #D2D2D2ff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ObjectButton:PRELIGHT {
|
||||||
|
BackgroundColor: #E6E6E6ff;
|
||||||
|
}
|
||||||
|
|
||||||
Button:PRELIGHT, ComboBox:PRELIGHT, ComboBox:ACTIVE {
|
Button:PRELIGHT, ComboBox:PRELIGHT, ComboBox:ACTIVE {
|
||||||
Color: #000000ff;
|
Color: #000000ff;
|
||||||
BackgroundColor: #D2D2D2ff;
|
BackgroundColor: #D2D2D2ff;
|
||||||
|
|
|
@ -59,8 +59,8 @@ std::unique_ptr<sfg::RenderQueue> ObjectButton::InvalidateImpl() const {
|
||||||
"Padding", shared_from_this()
|
"Padding", shared_from_this()
|
||||||
);
|
);
|
||||||
|
|
||||||
// si le bouton est sélectionné, on l'entoure
|
// si le bouton est actif ou a la souris dessus, on l'entoure
|
||||||
if (IsActive()) {
|
if (GetState() != sfg::Widget::State::NORMAL) {
|
||||||
sf::Vector2f position;
|
sf::Vector2f position;
|
||||||
sf::Vector2f size;
|
sf::Vector2f size;
|
||||||
|
|
||||||
|
@ -69,18 +69,35 @@ std::unique_ptr<sfg::RenderQueue> ObjectButton::InvalidateImpl() const {
|
||||||
size.x = std::min(GetAllocation().width, GetRequisition().x);
|
size.x = std::min(GetAllocation().width, GetRequisition().x);
|
||||||
size.y = std::min(GetAllocation().height, GetRequisition().y);
|
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(
|
queue->Add(sfg::Renderer::Get().CreatePane(
|
||||||
position, size, 1.f,
|
position, size, 1.f,
|
||||||
background_color, border_color, 0
|
background_color, border_color, 0
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
// demande à l'image de recalculer sa géométrie
|
// positionnement de l'image du bouton selon l'état
|
||||||
GetChild()->SetAllocation(sf::FloatRect(
|
sf::FloatRect allocation(
|
||||||
padding, padding, GetAllocation().width - 2 * padding,
|
padding, padding, GetAllocation().width - 2 * padding,
|
||||||
GetAllocation().height - 2 * padding
|
GetAllocation().height - 2 * padding
|
||||||
));
|
);
|
||||||
|
|
||||||
|
if (GetState() == sfg::Widget::State::ACTIVE) {
|
||||||
|
allocation.left += 1;
|
||||||
|
allocation.top += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
GetChild()->SetAllocation(allocation);
|
||||||
GetChild()->Invalidate();
|
GetChild()->Invalidate();
|
||||||
|
|
||||||
return queue;
|
return queue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ObjectButton::HandleStateChange(sfg::Widget::State old_state) {
|
||||||
|
Invalidate();
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue