1 #include <msp/strings/format.h>
2 #include "appearance.h"
9 Appearance::Appearance():
21 void Appearance::merge_from(const Appearance &other)
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;
33 sound_type = other.sound_type;
34 sound_volume = other.sound_volume;
39 icon_shape = other.icon_shape;
40 icon_color = other.icon_color;
41 icon_size = other.icon_size;
46 beam_color = other.beam_color;
50 void Appearance::add_lines(FilterStatement &st) const
53 st.add_line(format("SetFontSize %d", font_size));
55 if(background_color.defined)
56 st.add_line(format("SetBackgroundColor %d %d %d %d", background_color.r, background_color.g, background_color.b, background_color.a));
58 if(border_color.defined)
59 st.add_line(format("SetBorderColor %d %d %d %d", border_color.r, border_color.g, border_color.b, border_color.a));
61 if(text_color.defined)
62 st.add_line(format("SetTextColor %d %d %d %d", text_color.r, text_color.g, text_color.b, text_color.a));
65 st.add_line(format("MinimapIcon %d %s %s", icon_size, icon_color, icon_shape));
69 st.add_line(format("PlayAlertSound %d %d", sound_type, sound_volume));
70 st.add_line("DisableDropSound");
74 st.add_line(format("PlayEffect %s", beam_color));
78 Appearance::Loader::Loader(Appearance &a, const Theme *t):
79 DataFile::ObjectLoader<Appearance>(a),
82 add("alert_sound", &Appearance::sound_type, &Appearance::sound_volume);
83 add("background_color", &Loader::background_color);
84 add("background_color", &Loader::background_color_alpha);
85 add("background_color", &Loader::background_color_named);
86 add("border_color", &Loader::border_color);
87 add("border_color", &Loader::border_color_alpha);
88 add("border_color", &Loader::border_color_named);
89 add("font_size", &Loader::font_size);
90 add("inherit", &Loader::inherit);
91 add("light_beam", &Loader::light_beam);
92 add("minimap_icon", &Loader::minimap_icon);
93 add("minimap_icon", &Loader::minimap_icon_size);
94 add("text_color", &Loader::text_color);
95 add("text_color", &Loader::text_color_alpha);
96 add("text_color", &Loader::text_color_named);
99 void Appearance::Loader::background_color(unsigned r, unsigned g, unsigned b)
101 obj.background_color = Color(r, g, b);
104 void Appearance::Loader::background_color_alpha(unsigned r, unsigned g, unsigned b, unsigned a)
106 obj.background_color = Color(r, g, b, a);
109 void Appearance::Loader::background_color_named(const string &name)
112 throw logic_error("No theme");
113 obj.background_color = theme->get_color(name);
116 void Appearance::Loader::border_color(unsigned r, unsigned g, unsigned b)
118 obj.border_color = Color(r, g, b);
121 void Appearance::Loader::border_color_alpha(unsigned r, unsigned g, unsigned b, unsigned a)
123 obj.border_color = Color(r, g, b, a);
126 void Appearance::Loader::border_color_named(const string &name)
129 throw logic_error("No theme");
130 obj.border_color = theme->get_color(name);
133 void Appearance::Loader::font_size(float s)
135 float base_size = (theme ? theme->get_base_font_size() : 32);
136 obj.font_size = base_size*s+0.5f;
139 void Appearance::Loader::inherit(const string &name)
142 throw logic_error("No theme");
143 obj = theme->get_appearance(name);
146 void Appearance::Loader::light_beam(EffectColor color)
148 obj.show_beam = true;
149 obj.beam_color = color;
152 void Appearance::Loader::minimap_icon(EffectColor color, IconShape shape)
154 minimap_icon_size(color, shape, 1);
157 void Appearance::Loader::minimap_icon_size(EffectColor color, IconShape shape, unsigned size)
159 obj.show_icon = true;
160 obj.icon_shape = shape;
161 obj.icon_color = color;
162 obj.icon_size = size;
165 void Appearance::Loader::text_color(unsigned r, unsigned g, unsigned b)
167 obj.text_color = Color(r, g, b);
170 void Appearance::Loader::text_color_alpha(unsigned r, unsigned g, unsigned b, unsigned a)
172 obj.text_color = Color(r, g, b, a);
175 void Appearance::Loader::text_color_named(const string &name)
178 throw logic_error("No theme");
179 obj.text_color = theme->get_color(name);