Technical discussions | Discussions techniques
Tofe, Saturday 21 February 2009 à 15:09
|
|
Subscription date : 09 February 2008
Messages : 921
|
Réussi ! J'avais oublié un "CD_APPLET_REDRAW_MY_ICON" à la fin de ma méthode J'ai commité tout ça, si nochka veut jeter un coup d'oeil... En plus mon code est assez simple. |
nochka85, Saturday 21 February 2009 à 15:34
|
|
Tofe, Saturday 21 February 2009 à 16:53
|
|
Subscription date : 09 February 2008
Messages : 921
|
mmmh... Pour GMail, je te conseille de prendre le type "GMail", ce sera mieux géré.
pour ton crash, tu pourrais le passer à ddd ? je ne le reproduis pas ici... |
nochka85, Saturday 21 February 2009 à 17:21
|
|
Subscription date : 29 November 2007
Messages : 7408
|
Voilà :
.... sinon, pour l'analyse du code, c'est désespérant -> Je comprends rien du tout à tous ces myData et myConfig ... et encore moins à comment est organisé le tout |
nochka85, Saturday 21 February 2009 à 17:40
|
|
Subscription date : 29 November 2007
Messages : 7408
|
Arggghhh je vais CRAAAQUER !!!!
Euh .... est-ce que quelqu'un pourrait me filer un coup de main ? <- Je voudrais juste faire une applet "hyper simple" ( = on ne s'occupe pas de la config ou des évenements au clic sauf le bouton droit pour afficher le menu ) ... bref, un truc simple qui irait juste charger une image donnée directement dans le répertoire data de l'applet (par exemple une image texture.png qui se trouverait dans data) et l'affecterait à une texture PUIS afficherait un simple carré texturé (avec texture.png donc) dans le desklet .... le tout avec le minimum de code (= je pars d'une applet vierge générée avec le script)
.... je sais, c'est simple (allez, 5 minutes chrono pour Fabounet ) ... mais çà fait 9 heures que je tourne en rond ... et j'en suis toujours à ZERO (<- Je comprends même pas comment spécifier mon image texture.png .... ni où spécifier çà )!!! |
fabounet, Sunday 22 February 2009 à 14:46
|
|
Subscription date : 30 November 2007
Messages : 17118
|
un truc du style
cairo_dock_create_texture_from_image (image_path) ? |
nochka85, Sunday 22 February 2009 à 15:05
|
|
Subscription date : 29 November 2007
Messages : 7408
|
Bah oui, je voudrais pouvoir "simplement" faire n'importe où dans le code (et dans n'importe quel .c) un :
GLuint maTexture;
maTexture = cairo_dock_create_texture_from_image("images/texture.png"); <- Dans le cas où mon image est dans le répertoire /usr/share/cairo-dock/plug-ins/mon_applet/images/
... pour ensuite pouvoir binder ma texture avec :
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, maTexture);
D'aileurs, j'ai même pas essayer de faire çà ... me dis pas que c'est déjà possible ? |
Tofe, Sunday 22 February 2009 à 15:29
|
|
Subscription date : 09 February 2008
Messages : 921
|
Si tu veux je peux te guider dans le plugin mail, qui maintenant fait tout ça
Ne considère que "cd-mail-applet-init.c" et "cd-mail-applet-notification.c". Dans ce dernier, ne considère que "cd_mail_update_icon" et "cd_mail_render_3D_to_texture".
voici comment il fonctionne:
- dans l'init, je charge mon "thème" (je récupère les icones, je créé les texture OpenGL et je crée ma call list pour le cube.). Puis je m'abonne à CAIRO_DOCK_UPDATE_ICON_SLOW pour être appelé 10 fois par secondes dans "cd_mail_update_icon"
- dans "cd_mail_update_icon", justement, je fais les trucs intéressants: j'incrémente ma rotation, et je fais mon cube texturé OpenGL.
voilà, tout le reste c'est par rapport à la gestion des comptes mail, donc tu peux l'ignorer.
Là je suis en train de me pencher sur la vue "Carroussel", donc j'ai pas trop le temps de créer une applet "cube" simplifiée, mais en gros je partirais du plugin mail et je virerais 80% des trucs pour ne garder que ce que je viens de te décrire. |
nochka85, Sunday 22 February 2009 à 15:52
|
|
Subscription date : 29 November 2007
Messages : 7408
|
J'avais déjà compris tout çà ... et déjà analyser le code ( <- Du moins ce que j'avais pu )
mais le problème que j'ai, c'est que je n'arrive pas à simplifier le code pour ne pas gérer de thème et prendre directement ma texture dans le répertoire de l'applet (sans gérer de myConfig.cPicture , myConfig.cPicture, myConfig.cThemePath, etc...) ... et je n'arrive vraiment pas à comprendre l'histoire du "static char s_cFileNames[CLOCK_ELEMENTS][30]" et du "scan" du répertoire du thème ...
Pour info, avec la SDL, j'utilise un loader d'image super pratique qui fonctionne comme décrit plus haut :
maTexture1 = loadTexture("texture1.png"); <- Prend l'image directement dans le répertoire du programme
maTexture2 = loadTexture("data/texture2.png"); <- Prend l'image dans le répertoire data qui se trouve dans le répertoire du programme
maTexture3 = loadTexture("../data/texture3.png"); <- Prend l'image dans le répertoire data qui se trouve un cran en dessous du répertoire du programme
maTexture4 = loadTexture("./home/nochka85/images/texture4.png"); <- Prend l'image dans le répertoire indiqué
Ensuite, pour simplifier encore plus le code, pourquoi ne pas imaginer un truc du même style que printf :
maTexture5 = loadTexture("./usr/share/cairo-dock/clock/%s/texture4.png", myConfig.cThemePath); <- Pour prendre la texture dans le répertoire du thème spécifié dans la config
... mais bref, ceci mis à part, je ne comprend VRAIMENT pas comment je peux faire actuellement pour faire un simple :
maTexture1 = loadTexture("texture1.png");
Bref, c'est la dessus que j'aurais besoin d'un coup de main |
Tofe, Sunday 22 February 2009 à 16:17
|
|
Subscription date : 09 February 2008
Messages : 921
|
Oki. Je te propose donc, si ton path est relatif au répertoire de ton applet:
cImagePath = g_strdup_printf ("%s/%s", MY_APPLET_SHARE_DATA_DIR, "textures/texture1.png");
maTexture = cairo_dock_create_texture_from_image(cImagePath);
J'ai bien compris la question ? |
nochka85, Sunday 22 February 2009 à 16:47
|
|
Subscription date : 29 November 2007
Messages : 7408
|
Tout à fait ! -> Je teste çà tout de suite |
nochka85, Sunday 22 February 2009 à 17:02
|
|
Subscription date : 29 November 2007
Messages : 7408
|
Bon, çà fonctionne impeccable avec cette fonction :
void cd_opengl_load_texture (CairoDockModuleInstance *myApplet, gchar *texture)
{
gchar *cImagePath;
if (CD_APPLET_MY_CONTAINER_IS_OPENGL)
{
cImagePath = g_strdup_printf ("%s/%s", MY_APPLET_SHARE_DATA_DIR, texture);
myData.iPicture = cairo_dock_create_texture_from_image(cImagePath);
}
else
{
myData.iPicture = 0;
}
cd_debug( "cd_opengl_test : myData.iPicture = %d", myData.iPicture );
}
qu'il me suffit donc d'appeler en faisant par exemple :
cd_opengl_load_texture (myApplet, "texture.png");
... Merci Tofe |
nochka85, Sunday 22 February 2009 à 19:17
|
|
Subscription date : 29 November 2007
Messages : 7408
|
Tiens, j'ai un petit soucis (déjà vu et revu à chaque fois que quelqu'un a voulu créer sa première applet ) : Au lancement, le desklet (ou l'icone s'il est dans le dock) ne s'affiche pas -> Il faut survoler le desklet (ou rentrer dans le dock pour le voir affiché)
Bref, c'est quoi qu'il faut faire ?
... Sinon, c'est cool : Grace à Tofe, j'ai mon cube texturé qui tourne
Sinon, une petite remarque concernant le UPDATE_ICON_SLOW -> Mon cube tourne donc à 10 FPS .... ok ! Mais du coup, lorsque je le fait rentrer dans le dock -> PAF ! 30 FPS ... et il tourne donc 3x plus vite
Donc, 2 choses :
- Y'a t'il un moyen dans mon code de tester où se trouve l'applet (détaché ou dans le dock) afin d'ajuster sa vitesse de rotation en conséquence ?
- @Fab : est-ce que tu pourrais rajouter un UPDATE_ICON_FAST à 30 fps ? .... parce que là, suivant ce que l'on veut faire, çà saccade un peu tout de même <- J'ai voulu faire tourner mon cube un peu vite, et c'est pas très "zoli" |
KmY, Sunday 22 February 2009 à 19:23
|
|
Subscription date : 06 December 2007
Messages : 318
|
Tiens, j'ai un petit soucis (déjà vu et revu à chaque fois que quelqu'un a voulu créer sa première applet ) : Au lancement, le desklet (ou l'icone s'il est dans le dock) ne s'affiche pas -> Il faut survoler le desklet (ou rentrer dans le dock pour le voir affiché)
ça le fait aussi avec l'applet Pingouin, qui ne fonctionne plus vraiment d'ailleurs |
nochka85, Sunday 22 February 2009 à 19:37
|
|
Subscription date : 29 November 2007
Messages : 7408
|
chez moi le pingouin est désespérément transparent et très sombre |
Tofe, Sunday 22 February 2009 à 20:10
|
|
Subscription date : 09 February 2008
Messages : 921
|
Un petit "CD_APPLET_REDRAW_MY_ICON" manquant ? ^^
aussi, il y a le pointeur "myDock": s'il est pas NULL, alors tu es dans le dock. Dans ce cas, myDesklet devrait être non NULL, par opposition. |
nochka85, Sunday 22 February 2009 à 20:13
|
|
Subscription date : 29 November 2007
Messages : 7408
|
Bah oui mais où je le mets ? -> Bon, je vais en coller partout ! |
Tofe, Sunday 22 February 2009 à 20:19
|
|
Subscription date : 09 February 2008
Messages : 921
|
Un autre problème qui peut t'arriver est que tu n'as pas encore défini le type de container que tu veux (ici, sûrement "Simple"). Du coup tu n'es pas encore "officiellement" dans un desklet OpenGL, et le refresh de ton cube OpenGL n'est pas fait. J'ai bon ? |
nochka85, Sunday 22 February 2009 à 23:33
|
|
Subscription date : 29 November 2007
Messages : 7408
|
Bon, j'ai trouvé
... j'avais bien mon type de container de défini ("Simple") , et il ne me manquait aucun CD_APPLET_REDRAW_MY_ICON .... Le seul truc, c'est que je ne demandais RIEN à afficher à l'init ... Bref, un petit "cairo_dock_launch_animation (myContainer);" dans le CD_APPLET_INIT_BEGIN (juste après l'enregistrement des notifications) et çà roule !
A part çà, j'aurais une petite question annexe : Dans la section CD_APPLET_RESET_DATA_BEGIN , on est censé libérer tout ce qu'on a utilisé ... donc, j'y est collé un "glDeleteTextures (1, &myData.iPicture);" . Par contre, concernant toutes les variables type guint,gboolean,gint,gchar qui ne servent donc plus si on ferme l'applet , comment on fait pour les libérer ? <- est-ce qu'on utilise "g_free (ma_variable)" quel que soit le type ? |
fabounet, Tuesday 24 February 2009 à 00:12
|
|
Subscription date : 30 November 2007
Messages : 17118
|
g_free pour les chaines allouées avec g_strdup_xxx
si vous avez des idées pour simplifier le code des applets, je peux rajouter des macros à gogo
if (myDock)
{
code en mode dock
}
else if (myDesklet)
{
code en mode desklet
}
mais normalement il y'a très peu de différence entre les 2, c'est le but.
oui je peux rajouter la boucle rapide pour les desklets, mais n'en abusez pas, pensez aux portables |
Technical discussions | Discussions techniques
|