]> git.tdb.fi Git - poefilter.git/blob - source/appearance.cpp
Add support for the new visual indicators
[poefilter.git] / source / appearance.cpp
1 #include <msp/strings/format.h>
2 #include "appearance.h"
3 #include "filter.h"
4 #include "theme.h"
5
6 using namespace std;
7 using namespace Msp;
8
9 Appearance::Appearance():
10         font_size(0),
11         sound_type(0),
12         sound_volume(100),
13         show_icon(false),
14         icon_shape(CIRCLE),
15         icon_color(WHITE),
16         icon_size(1),
17         show_beam(false),
18         beam_color(WHITE)
19 { }
20
21 void Appearance::merge_from(const Appearance &other)
22 {
23         if(other.font_size)
24                 font_size = other.font_size;
25         if(other.border_color.defined)
26                 border_color = other.border_color;
27         if(other.background_color.defined)
28                 background_color = other.background_color;
29         if(other.text_color.defined)
30                 text_color = other.text_color;
31         if(other.sound_type)
32         {
33                 sound_type = other.sound_type;
34                 sound_volume = other.sound_volume;
35         }
36 }
37
38 void Appearance::add_lines(FilterStatement &st) const
39 {
40         if(font_size)
41                 st.add_line(format("SetFontSize %d", font_size));
42
43         if(background_color.defined)
44                 st.add_line(format("SetBackgroundColor %d %d %d %d", background_color.r, background_color.g, background_color.b, background_color.a));
45
46         if(border_color.defined)
47                 st.add_line(format("SetBorderColor %d %d %d %d", border_color.r, border_color.g, border_color.b, border_color.a));
48
49         if(text_color.defined)
50                 st.add_line(format("SetTextColor %d %d %d %d", text_color.r, text_color.g, text_color.b, text_color.a));
51
52         if(show_icon)
53                 st.add_line(format("MinimapIcon %d %s %s", icon_size, icon_color, icon_shape));
54
55         if(sound_type)
56                 st.add_line(format("PlayAlertSound %d %d", sound_type, sound_volume));
57
58         if(show_beam)
59                 st.add_line(format("PlayEffect %s", beam_color));
60 }
61
62
63 Appearance::Loader::Loader(Appearance &a, const Theme *t):
64         DataFile::ObjectLoader<Appearance>(a),
65         theme(t)
66 {
67         add("alert_sound", &Appearance::sound_type, &Appearance::sound_volume);
68         add("background_color", &Loader::background_color);
69         add("background_color", &Loader::background_color_alpha);
70         add("background_color", &Loader::background_color_named);
71         add("border_color", &Loader::border_color);
72         add("border_color", &Loader::border_color_alpha);
73         add("border_color", &Loader::border_color_named);
74         add("font_size", &Loader::font_size);
75         add("inherit", &Loader::inherit);
76         add("light_beam", &Loader::light_beam);
77         add("minimap_icon", &Loader::minimap_icon);
78         add("minimap_icon", &Loader::minimap_icon_size);
79         add("text_color", &Loader::text_color);
80         add("text_color", &Loader::text_color_alpha);
81         add("text_color", &Loader::text_color_named);
82 }
83
84 void Appearance::Loader::background_color(unsigned r, unsigned g, unsigned b)
85 {
86         obj.background_color = Color(r, g, b);
87 }
88
89 void Appearance::Loader::background_color_alpha(unsigned r, unsigned g, unsigned b, unsigned a)
90 {
91         obj.background_color = Color(r, g, b, a);
92 }
93
94 void Appearance::Loader::background_color_named(const string &name)
95 {
96         if(!theme)
97                 throw logic_error("No theme");
98         obj.background_color = theme->get_color(name);
99 }
100
101 void Appearance::Loader::border_color(unsigned r, unsigned g, unsigned b)
102 {
103         obj.border_color = Color(r, g, b);
104 }
105
106 void Appearance::Loader::border_color_alpha(unsigned r, unsigned g, unsigned b, unsigned a)
107 {
108         obj.border_color = Color(r, g, b, a);
109 }
110
111 void Appearance::Loader::border_color_named(const string &name)
112 {
113         if(!theme)
114                 throw logic_error("No theme");
115         obj.border_color = theme->get_color(name);
116 }
117
118 void Appearance::Loader::font_size(float s)
119 {
120         float base_size = (theme ? theme->get_base_font_size() : 32);
121         obj.font_size = base_size*s+0.5f;
122 }
123
124 void Appearance::Loader::inherit(const string &name)
125 {
126         if(!theme)
127                 throw logic_error("No theme");
128         obj = theme->get_appearance(name);
129 }
130
131 void Appearance::Loader::light_beam(EffectColor color)
132 {
133         obj.show_beam = true;
134         obj.beam_color = color;
135 }
136
137 void Appearance::Loader::minimap_icon(EffectColor color, IconShape shape)
138 {
139         minimap_icon_size(color, shape, 1);
140 }
141
142 void Appearance::Loader::minimap_icon_size(EffectColor color, IconShape shape, unsigned size)
143 {
144         obj.show_icon = true;
145         obj.icon_shape = shape;
146         obj.icon_color = color;
147         obj.icon_size = size;
148 }
149
150 void Appearance::Loader::text_color(unsigned r, unsigned g, unsigned b)
151 {
152         obj.text_color = Color(r, g, b);
153 }
154
155 void Appearance::Loader::text_color_alpha(unsigned r, unsigned g, unsigned b, unsigned a)
156 {
157         obj.text_color = Color(r, g, b, a);
158 }
159
160 void Appearance::Loader::text_color_named(const string &name)
161 {
162         if(!theme)
163                 throw logic_error("No theme");
164         obj.text_color = theme->get_color(name);
165 }