Browse Source

Refactoring of transitions. No buildIn, just buildOut

There is still work to be done here, this is just an initial commit for this feature.
master
c-mendoza 8 years ago
parent
commit
f2809b64a1
  1. 45
      example/src/magSlide.cpp
  2. 10
      example/src/magSlide.h
  3. 19
      example/src/magSlideShowSource.cpp
  4. 14
      example/src/magSlideTransition.cpp
  5. 21
      example/src/magSlideTransition.h
  6. 4
      example/src/magSlideTransitionFactory.cpp

45
example/src/magSlide.cpp

@ -25,13 +25,13 @@ void magSlide::update(u_int64_t deltaTime)
switch (slideState) switch (slideState)
{ {
case SlideState::BuildIn: // case SlideState::BuildIn:
if (runningTime >= buildInDuration) // if (runningTime >= buildInDuration)
{ // {
setState(Normal); // setState(Normal);
activeTransition = nullptr; // activeTransition = nullptr;
} // }
break; // break;
case SlideState::Normal: case SlideState::Normal:
if (runningTime >= buildOutStartTime) if (runningTime >= buildOutStartTime)
@ -95,15 +95,15 @@ void magSlide::setState(SlideState state)
void magSlide::setTransitionDuration(u_int64_t tDuration) void magSlide::setTransitionDuration(u_int64_t tDuration)
{ {
buildInDuration = buildOutDuration = tDuration; buildOutDuration = tDuration;
} }
const std::string magSlide::getSlideStateName() const std::string magSlide::getSlideStateName()
{ {
switch (slideState) switch (slideState)
{ {
case SlideState::BuildIn: // case SlideState::BuildIn:
return "BuildIn"; // return "BuildIn";
case SlideState::BuildOut: case SlideState::BuildOut:
return "BuildOut"; return "BuildOut";
case Normal: case Normal:
@ -121,17 +121,24 @@ void magSlide::start(u_int64_t startTime)
{ {
this->startTime = startTime; this->startTime = startTime;
runningTime = 0; runningTime = 0;
endTime = duration + buildInDuration + buildOutDuration; endTime = duration + buildOutDuration;
buildOutStartTime = endTime - buildOutDuration; buildOutStartTime = endTime - buildOutDuration;
slideState = magSlide::SlideState::BuildIn; slideState = magSlide::SlideState::Normal;
if (buildIn != nullptr) // if (buildIn != nullptr)
{ // {
activeTransition = buildIn; // activeTransition = buildIn;
activeTransition->start(); // activeTransition->start();
} // }
position.set(0, 0);
opacity = 255;
isComplete = false; isComplete = false;
} }
void magSlide::draw()
{
ofSetColor(255, opacity);
}
//////////////////////////////////////////////////////// ////////////////////////////////////////////////////////
#pragma mark MAG_IMAGE_SLIDE #pragma mark MAG_IMAGE_SLIDE
@ -152,6 +159,7 @@ void magImageSlide::setup(ofImage &image)
void magImageSlide::draw() void magImageSlide::draw()
{ {
magSlide::draw();
image.draw(position, width, height); image.draw(position, width, height);
} }
@ -191,11 +199,12 @@ void magVideoSlide::update()
void magVideoSlide::draw() void magVideoSlide::draw()
{ {
magSlide::draw();
videoPlayer.draw(position.x, position.y, width, height); videoPlayer.draw(position.x, position.y, width, height);
} }
void magVideoSlide::useVideoForDuration() void magVideoSlide::useVideoForDuration()
{ {
duration = u_int64_t((videoPlayer.getDuration()*1000)) - buildInDuration - buildOutDuration; duration = u_int64_t((videoPlayer.getDuration()*1000)) - buildOutDuration;
} }

10
example/src/magSlide.h

@ -15,7 +15,7 @@ public:
magSlide(std::string type); magSlide(std::string type);
// ~magSlide(); // ~magSlide();
virtual void update(u_int64_t deltaTime); virtual void update(u_int64_t deltaTime);
virtual void draw() = 0; virtual void draw();
/** /**
* Sets the slide up for playback. This method must be * Sets the slide up for playback. This method must be
@ -62,7 +62,7 @@ public:
enum SlideState : short enum SlideState : short
{ {
Off = 0, Off = 0,
BuildIn, // BuildIn,
Normal, Normal,
BuildOut, BuildOut,
Complete Complete
@ -145,12 +145,12 @@ protected:
float width; float width;
float height; float height;
ofPoint position; ofPoint position;
float opacity = 1.0; 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> activeTransition = nullptr;
/** /**
@ -173,7 +173,7 @@ protected:
/** /**
* The duration of the build in transition or effect, in milliseconds. * The duration of the build in transition or effect, in milliseconds.
*/ */
u_int64_t buildInDuration; // u_int64_t buildInDuration;
/** /**
* The duration of the build out transition or effect, in milliseconds. * The duration of the build out transition or effect, in milliseconds.

19
example/src/magSlideShowSource.cpp

@ -271,8 +271,8 @@ bool magSlideShowSource::loadFromXml()
settings.resizeOption = magSlide::FillProportionally; settings.resizeOption = magSlide::FillProportionally;
} }
settings.transitionName = "FadeIn"; settings.transitionName = "Dissolve";
settings.transitionDuration = 1.0; settings.transitionDuration = 0.5;
initialize(settings); initialize(settings);
return true; return true;
@ -282,7 +282,7 @@ bool magSlideShowSource::loadFromXml()
void magSlideShowSource::addSlide(std::shared_ptr<magSlide> slide) void magSlideShowSource::addSlide(std::shared_ptr<magSlide> slide)
{ {
// ofLogVerbose("addSlide") << slide->getId(); // ofLogVerbose("addSlide") << slide->getId();
slides.push_back(slide); slides.insert(slides.begin(), slide);
auto rOption = slide->getResizeOption(); auto rOption = slide->getResizeOption();
// If the slide does not have a resize option assign // If the slide does not have a resize option assign
@ -341,10 +341,10 @@ void magSlideShowSource::addSlide(std::shared_ptr<magSlide> slide)
static ofParameterGroup bogusParamGroup; // This is temporary so that things compile static ofParameterGroup bogusParamGroup; // This is temporary so that things compile
auto tf = magSlideTransitionFactory::instance(); auto tf = magSlideTransitionFactory::instance();
slide->buildIn = tf->createTransition(settings.transitionName, // slide->buildIn = tf->createTransition(settings.transitionName,
slide, // slide,
bogusParamGroup, // bogusParamGroup,
slide->buildInDuration); // slide->buildInDuration);
slide->buildOut = tf->createTransition(settings.transitionName, slide->buildOut = tf->createTransition(settings.transitionName,
slide, slide,
bogusParamGroup, bogusParamGroup,
@ -475,7 +475,10 @@ 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);
activeSlides.push_back(slide); if (activeSlides.size() > 1)
{
}
activeSlides.insert(activeSlides.begin(), slide);
} }
void magSlideShowSource::slideStateChanged(const void *sender, ofEventArgs &args) void magSlideShowSource::slideStateChanged(const void *sender, ofEventArgs &args)

14
example/src/magSlideTransition.cpp

@ -40,4 +40,16 @@ void magFadeInTransition::draw()
{ {
ofLogVerbose() << "fade in draw"; ofLogVerbose() << "fade in draw";
ofSetColor(255, getNormalizedTime() * 255); ofSetColor(255, getNormalizedTime() * 255);
} }
void magFadeOutTransition::draw()
{
magSlideTransition::draw();
}
void magDissolveTransition::draw()
{
slide->setOpacity(255 - (getNormalizedTime() * 255));
ofLogVerbose("opacity") << slide->getId() << " " << slide->getOpacity();
}

21
example/src/magSlideTransition.h

@ -49,6 +49,7 @@ public:
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;
u_int64_t runningTime; u_int64_t runningTime;
u_int64_t duration; u_int64_t duration;
u_int64_t endTime; u_int64_t endTime;
@ -68,6 +69,26 @@ public:
void draw() override ; void draw() override ;
}; };
class magFadeOutTransition : public magSlideTransition
{
public:
magFadeOutTransition()
{
name = "FadeOut";
}
void draw() override ;
};
class magDissolveTransition : public magSlideTransition
{
public:
magDissolveTransition()
{
name = "Dissolve";
}
void draw() override;
};
#endif #endif

4
example/src/magSlideTransitionFactory.cpp

@ -38,10 +38,10 @@ magSlideTransitionFactory* magSlideTransitionFactory::_instance = 0;
magSlideTransitionFactory::magSlideTransitionFactory() magSlideTransitionFactory::magSlideTransitionFactory()
{ {
magSlideTransition voidTransition; magSlideTransition voidTransition;
magFadeInTransition fadeIn; magDissolveTransition dissolve;
registerTransition<magSlideTransition>(voidTransition); registerTransition<magSlideTransition>(voidTransition);
registerTransition<magFadeInTransition>(fadeIn); registerTransition<magDissolveTransition>(dissolve);
} }
magSlideTransitionFactory* magSlideTransitionFactory::instance() magSlideTransitionFactory* magSlideTransitionFactory::instance()

Loading…
Cancel
Save