-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathButtonSwitch.cpp
67 lines (59 loc) · 1.6 KB
/
ButtonSwitch.cpp
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
#include "ButtonSwitch.h"
#include "Espace.h"
#include "Actions/Nothing.h"
ButtonSwitch::ButtonSwitch(std::string texte, sf::Vector2f pos, sf::RenderWindow *parent) :
AbstractButton(texte, pos, parent),
on_(new Default_Action::Nothing()),
off_(new Default_Action::Nothing()),
pressed_(false),
active_(false),
colorActive_(sf::Color(250, 50, 100)),
colorPressed_(sf::Color(250, 100, 100)),
colorPressedActive_(sf::Color(250, 0, 100))
{}
void ButtonSwitch::setActionOn(Action* on)
{
on_ = on;
}
void ButtonSwitch::setActionOff(Action* off)
{
off_ = off;
}
void ButtonSwitch::update()
{
//Si la souris sort du bouton, sans avoir relâché le clic
if(pressed_ && sf::Mouse::isButtonPressed(sf::Mouse::Left) && !Espace::estDans(sf::Mouse::getPosition(*parent_), zone_))
{
pressed_ = false;
if(active_)
zone_.setOutlineColor(colorActive_);
else
zone_.setOutlineColor(colorDefaut_);
}
//Si on relâche le clic dans le bouton
else if(pressed_ && !sf::Mouse::isButtonPressed(sf::Mouse::Left)) //estDans
{
pressed_ = false;
if(active_)
{
active_ = false;
(*off_)();
zone_.setOutlineColor(colorDefaut_);
}
else
{
active_ = true;
(*on_)();
zone_.setOutlineColor(colorActive_);
}
}
//Si on presse le clic dans le bouton
else if(!pressed_ && sf::Mouse::isButtonPressed(sf::Mouse::Left) && Espace::estDans(sf::Mouse::getPosition(*parent_), zone_))
{
pressed_ = true;
if(active_)
zone_.setOutlineColor(colorPressedActive_);
else
zone_.setOutlineColor(colorPressed_);
}
}