-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathButtonStyleComponent.cpp
More file actions
87 lines (78 loc) · 2.43 KB
/
ButtonStyleComponent.cpp
File metadata and controls
87 lines (78 loc) · 2.43 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
#include "ButtonStyleComponent.h"
#include "ButtonComponent.h"
#include "SpriteComponent.h"
#include "DekiObject.h"
#include "DekiLogSystem.h"
ButtonStyleComponent::ButtonStyleComponent()
: transition(ButtonStyleMode::ColorTint),
normal_color(deki::Color::White),
hovered_color(200, 200, 200),
pressed_color(160, 160, 160),
disabled_color(128, 128, 128, 128)
{
}
void ButtonStyleComponent::Start()
{
SpriteComponent* spr = sprite.Get();
if (!spr)
{
DEKI_LOG_WARNING("ButtonStyleComponent: No SpriteComponent referenced on '%s'",
GetOwner()->GetName().c_str());
return;
}
ButtonComponent* btn = button.Get();
if (!btn)
{
DEKI_LOG_WARNING("ButtonStyleComponent: No ButtonComponent referenced on '%s'",
GetOwner()->GetName().c_str());
return;
}
// Register for state changes
btn->AddOnStateChangedCallback([this](ButtonState newState) {
ApplyState(newState);
});
// Apply initial state
ApplyState(btn->GetState());
}
void ButtonStyleComponent::ApplyState(ButtonState state)
{
SpriteComponent* spr = sprite.Get();
if (!spr)
return;
switch (transition)
{
case ButtonStyleMode::ColorTint:
{
switch (state)
{
case ButtonState::Normal: spr->SetTint(normal_color); break;
case ButtonState::Hovered: spr->SetTint(hovered_color); break;
case ButtonState::Pressed: spr->SetTint(pressed_color); break;
case ButtonState::Disabled: spr->SetTint(disabled_color); break;
}
break;
}
case ButtonStyleMode::SpriteSwap:
{
Deki::AssetRef<Sprite>* target = nullptr;
switch (state)
{
case ButtonState::Normal: target = &normal_sprite; break;
case ButtonState::Hovered: target = &hovered_sprite; break;
case ButtonState::Pressed: target = &pressed_sprite; break;
case ButtonState::Disabled: target = &disabled_sprite; break;
}
// Fall back to normal_sprite if the state's sprite has no GUID
if (target && !target->HasGuid())
target = &normal_sprite;
if (target)
{
spr->sprite.guid = target->guid;
spr->sprite.source = target->source;
spr->sprite.ptr = target->ptr;
spr->sprite.loadAttempted = target->loadAttempted;
}
break;
}
}
}