void cd_slider_draw_default (GldiModuleInstance *myApplet) { if (CD_APPLET_MY_CONTAINER_IS_OPENGL) { CD_APPLET_START_DRAWING_MY_ICON_OR_RETURN (); _cd_slider_add_background_to_current_slide_opengl (myApplet, 0., 0., 1.); _cairo_dock_set_blend_alpha (); glEnable (GL_TEXTURE_2D); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); _cairo_dock_apply_texture_at_size_with_alpha (myData.iTexture, myData.slideArea.fImgW, myData.slideArea.fImgH, 1.); _cairo_dock_disable_texture (); CD_APPLET_FINISH_DRAWING_MY_ICON; } else { CD_APPLET_START_DRAWING_MY_ICON_OR_RETURN_CAIRO (); //\______________________ On efface le fond ///_cd_slider_erase_surface (myApplet); //\______________________ On empeche la transparence _cd_slider_add_background_to_current_slide (myApplet, myData.slideArea.fImgX, myData.slideArea.fImgY, 1.); //\______________________ On dessine la nouvelle surface. cairo_set_source_surface (myDrawContext, myData.pCairoSurface, myData.slideArea.fImgX, myData.slideArea.fImgY); cairo_paint (myDrawContext); CD_APPLET_FINISH_DRAWING_MY_ICON_CAIRO; } }
gboolean cd_slider_fade (GldiModuleInstance *myApplet) { myData.iAnimCNT ++; myData.fAnimAlpha = 1.*myData.iAnimCNT / myConfig.iNbAnimationStep; if (myData.fAnimAlpha > 1) myData.fAnimAlpha = 1; if (CD_APPLET_MY_CONTAINER_IS_OPENGL) { CD_APPLET_START_DRAWING_MY_ICON_OR_RETURN (FALSE); //Fond précédent. if (myData.iPrevTexture != 0) _cd_slider_add_background_to_prev_slide_opengl (myApplet, 0., 0., 1 - myData.fAnimAlpha); //On empeche la transparence. _cd_slider_add_background_to_current_slide_opengl (myApplet, 0., 0., myData.fAnimAlpha); _cairo_dock_set_blend_alpha (); glEnable (GL_TEXTURE_2D); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); //Image précédente if (myData.iPrevTexture != 0) { _cairo_dock_apply_texture_at_size_with_alpha (myData.iPrevTexture, myData.prevSlideArea.fImgW, myData.prevSlideArea.fImgH, 1 - myData.fAnimAlpha); } //Image courante. _cairo_dock_apply_texture_at_size_with_alpha (myData.iTexture, myData.slideArea.fImgW, myData.slideArea.fImgH, myData.fAnimAlpha); _cairo_dock_disable_texture (); CD_APPLET_FINISH_DRAWING_MY_ICON; } else { CD_APPLET_START_DRAWING_MY_ICON_OR_RETURN_CAIRO (FALSE); //On efface le fond ///_cd_slider_erase_surface (myApplet); //Fond précédent. if (myData.pPrevCairoSurface != NULL) _cd_slider_add_background_to_prev_slide (myApplet, myData.prevSlideArea.fImgX, myData.prevSlideArea.fImgY, 1 - myData.fAnimAlpha); //On empeche la transparence. _cd_slider_add_background_to_current_slide (myApplet, myData.slideArea.fImgX, myData.slideArea.fImgY, myData.fAnimAlpha); //Image précédente if (myData.pPrevCairoSurface != NULL) { cairo_set_source_surface (myDrawContext, myData.pPrevCairoSurface, myData.prevSlideArea.fImgX, myData.prevSlideArea.fImgY); cairo_paint_with_alpha (myDrawContext, 1 - myData.fAnimAlpha); } cairo_set_source_surface (myDrawContext, myData.pCairoSurface, myData.slideArea.fImgX, myData.slideArea.fImgY); cairo_paint_with_alpha (myDrawContext, myData.fAnimAlpha); CD_APPLET_FINISH_DRAWING_MY_ICON_CAIRO; } return (myData.fAnimAlpha < .99); }
gboolean cd_slider_blank_fade (GldiModuleInstance *myApplet) { myData.iAnimCNT ++; myData.fAnimAlpha = 1 - 1.*myData.iAnimCNT / myConfig.iNbAnimationStep; if (myData.fAnimAlpha < 0) myData.fAnimAlpha = 0; if (CD_APPLET_MY_CONTAINER_IS_OPENGL) { CD_APPLET_START_DRAWING_MY_ICON_OR_RETURN (FALSE); //On empeche la transparence _cd_slider_add_background_to_current_slide_opengl (myApplet, 0., 0., 1.); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable (GL_TEXTURE_2D); glEnable (GL_BLEND); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); //Image glColor4f (1., 1., 1., 1.); cairo_dock_apply_texture_at_size (myData.iTexture, myData.slideArea.fImgW, myData.slideArea.fImgH); //Masque glDisable (GL_TEXTURE_2D); glColor4f (1., 1., 1., myData.fAnimAlpha); glBegin(GL_QUADS); glVertex3f(-.5*myData.slideArea.fImgW, .5*myData.slideArea.fImgH, 0.); glVertex3f( .5*myData.slideArea.fImgW, .5*myData.slideArea.fImgH, 0.); glVertex3f( .5*myData.slideArea.fImgW, -.5*myData.slideArea.fImgH, 0.); glVertex3f(-.5*myData.slideArea.fImgW, -.5*myData.slideArea.fImgH, 0.); glEnd(); glDisable (GL_BLEND); CD_APPLET_FINISH_DRAWING_MY_ICON; } else { CD_APPLET_START_DRAWING_MY_ICON_OR_RETURN_CAIRO (FALSE); //On efface le fond ///_cd_slider_erase_surface (myApplet); //On empeche la transparence _cd_slider_add_background_to_current_slide (myApplet, myData.slideArea.fImgX, myData.slideArea.fImgY, 1.); //Image cairo_set_source_surface (myDrawContext, myData.pCairoSurface, myData.slideArea.fImgX, myData.slideArea.fImgY); cairo_paint (myDrawContext); //Masque cairo_set_source_rgba (myDrawContext, 1., 1., 1., myData.fAnimAlpha); cairo_rectangle(myDrawContext, 0., 0., myData.iSurfaceWidth, myData.iSurfaceHeight); cairo_fill(myDrawContext); CD_APPLET_FINISH_DRAWING_MY_ICON_CAIRO; } return (myData.fAnimAlpha > 0.01); }
void cd_opengl_render_to_texture (CairoDockModuleInstance *myApplet) { int iWidth, iHeight; CD_APPLET_GET_MY_ICON_EXTENT (&iWidth, &iHeight); CD_APPLET_START_DRAWING_MY_ICON_OR_RETURN (); cd_opengl_scene (myApplet, iWidth, iHeight); CD_APPLET_FINISH_DRAWING_MY_ICON; }
gboolean cd_slider_shrink_down (GldiModuleInstance *myApplet) { myData.iAnimCNT ++; myData.fAnimAlpha = 2 - 1.*myData.iAnimCNT / myConfig.iNbAnimationStep; if (myData.fAnimAlpha < 1) myData.fAnimAlpha = 1; if (CD_APPLET_MY_CONTAINER_IS_OPENGL) { CD_APPLET_START_DRAWING_MY_ICON_OR_RETURN (FALSE); glPushMatrix (); glScalef (myData.fAnimAlpha, myData.fAnimAlpha, 1.); _cd_slider_add_background_to_current_slide_opengl (myApplet, 0., 0., 1.); glPopMatrix (); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable (GL_TEXTURE_2D); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glColor4f (1., 1., 1., 1.); cairo_dock_apply_texture_at_size (myData.iTexture, myData.slideArea.fImgW * myData.fAnimAlpha, myData.slideArea.fImgH * myData.fAnimAlpha); glDisable (GL_TEXTURE_2D); glDisable (GL_BLEND); CD_APPLET_FINISH_DRAWING_MY_ICON; } else { CD_APPLET_START_DRAWING_MY_ICON_OR_RETURN_CAIRO (FALSE); //On efface le fond ///_cd_slider_erase_surface (myApplet); //On met a l'échelle en recentrant. cairo_save(myDrawContext); cairo_translate (myDrawContext, (myData.iSurfaceWidth - myData.slideArea.fImgW * myData.fAnimAlpha) / 2, (myData.iSurfaceHeight - myData.slideArea.fImgH * myData.fAnimAlpha) / 2); cairo_scale(myDrawContext, myData.fAnimAlpha, myData.fAnimAlpha); //On empeche la transparence et on affiche l'image _cd_slider_add_background_to_current_slide (myApplet, 0., 0., 1.); cairo_set_source_surface (myDrawContext, myData.pCairoSurface, 0., 0.); cairo_paint_with_alpha (myDrawContext, myData.fAnimAlpha); cairo_restore(myDrawContext); CD_APPLET_FINISH_DRAWING_MY_ICON_CAIRO; } return (myData.fAnimAlpha > 1.01); }
void cd_xkbd_update_icon (const gchar *cGroupName, const gchar *cShortGroupName, gboolean bRedrawSurface) { //g_print ("%s (%s;%s;%d)\n", __func__, cGroupName, cShortGroupName, bRedrawSurface); if (bRedrawSurface) // group has changed -> update the icon and label { if (! cShortGroupName) { cShortGroupName = myData.cShortGroupName; } else { g_free (myData.cShortGroupName); myData.cShortGroupName = g_strdup (cShortGroupName); } if (! cGroupName) { cGroupName = myData.cGroupName; } else { g_free (myData.cGroupName); myData.cGroupName = g_strdup (cGroupName); } //\__________________ On sauvegarde l'ancienne surface/texture. cairo_dock_free_image_buffer (myData.pOldImage); myData.pOldImage = myData.pCurrentImage; myData.pCurrentImage = NULL; //\__________________ On cree la nouvelle surface (la taille du texte peut avoir change). int iWidth, iHeight; CD_APPLET_GET_MY_ICON_EXTENT (&iWidth, &iHeight); if (iWidth <= 1 && iHeight <= 1) // peut arriver au lancement en mode desklet. { return; } int w, h; cairo_surface_t *pSurface = cairo_dock_create_surface_from_text_full (cShortGroupName, &myConfig.textDescription, 1., 0, /// iWidth &w, &h); myData.pCurrentImage = g_new0 (CairoDockImageBuffer, 1); cairo_dock_load_image_buffer_from_surface (myData.pCurrentImage, pSurface, w, h); //\__________________ On lance une transition entre ancienne et nouvelle surface/texture, ou on dessine direct. if (myConfig.iTransitionDuration != 0 && myData.pOldImage != NULL) { CD_APPLET_SET_TRANSITION_ON_MY_ICON (cd_xkbd_render_step_cairo, cd_xkbd_render_step_opengl, g_bUseOpenGL, // bFastPace : vite si opengl, lent si cairo. myConfig.iTransitionDuration, TRUE); // bRemoveWhenFinished } else { if (CD_APPLET_MY_CONTAINER_IS_OPENGL) { CD_APPLET_START_DRAWING_MY_ICON_OR_RETURN (); cd_xkbd_render_step_opengl (myIcon, myApplet); CD_APPLET_FINISH_DRAWING_MY_ICON; } else { cd_xkbd_render_step_cairo (myIcon, myApplet); } CD_APPLET_REDRAW_MY_ICON; } //\__________________ update the label. CD_APPLET_SET_NAME_FOR_MY_ICON (cGroupName); } else // only the indicators have changed -> trigger a redraw event only (overlay update). { CD_APPLET_REDRAW_MY_ICON; } //\__________________ lock indicators if (myConfig.bShowKbdIndicator) { cd_debug ("XKBD: caps-lock: %d; num-lock: %d", myData.iCurrentIndic & 1, myData.iCurrentIndic & 2); if (myData.iCurrentIndic & 1) // caps-lock { if (! (myData.iPreviousIndic & 1)) // TODO: cairo_dock_search_icon_s_path in init? or here the first time (save to data) and reset in reload? { if (myConfig.cEmblemCapsLock && (myData.cEmblemCapsLock || (myData.cEmblemCapsLock = cairo_dock_search_icon_s_path (myConfig.cEmblemCapsLock, // search for an icon only the first time MAX (myIcon->image.iWidth/2, myIcon->image.iHeight/2))))) CD_APPLET_ADD_OVERLAY_ON_MY_ICON (myData.cEmblemCapsLock, CAIRO_OVERLAY_UPPER_RIGHT); else CD_APPLET_ADD_OVERLAY_ON_MY_ICON (MY_APPLET_SHARE_DATA_DIR"/caps-lock.png", CAIRO_OVERLAY_UPPER_RIGHT); } } else { if (myData.iPreviousIndic & 1) CD_APPLET_REMOVE_OVERLAY_ON_MY_ICON (CAIRO_OVERLAY_UPPER_RIGHT); } if (myData.iCurrentIndic & 2) // num-lock { if (! (myData.iPreviousIndic & 2)) { if (myConfig.cEmblemNumLock &&(myData.cEmblemNumLock || (myData.cEmblemNumLock = cairo_dock_search_icon_s_path (myConfig.cEmblemNumLock, MAX (myIcon->image.iWidth/2, myIcon->image.iHeight/2))))) CD_APPLET_ADD_OVERLAY_ON_MY_ICON (myData.cEmblemNumLock, CAIRO_OVERLAY_UPPER_LEFT); else CD_APPLET_ADD_OVERLAY_ON_MY_ICON (MY_APPLET_SHARE_DATA_DIR"/num-lock.png", CAIRO_OVERLAY_UPPER_LEFT); } } else { if (myData.iPreviousIndic & 2) CD_APPLET_REMOVE_OVERLAY_ON_MY_ICON (CAIRO_OVERLAY_UPPER_LEFT); } myData.iPreviousIndic = myData.iCurrentIndic; } }
gboolean cd_slider_cube (GldiModuleInstance *myApplet) { myData.iAnimCNT ++; myData.fAnimAlpha = 1.*myData.iAnimCNT / myConfig.iNbAnimationStep; if (myData.fAnimAlpha > 1) myData.fAnimAlpha = 1; if (CD_APPLET_MY_CONTAINER_IS_OPENGL) { CD_APPLET_START_DRAWING_MY_ICON_OR_RETURN (FALSE); gldi_gl_container_set_perspective_view_for_icon (myIcon); glScalef (1., -1., 1.); double fTheta = - 45. + myData.fAnimAlpha * 90.; // -45 -> 45 glTranslatef (0., 0., - myData.iSurfaceWidth * sqrt(2)/2 * cos (fTheta/180.*G_PI)); // pour faire tenir le cube dans la fenetre. glEnable (GL_DEPTH_TEST); // image precedente. if (fTheta < 25) // inutile de dessiner si elle est derriere l'image courante, par l'effet de perspective (en fait 22.5, mais bizarrement ca a l'air un peu trop tot). { glPushMatrix (); glRotatef (45. + fTheta, 0., 1., 0.); // 0 -> 90 glTranslatef (0., 0., myData.slideArea.fImgW/2-1); _cd_slider_add_background_to_prev_slide_opengl (myApplet, 0., 0., 1.); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable (GL_TEXTURE_2D); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glTranslatef (0., 0., 1.); glColor4f (1., 1., 1., 1.); cairo_dock_apply_texture_at_size (myData.iPrevTexture, myData.prevSlideArea.fImgW, myData.prevSlideArea.fImgH); glDisable (GL_TEXTURE_2D); glPopMatrix (); } // image courante a 90deg. glRotatef (45. + fTheta, 0., 1., 0.); // 0 -> 90 if (myData.prevSlideArea.fImgW != 0) glTranslatef (- myData.prevSlideArea.fImgW/2+1, 0., 0.); else glTranslatef (- myData.iSurfaceWidth/2+1, 0., 0.); glPushMatrix (); glRotatef (-90., 0., 1., 0.); _cd_slider_add_background_to_current_slide_opengl (myApplet, 0., 0., 1.); glPopMatrix (); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable (GL_TEXTURE_2D); glTranslatef (-1., 0., 0.); glRotatef (-90., 0., 1., 0.); glColor4f (1., 1., 1., 1.); cairo_dock_apply_texture_at_size (myData.iTexture, myData.slideArea.fImgW, myData.slideArea.fImgH); glDisable (GL_DEPTH_TEST); glDisable (GL_TEXTURE_2D); glDisable (GL_BLEND); CD_APPLET_FINISH_DRAWING_MY_ICON; if (myDock) gldi_gl_container_set_ortho_view (myContainer); } else { cd_slider_draw_default (myApplet); return FALSE; } return (myData.fAnimAlpha < .99); }
gboolean cd_slider_diaporama (GldiModuleInstance *myApplet) { static double a = .75; myData.iAnimCNT ++; myData.fAnimAlpha = 1.*myData.iAnimCNT / myConfig.iNbAnimationStep; if (myData.fAnimAlpha > 1) myData.fAnimAlpha = 1; if (CD_APPLET_MY_CONTAINER_IS_OPENGL) { CD_APPLET_START_DRAWING_MY_ICON_OR_RETURN (FALSE); gldi_gl_container_set_perspective_view_for_icon (myIcon); glScalef (1., -1., 1.); if (myData.iPrevTexture != 0 && myData.fAnimAlpha < a) { glPushMatrix (); glTranslatef (-myData.iSurfaceWidth/2, 0., 0.); glRotatef (120. * (myData.fAnimAlpha/a), 0., 1., 0.); glTranslatef (myData.iSurfaceWidth/2, 0., 0.); //On empeche la transparence _cd_slider_add_background_to_prev_slide_opengl (myApplet, 0., 0., 1.); //Image _cairo_dock_enable_texture (); _cairo_dock_set_blend_alpha (); _cairo_dock_set_alpha (1.); cairo_dock_apply_texture_at_size (myData.iPrevTexture, myData.prevSlideArea.fImgW, myData.prevSlideArea.fImgH); glPopMatrix (); } if (myData.fAnimAlpha > 1-a) { glTranslatef (myData.iSurfaceWidth/2, 0., 0.); glRotatef (-120. * (1-myData.fAnimAlpha)/a, 0., 1., 0.); glTranslatef (-myData.iSurfaceWidth/2, 0., 0.); //On empeche la transparence _cd_slider_add_background_to_current_slide_opengl (myApplet, 0., 0., 1.); //Image _cairo_dock_enable_texture (); _cairo_dock_set_blend_alpha (); _cairo_dock_set_alpha (1.); glColor4f (1., 1., 1., 1.); cairo_dock_apply_texture_at_size (myData.iTexture, myData.slideArea.fImgW, myData.slideArea.fImgH); } _cairo_dock_disable_texture (); CD_APPLET_FINISH_DRAWING_MY_ICON; if (myDock) gldi_gl_container_set_ortho_view (myContainer); } else { CD_APPLET_START_DRAWING_MY_ICON_OR_RETURN_CAIRO (FALSE); //On efface le fond ///_cd_slider_erase_surface (myApplet); //Image précédante if (myData.pPrevCairoSurface != NULL) { _cd_slider_add_background_to_prev_slide (myApplet, myData.prevSlideArea.fImgX - myData.fAnimAlpha * myData.iSurfaceWidth, myData.prevSlideArea.fImgY, 1.); cairo_set_source_surface (myDrawContext, myData.pPrevCairoSurface, myData.prevSlideArea.fImgX - myData.fAnimAlpha * myData.iSurfaceWidth, myData.prevSlideArea.fImgY); cairo_paint(myDrawContext); } //Image courante. _cd_slider_add_background_to_current_slide (myApplet, myData.slideArea.fImgX + myData.iSurfaceWidth * (1 - myData.fAnimAlpha), myData.slideArea.fImgY, 1.); cairo_set_source_surface (myDrawContext, myData.pCairoSurface, myData.slideArea.fImgX + myData.iSurfaceWidth * (1 - myData.fAnimAlpha), myData.slideArea.fImgY); cairo_paint(myDrawContext); CD_APPLET_FINISH_DRAWING_MY_ICON_CAIRO; } return (myData.fAnimAlpha < .999); }
gboolean cd_slider_side_kick (GldiModuleInstance *myApplet) { myData.iAnimCNT += myData.sens; int xcumul = myData.iAnimCNT * (myData.iAnimCNT + 1) / 2; xcumul *= (10./myConfig.iNbAnimationStep); /// au pif, a calculer ... if (xcumul > myData.iSurfaceWidth) // en fait il faudrait regarder x > (iSurfaceWidth + fImgW)/2, mais comme ca on se prend pas la tete avec la difference de fImgW et fprevImgW, et ca laisse une petite tampo pendant laquelle l'icone est vide, c'est bien. myData.sens = -1; // donc le coup d'apres on sera a nouveau en-dessous du seuil. if (CD_APPLET_MY_CONTAINER_IS_OPENGL) { CD_APPLET_START_DRAWING_MY_ICON_OR_RETURN (FALSE); if (myData.sens == 1) // image precedente qui part sur la gauche. { _cd_slider_add_background_to_prev_slide_opengl (myApplet, - xcumul, 0., 1.); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable (GL_TEXTURE_2D); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glColor4f (1., 1., 1., 1.); glTranslatef (- xcumul, 0., 0.); cairo_dock_apply_texture_at_size (myData.iPrevTexture, myData.prevSlideArea.fImgW, myData.prevSlideArea.fImgH); } else // image courante qui vient de la droite. { _cd_slider_add_background_to_current_slide_opengl (myApplet, xcumul, 0., 1.); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable (GL_TEXTURE_2D); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glColor4f (1., 1., 1., 1.); glTranslatef (xcumul, 0., 0.); cairo_dock_apply_texture_at_size (myData.iTexture, myData.slideArea.fImgW, myData.slideArea.fImgH); } glDisable (GL_TEXTURE_2D); glDisable (GL_BLEND); CD_APPLET_FINISH_DRAWING_MY_ICON; } else { CD_APPLET_START_DRAWING_MY_ICON_OR_RETURN_CAIRO (FALSE); //On efface le fond ///_cd_slider_erase_surface (myApplet); if (myData.sens == 1) // image precedente qui part sur la gauche. { _cd_slider_add_background_to_prev_slide (myApplet, myData.prevSlideArea.fImgX - xcumul, myData.prevSlideArea.fImgY, 1.); cairo_set_source_surface (myDrawContext, myData.pPrevCairoSurface, myData.prevSlideArea.fImgX - xcumul, myData.prevSlideArea.fImgY); } else // image courante qui vient de la droite. { _cd_slider_add_background_to_current_slide (myApplet, myData.slideArea.fImgX + xcumul, myData.slideArea.fImgY, 1.); cairo_set_source_surface (myDrawContext, myData.pCairoSurface, myData.slideArea.fImgX + xcumul, myData.slideArea.fImgY); } cairo_paint (myDrawContext); CD_APPLET_FINISH_DRAWING_MY_ICON_CAIRO; } return (myData.iAnimCNT > 0); }
gboolean cd_slider_fade_in_out (GldiModuleInstance *myApplet) { myData.iAnimCNT ++; if (myData.iAnimCNT <= myConfig.iNbAnimationStep) // courbe de alpha : \__/ myData.fAnimAlpha = 1. * (myConfig.iNbAnimationStep - myData.iAnimCNT) / myConfig.iNbAnimationStep; else if (myData.iAnimCNT <= 1.5 * myConfig.iNbAnimationStep) { return TRUE; // on ne fait rien, texture inchangee. } else myData.fAnimAlpha = 1. * (myData.iAnimCNT - 1.5 * myConfig.iNbAnimationStep) / myConfig.iNbAnimationStep; if (CD_APPLET_MY_CONTAINER_IS_OPENGL) { CD_APPLET_START_DRAWING_MY_ICON_OR_RETURN (FALSE); if (myData.iAnimCNT < myConfig.iNbAnimationStep && myData.iPrevTexture != 0) // image precedente en train de disparaitre { //On empeche la transparence _cd_slider_add_background_to_prev_slide_opengl (myApplet, 0., 0., myData.fAnimAlpha); //Image glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable (GL_TEXTURE_2D); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glColor4f (1., 1., 1., myData.fAnimAlpha); cairo_dock_apply_texture_at_size (myData.iPrevTexture, myData.prevSlideArea.fImgW, myData.prevSlideArea.fImgH); } else if (myData.iAnimCNT > myConfig.iNbAnimationStep) // image courante en train d'apparaitre. { //On empeche la transparence _cd_slider_add_background_to_current_slide_opengl (myApplet, 0., 0., myData.fAnimAlpha); //Image glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable (GL_TEXTURE_2D); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glColor4f (1., 1., 1., myData.fAnimAlpha); cairo_dock_apply_texture_at_size (myData.iTexture, myData.slideArea.fImgW, myData.slideArea.fImgH); } glDisable (GL_TEXTURE_2D); glDisable (GL_BLEND); CD_APPLET_FINISH_DRAWING_MY_ICON; } else { CD_APPLET_START_DRAWING_MY_ICON_OR_RETURN_CAIRO (FALSE); //On efface le fond ///_cd_slider_erase_surface (myApplet); if (myData.iAnimCNT < myConfig.iNbAnimationStep) // image precedente en train de disparaitre { //On empeche la transparence _cd_slider_add_background_to_prev_slide (myApplet, myData.prevSlideArea.fImgX, myData.prevSlideArea.fImgY, myData.fAnimAlpha); //Image cairo_set_source_surface (myDrawContext, myData.pPrevCairoSurface, myData.prevSlideArea.fImgX, myData.prevSlideArea.fImgY); } else if (myData.iAnimCNT > myConfig.iNbAnimationStep) // image courante en train d'apparaitre. { //On empeche la transparence _cd_slider_add_background_to_current_slide (myApplet, myData.slideArea.fImgX, myData.slideArea.fImgY, myData.fAnimAlpha); //Image cairo_set_source_surface (myDrawContext, myData.pCairoSurface, myData.slideArea.fImgX, myData.slideArea.fImgY); } cairo_paint_with_alpha (myDrawContext, myData.fAnimAlpha); CD_APPLET_FINISH_DRAWING_MY_ICON_CAIRO; } return (myData.fAnimAlpha < .99); }