#include "applet-config.h" GList *s_pLocationsList = NULL; CD_APPLET_GET_CONFIG_BEGIN //\_________________ On recupere toutes les valeurs de notre fichier de conf. myConfig.cLocationCode = CD_CONFIG_GET_STRING_WITH_DEFAULT ("Configuration", "location code", "FRXX0076"); myConfig.bISUnits = CD_CONFIG_GET_BOOLEAN_WITH_DEFAULT ("Configuration", "IS units", TRUE); myConfig.bCurrentConditions = CD_CONFIG_GET_BOOLEAN_WITH_DEFAULT ("Configuration", "display cc", TRUE); myConfig.bDisplayNights = CD_CONFIG_GET_BOOLEAN_WITH_DEFAULT ("Configuration", "display nights", FALSE); myConfig.iNbDays = MIN (CD_CONFIG_GET_INTEGER_WITH_DEFAULT ("Configuration", "nb days", WEATHER_NB_DAYS_MAX), WEATHER_NB_DAYS_MAX); myConfig.bDisplayTemperature = CD_CONFIG_GET_BOOLEAN_WITH_DEFAULT ("Configuration", "display temperature", TRUE); myConfig.cDialogDuration = 1000 * CD_CONFIG_GET_INTEGER_WITH_DEFAULT ("Configuration", "dialog duration", 7); myConfig.iCheckInterval = 60 * MAX (CD_CONFIG_GET_INTEGER_WITH_DEFAULT ("Configuration", "check interval", 15), 1); myConfig.cThemePath = CD_CONFIG_GET_THEME_PATH ("Configuration", "theme", "themes", "Classic"); myConfig.bDesklet3D = CD_CONFIG_GET_BOOLEAN_WITH_DEFAULT ("Configuration", "3D desket", FALSE); myConfig.cRenderer = CD_CONFIG_GET_STRING ("Configuration", "renderer"); gchar *cName = CD_CONFIG_GET_STRING ("Icon", "name"); myConfig.bSetName = (cName == NULL); g_free (cName); CD_APPLET_GET_CONFIG_END CD_APPLET_RESET_CONFIG_BEGIN g_free (myConfig.cLocationCode); g_free (myConfig.cRenderer); g_free (myConfig.cThemePath);
gboolean cd_opengl_load_3D_theme (CairoDockModuleInstance *myApplet, gchar *cThemePath) { gchar *cImageName; cairo_surface_t *pSurface; gchar *cConfFilePath = g_strdup_printf ("%s/%s", cThemePath, "theme.conf"); GKeyFile *pKeyFile = cairo_dock_open_key_file (cConfFilePath); g_free (cConfFilePath); if (pKeyFile == NULL) return FALSE; gchar *cThemePathUpToDate = NULL; gint iVersion = g_key_file_get_integer (pKeyFile, "Description", "Version", NULL); if (iVersion != 2) { /// effacer le theme et le recuperer sur le serveur... g_print ("theme en version inferieure => sera mis a jour...\n"); // on ferme la config de l'actuel theme. g_key_file_free (pKeyFile); pKeyFile = NULL; // on supprime le theme. g_return_val_if_fail (cThemePath && *cThemePath == '/', FALSE); gchar *cCommand = g_strdup_printf ("rm -rf '%s'", cThemePath); int r = system (cCommand); g_free (cCommand); // on recupere le theme distant. pKeyFile = cairo_dock_open_key_file (myApplet->cConfFilePath); if (pKeyFile != NULL) { gboolean bFlushConfFileNeeded = FALSE; cThemePathUpToDate = CD_CONFIG_GET_THEME_PATH ("Configuration", "theme", "themes", "cd_box_simple"); cThemePath = cThemePathUpToDate; g_key_file_free (pKeyFile); pKeyFile = NULL; // on ouvre la config du nouveau theme. cConfFilePath = g_strdup_printf ("%s/%s", cThemePath, "theme.conf"); pKeyFile = cairo_dock_open_key_file (cConfFilePath); g_free (cConfFilePath); if (pKeyFile == NULL) return FALSE; } g_return_val_if_fail (pKeyFile != NULL, FALSE); } GError *erreur = NULL; GString *sImagePath = g_string_new (""); //\_______________ les images d'avant et arriere plan. int iWidth, iHeight; CD_APPLET_GET_MY_ICON_EXTENT (&iWidth, &iHeight); double fImageWidth, fImageHeight; // dimensions de la surface generee. double fZoomX=1, fZoomY=1; // facteur de zoom qui lui a ete applique. cImageName = g_key_file_get_string (pKeyFile, "Pictures", "frame", &erreur); _check_error(erreur); if (cImageName != NULL) { g_string_printf (sImagePath, "%s/%s", cThemePath, cImageName); pSurface = cairo_dock_create_surface_from_image (sImagePath->str, myDrawContext, 1., iWidth, iHeight, CAIRO_DOCK_FILL_SPACE, &fImageWidth, &fImageHeight, &fZoomX, &fZoomY); myData.TextureFrame = cairo_dock_create_texture_from_surface (pSurface); cairo_surface_destroy (pSurface); g_free (cImageName); } cImageName = g_key_file_get_string (pKeyFile, "Pictures", "reflect", &erreur); _check_error(erreur); if (cImageName != NULL) { g_string_printf (sImagePath, "%s/%s", cThemePath, cImageName); pSurface = cairo_dock_create_surface_from_image (sImagePath->str, myDrawContext, 1., iWidth, iHeight, CAIRO_DOCK_FILL_SPACE, &fImageWidth, &fImageHeight, NULL, NULL); myData.TextureReflect = cairo_dock_create_texture_from_surface (pSurface); cairo_surface_destroy (pSurface); g_free (cImageName); } //\_______________ les coordonnees des 4 coins de la pochette // dans le referentiel du cadre (directement obtenues avec Gimp) => dans le referentiel de l'icone iWidth x iHeight. myData.itopleftX = g_key_file_get_integer (pKeyFile, "Configuration", "topleftX", &erreur) * fZoomX; _check_error(erreur); myData.itopleftY = g_key_file_get_integer (pKeyFile, "Configuration", "topleftY", &erreur) * fZoomY; _check_error(erreur); myData.ibottomleftX = g_key_file_get_integer (pKeyFile, "Configuration", "bottomleftX", &erreur) * fZoomX; _check_error(erreur); myData.ibottomleftY = g_key_file_get_integer (pKeyFile, "Configuration", "bottomleftY", &erreur) * fZoomY; _check_error(erreur); myData.ibottomrightX = g_key_file_get_integer (pKeyFile, "Configuration", "bottomrightX", &erreur) * fZoomX; _check_error(erreur); myData.ibottomrightY = g_key_file_get_integer (pKeyFile, "Configuration", "bottomrightY", &erreur) * fZoomY; _check_error(erreur); myData.itoprightX = g_key_file_get_integer (pKeyFile, "Configuration", "toprightX", &erreur) * fZoomX; _check_error(erreur); myData.itoprightY = g_key_file_get_integer (pKeyFile, "Configuration", "toprightY", &erreur) * fZoomY; _check_error(erreur); //\_______________ On definit la calllist qui déforme la pochette. myData.draw_cover = glGenLists(1); glNewList(myData.draw_cover , GL_COMPILE); glBegin(GL_QUADS); glTexCoord2d (0,0); glVertex3f (-.5 + myData.itopleftX / iWidth, +.5 - myData.itopleftY / iHeight, 0); glTexCoord2d (0,1); glVertex3f (-.5 + myData.ibottomleftX / iWidth, +.5 - myData.ibottomleftY /iHeight, 0.); glTexCoord2d (1,1); glVertex3f (-.5 + myData.ibottomrightX / iWidth, +.5 - myData.ibottomrightY / iHeight, 0.); glTexCoord2d (1,0); glVertex3f (-.5 + myData.itoprightX / iWidth, +.5 - myData.itoprightY / iHeight, 0.); glEnd(); glEndList(); //\_______________ les zones cliquables et l'OSD. myData.numberButtons = g_key_file_get_integer (pKeyFile, "Buttons", "number", NULL); if (myData.numberButtons != 0) { myData.osd = g_key_file_get_boolean (pKeyFile, "Buttons", "osd", &erreur); _check_error(erreur); // Bouton 1 myData.button1sizeX = g_key_file_get_integer (pKeyFile, "Button1", "sizeX", &erreur) * fZoomX; _check_error(erreur); myData.button1sizeY = g_key_file_get_integer (pKeyFile, "Button1", "sizeY", &erreur) * fZoomY; _check_error(erreur); myData.button1coordX = g_key_file_get_integer (pKeyFile, "Button1", "X", &erreur) * fZoomX + myData.button1sizeX/2; // on se ramene au centre. _check_error(erreur); myData.button1coordY = g_key_file_get_integer (pKeyFile, "Button1", "Y", &erreur) * fZoomY + myData.button1sizeY/2; // on se ramene au centre. _check_error(erreur); _make_texture_at_size (myData.TextureButton1, "Button1", "picture", myData.button1sizeX, myData.button1sizeY); if (myData.osd) { myData.osdPlaysizeX = g_key_file_get_integer (pKeyFile, "Button1", "osd play sizeX", &erreur) * fZoomX; _check_error(erreur); myData.osdPlaysizeY = g_key_file_get_integer (pKeyFile, "Button1", "osd play sizeY", &erreur) * fZoomY; _check_error(erreur); myData.osdPlaycoordX = g_key_file_get_integer (pKeyFile, "Button1", "osd play X", &erreur) * fZoomX + myData.osdPlaysizeX/2; _check_error(erreur); myData.osdPlaycoordY = g_key_file_get_integer (pKeyFile, "Button1", "osd play Y", &erreur) * fZoomY + myData.osdPlaysizeY/2; _check_error(erreur); _make_texture_at_size (myData.TextureOsdPlay, "Button1", "osd_play", myData.osdPlaysizeX, myData.osdPlaysizeY); myData.osdPausesizeX = g_key_file_get_integer (pKeyFile, "Button1", "osd pause sizeX", &erreur) * fZoomX; _check_error(erreur); myData.osdPausesizeY = g_key_file_get_integer (pKeyFile, "Button1", "osd pause sizeY", &erreur) * fZoomY; _check_error(erreur); myData.osdPausecoordX = g_key_file_get_integer (pKeyFile, "Button1", "osd pause X", &erreur) * fZoomX + myData.osdPausesizeX/2; _check_error(erreur); myData.osdPausecoordY = g_key_file_get_integer (pKeyFile, "Button1", "osd pause Y", &erreur) * fZoomY + myData.osdPausesizeY/2; _check_error(erreur); _make_texture_at_size (myData.TextureOsdPause, "Button1", "osd_pause", myData.osdPausesizeX, myData.osdPausesizeY); } // Bouton 4 if (myData.numberButtons > 3) { _check_error(erreur); myData.button4sizeX = g_key_file_get_integer (pKeyFile, "Button4", "sizeX", &erreur) * fZoomX; _check_error(erreur); myData.button4sizeY = g_key_file_get_integer (pKeyFile, "Button4", "sizeY", &erreur) * fZoomY; _check_error(erreur); myData.button4coordX = g_key_file_get_integer (pKeyFile, "Button4", "X", &erreur) * fZoomX + myData.button4sizeX/2; _check_error(erreur); myData.button4coordY = g_key_file_get_integer (pKeyFile, "Button4", "Y", &erreur) * fZoomY + myData.button4sizeY/2; _make_texture_at_size (myData.TextureButton4, "Button4", "picture", myData.button4sizeX, myData.button4sizeY); if (myData.osd) { myData.osdHomesizeX = g_key_file_get_integer (pKeyFile, "Button4", "osd sizeX", &erreur) * fZoomX; _check_error(erreur); myData.osdHomesizeY = g_key_file_get_integer (pKeyFile, "Button4", "osd sizeY", &erreur) * fZoomY; _check_error(erreur); myData.osdHomecoordX = g_key_file_get_integer (pKeyFile, "Button4", "osd X", &erreur) * fZoomX + myData.osdHomesizeX/2; _check_error(erreur); myData.osdHomecoordY = g_key_file_get_integer (pKeyFile, "Button4", "osd Y", &erreur) * fZoomY + myData.osdHomesizeY/2; _check_error(erreur); _make_texture_at_size (myData.TextureOsdHome, "Button4", "osd", myData.osdHomesizeX, myData.osdHomesizeY); } } // Bouton 3 if (myData.numberButtons > 2) { myData.button3sizeX = g_key_file_get_integer (pKeyFile, "Button3", "sizeX", &erreur) * fZoomX; _check_error(erreur); myData.button3sizeY = g_key_file_get_integer (pKeyFile, "Button3", "sizeY", &erreur) * fZoomY; _check_error(erreur); myData.button3coordX = g_key_file_get_integer (pKeyFile, "Button3", "X", &erreur) * fZoomX + myData.button3sizeX/2; _check_error(erreur); myData.button3coordY = g_key_file_get_integer (pKeyFile, "Button3", "Y", &erreur) * fZoomY + myData.button3sizeY/2; _check_error(erreur); _make_texture_at_size (myData.TextureButton3, "Button3", "picture", myData.button3sizeX, myData.button3sizeY); if (myData.osd) { myData.osdNextsizeX = g_key_file_get_integer (pKeyFile, "Button3", "osd sizeX", &erreur) * fZoomX; _check_error(erreur); myData.osdNextsizeY = g_key_file_get_integer (pKeyFile, "Button3", "osd sizeY", &erreur) * fZoomY; _check_error(erreur); myData.osdNextcoordX = g_key_file_get_integer (pKeyFile, "Button3", "osd X", &erreur) * fZoomX + myData.osdNextsizeX/2; _check_error(erreur); myData.osdNextcoordY = g_key_file_get_integer (pKeyFile, "Button3", "osd Y", &erreur) * fZoomY + myData.osdNextsizeY/2; _check_error(erreur); _make_texture_at_size (myData.TextureOsdNext, "Button3", "osd", myData.osdNextsizeX, myData.osdNextsizeY); } } // Bouton 2 if (myData.numberButtons > 1) { myData.button2sizeX = g_key_file_get_integer (pKeyFile, "Button2", "sizeX", &erreur) * fZoomX; _check_error(erreur); myData.button2sizeY = g_key_file_get_integer (pKeyFile, "Button2", "sizeY", &erreur) * fZoomY; _check_error(erreur); myData.button2coordX = g_key_file_get_integer (pKeyFile, "Button2", "X", &erreur) * fZoomX + myData.button2sizeX/2; _check_error(erreur); myData.button2coordY = g_key_file_get_integer (pKeyFile, "Button2", "Y", &erreur) * fZoomY + myData.button2sizeY/2; _check_error(erreur); _make_texture_at_size (myData.TextureButton2, "Button2", "picture", myData.button2sizeX, myData.button2sizeY); if (myData.osd) { myData.osdPrevsizeX = g_key_file_get_integer (pKeyFile, "Button2", "osd sizeX", &erreur) * fZoomX; _check_error(erreur); myData.osdPrevsizeY = g_key_file_get_integer (pKeyFile, "Button2", "osd sizeY", &erreur) * fZoomY; _check_error(erreur); myData.osdPrevcoordX = g_key_file_get_integer (pKeyFile, "Button2", "osd X", &erreur) * fZoomX + myData.osdPrevsizeX/2; _check_error(erreur); myData.osdPrevcoordY = g_key_file_get_integer (pKeyFile, "Button2", "osd Y", &erreur) * fZoomY + myData.osdPrevsizeY/2; _check_error(erreur); _make_texture_at_size (myData.TextureOsdPrev, "Button2", "osd", myData.osdPrevsizeX, myData.osdPrevsizeY); } } } g_key_file_free (pKeyFile); g_free (cThemePathUpToDate); return TRUE; }