| author | Erkin Bahceci <erkinbah@gmail.com> | 2009-11-29 05:11:21 (GMT) |
|---|---|---|
| committer | Erkin Bahceci <erkinbah@gmail.com> | 2009-11-29 05:11:21 (GMT) |
| commit | d0414038d472771ab3488e4b051632baa9d050be (patch) (side-by-side diff) | |
| tree | f0d24ebaae528c00579bfe2ae3fcc7aa381d7d2d | |
| parent | 7095b8a58077ff344adec67f174ae26f4f942922 (diff) | |
| download | animation-d0414038d472771ab3488e4b051632baa9d050be.tar.gz animation-d0414038d472771ab3488e4b051632baa9d050be.tar.bz2 | |
Various extension-related changes.
| -rw-r--r-- | include/animation/animation.h | 39 | ||||
| -rw-r--r-- | src/animation.cpp | 47 | ||||
| -rw-r--r-- | src/extensionplugin.cpp | 5 | ||||
| -rw-r--r-- | src/private.h | 3 |
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); |
