GameApi 28
Library used by GameApi Builder tool
Loading...
Searching...
No Matches
GameApi_gui.hh
Go to the documentation of this file.
1
2#include "GameApi_h.hh"
3
4
5#define ORIGINAL_COLORS 1
6#ifdef ORIGINAL_COLORS
7const unsigned int c_tooltip_button = 0xff888888;
8const unsigned int c_tooltip_button2 = 0xff444444;
9const unsigned int c_list_item_title = 0xff884422; // light
10const unsigned int c_list_item_title2 = 0xff442211; // dark
11const unsigned int c_canvas_item = 0xff888888; // light
12const unsigned int c_canvas_item2 = 0xff666666; // dark
13const unsigned int c_canvas_item_text_button = 0xff330033; // dark
14const unsigned int c_canvas_item_text_button2 = 0xff880088; // light
15const unsigned int c_canvas_item_node_0 = 0xffff8844;
16const unsigned int c_canvas_item_node_0_2 = 0xff884422;
17const unsigned int c_canvas_item_node_1 = 0xff884422;
18const unsigned int c_canvas_item_node_1_2 = 0xff442211;
19const unsigned int c_dialog_1 = 0xff888888;
20const unsigned int c_dialog_1_2 = 0xff444444;
21const unsigned int c_dialog_button_1 = 0xff00ff00;
22const unsigned int c_dialog_button_2 = 0xff008800;
23#endif
24#ifdef NEW_COLORS
25//const unsigned int c_dark = 0xff7b1fa2;
26//const unsigned int c_prim = 0xff9c27b0;
27//const unsigned int c_light = 0xffe1bee7;
28
29const unsigned int c_dark = 0xff388e3c;
30const unsigned int c_prim = 0xff4caf50;
31const unsigned int c_light = 0xffc8e6c9;
32
33const unsigned int c_tooltip_button = c_dark; //0xffe1bee7;
34const unsigned int c_tooltip_button2 = c_prim;
35const unsigned int c_list_item_title = c_dark; //0xff7b1fa2; // light
36const unsigned int c_list_item_title2 = c_prim; // dark
37const unsigned int c_canvas_item = c_dark; //0xff7b1fa2; // light
38const unsigned int c_canvas_item2 = c_prim; // dark
39const unsigned int c_canvas_item_text_button = c_dark; //0xff7b1fa2; // dark
40const unsigned int c_canvas_item_text_button2 = c_prim; // light
41const unsigned int c_canvas_item_node_0 = c_prim; //0xff9c27b0;
42const unsigned int c_canvas_item_node_0_2 = c_dark;
43const unsigned int c_canvas_item_node_1 = c_dark; //0xff7b1fa2;
44const unsigned int c_canvas_item_node_1_2 = c_prim;
45const unsigned int c_dialog_1 = c_dark;
46const unsigned int c_dialog_1_2 = c_prim;
47const unsigned int c_dialog_button_1 = c_prim;
48const unsigned int c_dialog_button_2 = c_dark;
49
50#endif
51
52
53bool WidgetCompare(GuiWidget *w1, GuiWidget *w2);
54
55
57{
58public:
59 GuiWidgetForward(GameApi::EveryApi &ev, std::vector<GuiWidget*> vec) : ev(ev), vec(vec) { pos=Point2d::NewPoint(0.0, 0.0); size.dx=0.0; size.dy=0.0; current_selected_item=-1; firsttime = 10;
60
61 int s = vec.size();
62 for(int i=0;i<s;i++)
63 {
64 GuiWidget *w = vec[i];
65 //std::cout << std::hex << (long)w << std::endl;
66 assert(w);
67 }
68 prev_pos.x = 0.0;
69 prev_pos.y = 0.0;
70 isVisible = true;
71 //old_mouse.x = 0.0;
72 //old_mouse.y = 0.0;
74 }
75 void hide() {
76 isVisible=false;
77 int s = vec.size();
78 for(int i=0;i<s;i++)
79 {
80 GuiWidget *w = vec[i];
81 w->hide();
82 }
83 }
84 void show() {
85 isVisible=true;
86 int s = vec.size();
87 for(int i=0;i<s;i++)
88 {
89 GuiWidget *w = vec[i];
90 w->show();
91 }
92 }
93 virtual bool is_visible() const
94 {
95 return isVisible;
96 }
97 virtual Point2d get_pos() const { return pos; }
98 virtual Vector2d get_size() const { return size; }
99 virtual void set_pos(Point2d new_pos) {
100 if (new_pos.x != prev_pos.x || new_pos.y != prev_pos.y)
101 {
102 Point2d old_pos = pos;
103 int s = vec.size();
104 for(int i=0;i<s;i++)
105 {
106 GuiWidget *w = vec[i];
107 Point2d child_old_pos = w->get_pos();
108 Point2d child_new_pos = child_old_pos;
109 child_new_pos -= old_pos;
110 child_new_pos += new_pos;
111 w->set_pos(child_new_pos);
112 }
113 pos = new_pos;
114 prev_pos = new_pos;
115 }
116 sort_widgets();
117 }
118 virtual void set_size(Vector2d size_p)
119 {
120 //std::cout << "Size=" << size_p.dx << " " << size_p.dy << std::endl;
121 size = size_p;
122 // derived widget must override and implement to set child widgets.
123 }
124 virtual void update(Point2d mouse_pos, int button, int ch, int type, int mouse_wheel_y)
125 {
126 if (vec.size()!=sorted.size()) sort_widgets();
127
128
129 int s = vec.size();
130 int selected_item = -1;
131 int i2 = 0;
132 for(int i=0;i<s;i++)
133 {
134 GuiWidget *w = sorted[i];
135 if (mouse_pos.y <= w->get_pos().y + w->get_size().dy + 80) { i2=i; break; }
136 }
137
138
139 for(int i=i2;i<s;i++)
140 {
141 GuiWidget *w = sorted[i];
142 bool b = false;
143 if (firsttime>0) {
144 w->update(mouse_pos, button,ch, type, mouse_wheel_y);
145 b=true;
146 }
147 Point2d p = w->get_pos();
148 Vector2d s = w->get_size();
149 /*
150 if ((mouse_pos.x >= p.x-80 && mouse_pos.x < p.x+s.dx+80 &&
151 mouse_pos.y >= p.y-80 && mouse_pos.y < p.y+s.dy+80)
152 ||
153 (old_mouse.x >= p.x-80 && old_mouse.x < p.x+s.dx+80 &&
154 old_mouse.y >= p.y-80 && old_mouse.y < p.y+s.dy+80))*/
155 if (!b)
156 {
157 w->update(mouse_pos, button,ch, type, mouse_wheel_y);
158 }
159 if (mouse_pos.x >= p.x && mouse_pos.x < p.x+s.dx &&
160 mouse_pos.y >= p.y && mouse_pos.y < p.y+s.dy)
161 {
162 selected_item = i;
163 }
164 //if (mouse_pos.y<p.y-80) break;
165 }
166 if (firsttime>0)
167 firsttime--;
168 if (button==0 && type==1025) {
169 current_selected_item = selected_item;
170 }
171 if (button==-1) {
173 }
174 old_mouse = mouse_pos;
175 }
176 virtual void render()
177 {
178 if (is_visible()) {
179 int s = vec.size();
180 for(int i=0;i<s;i++)
181 {
182 GuiWidget *w = vec[i];
183 Point2d p0 = get_pos();
184 Vector2d s0 = get_size();
185 Point2d p = w->get_pos();
186 Vector2d s = w->get_size();
187 /*
188 static float p_max=0.0;
189 static float p_min=100000.0;
190 static float s_max=0.0;
191 static float s_min=100000.0;
192 if (p.y+s.dy>p_max) p_max=p.x+s.dy;
193 if (p.y<p_min) p_min=p.y;
194 if (p.y+s.dy>s_max) s_max=p.y+s.dy;
195 if (p.y<s_min) s_min=p.y;
196
197 std::cout << p_min << " " << p_max << " " << s_min << " " << s_max << std::endl;
198 */
199 // check if widget is inside its parent (DOESNT WORK)
200 //if (p.x+s.dx<p0.x || p.x>p0.x+s0.dx || p.y+s.dy<p0.y || p.y>p0.y+s0.dy) continue;
201
202 if (p.x + s.dx>=0.0 && p.y+s.dy>=0.0 && p.x<float(ev.mainloop_api.get_screen_width()) && p.y<float(ev.mainloop_api.get_screen_height()))
203 { // inside screen.
204 w->render();
205 }
206 }
207 }
208 }
209 virtual int render_to_bitmap();
210
211 virtual void select_item(int item) {
213 }
214 virtual int chosen_item() const
215 {
217 }
218 virtual float dynamic_param(int id) const { return 0.0; }
219 virtual void set_dynamic_param(int id, float val)
220 {
221 }
222 virtual bool content_changed() const
223 {
224 int s = vec.size();
225 bool changed = false;
226 for(int i=0;i<s;i++)
227 {
228 GuiWidget *w = vec[i];
229 bool b = w->content_changed();
230 changed |= b;
231 }
232 return changed;
233 }
235 {
236 int s = vec.size();
237 for(int i=0;i<s;i++)
238 {
239 GuiWidget *w = vec[i];
240 w->clear_content_changed();
241 }
242 }
243 virtual int child_count() const { return vec.size(); }
244 virtual GuiWidget *child(int num) const { if (num>=0 && num<vec.size()) return vec[num]; return 0; }
245 virtual std::vector<GuiWidget*> *child_from_path(std::string path)
246 {
247 std::vector<GuiWidget*> *v = &vec;
248 int s = path.size();
249 for(int i=0;i<s;i++)
250 {
251 char c = path[i];
252 int val = int(c - '0');
253 GuiWidgetForward *forw = (GuiWidgetForward*)(vec[val]);
254 if (!forw) { return 0; }
255 v = &forw->vec;
256 }
257 return v;
258 }
260 {
261 sorted=std::vector<GuiWidget*>(vec.begin(),vec.end());
262 std::sort(sorted.begin(),sorted.end(),&WidgetCompare);
263 }
264protected:
270 Point2d prev_pos = { 0.0, 0.0 };
271 Point2d old_mouse = { 0.0, 0.0 };
272public:
273 std::vector<GuiWidget *> vec;
274 std::vector<GuiWidget *> sorted;
276};
277
278
280{
281public:
283 void update(Point2d mouse_pos, int button, int ch, int type, int mouse_wheel_y)
284 {
285 GuiWidgetForward::update(mouse_pos,button,ch,type,mouse_wheel_y);
286 /* Point2d p = get_pos();
287 Vector2d s = get_size();
288 if (mouse_pos.x>=p.x && mouse_pos.x<p.x+s.dx)
289 if (mouse_pos.y>=p.y && mouse_pos.y<p.y+s.dy)
290 {
291 }*/
292 }
293};
294
295
297{
298public:
300 {
301 size.dx = sx;
302 size.dy = sy;
303 }
304 int count() const { return vec.size(); }
306 {
307 int s = vec.size();
308 for(int i=0;i<s;i++)
309 {
310 if (vec[i]==w) { return i; }
311 }
312 return -1;
313 }
314 GuiWidget *find_widget(int i) const { return vec[i]; }
315 GuiWidget *find_widget(std::string id) const
316 {
317 int s = vec.size();
318 for(int i=0;i<s;i++)
319 {
320 GuiWidget *w = vec[i];
321 std::string w_id = w->get_id();
322 if (id==w_id) return w;
323 }
324 return 0;
325 }
326 int push_back(GuiWidget *widget, int x, int y)
327 {
328 vec.push_back(widget);
329 pos_x.push_back(x);
330 pos_y.push_back(y);
331 Vector2d v = { float(x),float(y) };
332 widget->set_pos(get_pos() + v);
333 return vec.size()-1;
334 }
335 void del(int id)
336 {
337 vec.erase(vec.begin()+id);
338 }
339private:
340 std::vector<int> pos_x;
341 std::vector<int> pos_y;
342};
const unsigned int c_canvas_item_text_button2
Definition GameApi_gui.hh:14
const unsigned int c_tooltip_button
Definition GameApi_gui.hh:7
const unsigned int c_canvas_item_node_1_2
Definition GameApi_gui.hh:18
const unsigned int c_dialog_button_1
Definition GameApi_gui.hh:21
const unsigned int c_canvas_item_text_button
Definition GameApi_gui.hh:13
const unsigned int c_list_item_title2
Definition GameApi_gui.hh:10
const unsigned int c_canvas_item_node_1
Definition GameApi_gui.hh:17
const unsigned int c_canvas_item
Definition GameApi_gui.hh:11
bool WidgetCompare(GuiWidget *w1, GuiWidget *w2)
Definition GameApi_gui.cc:3271
const unsigned int c_tooltip_button2
Definition GameApi_gui.hh:8
const unsigned int c_dialog_button_2
Definition GameApi_gui.hh:22
const unsigned int c_canvas_item_node_0_2
Definition GameApi_gui.hh:16
const unsigned int c_dialog_1_2
Definition GameApi_gui.hh:20
const unsigned int c_list_item_title
Definition GameApi_gui.hh:9
const unsigned int c_dialog_1
Definition GameApi_gui.hh:19
const unsigned int c_canvas_item_node_0
Definition GameApi_gui.hh:15
const unsigned int c_canvas_item2
Definition GameApi_gui.hh:12
GuiWidget * find_widget(int i) const
Definition GameApi_gui.hh:314
int push_back(GuiWidget *widget, int x, int y)
Definition GameApi_gui.hh:326
CanvasWidget(GameApi::EveryApi &ev, int sx, int sy)
Definition GameApi_gui.hh:299
GuiWidget * find_widget(std::string id) const
Definition GameApi_gui.hh:315
int find_index(GuiWidget *w)
Definition GameApi_gui.hh:305
int count() const
Definition GameApi_gui.hh:304
void del(int id)
Definition GameApi_gui.hh:335
virtual void select_item(int item)
Definition GameApi_gui.hh:211
virtual void render()
Definition GameApi_gui.hh:176
virtual Point2d get_pos() const
Definition GameApi_gui.hh:97
virtual int child_count() const
Definition GameApi_gui.hh:243
void hide()
Definition GameApi_gui.hh:75
virtual void set_size(Vector2d size_p)
Definition GameApi_gui.hh:118
virtual Vector2d get_size() const
Definition GameApi_gui.hh:98
virtual int chosen_item() const
Definition GameApi_gui.hh:214
virtual int render_to_bitmap()
Definition GameApi_gui.cc:6817
virtual GuiWidget * child(int num) const
Definition GameApi_gui.hh:244
int firsttime
Definition GameApi_gui.hh:269
virtual std::vector< GuiWidget * > * child_from_path(std::string path)
Definition GameApi_gui.hh:245
virtual bool is_visible() const
Definition GameApi_gui.hh:93
void show()
Definition GameApi_gui.hh:84
bool isVisible
Definition GameApi_gui.hh:275
Point2d prev_pos
Definition GameApi_gui.hh:270
std::vector< GuiWidget * > sorted
Definition GameApi_gui.hh:274
int current_selected_item
Definition GameApi_gui.hh:268
virtual void set_pos(Point2d new_pos)
Definition GameApi_gui.hh:99
void sort_widgets()
Definition GameApi_gui.hh:259
GameApi::EveryApi & ev
Definition GameApi_gui.hh:265
std::vector< GuiWidget * > vec
Definition GameApi_gui.hh:273
virtual float dynamic_param(int id) const
Definition GameApi_gui.hh:218
GuiWidgetForward(GameApi::EveryApi &ev, std::vector< GuiWidget * > vec)
Definition GameApi_gui.hh:59
virtual void set_dynamic_param(int id, float val)
Definition GameApi_gui.hh:219
virtual void clear_content_changed()
Definition GameApi_gui.hh:234
Point2d pos
Definition GameApi_gui.hh:266
Vector2d size
Definition GameApi_gui.hh:267
virtual void update(Point2d mouse_pos, int button, int ch, int type, int mouse_wheel_y)
Definition GameApi_gui.hh:124
virtual bool content_changed() const
Definition GameApi_gui.hh:222
Point2d old_mouse
Definition GameApi_gui.hh:271
void update(Point2d mouse_pos, int button, int ch, int type, int mouse_wheel_y)
Definition GameApi_gui.hh:283
GuiWidgetRestrict(GameApi::EveryApi &ev, std::vector< GuiWidget * > vec)
Definition GameApi_gui.hh:282
Definition GraphI.hh:1296
GuiWidget()
Definition GraphI.hh:1298
virtual void set_pos(Point2d pos)=0
STL namespace.
Definition GameApi.hh:4664
Definition VectorTools.hh:910
float x
Definition VectorTools.hh:911
float y
Definition VectorTools.hh:911
static Point2d NewPoint(float x, float y)
Definition VectorTools.hh:912
Definition VectorTools.hh:972
num
Definition view.php:2821