1 
2 #include "deliriumUI.h"
3 
4 //------------------------------------------------------------------
5 // Add Widget
6 
addDeliriumUIWidget(deliriumUI * deliriumUI_window,deliriumUI_WidgetType widgetType,int group,float _x,float _y,float _w,float _h,char * _label,int port_number)7 int addDeliriumUIWidget(deliriumUI* deliriumUI_window, deliriumUI_WidgetType widgetType, int group, float _x, float _y, float _w, float _h, char* _label, int port_number)
8 {
9 	deliriumUIWidget* deliriumUIWidgets = deliriumUI_window->deliriumUIWidgets;
10 	int numberOfUIWidgets = deliriumUI_window->numberOfUIWidgets;
11 
12 	deliriumUIWidgets = realloc( deliriumUIWidgets, sizeof(deliriumUIWidget) * numberOfUIWidgets );
13 
14 	deliriumUI_window->deliriumUIWidgets = deliriumUIWidgets;
15 
16 	deliriumUIWidgets[numberOfUIWidgets-1].type = widgetType;
17 	deliriumUIWidgets[numberOfUIWidgets-1].x = _x;
18 	deliriumUIWidgets[numberOfUIWidgets-1].x = _x;
19 	deliriumUIWidgets[numberOfUIWidgets-1].y = _y;
20 	deliriumUIWidgets[numberOfUIWidgets-1].w = _w;
21 	deliriumUIWidgets[numberOfUIWidgets-1].h = _h;
22 	deliriumUIWidgets[numberOfUIWidgets-1].pressed = false;
23 	deliriumUIWidgets[numberOfUIWidgets-1].hover = false;
24 	deliriumUIWidgets[numberOfUIWidgets-1].label = _label;
25 	deliriumUIWidgets[numberOfUIWidgets-1].min = 0;
26 	deliriumUIWidgets[numberOfUIWidgets-1].max = 1;
27 	deliriumUIWidgets[numberOfUIWidgets-1].increment = 0.01;
28 	deliriumUIWidgets[numberOfUIWidgets-1].toggleMode = false;
29 	deliriumUIWidgets[numberOfUIWidgets-1].clickTop = 0;
30 	deliriumUIWidgets[numberOfUIWidgets-1].clickBottom = 0;
31 	deliriumUIWidgets[numberOfUIWidgets-1].group= group;
32 	deliriumUIWidgets[numberOfUIWidgets-1].port_number = port_number;
33 
34 
35 	deliriumUIWidgets[numberOfUIWidgets-1].values[0] = 0;
36 	deliriumUIWidgets[numberOfUIWidgets-1].values[1] = 0;
37 	deliriumUIWidgets[numberOfUIWidgets-1].values[2] = 0;
38 	deliriumUIWidgets[numberOfUIWidgets-1].values[3] = 0;
39 	deliriumUIWidgets[numberOfUIWidgets-1].current_value = 0;
40 
41 
42 	switch (widgetType)
43 	{
44 		case deliriumUI_Fader:
45 			deliriumUIWidgets[numberOfUIWidgets-1].clickTop = 15;
46 			deliriumUIWidgets[numberOfUIWidgets-1].clickBottom = 20;
47 			break;
48 
49 		case deliriumUI_MicroKnob:
50 			deliriumUIWidgets[numberOfUIWidgets-1].clickTop = 20;
51 			deliriumUIWidgets[numberOfUIWidgets-1].clickBottom = 20;
52 			break;
53 
54 		case deliriumUI_Switch:
55 			deliriumUIWidgets[numberOfUIWidgets-1].toggleMode = true;
56 			break;
57 	}
58 
59 
60 
61 	numberOfUIWidgets++;
62 
63 	deliriumUI_window->numberOfUIWidgets = numberOfUIWidgets;
64 
65 	return numberOfUIWidgets-1; // return handle number
66 }
67 
68 
69 
70 //------------------------------------------------------------------
71 // set packing grid size
72 
setDeliriumUIGridSize(deliriumUI * deliriumUI_window,int _w,int _h,int _x,int _y)73 void setDeliriumUIGridSize(deliriumUI* deliriumUI_window, int _w, int _h, int _x, int _y)
74 {
75 	deliriumUI_window->originalWidth = _w;
76 	deliriumUI_window->originalHeight = _h;
77 	deliriumUI_window->currentWidth = _w;
78 	deliriumUI_window->currentHeight = _h;
79 	deliriumUI_window->gridX = _x;
80 	deliriumUI_window->gridY = _y;
81 	deliriumUI_window->widgetWidth = _w / _x;
82 	deliriumUI_window->widgetHeight = _h / _y;
83 }
84 
85 //------------------------------------------------------------------
86 // set current window size
87 
setDeliriumUICurrentWindowSize(deliriumUI * deliriumUI_window,int _w,int _h)88 void setDeliriumUICurrentWindowSize(deliriumUI* deliriumUI_window, int _w, int _h)
89 {
90 	deliriumUI_window->currentWidth = _w;
91 	deliriumUI_window->currentHeight = _h;
92 	deliriumUI_window->widgetWidth = _w / deliriumUI_window->gridX;
93 	deliriumUI_window->widgetHeight = _h / deliriumUI_window->gridY;
94 }
95 
96 //------------------------------------------------------------------
97 // Display widget
displayDeliriumUIWidget(deliriumUI * deliriumUI_window,cairo_t * cr,int widgetNumber)98 void displayDeliriumUIWidget(deliriumUI* deliriumUI_window, cairo_t* cr, int widgetNumber)
99 {
100 	deliriumUIWidget* deliriumUIWidgets = deliriumUI_window->deliriumUIWidgets;
101 
102 	deliriumUI_WidgetType type = deliriumUIWidgets[widgetNumber].type;
103 
104 	switch (type)
105 	{
106 		case deliriumUI_Button:
107 			displayDiliriumUIButton(deliriumUI_window, cr, widgetNumber);
108 			break;
109 
110 		case deliriumUI_Knob:
111 			displayDiliriumUIKnob(deliriumUI_window, cr, widgetNumber);
112 			break;
113 
114 		case deliriumUI_MicroKnob:
115 			displayDiliriumUIMicroKnob(deliriumUI_window, cr, widgetNumber);
116 			break;
117 
118 		case deliriumUI_Fader:
119 			displayDiliriumUIFader(deliriumUI_window, cr, widgetNumber);
120 			break;
121 
122 		case deliriumUI_Switch:
123 			displayDiliriumUISwitch(deliriumUI_window, cr, widgetNumber);
124 			break;
125 
126 		case deliriumUI_ADSR:
127 			displayDiliriumUIADSR(deliriumUI_window, cr, widgetNumber);
128 			break;
129 	}
130 }
131 
132 //------------------------------------------------------------------
133 // Display all widgets
134 
displayAllDeliriumUIWidgets(deliriumUI * deliriumUI_window,cairo_t * cr)135 void displayAllDeliriumUIWidgets(deliriumUI* deliriumUI_window, cairo_t* cr)
136 {
137 	deliriumUIWidget* deliriumUIWidgets = deliriumUI_window->deliriumUIWidgets;
138 	int numberOfUIWidgets = deliriumUI_window->numberOfUIWidgets;
139 
140 	cairo_pattern_t *linpat;
141 
142 	linpat = cairo_pattern_create_linear (0,0,0,500);
143 	cairo_pattern_add_color_stop_rgb(linpat, 0, 0.1, 0, 0);
144 	cairo_pattern_add_color_stop_rgb(linpat, 0.5, 0.3, 0, 0);
145 	cairo_pattern_add_color_stop_rgb(linpat, 1, 0.2, 0, 0);
146 
147 	/* Set surface to opaque color (r, g, b) */
148 	// cairo_set_source_rgb (cr, 0.2, 0.0, 0.0);
149 	  cairo_rectangle(cr, 0, 0, 800, 500);
150 	  cairo_set_source(cr, linpat);
151 	  cairo_fill(cr);
152 
153 	for (int widgetNumber=0; widgetNumber<numberOfUIWidgets-1; ++widgetNumber)
154 	{
155 		bool show_it = deliriumUI_window->group_visible[ deliriumUI_window->deliriumUIWidgets[widgetNumber].group ];
156 		if (show_it) displayDeliriumUIWidget(deliriumUI_window, cr, widgetNumber);
157 	}
158 }
159 
160 //--------------------------------------------------------------------------
161 
setControllerDiliriumUI(LV2UI_Controller _controller,LV2UI_Write_Function _write_function)162 void setControllerDiliriumUI(LV2UI_Controller _controller, LV2UI_Write_Function _write_function)
163 {
164 	controller = _controller;
165 	write_function = _write_function;
166 }
167 
168 //--------------------------------------------------------------------------
169 
setMinMax(deliriumUI * deliriumUI_window,int port_number,float min,float max)170 void setMinMax(deliriumUI* deliriumUI_window, int port_number, float min, float max)
171 {
172 	deliriumUIWidget* deliriumUIWidgets = deliriumUI_window->deliriumUIWidgets;
173 	int numberOfUIWidgets = deliriumUI_window->numberOfUIWidgets;
174 	int widgetNumber=-1;
175 
176 	for (int x=0; x<numberOfUIWidgets; x++)
177 	{
178 		if ( deliriumUIWidgets[x].port_number == port_number) widgetNumber = x;
179 	}
180 
181 	if (widgetNumber==-1) return;
182 
183 	deliriumUIWidgets[widgetNumber].min = min;
184 	deliriumUIWidgets[widgetNumber].max = max;
185 }
186 
187 
188 //--------------------------------------------------------------------------
189 
setValue(deliriumUI * deliriumUI_window,cairo_t * cr,int port_number,float value)190 void setValue(deliriumUI* deliriumUI_window, cairo_t* cr, int port_number, float value)
191 {
192 
193 	deliriumUIWidget* deliriumUIWidgets = deliriumUI_window->deliriumUIWidgets;
194 	int numberOfUIWidgets = deliriumUI_window->numberOfUIWidgets;
195 	int widgetNumber=-1;
196 
197 	for (int x=0; x<numberOfUIWidgets; x++)
198 	{
199 		if (  deliriumUIWidgets[x].type != deliriumUI_ADSR)
200 		{
201 			if ( deliriumUIWidgets[x].port_number == port_number) widgetNumber = x;
202 		}
203 
204 		if (  deliriumUIWidgets[x].type == deliriumUI_ADSR)
205 		{
206 			if (deliriumUIWidgets[x].port_number == port_number ||
207 				deliriumUIWidgets[x].port_number+1 == port_number ||
208 				deliriumUIWidgets[x].port_number+2 == port_number ||
209 				deliriumUIWidgets[x].port_number+3 == port_number)
210 				{
211 					widgetNumber = x;
212 				}
213 		}
214 	}
215 
216 	if (widgetNumber==-1) return;
217 
218 	int current_value =  port_number - deliriumUIWidgets[widgetNumber].port_number;
219 
220 
221 	float unscaled_value = value / ((deliriumUIWidgets[widgetNumber].max - deliriumUIWidgets[widgetNumber].min));
222 
223 	if ( deliriumUIWidgets[widgetNumber].min < 0) unscaled_value += 0.5;
224 
225 	if ( deliriumUIWidgets[widgetNumber].type == deliriumUI_ADSR)
226 	{
227 		if (current_value == 0) unscaled_value = value;
228 		if (current_value == 1) unscaled_value = 1 - value;
229 		if (current_value == 2) unscaled_value = 1 - value;
230 		if (current_value == 3) unscaled_value = 1 - value;
231 
232 	}
233 
234 	deliriumUIWidgets[widgetNumber].values[current_value] = unscaled_value;
235 
236 	deliriumUIWidgets[widgetNumber].scaled_value = value;
237 
238 
239 	displayDeliriumUIWidget(deliriumUI_window, cr, widgetNumber);
240 	write_function( controller,port_number, sizeof(float), 0, (const void*)&value);
241 }
242 
243 //--------------------------------------------------------------------------
244 
decValue(deliriumUI * deliriumUI_window,cairo_t * cr)245 void decValue(deliriumUI* deliriumUI_window, cairo_t* cr)
246 {
247 	deliriumUIWidget* deliriumUIWidgets = deliriumUI_window->deliriumUIWidgets;
248 	int numberOfUIWidgets = deliriumUI_window->numberOfUIWidgets;
249 	int widgetNumber=deliriumUI_window->currentWidgetNumber;
250 	int port_number = -1;
251 	float value = -1;
252 	int current_value = 0;
253 
254 	if (widgetNumber==-1) return;
255 
256 	if ( deliriumUIWidgets[widgetNumber].type == deliriumUI_Switch) return;
257 
258 	port_number = deliriumUIWidgets[widgetNumber].port_number;
259 	current_value = deliriumUIWidgets[widgetNumber].current_value;
260 	value = deliriumUIWidgets[widgetNumber].values[current_value] - deliriumUIWidgets[widgetNumber].increment;
261 
262 	if (value < 0) value = 0;
263 	if (value > 1) value = 1;
264 
265 	deliriumUIWidgets[widgetNumber].values[current_value] = value;
266 	deliriumUIWidgets[widgetNumber].scaled_value = deliriumUIWidgets[widgetNumber].min + ( deliriumUIWidgets[widgetNumber].values[current_value]
267 			* (deliriumUIWidgets[widgetNumber].max-deliriumUIWidgets[widgetNumber].min));
268 
269 	if ( deliriumUIWidgets[widgetNumber].type == deliriumUI_Fader)
270 	{
271 		value = deliriumUIWidgets[widgetNumber].scaled_value;
272 	}
273 
274 	if ( deliriumUIWidgets[widgetNumber].type == deliriumUI_ADSR)
275 	{
276 		value = deliriumUIWidgets[widgetNumber].values[current_value];
277 		if (current_value > 0) port_number = deliriumUIWidgets[widgetNumber].port_number + current_value;
278 		if (current_value > 0) value = 1 - value;
279 	}
280 
281 	printf("%d - %d - %f\n", widgetNumber, port_number, value);
282 
283 	write_function( controller,port_number, sizeof(float), 0, (const void*)&value);
284 	displayDeliriumUIWidget(deliriumUI_window, cr, widgetNumber);
285 }
286 
287 //--------------------------------------------------------------------------
288 
incValue(deliriumUI * deliriumUI_window,cairo_t * cr)289 void incValue(deliriumUI* deliriumUI_window, cairo_t* cr)
290 {
291 	deliriumUIWidget* deliriumUIWidgets = deliriumUI_window->deliriumUIWidgets;
292 	int numberOfUIWidgets = deliriumUI_window->numberOfUIWidgets;
293 	int widgetNumber=deliriumUI_window->currentWidgetNumber;
294 	int port_number = -1;
295 	float value = -1;
296 	int current_value = 0;
297 
298 	if (widgetNumber==-1) return;
299 
300 	if ( deliriumUIWidgets[widgetNumber].type == deliriumUI_Switch) return;
301 
302 	port_number = deliriumUIWidgets[widgetNumber].port_number;
303 	current_value = deliriumUIWidgets[widgetNumber].current_value;
304 	value = deliriumUIWidgets[widgetNumber].values[current_value] + deliriumUIWidgets[widgetNumber].increment;
305 
306 	if (value < 0) value = 0;
307 	if (value > 1) value = 1;
308 
309 	deliriumUIWidgets[widgetNumber].values[current_value] = value;
310 	deliriumUIWidgets[widgetNumber].scaled_value = deliriumUIWidgets[widgetNumber].min + ( deliriumUIWidgets[widgetNumber].values[current_value]
311 			* (deliriumUIWidgets[widgetNumber].max-deliriumUIWidgets[widgetNumber].min));
312 
313 	if ( deliriumUIWidgets[widgetNumber].type == deliriumUI_Fader)
314 	{
315 		value = deliriumUIWidgets[widgetNumber].scaled_value;
316 	}
317 
318 	if ( deliriumUIWidgets[widgetNumber].type == deliriumUI_ADSR)
319 	{
320 		value = deliriumUIWidgets[widgetNumber].values[current_value];
321 		if (current_value > 0) port_number = deliriumUIWidgets[widgetNumber].port_number + current_value;
322 		if (current_value > 0) value = 1 - value;
323 	}
324 
325 	printf("%d - %d - %f\n", widgetNumber, port_number, value);
326 
327 	write_function( controller,port_number, sizeof(float), 0, (const void*)&value);
328 	displayDeliriumUIWidget(deliriumUI_window, cr, widgetNumber);
329 }
330 
331 //--------------------------------------------------------------------------
332 
zeroValue(deliriumUI * deliriumUI_window,cairo_t * cr)333 void zeroValue(deliriumUI* deliriumUI_window, cairo_t* cr)
334 {
335 	deliriumUIWidget* deliriumUIWidgets = deliriumUI_window->deliriumUIWidgets;
336 	int numberOfUIWidgets = deliriumUI_window->numberOfUIWidgets;
337 	int widgetNumber=deliriumUI_window->currentWidgetNumber;
338 	int port_number = -1;
339 	float value = -1;
340 	int current_value = 0;
341 
342 	if (widgetNumber==-1) return;
343 
344 	if ( deliriumUIWidgets[widgetNumber].type == deliriumUI_Switch) return;
345 
346 	port_number = deliriumUIWidgets[widgetNumber].port_number;
347 	current_value = deliriumUIWidgets[widgetNumber].current_value;
348 	value = (0 - deliriumUIWidgets[widgetNumber].min) / ((deliriumUIWidgets[widgetNumber].max - deliriumUIWidgets[widgetNumber].min));
349 
350 	if (value < 0) value = 0;
351 	if (value > 1) value = 1;
352 
353 	deliriumUIWidgets[widgetNumber].values[current_value] = value;
354 	deliriumUIWidgets[widgetNumber].scaled_value = deliriumUIWidgets[widgetNumber].min + ( deliriumUIWidgets[widgetNumber].values[current_value]
355 			* (deliriumUIWidgets[widgetNumber].max-deliriumUIWidgets[widgetNumber].min));
356 
357 	if ( deliriumUIWidgets[widgetNumber].type == deliriumUI_Fader)
358 	{
359 		value = deliriumUIWidgets[widgetNumber].scaled_value;
360 	}
361 
362 	if ( deliriumUIWidgets[widgetNumber].type == deliriumUI_ADSR)
363 	{
364 		value = deliriumUIWidgets[widgetNumber].values[current_value];
365 		if (current_value > 0) port_number = deliriumUIWidgets[widgetNumber].port_number + current_value;
366 		if (current_value > 0) value = 1 - value;
367 	}
368 
369 	displayDeliriumUIWidget(deliriumUI_window, cr, widgetNumber);
370 	write_function( controller,port_number, sizeof(float), 0, (const void*)&value);
371 }
372 //--------------------------------------------------------------------------
373 
setValueFromMousePosition(deliriumUI * deliriumUI_window,int widgetNumber,int _x,int _y)374 void setValueFromMousePosition(deliriumUI* deliriumUI_window, int widgetNumber, int _x, int _y)
375 {
376 
377 	deliriumUIWidget* deliriumUIWidgets = deliriumUI_window->deliriumUIWidgets;
378 	int numberOfUIWidgets = deliriumUI_window->numberOfUIWidgets;
379 
380 	float x = deliriumUIWidgets[widgetNumber].x * deliriumUI_window->widgetWidth;
381 	float y = deliriumUIWidgets[widgetNumber].y * deliriumUI_window->widgetHeight;
382 	float w = deliriumUIWidgets[widgetNumber].w * deliriumUI_window->widgetWidth;
383 	float h = deliriumUIWidgets[widgetNumber].h * deliriumUI_window->widgetHeight;
384 
385 	float clickTop = h * (deliriumUIWidgets[widgetNumber].clickTop/100);
386 	float clickBottom = h * (deliriumUIWidgets[widgetNumber].clickBottom/100);
387 
388 	y += clickTop;
389 	h -= (clickTop+clickBottom);
390 
391 	float value = (_y - y) / h;
392 
393 
394 	if ( deliriumUIWidgets[widgetNumber].type == deliriumUI_ADSR)
395 	{
396 		value = (_y - y) / ((h/2) + (h/6));
397 	}
398 
399 
400 	 value = 1-value;
401 
402 	if (value < 0) value = 0;
403 	if (value > 1) value = 1;
404 
405 	int port_number = deliriumUIWidgets[widgetNumber].port_number;
406 	setValueDiliriumUIADSR(deliriumUI_window, widgetNumber, value );
407 
408 	if ( deliriumUIWidgets[widgetNumber].type == deliriumUI_Fader)
409 	{
410 		deliriumUIWidgets[widgetNumber].scaled_value = deliriumUIWidgets[widgetNumber].min + ( deliriumUIWidgets[widgetNumber].values[0]
411 				* (deliriumUIWidgets[widgetNumber].max-deliriumUIWidgets[widgetNumber].min));
412 		value = deliriumUIWidgets[widgetNumber].scaled_value;
413 	}
414 
415 	if ( deliriumUIWidgets[widgetNumber].type == deliriumUI_ADSR)
416 	{
417 		port_number += deliriumUIWidgets[widgetNumber].current_value;
418 	}
419 
420 	deliriumUIWidgets[widgetNumber].hover = true;
421 	if (controller,port_number > -1)
422 		write_function( controller,port_number, sizeof(float), 0, (const void*)&value);
423 }
424 
425 //------------------------------------------------------------------
426 // check if mouse is hovering over widget
isMouseOverDeliriumUIWidget(deliriumUI * deliriumUI_window,cairo_t * cr,int _x,int _y)427 void isMouseOverDeliriumUIWidget(deliriumUI* deliriumUI_window, cairo_t* cr, int _x, int _y)
428 {
429 
430 	deliriumUIWidget* deliriumUIWidgets = deliriumUI_window->deliriumUIWidgets;
431 	int numberOfUIWidgets = deliriumUI_window->numberOfUIWidgets;
432 
433 	deliriumUI_window->currentWidgetNumber = -1;
434 
435 	for (int widgetNumber=0; widgetNumber<numberOfUIWidgets-1; ++widgetNumber)
436 	{
437 		int group = deliriumUIWidgets[widgetNumber].group;
438 
439 		if (deliriumUI_window->group_visible[group])
440 		{
441 
442 			float x = deliriumUIWidgets[widgetNumber].x * deliriumUI_window->widgetWidth;
443 			float y = deliriumUIWidgets[widgetNumber].y * deliriumUI_window->widgetHeight;
444 			float w = deliriumUIWidgets[widgetNumber].w * deliriumUI_window->widgetWidth;
445 			float h = deliriumUIWidgets[widgetNumber].h * deliriumUI_window->widgetHeight;
446 
447 			if (deliriumUIWidgets[widgetNumber].pressed && deliriumUIWidgets[widgetNumber].type!=deliriumUI_Switch)
448 			{
449 
450 				setValueFromMousePosition(deliriumUI_window, widgetNumber, _x, _y);
451 				displayDeliriumUIWidget(deliriumUI_window, cr, widgetNumber);
452 			}
453 
454 			if (!deliriumUI_window->mouseButton[1])
455 			{
456 				if (_x>=x && _y>=y && _x<=x+w && _y<=y+h)
457 				{
458 					deliriumUIWidgets[widgetNumber].hover = true;
459 					deliriumUI_window->currentWidgetNumber = widgetNumber;
460 
461 
462 					if (deliriumUIWidgets[widgetNumber].type == deliriumUI_ADSR)
463 					{
464 
465 						int current_value = ((_x-(int)x) / (w/4));
466 						deliriumUIWidgets[widgetNumber].current_value = current_value;
467 					}
468 				}
469 				else
470 				{
471 					deliriumUIWidgets[widgetNumber].hover = false;
472 				}
473 			}
474 		}
475 	}
476 }
477 
478 
479 //------------------------------------------------------------------
480 // check if widget has been clicked by mouse button
481 
hasMouseClickedDeliriumUIWidget(deliriumUI * deliriumUI_window,int _x,int _y)482 void hasMouseClickedDeliriumUIWidget(deliriumUI* deliriumUI_window, int _x, int _y)
483 {
484 	deliriumUIWidget* deliriumUIWidgets = deliriumUI_window->deliriumUIWidgets;
485 	int numberOfUIWidgets = deliriumUI_window->numberOfUIWidgets;
486 
487 
488 
489 	for (int widgetNumber=0; widgetNumber<numberOfUIWidgets-1; ++widgetNumber)
490 	{
491 		bool show_it = deliriumUI_window->group_visible[ deliriumUI_window->deliriumUIWidgets[widgetNumber].group ];
492 
493 		if (show_it)
494 		{
495 
496 			float x = deliriumUIWidgets[widgetNumber].x * deliriumUI_window->widgetWidth;
497 			float y = deliriumUIWidgets[widgetNumber].y * deliriumUI_window->widgetHeight;
498 			float w = deliriumUIWidgets[widgetNumber].w * deliriumUI_window->widgetWidth;
499 			float h = deliriumUIWidgets[widgetNumber].h * deliriumUI_window->widgetHeight;
500 
501 			w -= 2;
502 			h -= 2;
503 
504 			if (!deliriumUIWidgets[widgetNumber].toggleMode)
505 			{
506 				if (_x>=x && _y>=y && _x<=x+w && _y<=y+h)
507 				{
508 					deliriumUIWidgets[widgetNumber].pressed = true;
509 
510 					if ( deliriumUIWidgets[widgetNumber]. port_number < 0)
511 					{
512 
513 						for (int x=1; x<5; x++)
514 						{
515 							if ( x!= -deliriumUIWidgets[widgetNumber]. port_number)
516 								deliriumUI_window->group_visible[x] = false;
517 							else
518 								deliriumUI_window->group_visible[x] = true;
519 						}
520 						return;
521 					}
522 
523 					if ( deliriumUIWidgets[widgetNumber].type == deliriumUI_Switch)
524 					{
525 						deliriumUIWidgets[widgetNumber].values[0] = deliriumUIWidgets[widgetNumber].pressed;
526 
527 						write_function( controller,deliriumUIWidgets[widgetNumber]. port_number, sizeof(float), 0, (const void*)&deliriumUIWidgets[widgetNumber].values[0]);
528 
529 					}
530 					setValueFromMousePosition(deliriumUI_window, widgetNumber, _x, _y);
531 
532 				}
533 				else
534 				{
535 					deliriumUIWidgets[widgetNumber].pressed = false;
536 					if ( deliriumUIWidgets[widgetNumber].type == deliriumUI_Switch)
537 					{
538 						deliriumUIWidgets[widgetNumber].values[0] = deliriumUIWidgets[widgetNumber].pressed;
539 
540 						write_function( controller,deliriumUIWidgets[widgetNumber]. port_number, sizeof(float), 0, (const void*)&deliriumUIWidgets[widgetNumber].values[0]);
541 
542 					}
543 				}
544 			}
545 			else
546 			{
547 				if (_x>=x && _y>=y && _x<=x+w && _y<=y+h)
548 				{
549 					deliriumUIWidgets[widgetNumber].pressed = 1-deliriumUIWidgets[widgetNumber].pressed;
550 					if ( deliriumUIWidgets[widgetNumber].type == deliriumUI_Switch)
551 					{
552 						deliriumUIWidgets[widgetNumber].values[0] = deliriumUIWidgets[widgetNumber].pressed;
553 
554 						write_function( controller,deliriumUIWidgets[widgetNumber]. port_number, sizeof(float), 0, (const void*)&deliriumUIWidgets[widgetNumber].values[0]);
555 
556 					}
557 
558 				}
559 			}
560 		}
561 	}
562 }
563 
564 //------------------------------------------------------------------
565 // Return number of widgets
566 
getNumberOfWidgets(deliriumUI * deliriumUI_window)567 int getNumberOfWidgets(deliriumUI* deliriumUI_window)
568 {
569 	return deliriumUI_window->numberOfUIWidgets;
570 }
571 
572 //------------------------------------------------------------------
573 // Initialise widget list
574 
cleanUpDeliriumUI(deliriumUI * deliriumUI_window)575 void cleanUpDeliriumUI(deliriumUI* deliriumUI_window)
576 {
577 	deliriumUIWidget* deliriumUIWidgets = deliriumUI_window->deliriumUIWidgets;
578 
579 	free(deliriumUIWidgets);
580 }
581 
582 
583 
584 
585 
586