Browse Source

Transitions working. Added Dissolve transition

master
c-mendoza 8 years ago
parent
commit
5e90127386
  1. 3
      example/bin/data/ofxpimapper.xml
  2. 11
      example/src/magSlide.cpp
  3. 30
      example/src/magSlide.h
  4. 20
      example/src/magSlideShowSource.cpp
  5. 31
      example/src/magSlideTransition.cpp
  6. 49
      example/src/magSlideTransition.h

3
example/bin/data/ofxpimapper.xml

@ -81,10 +81,11 @@
<magSlideShow> <magSlideShow>
<Width>1920</Width> <Width>1920</Width>
<Height>1080</Height> <Height>1080</Height>
<SlideDuration>0.5</SlideDuration> <!-- Optional default duration for each slide--> <SlideDuration>1</SlideDuration> <!-- Optional default duration for each slide-->
<Loop> <Loop>
<Type>PING-PONG</Type> <!-- NONE | NORMAL | PING-PONG --> <Type>PING-PONG</Type> <!-- NONE | NORMAL | PING-PONG -->
</Loop> </Loop>
<Transition></Transition>
<!-- NoResize | Native | Fit | FitProportionally | FillProportionally --> <!-- NoResize | Native | Fit | FitProportionally | FillProportionally -->
<ResizeOption>FitProportionally</ResizeOption> <ResizeOption>FitProportionally</ResizeOption>
</magSlideShow> </magSlideShow>

11
example/src/magSlide.cpp

@ -21,6 +21,7 @@ magSlide::magSlide(std::string type)
void magSlide::update(u_int64_t deltaTime) void magSlide::update(u_int64_t deltaTime)
{ {
transition->update(deltaTime);
runningTime += deltaTime; runningTime += deltaTime;
switch (slideState) switch (slideState)
@ -37,11 +38,6 @@ void magSlide::update(u_int64_t deltaTime)
if (runningTime >= buildOutStartTime) if (runningTime >= buildOutStartTime)
{ {
setState(BuildOut); setState(BuildOut);
if (buildOut != nullptr)
{
activeTransition = buildOut;
activeTransition->start();
}
} }
break; break;
@ -49,7 +45,6 @@ void magSlide::update(u_int64_t deltaTime)
if (runningTime >= endTime) if (runningTime >= endTime)
{ {
setState(Complete); setState(Complete);
activeTransition = nullptr;
} }
break; break;
} }
@ -137,6 +132,10 @@ void magSlide::start(u_int64_t startTime)
void magSlide::draw() void magSlide::draw()
{ {
ofSetColor(255, opacity); ofSetColor(255, opacity);
if(transition->isActive())
{
transition->draw();
}
} }

30
example/src/magSlide.h

@ -115,6 +115,7 @@ public:
* @param tDuration in milliseconds. * @param tDuration in milliseconds.
*/ */
void setTransitionDuration(u_int64_t tDuration); void setTransitionDuration(u_int64_t tDuration);
ResizeOptions getResizeOption() const; ResizeOptions getResizeOption() const;
void setResizeOption(ResizeOptions resizeOption); void setResizeOption(ResizeOptions resizeOption);
@ -145,14 +146,39 @@ protected:
float width; float width;
float height; float height;
ofPoint position; ofPoint position;
public:
const ofPoint &getPosition() const
{
return position;
}
void setPosition(const ofPoint &position)
{
magSlide::position = position;
}
void setPosition(float x, float y)
{
position.set(x, y);
}
protected:
float opacity = 255; float opacity = 255;
ResizeOptions resizeOption = NoResize; ResizeOptions resizeOption = NoResize;
SlideState slideState = Off; SlideState slideState = Off;
bool isComplete = false; bool isComplete = false;
// std::shared_ptr<magSlideTransition> buildIn = nullptr; // std::shared_ptr<magSlideTransition> buildIn = nullptr;
std::shared_ptr<magSlideTransition> buildOut = nullptr; // std::shared_ptr<magSlideTransition> buildOut = nullptr;
std::shared_ptr<magSlideTransition> activeTransition = nullptr; std::shared_ptr<magSlideTransition> transition = nullptr;
public:
const shared_ptr<magSlideTransition> &getTransition() const
{
return transition;
}
protected:
/** /**
* The duration of the slide in millis, not counting builds * The duration of the slide in millis, not counting builds
*/ */

20
example/src/magSlideShowSource.cpp

@ -73,10 +73,6 @@ void magSlideShowSource::update()
for (auto &slide : activeSlides) for (auto &slide : activeSlides)
{ {
if (slide->activeTransition)
{
slide->activeTransition->update(deltaTime);
}
slide->update(deltaTime); slide->update(deltaTime);
} }
@ -112,10 +108,6 @@ void magSlideShowSource::draw()
ofSetColor(255, 255); ofSetColor(255, 255);
for (auto &slide : activeSlides) for (auto &slide : activeSlides)
{ {
if (slide->activeTransition)
{
slide->activeTransition->draw();
}
slide->draw(); slide->draw();
} }
ofPopStyle(); ofPopStyle();
@ -276,7 +268,6 @@ bool magSlideShowSource::loadFromXml()
initialize(settings); initialize(settings);
return true; return true;
} }
void magSlideShowSource::addSlide(std::shared_ptr<magSlide> slide) void magSlideShowSource::addSlide(std::shared_ptr<magSlide> slide)
@ -345,7 +336,7 @@ void magSlideShowSource::addSlide(std::shared_ptr<magSlide> slide)
// slide, // slide,
// bogusParamGroup, // bogusParamGroup,
// slide->buildInDuration); // slide->buildInDuration);
slide->buildOut = tf->createTransition(settings.transitionName, slide->transition = tf->createTransition(settings.transitionName,
slide, slide,
bogusParamGroup, bogusParamGroup,
slide->buildOutDuration); slide->buildOutDuration);
@ -475,9 +466,6 @@ void magSlideShowSource::enqueueSlide(std::shared_ptr<magSlide> slide, u_int64_t
{ {
// ofLogVerbose() << "Enqueuing slide " << currentSlideIndex << " slide id: " << slide->getId(); // ofLogVerbose() << "Enqueuing slide " << currentSlideIndex << " slide id: " << slide->getId();
slide->start(startTime); slide->start(startTime);
if (activeSlides.size() > 1)
{
}
activeSlides.insert(activeSlides.begin(), slide); activeSlides.insert(activeSlides.begin(), slide);
} }
@ -489,7 +477,13 @@ void magSlideShowSource::slideStateChanged(const void *sender, ofEventArgs &args
// << slide->getSlideStateName(); // << slide->getSlideStateName();
if (slide->getSlideState() == magSlide::SlideState::BuildOut) if (slide->getSlideState() == magSlide::SlideState::BuildOut)
{ {
// slide->transition->start();
// ofLogVerbose() << "BuildOut " << slide->getId();
playNextSlide(); playNextSlide();
if (activeSlides.size() > 1)
{
activeSlides[1]->transition->start(activeSlides[0]);
}
} }
} }

31
example/src/magSlideTransition.cpp

@ -6,22 +6,26 @@
#include "magSlideTransition.h" #include "magSlideTransition.h"
void magSlideTransition::start() void magSlideTransition::start(std::shared_ptr<magSlide> nextSlide)
{ {
runningTime = 0; runningTime = 0;
isActive = true; active = true;
this->nextSlide = nextSlide;
} }
void magSlideTransition::update(u_int64_t timeDelta) void magSlideTransition::update(u_int64_t timeDelta)
{ {
if (!isActive) return; if (!active) return;
runningTime += timeDelta; runningTime += timeDelta;
if (runningTime >= duration) if (runningTime >= duration)
{ {
ofEventArgs arghh; // arghhhh... ofEventArgs arghh; // arghhhh...
nextSlide->setOpacity(255);
nextSlide->setPosition(0, 0);
end();
transitionCompleteEvent.notify(this, arghh); transitionCompleteEvent.notify(this, arghh);
isActive = false; active = false;
} }
} }
@ -36,20 +40,21 @@ float magSlideTransition::getNormalizedTime()
return (double)runningTime / (double)duration; return (double)runningTime / (double)duration;
} }
void magFadeInTransition::draw()
void magDissolveTransition::draw()
{ {
ofLogVerbose() << "fade in draw"; slide->setOpacity(255 - (getNormalizedTime() * 255));
ofSetColor(255, getNormalizedTime() * 255); nextSlide->setOpacity(getNormalizedTime()*255);
} }
void magFadeOutTransition::draw() void magDissolveTransition::start(std::shared_ptr<magSlide> nextSlide)
{ {
magSlideTransition::draw(); magSlideTransition::start(nextSlide);
nextSlide->setOpacity(0);
} }
void magDissolveTransition::draw() void magDissolveTransition::end()
{ {
slide->setOpacity(255 - (getNormalizedTime() * 255)); nextSlide->setOpacity(255);
ofLogVerbose("opacity") << slide->getId() << " " << slide->getOpacity(); slide->setOpacity(0);
} }

49
example/src/magSlideTransition.h

@ -19,11 +19,12 @@ public:
* Begins the transition. This must be called in order for the * Begins the transition. This must be called in order for the
* transition to actually do anything! * transition to actually do anything!
*/ */
void start(); virtual void start(std::shared_ptr<magSlide> nextSlide);
virtual void end(){}
virtual void loadSettings(ofParameterGroup &settings){} virtual void loadSettings(ofParameterGroup &settings){}
virtual void update(u_int64_t timeDelta); virtual void update(u_int64_t timeDelta);
virtual void draw(){ virtual void draw(){
ofLogVerbose() << "transiwiton draw " << getNormalizedTime(); ofLogNotice("magSlideTransition") << "transition draw - this should be overriden " << getNormalizedTime();
} }
/** /**
@ -44,40 +45,37 @@ public:
return name; return name;
} }
const shared_ptr<magSlide> &getNextSlide() const
{
return nextSlide;
}
void setNextSlide(shared_ptr<magSlide> nextSlide)
{
magSlideTransition::nextSlide = nextSlide;
}
bool isActive() const
{
return active;
}
ofEvent<ofEventArgs> transitionCompleteEvent; ofEvent<ofEventArgs> transitionCompleteEvent;
protected: protected:
std::string name = "Void"; std::string name = "Void";
std::shared_ptr<magSlide> slide; std::shared_ptr<magSlide> slide;
std::shared_ptr<magSlide> nextSlide; std::shared_ptr<magSlide> nextSlide;
u_int64_t runningTime; u_int64_t runningTime;
u_int64_t duration; u_int64_t duration;
u_int64_t endTime; u_int64_t endTime;
bool isActive = false; bool active = false;
friend class magSlideTransitionFactory;
};
class magFadeInTransition : public magSlideTransition
{
public:
magFadeInTransition()
{
name = "FadeIn";
}
void draw() override ; protected:
};
class magFadeOutTransition : public magSlideTransition
{
public:
magFadeOutTransition()
{
name = "FadeOut";
}
void draw() override ; friend class magSlideTransitionFactory;
}; };
class magDissolveTransition : public magSlideTransition class magDissolveTransition : public magSlideTransition
@ -88,7 +86,10 @@ public:
name = "Dissolve"; name = "Dissolve";
} }
void start(std::shared_ptr<magSlide> nextSlide) override;
void draw() override; void draw() override;
void end() override;
}; };
#endif #endif

Loading…
Cancel
Save