summaryrefslogtreecommitdiff
authorErkin Bahceci <erkinbah@gmail.com>2009-11-29 05:11:21 (GMT)
committer Erkin Bahceci <erkinbah@gmail.com>2009-11-29 05:11:21 (GMT)
commitd0414038d472771ab3488e4b051632baa9d050be (patch) (side-by-side diff)
treef0d24ebaae528c00579bfe2ae3fcc7aa381d7d2d
parent7095b8a58077ff344adec67f174ae26f4f942922 (diff)
downloadanimation-d0414038d472771ab3488e4b051632baa9d050be.tar.gz
animation-d0414038d472771ab3488e4b051632baa9d050be.tar.bz2
Various extension-related changes.
-rw-r--r--include/animation/animation.h39
-rw-r--r--src/animation.cpp47
-rw-r--r--src/extensionplugin.cpp5
-rw-r--r--src/private.h3
4 files changed, 62 insertions, 32 deletions
diff --git a/include/animation/animation.h b/include/animation/animation.h
index e41ae71..55ef41b 100644
--- a/include/animation/animation.h
+++ b/include/animation/animation.h
@@ -1,7 +1,7 @@
#ifndef _ANIMATION_H
#define _ANIMATION_H
-#define ANIMATION_ABI 20090711
+#define ANIMATION_ABI 20091112
#include <core/pluginclasshandler.h>
#include <opengl/fragment.h>
@@ -99,11 +99,13 @@ Animation *createAnimation (CompWindow *w,
class ExtensionPluginInfo
{
public:
- ExtensionPluginInfo (unsigned int nEffects,
+ ExtensionPluginInfo (const CompString &name,
+ unsigned int nEffects,
AnimEffect *effects,
CompOption::Vector *effectOptions,
unsigned int firstEffectOptionIndex);
+ CompString name;
unsigned int nEffects;
AnimEffect *effects;
@@ -173,8 +175,10 @@ class Point
inline void setX (float x) { mX = x; }
inline void setY (float y) { mY = y; }
- inline void add (const Point &p)
- { mX += p.x (); mY += p.y (); }
+ void set (float x, float y) { mX = x; mY = y; }
+ Point &operator= (const Point &p);
+
+ inline void add (const Point &p) { mX += p.x (); mY += p.y (); }
private:
float mX, mY;
@@ -197,8 +201,12 @@ class Point3d
inline void setY (float y) { mY = y; }
inline void setZ (float z) { mZ = z; }
+ inline void set (float x, float y, float z) { mX = x; mY = y; mZ = z; }
+
inline void add (const Point3d &p)
{ mX += p.x (); mY += p.y (); mZ += p.z (); }
+ inline void add (float x, float y, float z)
+ { mX += x; mY += y; mZ += z; }
private:
float mX, mY, mZ;
@@ -229,6 +237,8 @@ protected:
float mTimestep; ///< to store anim. timestep at anim. start
float mTimeElapsedWithinTimeStep;
+ int mTimeSinceLastPaint; ///< in milliseconds
+
int mOverrideProgressDir; ///< 0: default dir, 1: forward, 2: backward
GLFragment::Attrib mCurPaintAttrib;
@@ -253,10 +263,6 @@ protected:
inline CompString optValS (unsigned int optionId) { return optVal (optionId).s (); }
inline unsigned short *optValC (unsigned int optionId) { return optVal (optionId).c (); }
- /// Gets info about the (extension) plugin that implements this animation.
- /// Should be overriden by a base animation class in every extension plugin.
- virtual ExtensionPluginInfo *getExtensionPluginInfo ();
-
public:
Animation (CompWindow *w,
@@ -318,6 +324,10 @@ public:
unsigned int maxGridHeight);
virtual void drawGeometry ();
+ /// Gets info about the (extension) plugin that implements this animation.
+ /// Should be overriden by a base animation class in every extension plugin.
+ virtual ExtensionPluginInfo *getExtensionPluginInfo ();
+
void drawTexture (GLTexture *texture,
GLFragment::Attrib &attrib,
unsigned int mask);
@@ -503,7 +513,7 @@ protected:
};
class PartialWindowAnim :
- public Animation
+ virtual public Animation
{
public:
PartialWindowAnim (CompWindow *w,
@@ -694,6 +704,8 @@ public:
Animation *curAnimation ();
void createFocusAnimation (AnimEffect effect, int duration = 0);
+ void postAnimationCleanUp ();
+
// TODO: Group persistent data for a plugin and allow a plugin to only
// delete its own data.
void deletePersistentData (const char *name);
@@ -719,6 +731,15 @@ private:
};
+inline Point &
+Point::operator= (const Point &p)
+{
+ mX = p.x (); mY = p.y ();
+ return *this;
+}
+
+
+
#define RAND_FLOAT() ((float)rand() / RAND_MAX)
#define sigmoid(fx) (1.0f/(1.0f+exp(-5.0f*2*((fx)-0.5))))
diff --git a/src/animation.cpp b/src/animation.cpp
index d158130..db42b16 100644
--- a/src/animation.cpp
+++ b/src/animation.cpp
@@ -360,11 +360,6 @@ PrivateAnimScreen::removeExtension (ExtensionPluginInfo *extensionPluginInfo)
// Also delete the "allowed effect" entries for that plugin
- const char *firstEffectName = extensionPluginInfo->effects[0]->name;
- CompString pluginName (firstEffectName,
- (unsigned)(strchr (firstEffectName, ':') -
- firstEffectName));
-
for (int e = 0; e < AnimEventNum; e++)
{
AnimEffectVector &eventEffectsAllowed = mEventEffectsAllowed[e];
@@ -374,7 +369,7 @@ PrivateAnimScreen::removeExtension (ExtensionPluginInfo *extensionPluginInfo)
find_if (eventEffectsAllowed.begin (),
eventEffectsAllowed.end (),
boost::bind (&AnimEffectInfo::matchesPluginName,
- _1, pluginName));
+ _1, extensionPluginInfo->name));
if (itBeginEffect == eventEffectsAllowed.end ())
continue; // plugin didn't provide any effects for this event
@@ -385,7 +380,7 @@ PrivateAnimScreen::removeExtension (ExtensionPluginInfo *extensionPluginInfo)
find_if (itBeginEffect,
eventEffectsAllowed.end (),
boost::bind (&AnimEffectInfo::matchesPluginName,
- _1, pluginName) == false);
+ _1, extensionPluginInfo->name) == false);
eventEffectsAllowed.erase (itBeginEffect, itEndEffect);
@@ -403,10 +398,12 @@ PrivateAnimScreen::removeExtension (ExtensionPluginInfo *extensionPluginInfo)
}
}
-ExtensionPluginInfo::ExtensionPluginInfo (unsigned int nEffects,
+ExtensionPluginInfo::ExtensionPluginInfo (const CompString &name,
+ unsigned int nEffects,
AnimEffect *effects,
CompOption::Vector *effectOptions,
unsigned int firstEffectOptionIndex) :
+ name (name),
nEffects (nEffects),
effects (effects),
effectOptions (effectOptions),
@@ -1054,6 +1051,12 @@ PrivateAnimWindow::postAnimationCleanUpCustom (bool closing,
}
void
+AnimWindow::postAnimationCleanUp ()
+{
+ priv->postAnimationCleanUp ();
+}
+
+void
PrivateAnimWindow::postAnimationCleanUp ()
{
if (mCurAnimation->curWindowEvent () == WindowEventClose)
@@ -1134,6 +1137,8 @@ Animation::advanceTime (int msSinceLastPaint)
mRemainingTime -= msSinceLastPaint;
mRemainingTime = MAX (mRemainingTime, 0); // avoid sub-zero values
+ mTimeSinceLastPaint = msSinceLastPaint;
+
return (mRemainingTime > 0);
}
@@ -1189,6 +1194,9 @@ PrivateAnimScreen::preparePaint (int msSinceLastPaint)
if (curAnim)
{
+ if (!curAnim->initialized ())
+ curAnim->init ();
+
if (curAnim->prePreparePaint (msSinceLastPaint))
animStillInProgress = true;
@@ -1218,8 +1226,6 @@ PrivateAnimScreen::preparePaint (int msSinceLastPaint)
if (!animShouldSkipFrame)
{
- curAnim->step ();
-
if (curAnim->updateBBUsed ())
{
aw->copyResetStepRegion ();
@@ -1228,8 +1234,15 @@ PrivateAnimScreen::preparePaint (int msSinceLastPaint)
curAnim->shouldDamageWindowOnStart ())
aw->aWindow ()->expandBBWithWindow ();
}
- if (!curAnim->initialized ())
- curAnim->setInitialized ();
+ }
+
+ if (!curAnim->initialized ())
+ curAnim->setInitialized ();
+
+ if (!animShouldSkipFrame)
+ {
+ curAnim->step ();
+
if (curAnim->updateBBUsed ())
{
foreach (CompOutput &output, ::screen->outputDevs ())
@@ -1635,7 +1648,6 @@ PrivateAnimScreen::initiateCloseAnim (PrivateAnimWindow *aw)
aw->mCurAnimation =
effectToBePlayed->create (w, WindowEventClose, duration,
effectToBePlayed, getIcon (w, true));
- aw->mCurAnimation->init ();
aw->mCurAnimation->adjustPointerIconSize ();
aw->enablePainting (true);
}
@@ -1781,7 +1793,6 @@ PrivateAnimScreen::initiateMinimizeAnim (PrivateAnimWindow *aw)
aw->mCurAnimation =
effectToBePlayed->create (w, WindowEventMinimize, duration,
effectToBePlayed, getIcon (w, false));
- aw->mCurAnimation->init ();
aw->enablePainting (true);
}
@@ -1839,7 +1850,6 @@ PrivateAnimScreen::initiateShadeAnim (PrivateAnimWindow *aw)
aw->mCurAnimation =
effectToBePlayed->create (w, WindowEventShade, duration,
effectToBePlayed, getIcon (w, false));
- aw->mCurAnimation->init ();
aw->enablePainting (true);
}
@@ -1907,7 +1917,6 @@ PrivateAnimScreen::initiateOpenAnim (PrivateAnimWindow *aw)
effectToBePlayed->create (w, WindowEventOpen, duration,
effectToBePlayed,
getIcon (w, true));
- aw->mCurAnimation->init ();
aw->mCurAnimation->adjustPointerIconSize ();
aw->enablePainting (true);
}
@@ -1979,7 +1988,6 @@ PrivateAnimScreen::initiateUnminimizeAnim (PrivateAnimWindow *aw)
effectToBePlayed->create (w, WindowEventUnminimize,
duration, effectToBePlayed,
getIcon (w, false));
- aw->mCurAnimation->init ();
aw->enablePainting (true);
}
}
@@ -2044,7 +2052,6 @@ PrivateAnimScreen::initiateUnshadeAnim (PrivateAnimWindow *aw)
effectToBePlayed->create (w, WindowEventUnshade,
duration, effectToBePlayed,
getIcon (w, false));
- aw->mCurAnimation->init ();
aw->enablePainting (true);
}
}
@@ -2242,7 +2249,8 @@ AnimEffectInfo::matchesPluginName (const CompString &pluginName)
AnimEffect animEffects[NUM_EFFECTS];
-ExtensionPluginAnimation animExtensionPluginInfo (NUM_EFFECTS, animEffects, 0,
+ExtensionPluginAnimation animExtensionPluginInfo (CompString ("animation"),
+ NUM_EFFECTS, animEffects, 0,
NUM_NONEFFECT_OPTIONS);
ExtensionPluginInfo *
Animation::getExtensionPluginInfo ()
@@ -2650,7 +2658,6 @@ PrivateAnimWindow::createFocusAnimation (AnimEffect effect, int duration)
duration,
effect,
CompRect ());
- mCurAnimation->init ();
enablePainting (true);
}
diff --git a/src/extensionplugin.cpp b/src/extensionplugin.cpp
index 7d9fd03..8d45dce 100644
--- a/src/extensionplugin.cpp
+++ b/src/extensionplugin.cpp
@@ -38,11 +38,12 @@
ExtensionPluginAnimation::ExtensionPluginAnimation
- (unsigned int nEffects,
+ (const CompString &name,
+ unsigned int nEffects,
AnimEffect *effects,
CompOption::Vector *effectOptions,
unsigned int firstEffectOptionIndex) :
- ExtensionPluginInfo (nEffects, effects, effectOptions,
+ ExtensionPluginInfo (name, nEffects, effects, effectOptions,
firstEffectOptionIndex),
mAWinWasRestackedJustNow (false),
mRestackAnimCount (0)
diff --git a/src/private.h b/src/private.h
index 109f9ba..faadc96 100644
--- a/src/private.h
+++ b/src/private.h
@@ -118,7 +118,8 @@ typedef enum
class ExtensionPluginAnimation : public ExtensionPluginInfo
{
public:
- ExtensionPluginAnimation (unsigned int nEffects,
+ ExtensionPluginAnimation (const CompString &name,
+ unsigned int nEffects,
AnimEffect *effects,
CompOption::Vector *effectOptions,
unsigned int firstEffectOptionIndex);