summaryrefslogtreecommitdiff
path: root/slideshow
diff options
context:
space:
mode:
authorEmmanuel Gil Peyrot <emmanuel.peyrot@collabora.com>2015-11-23 21:53:18 +0000
committerTomaž Vajngerl <tomaz.vajngerl@collabora.com>2015-11-23 23:06:38 +0100
commitfb3661a43f7de2ec7eb5ac876ec8192994f80871 (patch)
treed5b4a69ff8909b1b563030a2c9ef9e6ceda2c6e8 /slideshow
parent67a6bfb1f1cc255a1850795469f7f2aa0cfdb6d0 (diff)
slideshow: Move Operation to its own translation unit
Change-Id: Ie0be68055152347e82da66cb48cf76c54b7966c0
Diffstat (limited to 'slideshow')
-rw-r--r--slideshow/Library_OGLTrans.mk3
-rw-r--r--slideshow/source/engine/OGLTrans/generic/OGLTrans_Operation.cxx209
-rw-r--r--slideshow/source/engine/OGLTrans/generic/OGLTrans_Operation.hxx270
-rw-r--r--slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.cxx176
-rw-r--r--slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.hxx235
5 files changed, 484 insertions, 409 deletions
diff --git a/slideshow/Library_OGLTrans.mk b/slideshow/Library_OGLTrans.mk
index e1754f1c8189..db1c7881095c 100644
--- a/slideshow/Library_OGLTrans.mk
+++ b/slideshow/Library_OGLTrans.mk
@@ -41,6 +41,7 @@ ifeq ($(strip $(OS)),MACOSX)
$(eval $(call gb_Library_add_exception_objects,OGLTrans,\
slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionerImpl \
slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl \
+ slideshow/source/engine/OGLTrans/generic/OGLTrans_Operation \
))
$(eval $(call gb_Library_use_system_darwin_frameworks,OGLTrans,\
@@ -59,12 +60,14 @@ $(eval $(call gb_Library_use_system_win32_libs,OGLTrans,\
$(eval $(call gb_Library_add_exception_objects,OGLTrans,\
slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionerImpl \
slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl \
+ slideshow/source/engine/OGLTrans/generic/OGLTrans_Operation \
))
else
$(eval $(call gb_Library_add_exception_objects,OGLTrans,\
slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionerImpl \
slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl \
+ slideshow/source/engine/OGLTrans/generic/OGLTrans_Operation \
))
$(eval $(call gb_Library_add_libs,OGLTrans,\
diff --git a/slideshow/source/engine/OGLTrans/generic/OGLTrans_Operation.cxx b/slideshow/source/engine/OGLTrans/generic/OGLTrans_Operation.cxx
new file mode 100644
index 000000000000..7199a7e4d9d8
--- /dev/null
+++ b/slideshow/source/engine/OGLTrans/generic/OGLTrans_Operation.cxx
@@ -0,0 +1,209 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2015 by Collabora, Ltd.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <glm/gtc/matrix_transform.hpp>
+#include <glm/gtc/type_ptr.hpp>
+
+#include "OGLTrans_Operation.hxx"
+
+SRotate::SRotate(const glm::vec3& Axis, const glm::vec3& Origin,
+ double Angle, bool bInter, double T0, double T1):
+ Operation(bInter, T0, T1),
+ axis(Axis),
+ origin(Origin),
+ angle(Angle)
+{
+}
+
+SScale::SScale(const glm::vec3& Scale, const glm::vec3& Origin,
+ bool bInter, double T0, double T1):
+ Operation(bInter, T0, T1),
+ scale(Scale),
+ origin(Origin)
+{
+}
+
+RotateAndScaleDepthByWidth::RotateAndScaleDepthByWidth(const glm::vec3& Axis,
+ const glm::vec3& Origin, double Angle, bool bInter, double T0, double T1):
+ Operation(bInter, T0, T1),
+ axis(Axis),
+ origin(Origin),
+ angle(Angle)
+{
+}
+
+RotateAndScaleDepthByHeight::RotateAndScaleDepthByHeight(const glm::vec3& Axis,
+ const glm::vec3& Origin, double Angle, bool bInter, double T0, double T1):
+ Operation(bInter, T0, T1),
+ axis(Axis),
+ origin(Origin),
+ angle(Angle)
+{
+}
+
+
+STranslate::STranslate(const glm::vec3& Vector, bool bInter, double T0, double T1):
+ Operation(bInter, T0, T1),
+ vector(Vector)
+{
+}
+
+std::shared_ptr<SRotate>
+makeSRotate(const glm::vec3& Axis,const glm::vec3& Origin,double Angle,bool bInter, double T0, double T1)
+{
+ return std::make_shared<SRotate>(Axis, Origin, Angle, bInter, T0, T1);
+}
+
+std::shared_ptr<SScale>
+makeSScale(const glm::vec3& Scale, const glm::vec3& Origin,bool bInter, double T0, double T1)
+{
+ return std::make_shared<SScale>(Scale, Origin, bInter, T0, T1);
+}
+
+std::shared_ptr<STranslate>
+makeSTranslate(const glm::vec3& Vector,bool bInter, double T0, double T1)
+{
+ return std::make_shared<STranslate>(Vector, bInter, T0, T1);
+}
+
+std::shared_ptr<SEllipseTranslate>
+makeSEllipseTranslate(double dWidth, double dHeight, double dStartPosition, double dEndPosition, bool bInter, double T0, double T1)
+{
+ return std::make_shared<SEllipseTranslate>(dWidth, dHeight, dStartPosition, dEndPosition, bInter, T0, T1);
+}
+
+std::shared_ptr<RotateAndScaleDepthByWidth>
+makeRotateAndScaleDepthByWidth(const glm::vec3& Axis,const glm::vec3& Origin,double Angle,bool bInter, double T0, double T1)
+{
+ return std::make_shared<RotateAndScaleDepthByWidth>(Axis, Origin, Angle, bInter, T0, T1);
+}
+
+std::shared_ptr<RotateAndScaleDepthByHeight>
+makeRotateAndScaleDepthByHeight(const glm::vec3& Axis,const glm::vec3& Origin,double Angle,bool bInter, double T0, double T1)
+{
+ return std::make_shared<RotateAndScaleDepthByHeight>(Axis, Origin, Angle, bInter, T0, T1);
+}
+
+inline double intervalInter(double t, double T0, double T1)
+{
+ return ( t - T0 ) / ( T1 - T0 );
+}
+
+void STranslate::interpolate(glm::mat4& matrix, double t, double SlideWidthScale, double SlideHeightScale) const
+{
+ if(t <= mnT0)
+ return;
+ if(!mbInterpolate || t > mnT1)
+ t = mnT1;
+ t = intervalInter(t,mnT0,mnT1);
+ matrix = glm::translate(matrix, glm::vec3(SlideWidthScale*t*vector.x, SlideHeightScale*t*vector.y, t*vector.z));
+}
+
+void SRotate::interpolate(glm::mat4& matrix, double t, double SlideWidthScale, double SlideHeightScale) const
+{
+ if(t <= mnT0)
+ return;
+ if(!mbInterpolate || t > mnT1)
+ t = mnT1;
+ t = intervalInter(t,mnT0,mnT1);
+ glm::vec3 translation_vector(SlideWidthScale*origin.x, SlideHeightScale*origin.y, origin.z);
+ glm::vec3 scale_vector(SlideWidthScale, SlideHeightScale, 1);
+ matrix = glm::translate(matrix, translation_vector);
+ matrix = glm::scale(matrix, scale_vector);
+ matrix = glm::rotate(matrix, static_cast<float>(t*angle), axis);
+ matrix = glm::scale(matrix, 1.f / scale_vector);
+ matrix = glm::translate(matrix, -translation_vector);
+}
+
+void SScale::interpolate(glm::mat4& matrix, double t, double SlideWidthScale, double SlideHeightScale) const
+{
+ if(t <= mnT0)
+ return;
+ if(!mbInterpolate || t > mnT1)
+ t = mnT1;
+ t = intervalInter(t,mnT0,mnT1);
+ glm::vec3 translation_vector(SlideWidthScale*origin.x, SlideHeightScale*origin.y, origin.z);
+ matrix = glm::translate(matrix, translation_vector);
+ matrix = glm::scale(matrix, static_cast<float>(1 - t) + static_cast<float>(t) * scale);
+ matrix = glm::translate(matrix, -translation_vector);
+}
+
+void RotateAndScaleDepthByWidth::interpolate(glm::mat4& matrix, double t, double SlideWidthScale, double SlideHeightScale) const
+{
+ if(t <= mnT0)
+ return;
+ if(!mbInterpolate || t > mnT1)
+ t = mnT1;
+ t = intervalInter(t,mnT0,mnT1);
+ glm::vec3 translation_vector(SlideWidthScale*origin.x, SlideHeightScale*origin.y, SlideWidthScale*origin.z);
+ matrix = glm::translate(matrix, translation_vector);
+ matrix = glm::rotate(matrix, static_cast<float>(t*angle), axis);
+ matrix = glm::translate(matrix, -translation_vector);
+}
+
+void RotateAndScaleDepthByHeight::interpolate(glm::mat4& matrix, double t, double SlideWidthScale, double SlideHeightScale) const
+{
+ if(t <= mnT0)
+ return;
+ if(!mbInterpolate || t > mnT1)
+ t = mnT1;
+ t = intervalInter(t,mnT0,mnT1);
+ glm::vec3 translation_vector(SlideWidthScale*origin.x, SlideHeightScale*origin.y, SlideHeightScale*origin.z);
+ matrix = glm::translate(matrix, translation_vector);
+ matrix = glm::rotate(matrix, static_cast<float>(t*angle), axis);
+ matrix = glm::translate(matrix, -translation_vector);
+}
+
+SEllipseTranslate::SEllipseTranslate(double dWidth, double dHeight, double dStartPosition,
+ double dEndPosition, bool bInter, double T0, double T1):
+ Operation(bInter, T0, T1)
+{
+ width = dWidth;
+ height = dHeight;
+ startPosition = dStartPosition;
+ endPosition = dEndPosition;
+}
+
+void SEllipseTranslate::interpolate(glm::mat4& matrix, double t, double /* SlideWidthScale */, double /* SlideHeightScale */) const
+{
+ if(t <= mnT0)
+ return;
+ if(!mbInterpolate || t > mnT1)
+ t = mnT1;
+ t = intervalInter(t,mnT0,mnT1);
+
+ double a1, a2, x, y;
+ a1 = startPosition*2*M_PI;
+ a2 = (startPosition + t*(endPosition - startPosition))*2*M_PI;
+ x = width*(cos (a2) - cos (a1))/2;
+ y = height*(sin (a2) - sin (a1))/2;
+
+ matrix = glm::translate(matrix, glm::vec3(x, 0, y));
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/slideshow/source/engine/OGLTrans/generic/OGLTrans_Operation.hxx b/slideshow/source/engine/OGLTrans/generic/OGLTrans_Operation.hxx
new file mode 100644
index 000000000000..bf657d00d3ee
--- /dev/null
+++ b/slideshow/source/engine/OGLTrans/generic/OGLTrans_Operation.hxx
@@ -0,0 +1,270 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2015 by Collabora, Ltd.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_OGLTRANS_OPERATIONS_HXX_
+#define INCLUDED_OGLTRANS_OPERATIONS_HXX_
+
+#include <config_lgpl.h>
+#include <glm/gtc/type_ptr.hpp>
+
+#include <boost/noncopyable.hpp>
+
+#include <memory>
+
+/** This class is to be derived to make any operation (transform) you may need in order to construct your transitions
+*/
+class Operation : private boost::noncopyable
+{
+public:
+ virtual ~Operation(){}
+
+protected:
+ /** Should this operation be interpolated . If TRUE, the transform will smoothly move from making no difference from t = 0.0 to mnT0 to being completely transformed from t = mnT1 to 1. If FALSE, the transform will be inneffectual from t = 0 to mnT0, and completely transformed from t = mnT0 to 1.
+ */
+ bool mbInterpolate;
+
+ /** time to begin the transformation
+ */
+ double mnT0;
+
+ /** time to finish the transformation
+ */
+ double mnT1;
+public:
+ /** this is the function that is called to give the Operation to OpenGL.
+
+ @param t
+ time from t = 0 to t = 1
+
+ @param SlideWidthScale
+ width of slide divided by width of window
+
+ @param SlideHeightScale
+ height of slide divided by height of window
+
+ */
+ virtual void interpolate(glm::mat4& matrix, double t, double SlideWidthScale, double SlideHeightScale) const = 0;
+
+protected:
+ Operation(bool bInterpolate, double nT0, double nT1):
+ mbInterpolate(bInterpolate), mnT0(nT0), mnT1(nT1){}
+};
+
+/** this class is a generic CounterClockWise(CCW) rotation with an axis angle
+*/
+class SRotate: public Operation
+{
+public:
+ virtual void interpolate(glm::mat4& matrix, double t, double SlideWidthScale, double SlideHeightScale) const override;
+
+ /** Constructor
+
+ @param Axis
+ axis to rotate about
+
+ @param Origin
+ position that rotation axis runs through
+
+ @param Angle
+ angle in radians of CCW rotation
+
+ @param bInter
+ see Operation
+
+ @param T0
+ transformation starting time
+
+ @param T1
+ transformation ending time
+
+ */
+ SRotate(const glm::vec3& Axis, const glm::vec3& Origin, double Angle,
+ bool bInter, double T0, double T1);
+ virtual ~SRotate(){}
+private:
+ /** axis to rotate CCW about
+ */
+ glm::vec3 axis;
+
+ /** position that rotation axis runs through
+ */
+ glm::vec3 origin;
+
+ /** angle in radians of CCW rotation
+ */
+ double angle;
+};
+
+std::shared_ptr<SRotate>
+makeSRotate(const glm::vec3& Axis, const glm::vec3& Origin, double Angle,
+ bool bInter, double T0, double T1);
+
+/** scaling transformation
+*/
+class SScale: public Operation
+{
+public:
+ virtual void interpolate(glm::mat4& matrix, double t, double SlideWidthScale, double SlideHeightScale) const override;
+
+ /** Constructor
+
+ @param Scale
+ amount to scale by
+
+ @param Origin
+ position that rotation axis runs through
+
+ @param bInter
+ see Operation
+
+ @param T0
+ transformation starting time
+
+ @param T1
+ transformation ending time
+
+ */
+ SScale(const glm::vec3& Scale, const glm::vec3& Origin,bool bInter, double T0, double T1);
+ virtual ~SScale(){}
+private:
+ glm::vec3 scale;
+ glm::vec3 origin;
+};
+
+std::shared_ptr<SScale>
+makeSScale(const glm::vec3& Scale, const glm::vec3& Origin,bool bInter, double T0, double T1);
+
+/** translation transformation
+*/
+class STranslate: public Operation
+{
+public:
+ virtual void interpolate(glm::mat4& matrix, double t, double SlideWidthScale, double SlideHeightScale) const override;
+
+ /** Constructor
+
+ @param Vector
+ vector to translate
+
+ @param bInter
+ see Operation
+
+ @param T0
+ transformation starting time
+
+ @param T1
+ transformation ending time
+
+ */
+ STranslate(const glm::vec3& Vector,bool bInter, double T0, double T1);
+ virtual ~STranslate(){}
+private:
+ /** vector to translate by
+ */
+ glm::vec3 vector;
+};
+
+std::shared_ptr<STranslate>
+makeSTranslate(const glm::vec3& Vector,bool bInter, double T0, double T1);
+
+/** translation transformation
+*/
+class SEllipseTranslate: public Operation
+{
+public:
+ virtual void interpolate(glm::mat4& matrix, double t, double SlideWidthScale, double SlideHeightScale) const override;
+
+ /** Constructor
+
+ @param Vector
+ vector to translate
+
+ @param bInter
+ see Operation
+
+ @param T0
+ transformation starting time
+
+ @param T1
+ transformation ending time
+
+ */
+ SEllipseTranslate(double dWidth, double dHeight, double dStartPosition, double dEndPosition, bool bInter, double T0, double T1);
+ virtual ~SEllipseTranslate(){}
+private:
+ /** width and length of the ellipse
+ */
+ double width, height;
+
+ /** start and end position on the ellipse <0,1>
+ */
+ double startPosition;
+ double endPosition;
+};
+
+std::shared_ptr<SEllipseTranslate>
+makeSEllipseTranslate(double dWidth, double dHeight, double dStartPosition, double dEndPosition, bool bInter, double T0, double T1);
+
+/** Same as SRotate, except the depth is scaled by the width of the slide divided by the width of the window.
+*/
+class RotateAndScaleDepthByWidth: public Operation
+{
+public:
+ virtual void interpolate(glm::mat4& matrix, double t, double SlideWidthScale, double SlideHeightScale) const override;
+
+ RotateAndScaleDepthByWidth(const glm::vec3& Axis,const glm::vec3& Origin,double Angle,bool bInter, double T0, double T1);
+ virtual ~RotateAndScaleDepthByWidth(){}
+private:
+ glm::vec3 axis;
+ glm::vec3 origin;
+ double angle;
+};
+
+std::shared_ptr<RotateAndScaleDepthByWidth>
+makeRotateAndScaleDepthByWidth(const glm::vec3& Axis,const glm::vec3& Origin,double Angle,bool bInter, double T0, double T1);
+
+/** Same as SRotate, except the depth is scaled by the width of the slide divided by the height of the window.
+*/
+class RotateAndScaleDepthByHeight: public Operation
+{
+public:
+ virtual void interpolate(glm::mat4& matrix, double t, double SlideWidthScale, double SlideHeightScale) const override;
+
+ RotateAndScaleDepthByHeight(const glm::vec3& Axis,const glm::vec3& Origin,double Angle,bool bInter, double T0, double T1);
+ virtual ~RotateAndScaleDepthByHeight(){}
+private:
+ glm::vec3 axis;
+ glm::vec3 origin;
+ double angle;
+};
+
+std::shared_ptr<RotateAndScaleDepthByHeight>
+makeRotateAndScaleDepthByHeight(const glm::vec3& Axis,const glm::vec3& Origin,double Angle,bool bInter, double T0, double T1);
+
+#endif // INCLUDED_SLIDESHOW_OPERATIONS_HXX_
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.cxx b/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.cxx
index dd791aed6017..8d3735b675f0 100644
--- a/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.cxx
+++ b/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.cxx
@@ -37,6 +37,7 @@
#include <comphelper/random.hxx>
#include "OGLTrans_TransitionImpl.hxx"
+#include "OGLTrans_Operation.hxx"
#include <math.h>
TransitionScene::TransitionScene(TransitionScene const& rOther)
@@ -1031,181 +1032,6 @@ std::shared_ptr<OGLTransitionImpl> makeNByMTileFlip( sal_uInt16 n, sal_uInt16 m
return makeSimpleTransition(aLeavingSlide, aEnteringSlide);
}
-SRotate::SRotate(const glm::vec3& Axis, const glm::vec3& Origin,
- double Angle, bool bInter, double T0, double T1):
- Operation(bInter, T0, T1),
- axis(Axis),
- origin(Origin),
- angle(Angle)
-{
-}
-
-SScale::SScale(const glm::vec3& Scale, const glm::vec3& Origin,
- bool bInter, double T0, double T1):
- Operation(bInter, T0, T1),
- scale(Scale),
- origin(Origin)
-{
-}
-
-RotateAndScaleDepthByWidth::RotateAndScaleDepthByWidth(const glm::vec3& Axis,
- const glm::vec3& Origin, double Angle, bool bInter, double T0, double T1):
- Operation(bInter, T0, T1),
- axis(Axis),
- origin(Origin),
- angle(Angle)
-{
-}
-
-RotateAndScaleDepthByHeight::RotateAndScaleDepthByHeight(const glm::vec3& Axis,
- const glm::vec3& Origin, double Angle, bool bInter, double T0, double T1):
- Operation(bInter, T0, T1),
- axis(Axis),
- origin(Origin),
- angle(Angle)
-{
-}
-
-
-STranslate::STranslate(const glm::vec3& Vector, bool bInter, double T0, double T1):
- Operation(bInter, T0, T1),
- vector(Vector)
-{
-}
-
-std::shared_ptr<SRotate>
-makeSRotate(const glm::vec3& Axis,const glm::vec3& Origin,double Angle,bool bInter, double T0, double T1)
-{
- return std::make_shared<SRotate>(Axis, Origin, Angle, bInter, T0, T1);
-}
-
-std::shared_ptr<SScale>
-makeSScale(const glm::vec3& Scale, const glm::vec3& Origin,bool bInter, double T0, double T1)
-{
- return std::make_shared<SScale>(Scale, Origin, bInter, T0, T1);
-}
-
-std::shared_ptr<STranslate>
-makeSTranslate(const glm::vec3& Vector,bool bInter, double T0, double T1)
-{
- return std::make_shared<STranslate>(Vector, bInter, T0, T1);
-}
-
-std::shared_ptr<SEllipseTranslate>
-makeSEllipseTranslate(double dWidth, double dHeight, double dStartPosition, double dEndPosition, bool bInter, double T0, double T1)
-{
- return std::make_shared<SEllipseTranslate>(dWidth, dHeight, dStartPosition, dEndPosition, bInter, T0, T1);
-}
-
-std::shared_ptr<RotateAndScaleDepthByWidth>
-makeRotateAndScaleDepthByWidth(const glm::vec3& Axis,const glm::vec3& Origin,double Angle,bool bInter, double T0, double T1)
-{
- return std::make_shared<RotateAndScaleDepthByWidth>(Axis, Origin, Angle, bInter, T0, T1);
-}
-
-std::shared_ptr<RotateAndScaleDepthByHeight>
-makeRotateAndScaleDepthByHeight(const glm::vec3& Axis,const glm::vec3& Origin,double Angle,bool bInter, double T0, double T1)
-{
- return std::make_shared<RotateAndScaleDepthByHeight>(Axis, Origin, Angle, bInter, T0, T1);
-}
-
-inline double intervalInter(double t, double T0, double T1)
-{
- return ( t - T0 ) / ( T1 - T0 );
-}
-
-void STranslate::interpolate(glm::mat4& matrix, double t, double SlideWidthScale, double SlideHeightScale) const
-{
- if(t <= mnT0)
- return;
- if(!mbInterpolate || t > mnT1)
- t = mnT1;
- t = intervalInter(t,mnT0,mnT1);
- matrix = glm::translate(matrix, glm::vec3(SlideWidthScale*t*vector.x, SlideHeightScale*t*vector.y, t*vector.z));
-}
-
-void SRotate::interpolate(glm::mat4& matrix, double t, double SlideWidthScale, double SlideHeightScale) const
-{
- if(t <= mnT0)
- return;
- if(!mbInterpolate || t > mnT1)
- t = mnT1;
- t = intervalInter(t,mnT0,mnT1);
- glm::vec3 translation_vector(SlideWidthScale*origin.x, SlideHeightScale*origin.y, origin.z);
- glm::vec3 scale_vector(SlideWidthScale, SlideHeightScale, 1);
- matrix = glm::translate(matrix, translation_vector);
- matrix = glm::scale(matrix, scale_vector);
- matrix = glm::rotate(matrix, static_cast<float>(t*angle), axis);
- matrix = glm::scale(matrix, 1.f / scale_vector);
- matrix = glm::translate(matrix, -translation_vector);
-}
-
-void SScale::interpolate(glm::mat4& matrix, double t, double SlideWidthScale, double SlideHeightScale) const
-{
- if(t <= mnT0)
- return;
- if(!mbInterpolate || t > mnT1)
- t = mnT1;
- t = intervalInter(t,mnT0,mnT1);
- glm::vec3 translation_vector(SlideWidthScale*origin.x, SlideHeightScale*origin.y, origin.z);
- matrix = glm::translate(matrix, translation_vector);
- matrix = glm::scale(matrix, static_cast<float>(1 - t) + static_cast<float>(t) * scale);
- matrix = glm::translate(matrix, -translation_vector);
-}
-
-void RotateAndScaleDepthByWidth::interpolate(glm::mat4& matrix, double t, double SlideWidthScale, double SlideHeightScale) const
-{
- if(t <= mnT0)
- return;
- if(!mbInterpolate || t > mnT1)
- t = mnT1;
- t = intervalInter(t,mnT0,mnT1);
- glm::vec3 translation_vector(SlideWidthScale*origin.x, SlideHeightScale*origin.y, SlideWidthScale*origin.z);
- matrix = glm::translate(matrix, translation_vector);
- matrix = glm::rotate(matrix, static_cast<float>(t*angle), axis);
- matrix = glm::translate(matrix, -translation_vector);
-}
-
-void RotateAndScaleDepthByHeight::interpolate(glm::mat4& matrix, double t, double SlideWidthScale, double SlideHeightScale) const
-{
- if(t <= mnT0)
- return;
- if(!mbInterpolate || t > mnT1)
- t = mnT1;
- t = intervalInter(t,mnT0,mnT1);
- glm::vec3 translation_vector(SlideWidthScale*origin.x, SlideHeightScale*origin.y, SlideHeightScale*origin.z);
- matrix = glm::translate(matrix, translation_vector);
- matrix = glm::rotate(matrix, static_cast<float>(t*angle), axis);
- matrix = glm::translate(matrix, -translation_vector);
-}
-
-SEllipseTranslate::SEllipseTranslate(double dWidth, double dHeight, double dStartPosition,
- double dEndPosition, bool bInter, double T0, double T1):
- Operation(bInter, T0, T1)
-{
- width = dWidth;
- height = dHeight;
- startPosition = dStartPosition;
- endPosition = dEndPosition;
-}
-
-void SEllipseTranslate::interpolate(glm::mat4& matrix, double t, double /* SlideWidthScale */, double /* SlideHeightScale */) const
-{
- if(t <= mnT0)
- return;
- if(!mbInterpolate || t > mnT1)
- t = mnT1;
- t = intervalInter(t,mnT0,mnT1);
-
- double a1, a2, x, y;
- a1 = startPosition*2*M_PI;
- a2 = (startPosition + t*(endPosition - startPosition))*2*M_PI;
- x = width*(cos (a2) - cos (a1))/2;
- y = height*(sin (a2) - sin (a1))/2;
-
- matrix = glm::translate(matrix, glm::vec3(x, 0, y));
-}
-
Primitive& Primitive::operator=(const Primitive& rvalue)
{
Primitive aTmp(rvalue);
diff --git a/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.hxx b/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.hxx
index 0a12c255ca5e..aaccd129496e 100644
--- a/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.hxx
+++ b/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.hxx
@@ -29,15 +29,12 @@
#define INCLUDED_OGLTRANS_TRANSITIONIMPL_HXX_
#include <config_lgpl.h>
-#include <glm/glm.hpp>
+#include <glm/gtc/type_ptr.hpp>
#include <boost/noncopyable.hpp>
#include <GL/glew.h>
-#include <basegfx/vector/b2dvector.hxx>
-#include <basegfx/vector/b3dvector.hxx>
-
#include <memory>
#include <vector>
@@ -343,236 +340,6 @@ private:
std::vector<Vertex> Vertices;
};
-/** This class is to be derived to make any operation (transform) you may need in order to construct your transitions
-*/
-class Operation : private boost::noncopyable
-{
-public:
- virtual ~Operation(){}
-
-protected:
- /** Should this operation be interpolated . If TRUE, the transform will smoothly move from making no difference from t = 0.0 to mnT0 to being completely transformed from t = mnT1 to 1. If FALSE, the transform will be inneffectual from t = 0 to mnT0, and completely transformed from t = mnT0 to 1.
- */
- bool mbInterpolate;
-
- /** time to begin the transformation
- */
- double mnT0;
-
- /** time to finish the transformation
- */
- double mnT1;
-public:
- /** this is the function that is called to give the Operation to OpenGL.
-
- @param t
- time from t = 0 to t = 1
-
- @param SlideWidthScale
- width of slide divided by width of window
-
- @param SlideHeightScale
- height of slide divided by height of window
-
- */
- virtual void interpolate(glm::mat4& matrix, double t, double SlideWidthScale, double SlideHeightScale) const = 0;
-
-protected:
- Operation(bool bInterpolate, double nT0, double nT1):
- mbInterpolate(bInterpolate), mnT0(nT0), mnT1(nT1){}
-};
-
-/** this class is a generic CounterClockWise(CCW) rotation with an axis angle
-*/
-class SRotate: public Operation
-{
-public:
- virtual void interpolate(glm::mat4& matrix, double t, double SlideWidthScale, double SlideHeightScale) const override;
-
- /** Constructor
-
- @param Axis
- axis to rotate about
-
- @param Origin
- position that rotation axis runs through
-
- @param Angle
- angle in radians of CCW rotation
-
- @param bInter
- see Operation
-
- @param T0
- transformation starting time
-
- @param T1
- transformation ending time
-
- */
- SRotate(const glm::vec3& Axis, const glm::vec3& Origin, double Angle,
- bool bInter, double T0, double T1);
- virtual ~SRotate(){}
-private:
- /** axis to rotate CCW about
- */
- glm::vec3 axis;
-
- /** position that rotation axis runs through
- */
- glm::vec3 origin;
-
- /** angle in radians of CCW rotation
- */
- double angle;
-};
-
-std::shared_ptr<SRotate>
-makeSRotate(const glm::vec3& Axis, const glm::vec3& Origin, double Angle,
- bool bInter, double T0, double T1);
-
-/** scaling transformation
-*/
-class SScale: public Operation
-{
-public:
- virtual void interpolate(glm::mat4& matrix, double t, double SlideWidthScale, double SlideHeightScale) const override;
-
- /** Constructor
-
- @param Scale
- amount to scale by
-
- @param Origin
- position that rotation axis runs through
-
- @param bInter
- see Operation
-
- @param T0
- transformation starting time
-
- @param T1
- transformation ending time
-
- */
- SScale(const glm::vec3& Scale, const glm::vec3& Origin,bool bInter, double T0, double T1);
- virtual ~SScale(){}
-private:
- glm::vec3 scale;
- glm::vec3 origin;
-};
-
-std::shared_ptr<SScale>
-makeSScale(const glm::vec3& Scale, const glm::vec3& Origin,bool bInter, double T0, double T1);
-
-/** translation transformation
-*/
-class STranslate: public Operation
-{
-public:
- virtual void interpolate(glm::mat4& matrix, double t, double SlideWidthScale, double SlideHeightScale) const override;
-
- /** Constructor
-
- @param Vector
- vector to translate
-
- @param bInter
- see Operation
-
- @param T0
- transformation starting time
-
- @param T1
- transformation ending time
-
- */
- STranslate(const glm::vec3& Vector,bool bInter, double T0, double T1);
- virtual ~STranslate(){}
-private:
- /** vector to translate by
- */
- glm::vec3 vector;
-};
-
-std::shared_ptr<STranslate>
-makeSTranslate(const glm::vec3& Vector,bool bInter, double T0, double T1);
-
-/** translation transformation
-*/
-class SEllipseTranslate: public Operation
-{
-public:
- virtual void interpolate(glm::mat4& matrix, double t, double SlideWidthScale, double SlideHeightScale) const override;
-
- /** Constructor
-
- @param Vector
- vector to translate
-
- @param bInter
- see Operation
-
- @param T0
- transformation starting time
-
- @param T1
- transformation ending time
-
- */
- SEllipseTranslate(double dWidth, double dHeight, double dStartPosition, double dEndPosition, bool bInter, double T0, double T1);
- virtual ~SEllipseTranslate(){}
-private:
- /** width and length of the ellipse
- */
- double width, height;
-
- /** start and end position on the ellipse <0,1>
- */
- double startPosition;
- double endPosition;
-};
-
-std::shared_ptr<SEllipseTranslate>
-makeSEllipseTranslate(double dWidth, double dHeight, double dStartPosition, double dEndPosition, bool bInter, double T0, double T1);
-
-/** Same as SRotate, except the depth is scaled by the width of the slide divided by the width of the window.
-*/
-class RotateAndScaleDepthByWidth: public Operation
-{
-public:
- virtual void interpolate(glm::mat4& matrix, double t, double SlideWidthScale, double SlideHeightScale) const override;
-
- RotateAndScaleDepthByWidth(const glm::vec3& Axis,const glm::vec3& Origin,double Angle,bool bInter, double T0, double T1);
- virtual ~RotateAndScaleDepthByWidth(){}
-private:
- glm::vec3 axis;
- glm::vec3 origin;
- double angle;
-};
-
-std::shared_ptr<RotateAndScaleDepthByWidth>
-makeRotateAndScaleDepthByWidth(const glm::vec3& Axis,const glm::vec3& Origin,double Angle,bool bInter, double T0, double T1);
-
-/** Same as SRotate, except the depth is scaled by the width of the slide divided by the height of the window.
-*/
-class RotateAndScaleDepthByHeight: public Operation
-{
-public:
- virtual void interpolate(glm::mat4& matrix, double t, double SlideWidthScale, double SlideHeightScale) const override;
-
- RotateAndScaleDepthByHeight(const glm::vec3& Axis,const glm::vec3& Origin,double Angle,bool bInter, double T0, double T1);
- virtual ~RotateAndScaleDepthByHeight(){}
-private:
- glm::vec3 axis;
- glm::vec3 origin;
- double angle;
-};
-
-std::shared_ptr<RotateAndScaleDepthByHeight>
-makeRotateAndScaleDepthByHeight(const glm::vec3& Axis,const glm::vec3& Origin,double Angle,bool bInter, double T0, double T1);
-
#endif // INCLUDED_SLIDESHOW_TRANSITION_HXX_
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */