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)
{
case SlideState::BuildIn:
if (runningTime >= buildInDuration)
{
setState(Normal);
activeTransition = nullptr;
}
break;
// case SlideState::BuildIn:
// if (runningTime >= buildInDuration)
// {
// setState(Normal);
// activeTransition = nullptr;
// }
// break;
case SlideState::Normal:
if (runningTime >= buildOutStartTime)
@ -95,15 +95,15 @@ void magSlide::setState(SlideState state)
void magSlide::setTransitionDuration(u_int64_t tDuration)
{
buildInDuration = buildOutDuration = tDuration;
buildOutDuration = tDuration;
}
const std::string magSlide::getSlideStateName()
{
switch (slideState)
{
case SlideState::BuildIn:
return "BuildIn";
// case SlideState::BuildIn:
// return "BuildIn";
case SlideState::BuildOut:
return "BuildOut";
case Normal:
@ -121,17 +121,24 @@ void magSlide::start(u_int64_t startTime)
{
this->startTime = startTime;
runningTime = 0;
endTime = duration + buildInDuration + buildOutDuration;
endTime = duration + buildOutDuration;
buildOutStartTime = endTime - buildOutDuration;
slideState = magSlide::SlideState::BuildIn;
if (buildIn != nullptr)
{
activeTransition = buildIn;
activeTransition->start();
}
slideState = magSlide::SlideState::Normal;
// if (buildIn != nullptr)
// {
// activeTransition = buildIn;
// activeTransition->start();
// }
position.set(0, 0);
opacity = 255;
isComplete = false;
}
void magSlide::draw()
{
ofSetColor(255, opacity);
}
////////////////////////////////////////////////////////
#pragma mark MAG_IMAGE_SLIDE
@ -152,6 +159,7 @@ void magImageSlide::setup(ofImage &image)
void magImageSlide::draw()
{
magSlide::draw();
image.draw(position, width, height);
}
@ -191,11 +199,12 @@ void magVideoSlide::update()
void magVideoSlide::draw()
{
magSlide::draw();
videoPlayer.draw(position.x, position.y, width, height);
}
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();
virtual void update(u_int64_t deltaTime);
virtual void draw() = 0;
virtual void draw();
/**
* Sets the slide up for playback. This method must be
@ -62,7 +62,7 @@ public:
enum SlideState : short
{
Off = 0,
BuildIn,
// BuildIn,
Normal,
BuildOut,
Complete
@ -145,12 +145,12 @@ protected:
float width;
float height;
ofPoint position;
float opacity = 1.0;
float opacity = 255;
ResizeOptions resizeOption = NoResize;
SlideState slideState = Off;
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> activeTransition = nullptr;
/**
@ -173,7 +173,7 @@ protected:
/**
* 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.

19
example/src/magSlideShowSource.cpp

@ -271,8 +271,8 @@ bool magSlideShowSource::loadFromXml()
settings.resizeOption = magSlide::FillProportionally;
}
settings.transitionName = "FadeIn";
settings.transitionDuration = 1.0;
settings.transitionName = "Dissolve";
settings.transitionDuration = 0.5;
initialize(settings);
return true;
@ -282,7 +282,7 @@ bool magSlideShowSource::loadFromXml()
void magSlideShowSource::addSlide(std::shared_ptr<magSlide> slide)
{
// ofLogVerbose("addSlide") << slide->getId();
slides.push_back(slide);
slides.insert(slides.begin(), slide);
auto rOption = slide->getResizeOption();
// 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
auto tf = magSlideTransitionFactory::instance();
slide->buildIn = tf->createTransition(settings.transitionName,
slide,
bogusParamGroup,
slide->buildInDuration);
// slide->buildIn = tf->createTransition(settings.transitionName,
// slide,
// bogusParamGroup,
// slide->buildInDuration);
slide->buildOut = tf->createTransition(settings.transitionName,
slide,
bogusParamGroup,
@ -475,7 +475,10 @@ void magSlideShowSource::enqueueSlide(std::shared_ptr<magSlide> slide, u_int64_t
{
// ofLogVerbose() << "Enqueuing slide " << currentSlideIndex << " slide id: " << slide->getId();
slide->start(startTime);
activeSlides.push_back(slide);
if (activeSlides.size() > 1)
{
}
activeSlides.insert(activeSlides.begin(), slide);
}
void magSlideShowSource::slideStateChanged(const void *sender, ofEventArgs &args)

14
example/src/magSlideTransition.cpp

@ -40,4 +40,16 @@ void magFadeInTransition::draw()
{
ofLogVerbose() << "fade in draw";
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:
std::string name = "Void";
std::shared_ptr<magSlide> slide;
std::shared_ptr<magSlide> nextSlide;
u_int64_t runningTime;
u_int64_t duration;
u_int64_t endTime;
@ -68,6 +69,26 @@ public:
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

4
example/src/magSlideTransitionFactory.cpp

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

Loading…
Cancel
Save