void cd_animations_draw_wobbly_cairo (Icon *pIcon, CairoDock *pDock, CDAnimationData *pData, cairo_t *pCairoContext) { pIcon->fWidthFactor *= pData->fWobblyWidthFactor; pIcon->fHeightFactor *= pData->fWobblyHeightFactor; cairo_save (pCairoContext); if (pDock->bHorizontalDock) cairo_translate (pCairoContext, pIcon->fWidth * pIcon->fScale * (1 - pIcon->fWidthFactor) / 2, pIcon->fHeight * pIcon->fScale * (1 - pIcon->fHeightFactor) / 2); else cairo_translate (pCairoContext, pIcon->fHeight * pIcon->fScale * (1 - pIcon->fHeightFactor) / 2, pIcon->fWidth * pIcon->fScale * (1 - pIcon->fWidthFactor) / 2); cairo_dock_draw_icon_cairo (pIcon, pDock, pCairoContext); cairo_restore (pCairoContext); pIcon->fWidthFactor /= pData->fWobblyWidthFactor; pIcon->fHeightFactor /= pData->fWobblyHeightFactor; }
static void render (Icon *pIcon, CairoDock *pDock, CDAnimationData *pData, cairo_t *pCairoContext) { if (pCairoContext) { double fWidthFactor = pData->fRotateWidthFactor; pIcon->fWidthFactor *= fWidthFactor; cairo_save (pCairoContext); if (pDock->container.bIsHorizontal) cairo_translate (pCairoContext, pIcon->fWidth * pIcon->fScale * (1 - fWidthFactor) / 2, 1.); else cairo_translate (pCairoContext, 1., pIcon->fWidth * pIcon->fScale * (1 - fWidthFactor) / 2); cairo_dock_draw_icon_cairo (pIcon, pDock, pCairoContext); cairo_restore (pCairoContext); pIcon->fWidthFactor /= fWidthFactor; } else { double fAlpha = pIcon->fAlpha; /**if (pData->fPulseAlpha != 0 && myConfig.bPulseSameShape) { _cairo_dock_set_alpha (pIcon->fAlpha * (1. - .5 * pData->fPulseAlpha)); ///pIcon->fAlpha *= 1. - .5 * pData->fPulseAlpha; } else*/ glColor4f(myConfig.pMeshColor[0], myConfig.pMeshColor[1], myConfig.pMeshColor[2], pIcon->fAlpha); // ici on peut donner une teinte aux reflets chrome. if (myConfig.pMeshColor[3] == 1) glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA); else //glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); _cairo_dock_set_blend_alpha (); _draw_rotating_icon (pIcon, pDock, pData, 1.); if (pData->fPulseAlpha != 0 && myConfig.bPulseSameShape) { _cairo_dock_set_alpha (pData->fPulseAlpha); double fScaleFactor = (1 - myConfig.fPulseZoom) * pData->fPulseAlpha + myConfig.fPulseZoom; glTranslatef (0., 0., -fScaleFactor * pIcon->fHeight * pIcon->fScale/2); _cairo_dock_set_blend_alpha (); _draw_rotating_icon (pIcon, pDock, pData, fScaleFactor); glTranslatef (0., 0., fScaleFactor * pIcon->fHeight * pIcon->fScale/2); } if (pDock->container.bUseReflect) { glPushMatrix (); _cairo_dock_set_alpha (myIconsParam.fAlbedo * sqrt (myIconsParam.fAlbedo) * pIcon->fAlpha); // reflect's transparency: we try to hide the lack of degrade :p double fOffsetY = pIcon->fHeight * pIcon->fScale + (0 + pIcon->fDeltaYReflection) * pDock->container.fRatio; if (pDock->container.bIsHorizontal) { if (pDock->container.bDirectionUp) { fOffsetY = pIcon->fHeight * pIcon->fScale + pIcon->fDeltaYReflection; glTranslatef (0., - fOffsetY, 0.); //glScalef (pIcon->fWidth * pIcon->fWidthFactor * pIcon->fScale, - pIcon->fHeight * pIcon->fScale, 1.); // reflect's size and we reverse it. } else { glTranslatef (0., fOffsetY, 0.); //glScalef (pIcon->fWidth * pIcon->fWidthFactor * pIcon->fScale, pDock->iIconSize * myIconsParam.fReflectHeightRatio * pDock->container.fRatio, 1.); } glScalef (1., -1., 1.); } else { if (pDock->container.bDirectionUp) { glTranslatef (fOffsetY, 0., 0.); //glScalef (- pDock->iIconSize * myIconsParam.fReflectHeightRatio * pDock->container.fRatio, pIcon->fWidth * pIcon->fWidthFactor * pIcon->fScale, 1.); } else { glTranslatef (- fOffsetY, 0., 0.); //glScalef (pDock->iIconSize * myIconsParam.fReflectHeightRatio * pDock->container.fRatio, pIcon->fWidth * pIcon->fWidthFactor * pIcon->fScale, 1.); } glScalef (-1., 1., 1.); } _cairo_dock_set_blend_alpha (); _draw_rotating_icon (pIcon, pDock, pData, 1.); glPopMatrix (); } pIcon->fAlpha = fAlpha; pData->bHasBeenPulsed = myConfig.bPulseSameShape; } }