Kaydet (Commit) fb3661a4 authored tarafından Emmanuel Gil Peyrot's avatar Emmanuel Gil Peyrot Kaydeden (comit) Tomaž Vajngerl

slideshow: Move Operation to its own translation unit

Change-Id: Ie0be68055152347e82da66cb48cf76c54b7966c0
üst 67a6bfb1
......@@ -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,\
......
/* -*- 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: */
/* -*- 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: */
......@@ -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);
......
......@@ -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: */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment