~cairo-dock-team/ubuntu/precise/cairo-dock-plug-ins/3.0.0.0rc1

« back to all changes in this revision

Viewing changes to Cairo-Penguin/src/applet-animation.c

  • Committer: Bazaar Package Importer
  • Author(s): Julien Lavergne, Matthieu Baerts (matttbe), Julien Lavergne
  • Date: 2009-10-05 19:27:17 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20091005192717-mvqvb395guktr401
Tags: 2.0.9-0ubuntu1
[ Matthieu Baerts (matttbe) ]
* New upstream release (LP: #435590)
* debian/control: 
 - Remove ${shlibs:Depends} for integration plug-ins to avoid
   pulling shared libraries which are detected automatically.
 - Added curl as depends for cairo-dock-plug-ins
* debian/rules:
 - Add --enable-dnd2share and --enable-musicplayer to enable new applets.
 - Remove --enable-rhythmbox and --enable-nvidia to remove those applets,
   not maintained upstream.
* Update *.install to take all generated applets.

[ Julien Lavergne ]
* Adjust changelog with Daniel Holbach suggestions.
* cairo-dock-plug-ins.changelogs:  Install specific changelog for 2.0.9
* Build-depends on cairo-dock-dev (>= 2.0.9)

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
18
*/
19
19
 
20
 
/******************************************************************************
21
 
 
22
 
This file is a part of the cairo-dock program, 
23
 
released under the terms of the GNU General Public License.
24
 
 
25
 
Written by Fabrice Rey (for any bug report, please mail me to fabounet@users.berlios.de)
26
 
 
27
 
******************************************************************************/
28
 
 
29
20
#include <stdlib.h>
30
21
#include <string.h>
31
22
#include <math.h>
53
44
                pFirstDrawnIcon = myDock->icons->data;
54
45
        int iXMin = (pFirstDrawnIcon != NULL ? pFirstDrawnIcon->fXAtRest : 0);
55
46
        int iXMax = iXMin + myDock->fFlatDockWidth;
56
 
        int iHeight = myDock->iCurrentHeight;
 
47
        int iHeight = myDock->container.iHeight;
57
48
        
58
49
        penguin_calculate_new_position (myApplet, pAnimation, iXMin, iXMax, iHeight);
59
50
        
60
 
        area.x = (int) ((myDock->iCurrentWidth - myDock->fFlatDockWidth) / 2 + MIN (iPreviousPositionX, myData.iCurrentPositionX));
61
 
        area.y = myDock->iCurrentHeight - MAX (iPreviousPositionY, myData.iCurrentPositionY) - pAnimation->iFrameHeight;
62
 
        area.width = abs (iPreviousPositionX - myData.iCurrentPositionX) + pAnimation->iFrameWidth;
63
 
        area.height = abs (iPreviousPositionY - myData.iCurrentPositionY) + pAnimation->iFrameHeight;
64
 
        
 
51
        if (myDock->container.bIsHorizontal)
 
52
        {
 
53
                area.x = (int) ((myDock->container.iWidth - myDock->fFlatDockWidth) / 2 + MIN (iPreviousPositionX, myData.iCurrentPositionX));
 
54
                area.y = myDock->container.iHeight - MAX (iPreviousPositionY, myData.iCurrentPositionY) - pAnimation->iFrameHeight;
 
55
                area.width = abs (iPreviousPositionX - myData.iCurrentPositionX) + pAnimation->iFrameWidth;
 
56
                area.height = abs (iPreviousPositionY - myData.iCurrentPositionY) + pAnimation->iFrameHeight;
 
57
        }
 
58
        else
 
59
        {
 
60
                area.y = (int) ((myDock->container.iWidth - myDock->fFlatDockWidth) / 2 + MIN (iPreviousPositionX, myData.iCurrentPositionX));
 
61
                if (myDock->container.bDirectionUp)
 
62
                {
 
63
                        area.x = myDock->container.iHeight - MAX (iPreviousPositionY, myData.iCurrentPositionY) - pAnimation->iFrameHeight;
 
64
                        area.y = myDock->container.iWidth - area.y;
 
65
                }
 
66
                else
 
67
                {
 
68
                        area.x = MAX (iPreviousPositionY, myData.iCurrentPositionY);
 
69
                }
 
70
                area.height = abs (iPreviousPositionX - myData.iCurrentPositionX) + pAnimation->iFrameWidth;
 
71
                area.width = abs (iPreviousPositionY - myData.iCurrentPositionY) + pAnimation->iFrameHeight;
 
72
        }
65
73
        cairo_dock_redraw_container_area (myContainer, &area);
66
74
        
67
75
        penguin_advance_to_next_frame (myApplet, pAnimation);
78
86
        _cairo_dock_set_alpha (1.);
79
87
        
80
88
        glBindTexture (GL_TEXTURE_2D, pAnimation->iTexture);
81
 
        _cairo_dock_apply_current_texture_portion_at_size_with_offset (1.*myData.iCurrentFrame/pAnimation->iNbFrames, 
82
 
                .5*myData.iCurrentDirection, 1./pAnimation->iNbFrames, 1./pAnimation->iNbDirections,
83
 
                pAnimation->iFrameWidth*fScale, pAnimation->iFrameHeight*fScale,
84
 
                fOffsetX + myData.iCurrentPositionX, fOffsetY + myData.iCurrentPositionY + pAnimation->iFrameHeight*fScale/2);
 
89
        _cairo_dock_apply_current_texture_portion_at_size_with_offset ((double) myData.iCurrentFrame/pAnimation->iNbFrames, 
 
90
                .5*myData.iCurrentDirection,
 
91
                1./pAnimation->iNbFrames,
 
92
                1./pAnimation->iNbDirections,
 
93
                pAnimation->iFrameWidth*fScale,
 
94
                pAnimation->iFrameHeight*fScale,
 
95
                fOffsetX + myData.iCurrentPositionX + pAnimation->iFrameWidth/2,
 
96
                fOffsetY + myData.iCurrentPositionY + pAnimation->iFrameHeight*fScale/2);
85
97
        _cairo_dock_disable_texture ();
86
 
        
87
 
        /*glEnable (GL_SCISSOR_TEST);
88
 
        glScissor ((fOffsetX + myData.iCurrentPositionX) * fScale,
89
 
                (fOffsetY * fScale + myData.iCurrentPositionY) * fScale,
90
 
                pAnimation->iFrameWidth * fScale,
91
 
                pAnimation->iFrameHeight * fScale);
92
 
        
93
 
        glTranslatef ((fOffsetX + myData.iCurrentPositionX + pAnimation->iFrameWidth * (.5 * pAnimation->iNbFrames - myData.iCurrentFrame)) * fScale,
94
 
                (fOffsetY * fScale + myData.iCurrentPositionY + pAnimation->iFrameHeight * (-.5 * pAnimation->iNbDirections + 1 + (myData.iCurrentDirection)) * fScale),
95
 
                0.);
96
 
        
97
 
        glColor4f (1., 1., 1., 1.);
98
 
        cairo_dock_draw_texture (pAnimation->iTexture,
99
 
                pAnimation->iFrameWidth * pAnimation->iNbFrames * fScale,
100
 
                pAnimation->iFrameHeight * pAnimation->iNbDirections * fScale);
101
 
        
102
 
        glDisable (GL_SCISSOR_TEST);*/
103
98
}
104
99
void penguin_draw_on_dock_opengl (CairoDockModuleInstance *myApplet, CairoContainer *pContainer)
105
100
{
110
105
        glPushMatrix ();
111
106
        glLoadIdentity ();
112
107
        
113
 
        _penguin_draw_texture (myApplet, pAnimation, (myDock->iCurrentWidth - myDock->fFlatDockWidth) * .5, 0., 1.);
 
108
        if (! myDock->container.bIsHorizontal)
 
109
        {
 
110
                glTranslatef (myDock->container.iHeight/2, myDock->container.iWidth/2, 0.);
 
111
                glRotatef (myDock->container.bDirectionUp ? 90. : -90., 0., 0., 1.);
 
112
                glTranslatef (- myDock->container.iWidth/2, - myDock->container.iHeight/2, 0.);
 
113
        }
 
114
        _penguin_draw_texture (myApplet, pAnimation, (myDock->container.iWidth - myDock->fFlatDockWidth) * .5, 0., 1.);
114
115
        
115
116
        glPopMatrix ();
116
117
}
126
127
        
127
128
        cairo_save (pCairoContext);
128
129
        cairo_set_operator (pCairoContext, CAIRO_OPERATOR_OVER);
129
 
        cairo_translate (pCairoContext, floor ((myDock->iCurrentWidth - myDock->fFlatDockWidth) / 2 + myData.iCurrentPositionX), myDock->iCurrentHeight - myData.iCurrentPositionY - pAnimation->iFrameHeight);
130
 
        cairo_set_source_surface (pCairoContext, pSurface, 0.0, 0.0);
131
 
        cairo_paint (pCairoContext);
 
130
        
 
131
        if (myDock->container.bIsHorizontal)
 
132
        {
 
133
                cairo_translate (pCairoContext, floor ((myDock->container.iWidth - myDock->fFlatDockWidth) / 2 + myData.iCurrentPositionX), myDock->container.iHeight - myData.iCurrentPositionY - pAnimation->iFrameHeight);
 
134
                cairo_set_source_surface (pCairoContext, pSurface, 0.0, 0.0);
 
135
                cairo_paint (pCairoContext);
 
136
        }
 
137
        else
 
138
        {
 
139
                if (myDock->container.bDirectionUp)
 
140
                        cairo_translate (pCairoContext,
 
141
                                myDock->container.iHeight - myData.iCurrentPositionY - pAnimation->iFrameHeight,
 
142
                                myDock->container.iWidth - (floor ((myDock->container.iWidth - myDock->fFlatDockWidth) / 2 + myData.iCurrentPositionX)));
 
143
                else
 
144
                        cairo_translate (pCairoContext,
 
145
                                myData.iCurrentPositionY,
 
146
                                floor ((myDock->container.iWidth - myDock->fFlatDockWidth) / 2 + myData.iCurrentPositionX));
 
147
                cairo_dock_draw_surface (pCairoContext, pSurface, pAnimation->iFrameWidth, pAnimation->iFrameHeight, myDock->container.bDirectionUp, myDock->container.bIsHorizontal, 1.);
 
148
        }
 
149
        
132
150
        cairo_restore (pCairoContext);
133
151
}
134
152
gboolean penguin_render_on_container (CairoDockModuleInstance *myApplet, CairoContainer *pContainer, cairo_t *pCairoContext)
156
174
        g_return_if_fail (pAnimation != NULL);
157
175
        
158
176
        double fScale = (pAnimation->iNbFrames > 1 || pAnimation->iSpeed != 0 || pAnimation->iAcceleration != 0 ? myIcon->fScale : 1.);  // s'il est a l'arret on le met a la taille de l'icone au repos.
159
 
        int iWidth = myIcon->fWidth / myDock->fRatio * fScale;
160
 
        int iHeight = myIcon->fHeight / myDock->fRatio * fScale;
 
177
        int iWidth = myIcon->fWidth / myDock->container.fRatio * fScale;
 
178
        int iHeight = myIcon->fHeight / myDock->container.fRatio * fScale;
161
179
        int iXMin = - iWidth / 2;
162
180
        int iXMax = - iXMin;
163
181
        
262
280
                        if (pAnimation->iNbDirections == 2) // on peut repartir dans l'autre sens ou remonter.
263
281
                        {
264
282
                                int iRandom = g_random_int_range (0, 3);
265
 
                                if (iRandom == 0)  // 1 chance sur 3.
 
283
                                if (iRandom != 0)  // 2 chance sur 3.
266
284
                                {
267
285
                                        myData.iCurrentDirection = 1 - myData.iCurrentDirection;
268
286
                                        cd_debug ("myData.iCurrentDirection <- %d", myData.iCurrentDirection);
479
497
                        if (myConfig.bFree)
480
498
                                myData.iCurrentPositionY = myContainer->iHeight;
481
499
                        else
482
 
                                myData.iCurrentPositionY = myIcon->fHeight / myDock->fRatio * myIcon->fScale;
 
500
                                myData.iCurrentPositionY = myIcon->fHeight / myDock->container.fRatio * myIcon->fScale;
483
501
                }
484
502
        }
485
503
}
511
529
        int iNewAnimation = penguin_choose_beginning_animation (myApplet);
512
530
        penguin_set_new_animation (myApplet, iNewAnimation);
513
531
        
514
 
        cairo_dock_remove_notification_func (CAIRO_DOCK_UPDATE_ICON_SLOW, (CairoDockNotificationFunc) penguin_update_icon, myApplet);
515
 
        cairo_dock_remove_notification_func (CAIRO_DOCK_UPDATE_DOCK_SLOW, (CairoDockNotificationFunc) penguin_update_container, myApplet);
516
 
        cairo_dock_remove_notification_func (CAIRO_DOCK_RENDER_DOCK, (CairoDockNotificationFunc) penguin_render_on_container, myApplet);
 
532
        penguin_remove_notfications();
517
533
        if (myConfig.bFree)
518
534
        {
519
 
                cairo_dock_register_notification (CAIRO_DOCK_UPDATE_DOCK_SLOW, (CairoDockNotificationFunc) penguin_update_container, CAIRO_DOCK_RUN_AFTER, myApplet);
520
 
                cairo_dock_register_notification (CAIRO_DOCK_RENDER_DOCK, (CairoDockNotificationFunc) penguin_render_on_container, CAIRO_DOCK_RUN_AFTER, myApplet);
 
535
                cairo_dock_register_notification_on_container (myContainer, CAIRO_DOCK_UPDATE_DOCK_SLOW, (CairoDockNotificationFunc) penguin_update_container, CAIRO_DOCK_RUN_AFTER, myApplet);
 
536
                cairo_dock_register_notification_on_container (myContainer, CAIRO_DOCK_RENDER_DOCK, (CairoDockNotificationFunc) penguin_render_on_container, CAIRO_DOCK_RUN_AFTER, myApplet);
521
537
        }
522
538
        else
523
539
        {
524
 
                cairo_dock_register_notification (CAIRO_DOCK_UPDATE_ICON_SLOW, (CairoDockNotificationFunc) penguin_update_icon, CAIRO_DOCK_RUN_AFTER, myApplet);
 
540
                cairo_dock_register_notification_on_icon (myIcon, CAIRO_DOCK_UPDATE_ICON_SLOW, (CairoDockNotificationFunc) penguin_update_icon, CAIRO_DOCK_RUN_AFTER, myApplet);
525
541
        }
526
542
}
527
543
 
544
560
                {
545
561
                        cairo_dock_insert_icon_in_dock (myIcon, myDock, CAIRO_DOCK_UPDATE_DOCK_SIZE, ! CAIRO_DOCK_ANIMATE_ICON);
546
562
                }
 
563
                cairo_dock_launch_animation (myContainer);
547
564
        }
548
565
        
549
566
        return FALSE;