2
* This file is a part of the Cairo-Dock project
4
* Copyright : (C) see the 'copyright' file.
5
* E-mail : see the 'copyright' file.
7
* This program is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU General Public License
9
* as published by the Free Software Foundation; either version 3
10
* of the License, or (at your option) any later version.
12
* This program is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* GNU General Public License for more details.
16
* You should have received a copy of the GNU General Public License
17
* along with this program. If not, see <http://www.gnu.org/licenses/>.
23
#include "rhythmbox-struct.h"
24
#include "rhythmbox-config.h"
25
#include "rhythmbox-draw.h"
26
#include "3dcover-draw.h"
28
#define _check_error(erreur) \
29
if (erreur != NULL) { \
30
cd_warning (erreur->message);\
31
g_error_free (erreur);\
34
#define _make_texture_at_size(texture, cGroupName, cKeyName, w, h)\
35
cImageName = g_key_file_get_string (pKeyFile, cGroupName, cKeyName, &erreur);\
36
_check_error(erreur);\
37
if (cImageName != NULL) {\
38
g_string_printf (sImagePath, "%s/%s", cThemePath, cImageName);\
39
pSurface = cairo_dock_create_surface_for_icon (sImagePath->str, myDrawContext, w, h);\
40
texture = cairo_dock_create_texture_from_surface (pSurface);\
41
cairo_surface_destroy (pSurface);\
42
g_free (cImageName); }
44
#define _draw_osd(texture, x_, y_, w_, h_)\
45
X = myData.osdPausecoordX - myData.osdPausesizeX/2;\
46
Y = myData.osdPausecoordY - myData.osdPausesizeY/2;\
47
_transform_coords(X, Y, u1, v1);\
48
X = myData.osdPausecoordX - myData.osdPausesizeX/2;\
49
Y = myData.osdPausecoordY + myData.osdPausesizeY/2;\
50
_transform_coords(X, Y, u2, v2);\
51
X = myData.osdPausecoordX + myData.osdPausesizeX/2;\
52
Y = myData.osdPausecoordY + myData.osdPausesizeY/2;\
53
_transform_coords(X, Y, u3, v3);\
54
X = myData.osdPausecoordX + myData.osdPausesizeX/2;\
55
Y = myData.osdPausecoordY - myData.osdPausesizeY/2;\
56
_transform_coords(X, Y, u4, v4);\
57
glBindTexture (GL_TEXTURE_2D, texture);\
60
glVertex3f (- iWidth/2 + u1, + iHeight/2 - v1, 0);\
62
glVertex3f (- iWidth/2 + u2, + iHeight/2 - v2, 0);\
64
glVertex3f (- iWidth/2 + u3, + iHeight/2 - v3, 0);\
66
glVertex3f (- iWidth/2 + u4, + iHeight/2 - v4, 0);\
69
gboolean cd_opengl_load_3D_theme (CairoDockModuleInstance *myApplet, gchar *cThemePath)
72
cairo_surface_t *pSurface;
73
gchar *cConfFilePath = g_strdup_printf ("%s/%s", cThemePath, "theme.conf");
74
GKeyFile *pKeyFile = cairo_dock_open_key_file (cConfFilePath);
75
g_free (cConfFilePath);
79
gchar *cThemePathUpToDate = NULL;
80
gint iVersion = g_key_file_get_integer (pKeyFile, "Description", "Version", NULL);
83
/// effacer le theme et le recuperer sur le serveur...
84
g_print ("theme en version inferieure => sera mis a jour...\n");
85
// on ferme la config de l'actuel theme.
86
g_key_file_free (pKeyFile);
89
// on supprime le theme.
90
g_return_val_if_fail (cThemePath && *cThemePath == '/', FALSE);
91
gchar *cCommand = g_strdup_printf ("rm -rf '%s'", cThemePath);
92
int r = system (cCommand);
95
// on recupere le theme distant.
96
pKeyFile = cairo_dock_open_key_file (myApplet->cConfFilePath);
99
gboolean bFlushConfFileNeeded = FALSE;
100
cThemePathUpToDate = CD_CONFIG_GET_THEME_PATH ("Configuration", "theme", "themes", "cd_box_simple");
101
cThemePath = cThemePathUpToDate;
102
g_key_file_free (pKeyFile);
105
// on ouvre la config du nouveau theme.
106
cConfFilePath = g_strdup_printf ("%s/%s", cThemePath, "theme.conf");
107
pKeyFile = cairo_dock_open_key_file (cConfFilePath);
108
g_free (cConfFilePath);
109
if (pKeyFile == NULL)
112
g_return_val_if_fail (pKeyFile != NULL, FALSE);
115
GError *erreur = NULL;
116
GString *sImagePath = g_string_new ("");
118
//\_______________ les images d'avant et arriere plan.
120
CD_APPLET_GET_MY_ICON_EXTENT (&iWidth, &iHeight);
121
double fImageWidth, fImageHeight; // dimensions de la surface generee.
122
double fZoomX=1, fZoomY=1; // facteur de zoom qui lui a ete applique.
124
cImageName = g_key_file_get_string (pKeyFile, "Pictures", "frame", &erreur);
125
_check_error(erreur);
126
if (cImageName != NULL)
128
g_string_printf (sImagePath, "%s/%s", cThemePath, cImageName);
129
pSurface = cairo_dock_create_surface_from_image (sImagePath->str,
133
CAIRO_DOCK_FILL_SPACE,
134
&fImageWidth, &fImageHeight,
137
myData.TextureFrame = cairo_dock_create_texture_from_surface (pSurface);
138
cairo_surface_destroy (pSurface);
142
cImageName = g_key_file_get_string (pKeyFile, "Pictures", "reflect", &erreur);
143
_check_error(erreur);
144
if (cImageName != NULL)
146
g_string_printf (sImagePath, "%s/%s", cThemePath, cImageName);
147
pSurface = cairo_dock_create_surface_from_image (sImagePath->str,
151
CAIRO_DOCK_FILL_SPACE,
152
&fImageWidth, &fImageHeight,
155
myData.TextureReflect = cairo_dock_create_texture_from_surface (pSurface);
156
cairo_surface_destroy (pSurface);
160
//\_______________ les coordonnees des 4 coins de la pochette
161
// dans le referentiel du cadre (directement obtenues avec Gimp) => dans le referentiel de l'icone iWidth x iHeight.
162
myData.itopleftX = g_key_file_get_integer (pKeyFile, "Configuration", "topleftX", &erreur) * fZoomX;
163
_check_error(erreur);
164
myData.itopleftY = g_key_file_get_integer (pKeyFile, "Configuration", "topleftY", &erreur) * fZoomY;
165
_check_error(erreur);
167
myData.ibottomleftX = g_key_file_get_integer (pKeyFile, "Configuration", "bottomleftX", &erreur) * fZoomX;
168
_check_error(erreur);
169
myData.ibottomleftY = g_key_file_get_integer (pKeyFile, "Configuration", "bottomleftY", &erreur) * fZoomY;
170
_check_error(erreur);
172
myData.ibottomrightX = g_key_file_get_integer (pKeyFile, "Configuration", "bottomrightX", &erreur) * fZoomX;
173
_check_error(erreur);
174
myData.ibottomrightY = g_key_file_get_integer (pKeyFile, "Configuration", "bottomrightY", &erreur) * fZoomY;
175
_check_error(erreur);
177
myData.itoprightX = g_key_file_get_integer (pKeyFile, "Configuration", "toprightX", &erreur) * fZoomX;
178
_check_error(erreur);
179
myData.itoprightY = g_key_file_get_integer (pKeyFile, "Configuration", "toprightY", &erreur) * fZoomY;
180
_check_error(erreur);
182
//\_______________ On definit la calllist qui dƩforme la pochette.
183
myData.draw_cover = glGenLists(1);
184
glNewList(myData.draw_cover , GL_COMPILE);
187
glVertex3f (-.5 + myData.itopleftX / iWidth, +.5 - myData.itopleftY / iHeight, 0);
189
glVertex3f (-.5 + myData.ibottomleftX / iWidth, +.5 - myData.ibottomleftY /iHeight, 0.);
191
glVertex3f (-.5 + myData.ibottomrightX / iWidth, +.5 - myData.ibottomrightY / iHeight, 0.);
193
glVertex3f (-.5 + myData.itoprightX / iWidth, +.5 - myData.itoprightY / iHeight, 0.);
197
//\_______________ les zones cliquables et l'OSD.
198
myData.numberButtons = g_key_file_get_integer (pKeyFile, "Buttons", "number", NULL);
199
if (myData.numberButtons != 0)
201
myData.osd = g_key_file_get_boolean (pKeyFile, "Buttons", "osd", &erreur);
202
_check_error(erreur);
203
myData.b3dThemesDebugMode = g_key_file_get_boolean (pKeyFile, "Buttons", "debug", &erreur);
204
_check_error(erreur);
207
myData.button1sizeX = g_key_file_get_integer (pKeyFile, "Button1", "sizeX", &erreur) * fZoomX;
208
_check_error(erreur);
209
myData.button1sizeY = g_key_file_get_integer (pKeyFile, "Button1", "sizeY", &erreur) * fZoomY;
210
_check_error(erreur);
211
myData.button1coordX = g_key_file_get_integer (pKeyFile, "Button1", "X", &erreur) * fZoomX + myData.button1sizeX/2; // on se ramene au centre.
212
_check_error(erreur);
213
myData.button1coordY = g_key_file_get_integer (pKeyFile, "Button1", "Y", &erreur) * fZoomY + myData.button1sizeY/2; // on se ramene au centre.
214
_check_error(erreur);
216
_make_texture_at_size (myData.TextureButton1, "Button1", "picture", myData.button1sizeX, myData.button1sizeY);
220
myData.osdPlaysizeX = g_key_file_get_integer (pKeyFile, "Button1", "osd play sizeX", &erreur) * fZoomX;
221
_check_error(erreur);
222
myData.osdPlaysizeY = g_key_file_get_integer (pKeyFile, "Button1", "osd play sizeY", &erreur) * fZoomY;
223
_check_error(erreur);
224
myData.osdPlaycoordX = g_key_file_get_integer (pKeyFile, "Button1", "osd play X", &erreur) * fZoomX + myData.osdPlaysizeX/2;
225
_check_error(erreur);
226
myData.osdPlaycoordY = g_key_file_get_integer (pKeyFile, "Button1", "osd play Y", &erreur) * fZoomY + myData.osdPlaysizeY/2;
227
_check_error(erreur);
228
_make_texture_at_size (myData.TextureOsdPlay, "Button1", "osd_play", myData.osdPlaysizeX, myData.osdPlaysizeY);
230
myData.osdPausesizeX = g_key_file_get_integer (pKeyFile, "Button1", "osd pause sizeX", &erreur) * fZoomX;
231
_check_error(erreur);
232
myData.osdPausesizeY = g_key_file_get_integer (pKeyFile, "Button1", "osd pause sizeY", &erreur) * fZoomY;
233
_check_error(erreur);
234
myData.osdPausecoordX = g_key_file_get_integer (pKeyFile, "Button1", "osd pause X", &erreur) * fZoomX + myData.osdPausesizeX/2;
235
_check_error(erreur);
236
myData.osdPausecoordY = g_key_file_get_integer (pKeyFile, "Button1", "osd pause Y", &erreur) * fZoomY + myData.osdPausesizeY/2;
237
_check_error(erreur);
238
_make_texture_at_size (myData.TextureOsdPause, "Button1", "osd_pause", myData.osdPausesizeX, myData.osdPausesizeY);
242
if (myData.numberButtons > 3)
244
_check_error(erreur);
245
myData.button4sizeX = g_key_file_get_integer (pKeyFile, "Button4", "sizeX", &erreur) * fZoomX;
246
_check_error(erreur);
247
myData.button4sizeY = g_key_file_get_integer (pKeyFile, "Button4", "sizeY", &erreur) * fZoomY;
248
_check_error(erreur);
249
myData.button4coordX = g_key_file_get_integer (pKeyFile, "Button4", "X", &erreur) * fZoomX + myData.button4sizeX/2;
250
_check_error(erreur);
251
myData.button4coordY = g_key_file_get_integer (pKeyFile, "Button4", "Y", &erreur) * fZoomY + myData.button4sizeY/2;
253
_make_texture_at_size (myData.TextureButton4, "Button4", "picture", myData.button4sizeX, myData.button4sizeY);
257
myData.osdHomesizeX = g_key_file_get_integer (pKeyFile, "Button4", "osd sizeX", &erreur) * fZoomX;
258
_check_error(erreur);
259
myData.osdHomesizeY = g_key_file_get_integer (pKeyFile, "Button4", "osd sizeY", &erreur) * fZoomY;
260
_check_error(erreur);
261
myData.osdHomecoordX = g_key_file_get_integer (pKeyFile, "Button4", "osd X", &erreur) * fZoomX + myData.osdHomesizeX/2;
262
_check_error(erreur);
263
myData.osdHomecoordY = g_key_file_get_integer (pKeyFile, "Button4", "osd Y", &erreur) * fZoomY + myData.osdHomesizeY/2;
264
_check_error(erreur);
265
_make_texture_at_size (myData.TextureOsdHome, "Button4", "osd", myData.osdHomesizeX, myData.osdHomesizeY);
270
if (myData.numberButtons > 2)
272
myData.button3sizeX = g_key_file_get_integer (pKeyFile, "Button3", "sizeX", &erreur) * fZoomX;
273
_check_error(erreur);
274
myData.button3sizeY = g_key_file_get_integer (pKeyFile, "Button3", "sizeY", &erreur) * fZoomY;
275
_check_error(erreur);
276
myData.button3coordX = g_key_file_get_integer (pKeyFile, "Button3", "X", &erreur) * fZoomX + myData.button3sizeX/2;
277
_check_error(erreur);
278
myData.button3coordY = g_key_file_get_integer (pKeyFile, "Button3", "Y", &erreur) * fZoomY + myData.button3sizeY/2;
279
_check_error(erreur);
281
_make_texture_at_size (myData.TextureButton3, "Button3", "picture", myData.button3sizeX, myData.button3sizeY);
285
myData.osdNextsizeX = g_key_file_get_integer (pKeyFile, "Button3", "osd sizeX", &erreur) * fZoomX;
286
_check_error(erreur);
287
myData.osdNextsizeY = g_key_file_get_integer (pKeyFile, "Button3", "osd sizeY", &erreur) * fZoomY;
288
_check_error(erreur);
289
myData.osdNextcoordX = g_key_file_get_integer (pKeyFile, "Button3", "osd X", &erreur) * fZoomX + myData.osdNextsizeX/2;
290
_check_error(erreur);
291
myData.osdNextcoordY = g_key_file_get_integer (pKeyFile, "Button3", "osd Y", &erreur) * fZoomY + myData.osdNextsizeY/2;
292
_check_error(erreur);
293
_make_texture_at_size (myData.TextureOsdNext, "Button3", "osd", myData.osdNextsizeX, myData.osdNextsizeY);
298
if (myData.numberButtons > 1)
300
myData.button2sizeX = g_key_file_get_integer (pKeyFile, "Button2", "sizeX", &erreur) * fZoomX;
301
_check_error(erreur);
302
myData.button2sizeY = g_key_file_get_integer (pKeyFile, "Button2", "sizeY", &erreur) * fZoomY;
303
_check_error(erreur);
304
myData.button2coordX = g_key_file_get_integer (pKeyFile, "Button2", "X", &erreur) * fZoomX + myData.button2sizeX/2;
305
_check_error(erreur);
306
myData.button2coordY = g_key_file_get_integer (pKeyFile, "Button2", "Y", &erreur) * fZoomY + myData.button2sizeY/2;
307
_check_error(erreur);
309
_make_texture_at_size (myData.TextureButton2, "Button2", "picture", myData.button2sizeX, myData.button2sizeY);
313
myData.osdPrevsizeX = g_key_file_get_integer (pKeyFile, "Button2", "osd sizeX", &erreur) * fZoomX;
314
_check_error(erreur);
315
myData.osdPrevsizeY = g_key_file_get_integer (pKeyFile, "Button2", "osd sizeY", &erreur) * fZoomY;
316
_check_error(erreur);
317
myData.osdPrevcoordX = g_key_file_get_integer (pKeyFile, "Button2", "osd X", &erreur) * fZoomX + myData.osdPrevsizeX/2;
318
_check_error(erreur);
319
myData.osdPrevcoordY = g_key_file_get_integer (pKeyFile, "Button2", "osd Y", &erreur) * fZoomY + myData.osdPrevsizeY/2;
320
_check_error(erreur);
321
_make_texture_at_size (myData.TextureOsdPrev, "Button2", "osd", myData.osdPrevsizeX, myData.osdPrevsizeY);
325
g_key_file_free (pKeyFile);
326
g_free (cThemePathUpToDate);
330
void cd_opengl_reset_opengl_datas (CairoDockModuleInstance *myApplet)
332
if (myData.draw_cover != 0)
334
glDeleteLists (myData.draw_cover, 1);
335
myData.draw_cover = 0;
337
if(myData.TextureFrame != 0)
339
_cairo_dock_delete_texture (myData.TextureFrame);
340
myData.TextureFrame = 0;
342
if(myData.iPrevTextureCover != 0)
344
_cairo_dock_delete_texture (myData.iPrevTextureCover);
345
myData.iPrevTextureCover = 0;
347
if(myData.TextureCover != 0)
349
_cairo_dock_delete_texture (myData.TextureCover);
350
myData.TextureCover = 0;
352
if(myData.TextureReflect != 0)
354
_cairo_dock_delete_texture (myData.TextureReflect);
355
myData.TextureReflect = 0;
357
if(myData.TextureButton1 != 0)
359
_cairo_dock_delete_texture (myData.TextureButton1);
360
myData.TextureButton1 = 0;
362
if(myData.TextureButton2 != 0)
364
_cairo_dock_delete_texture (myData.TextureButton2);
365
myData.TextureButton2 = 0;
367
if(myData.TextureButton3 != 0)
369
_cairo_dock_delete_texture (myData.TextureButton3);
370
myData.TextureButton3 = 0;
372
if(myData.TextureButton4 != 0)
374
_cairo_dock_delete_texture (myData.TextureButton4);
375
myData.TextureButton4 = 0;
377
if(myData.TextureOsdPlay != 0)
379
_cairo_dock_delete_texture (myData.TextureOsdPlay);
380
myData.TextureOsdPlay = 0;
382
if(myData.TextureOsdPause != 0)
384
_cairo_dock_delete_texture (myData.TextureOsdPause);
385
myData.TextureOsdPause = 0;
387
if(myData.TextureOsdPrev != 0)
389
_cairo_dock_delete_texture (myData.TextureOsdPrev);
390
myData.TextureOsdPrev = 0;
392
if(myData.TextureOsdNext != 0)
394
_cairo_dock_delete_texture (myData.TextureOsdNext);
395
myData.TextureOsdNext = 0;
397
if(myData.TextureOsdHome != 0)
399
_cairo_dock_delete_texture (myData.TextureOsdHome);
400
myData.TextureOsdHome = 0;
402
myData.mouseOnButton1 = myData.mouseOnButton2 = myData.mouseOnButton3 = myData.mouseOnButton4 = 0;
403
myData.iButton1Count = myData.iButton2Count = myData.iButton3Count = myData.iButton4Count = 0;
405
myData.iCoverTransition = 0;
409
#define _transform_coords(X, Y, x, y) \
410
dx1 = 1. - fabs (X - X1) / W;\
411
dy1 = 1. - fabs (Y - Y1) / H;\
412
dx2 = 1. - fabs (X - X2) / W;\
413
dy2 = 1. - fabs (Y - Y2) / H;\
414
dx3 = 1. - fabs (X - X3) / W;\
415
dy3 = 1. - fabs (Y - Y3) / H;\
416
dx4 = 1. - fabs (X - X4) / W;\
417
dy4 = 1. - fabs (Y - Y4) / H;\
418
x = X + dx1 * dy1 * t1x + dx2 * dy2 * t2x + dx3 * dy3 * t3x + dx4 * dy4 * t4x;\
419
y = Y + dx1 * dy1 * t1y + dx2 * dy2 * t2y + dx3 * dy3 * t3y + dx4 * dy4 * t4y;
421
void cd_opengl_scene (CairoDockModuleInstance *myApplet, int iWidth, int iHeight)
423
//g_print ("%s (%d)\n", __func__, myData.iCoverTransition);
424
_cairo_dock_enable_texture ();
425
_cairo_dock_set_blend_source ();
427
// on dessine le cadre.
428
_cairo_dock_apply_texture_at_size_with_alpha (myData.TextureFrame, iWidth, iHeight, 1.);
430
// on dessine la couverture.
432
glScalef (iWidth, iHeight, 1.);
433
if (myData.iPrevTextureCover != 0 && myData.iCoverTransition != 0)
435
_cairo_dock_set_blend_over ();
436
_cairo_dock_set_alpha ((double)myData.iCoverTransition/NB_TRANSITION_STEP);
437
glBindTexture(GL_TEXTURE_2D, myData.iPrevTextureCover);
438
glCallList(myData.draw_cover);
440
if (myData.TextureCover != 0)
442
_cairo_dock_set_blend_over ();
443
_cairo_dock_set_alpha (1.-(double)myData.iCoverTransition/NB_TRANSITION_STEP);
444
glBindTexture(GL_TEXTURE_2D, myData.TextureCover);
445
glCallList(myData.draw_cover);
448
_cairo_dock_set_blend_over ();
451
// on dessine les boutons qui sont allumes.
452
if (myData.iButton1Count)
455
glTranslatef (-iWidth/2 + myData.button1coordX, +iHeight/2 - myData.button1coordY, 0.);
456
_cairo_dock_apply_texture_at_size_with_alpha (myData.TextureButton1, myData.button1sizeX, myData.button1sizeY, (double)myData.iButton1Count/NB_TRANSITION_STEP);
459
if (myData.iButton2Count)
462
glTranslatef (-iWidth/2 + myData.button2coordX, +iHeight/2 - myData.button2coordY, 0.);
463
_cairo_dock_apply_texture_at_size_with_alpha (myData.TextureButton2, myData.button2sizeX, myData.button2sizeY, (double)myData.iButton2Count/NB_TRANSITION_STEP);
466
if (myData.iButton3Count)
469
glTranslatef (-iWidth/2 + myData.button3coordX, +iHeight/2 - myData.button3coordY, 0.);
470
_cairo_dock_apply_texture_at_size_with_alpha (myData.TextureButton3, myData.button3sizeX, myData.button3sizeY, (double)myData.iButton3Count/NB_TRANSITION_STEP);
473
if (myData.iButton4Count)
476
glTranslatef (-iWidth/2 + myData.button4coordX, +iHeight/2 - myData.button4coordY, 0.);
477
_cairo_dock_apply_texture_at_size_with_alpha (myData.TextureButton4, myData.button4sizeX, myData.button4sizeY, (double)myData.iButton4Count/NB_TRANSITION_STEP);
481
// on determine la transformation pour les OSD.
482
// en majuscule : coordonees initiales.
483
double W = iWidth, H = iHeight;
484
double X1 = 0, Y1 = 0;
485
double X2 = W, Y2 = 0;
486
double X3 = W, Y3 = H;
487
double X4 = 0, Y4 = H;
488
// translation du point P1(0;0)
489
double x1 = myData.ibottomleftX, y1 = myData.ibottomleftY;
490
double t1x = x1 - X1;
491
double t1y = y1 - X1;
492
// translation du point P2(500;0)
493
double x2 = myData.ibottomrightX, y2 = myData.ibottomrightY;
494
double t2x = x2 - X2;
495
double t2y = y2 - Y2;
496
// translation du point P2(500;500)
497
double x3 = myData.itoprightX, y3 = myData.itoprightY;
498
double t3x = x3 - X3;
499
double t3y = y3 - Y3;
500
// translation du point P2(0;500)
501
double x4 = myData.itopleftX, y4 = myData.itopleftY;
502
double t4x = x4 - X4;
503
double t4y = y4 - Y4;
505
double dx1, dy1, dx2, dy2, dx3, dy3, dx4, dy4; // ponderations.
506
double X, Y; // coordonnees initiales d'un coin de l'OSD.
507
double u1, v1, u2, v2, u3, v3, u4, v4; // coordonnees finales des coins de l'OSD.
509
// on dessine les OSD.
510
//if(myData.bIsRunning && myData.iState != 0)
512
_cairo_dock_set_alpha (1.);
513
if (myData.mouseOnButton1)
517
_draw_osd (myData.TextureOsdPause, myData.osdPausecoordX, myData.osdPausecoordY, myData.osdPausesizeX, myData.osdPausesizeY);
518
//g_print ("%.1f;%.1f ; %.1f;%.1f ;%.1f;%.1f ;%.1f;%.1f\n", u1, v1, u2, v2,u3,v3,u4,v4);
522
_draw_osd (myData.TextureOsdPlay, myData.osdPlaycoordX, myData.osdPlaycoordY, myData.osdPlaysizeX, myData.osdPlaysizeY);
523
//g_print ("%.1f;%.1f ; %.1f;%.1f ;%.1f;%.1f ;%.1f;%.1f\n", u1, v1, u2, v2,u3,v3,u4,v4);
526
else if (myData.mouseOnButton2)
528
_draw_osd (myData.TextureOsdPrev, myData.osdPrevcoordX, myData.osdPrevcoordY, myData.osdPrevsizeX, myData.osdPrevsizeY);
530
else if (myData.mouseOnButton3)
532
_draw_osd (myData.TextureOsdNext, myData.osdNextcoordX, myData.osdNextcoordY, myData.osdNextsizeX, myData.osdNextsizeY);
534
else if (myData.mouseOnButton4)
536
_draw_osd (myData.TextureOsdHome, myData.osdHomecoordX, myData.osdHomecoordY, myData.osdHomesizeX, myData.osdHomesizeY);
538
else if (! myData.playing)
540
_draw_osd (myData.TextureOsdPause, myData.osdPausecoordX, myData.osdPausecoordY, myData.osdPausesizeX, myData.osdPausesizeY);
542
else if (myData.playing && ! myData.cover_exist)
544
_draw_osd (myData.TextureOsdPlay, myData.osdPlaycoordX, myData.osdPlaycoordY, myData.osdPlaysizeX, myData.osdPlaysizeY);
549
// on dessine les reflets.
550
_cairo_dock_set_blend_pbuffer ();
551
if (myData.TextureReflect != 0)
552
_cairo_dock_apply_texture_at_size_with_alpha (myData.TextureReflect, iWidth, iHeight, 1.);
554
_cairo_dock_disable_texture ();
558
void cd_opengl_render_to_texture (CairoDockModuleInstance *myApplet)
561
CD_APPLET_GET_MY_ICON_EXTENT (&iWidth, &iHeight);
563
CD_APPLET_START_DRAWING_MY_ICON_OR_RETURN ();
565
cd_opengl_scene (myApplet, iWidth, iHeight);
567
CD_APPLET_FINISH_DRAWING_MY_ICON;
571
int cd_opengl_check_buttons_state (CairoDockModuleInstance *myApplet)
573
if (myDesklet->iWidth == 0 || myDesklet->iHeight == 0 || myData.numberButtons == 0) // precaution.
576
//\_________________ On convertit les coordonnees du pointeur dans le referentiel de l'icone.
577
myData.iMouseX = myDesklet->iMouseX - myDesklet->iLeftSurfaceOffset;
578
myData.iMouseY = myDesklet->iMouseY - myDesklet->iTopSurfaceOffset;
580
//\_________________ On teste le survole des differents boutons :
581
// Test du survol button 1 :
582
myData.mouseOnButton1 = (
583
myData.iMouseX > (myData.button1coordX - (myData.button1sizeX/2)) &&
584
myData.iMouseX < (myData.button1coordX + (myData.button1sizeX/2)) &&
585
myData.iMouseY > (myData.button1coordY - (myData.button1sizeY/2)) &&
586
myData.iMouseY < (myData.button1coordY + (myData.button1sizeY/2))
588
if (myData.numberButtons > 3)
590
// Test du survol button 4 :
591
myData.mouseOnButton4 = (
592
myData.iMouseX > (myData.button4coordX - (myData.button4sizeX/2)) &&
593
myData.iMouseX < (myData.button4coordX + (myData.button4sizeX/2)) &&
594
myData.iMouseY > (myData.button4coordY - (myData.button4sizeY/2)) &&
595
myData.iMouseY < (myData.button4coordY + (myData.button4sizeY/2))
598
if (myData.numberButtons > 2)
600
// Test du survol button 3 :
601
myData.mouseOnButton3 = (
602
myData.iMouseX > (myData.button3coordX - (myData.button3sizeX/2)) &&
603
myData.iMouseX < (myData.button3coordX + (myData.button3sizeX/2)) &&
604
myData.iMouseY > (myData.button3coordY - (myData.button3sizeY/2)) &&
605
myData.iMouseY < (myData.button3coordY + (myData.button3sizeY/2))
608
if (myData.numberButtons > 1)
610
// Test du survol button 2 :
611
myData.mouseOnButton2 = (
612
myData.iMouseX > (myData.button2coordX - (myData.button2sizeX/2)) &&
613
myData.iMouseX < (myData.button2coordX + (myData.button2sizeX/2)) &&
614
myData.iMouseY > (myData.button2coordY - (myData.button2sizeY/2)) &&
615
myData.iMouseY < (myData.button2coordY + (myData.button2sizeY/2))
619
return (myData.mouseOnButton1 << 0) |
620
(myData.mouseOnButton2 << 1) |
621
(myData.mouseOnButton3 << 2) |
622
(myData.mouseOnButton4 << 3);