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 * 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

View File

@ -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;

View File

@ -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();
}