diff --git a/effects/internal/cubetransition.cpp b/effects/internal/cubetransition.cpp new file mode 100644 index 000000000..ae44537dc --- /dev/null +++ b/effects/internal/cubetransition.cpp @@ -0,0 +1,11 @@ +#include "cubetransition.h" + +#include "debug.h" + +CubeTransition::CubeTransition(Clip* c, Clip* s, const EffectMeta* em) : Transition(c, s, em) { + enable_coords = true; +} + +void CubeTransition::process_coords(double progress, GLTextureCoords&, int data) { + glTranslatef(-progress, 0, -progress); +} diff --git a/effects/internal/cubetransition.h b/effects/internal/cubetransition.h new file mode 100644 index 000000000..0996beccf --- /dev/null +++ b/effects/internal/cubetransition.h @@ -0,0 +1,12 @@ +#ifndef CUBETRANSITION_H +#define CUBETRANSITION_H + +#include "project/transition.h" + +class CubeTransition : public Transition { +public: + CubeTransition(Clip* c, Clip* s, const EffectMeta* em); + void process_coords(double timecode, GLTextureCoords &, int data); +}; + +#endif // CUBETRANSITION_H diff --git a/olive.pro b/olive.pro index 863337506..4e45e4ea8 100644 --- a/olive.pro +++ b/olive.pro @@ -87,7 +87,8 @@ SOURCES += \ project/effect.cpp \ project/transition.cpp \ project/effectrow.cpp \ - project/effectfield.cpp + project/effectfield.cpp \ + effects/internal/cubetransition.cpp HEADERS += \ mainwindow.h \ @@ -154,7 +155,8 @@ HEADERS += \ project/effect.h \ project/transition.h \ project/effectrow.h \ - project/effectfield.h + project/effectfield.h \ + effects/internal/cubetransition.h FORMS += \ mainwindow.ui \ diff --git a/project/effect.cpp b/project/effect.cpp index 5a8de3eb5..3df2ad44f 100644 --- a/project/effect.cpp +++ b/project/effect.cpp @@ -135,6 +135,10 @@ void load_internal_effects() { em.internal = TRANSITION_INTERNAL_CROSSDISSOLVE; video_effects.append(em); + em.name = "Cube"; + em.internal = TRANSITION_INTERNAL_CUBE; + video_effects.append(em); + em.name = "Linear Fade"; em.internal = TRANSITION_INTERNAL_LINEARFADE; audio_effects.append(em); diff --git a/project/transition.cpp b/project/transition.cpp index 9792b310a..23d12fa6d 100644 --- a/project/transition.cpp +++ b/project/transition.cpp @@ -9,6 +9,7 @@ #include "effects/internal/linearfadetransition.h" #include "effects/internal/exponentialfadetransition.h" #include "effects/internal/logarithmicfadetransition.h" +#include "effects/internal/cubetransition.h" #include @@ -40,6 +41,7 @@ Transition* get_transition_from_meta(Clip* c, Clip* s, const EffectMeta* em) { case TRANSITION_INTERNAL_LINEARFADE: return new LinearFadeTransition(c, s, em); case TRANSITION_INTERNAL_EXPONENTIALFADE: return new ExponentialFadeTransition(c, s, em); case TRANSITION_INTERNAL_LOGARITHMICFADE: return new LogarithmicFadeTransition(c, s, em); + case TRANSITION_INTERNAL_CUBE: return new CubeTransition(c, s, em); } } else { dout << "[ERROR] Invalid transition data"; diff --git a/project/transition.h b/project/transition.h index 4464632f5..e998fdb61 100644 --- a/project/transition.h +++ b/project/transition.h @@ -11,7 +11,8 @@ #define TRANSITION_INTERNAL_LINEARFADE 1 #define TRANSITION_INTERNAL_EXPONENTIALFADE 2 #define TRANSITION_INTERNAL_LOGARITHMICFADE 3 -#define TRANSITION_INTERNAL_COUNT 4 +#define TRANSITION_INTERNAL_CUBE 4 +#define TRANSITION_INTERNAL_COUNT 5 int create_transition(Clip* c, Clip* s, const EffectMeta* em); diff --git a/project/undo.cpp b/project/undo.cpp index 7093aeeb4..1ee80e270 100644 --- a/project/undo.cpp +++ b/project/undo.cpp @@ -1260,3 +1260,20 @@ void RenameClipCommand::redo() { clips.at(i)->name = new_name; } } + +SetPointer::SetPointer(void **pointer, void *data) : + p(pointer), + new_data(data), + old_changed(mainWindow->isWindowModified()) +{} + +void SetPointer::undo() { + *p = old_data; + mainWindow->setWindowModified(old_changed); +} + +void SetPointer::redo() { + old_data = *p; + *p = new_data; + mainWindow->setWindowModified(true); +} diff --git a/project/undo.h b/project/undo.h index cb35e3d13..bd8d1cf2e 100644 --- a/project/undo.h +++ b/project/undo.h @@ -582,4 +582,16 @@ private: bool old_project_changed; }; +class SetPointer : public QUndoCommand { +public: + SetPointer(void** pointer, void* data); + void undo(); + void redo(); +private: + bool old_changed; + void** p; + void* new_data; + void* old_data; +}; + #endif // UNDO_H