1 /* === S Y N F I G ========================================================= */
2 /*! \file transform.cpp
3 ** \brief Template File
8 ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
10 ** This package is free software; you can redistribute it and/or
11 ** modify it under the terms of the GNU General Public License as
12 ** published by the Free Software Foundation; either version 2 of
13 ** the License, or (at your option) any later version.
15 ** This package is distributed in the hope that it will be useful,
16 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 ** General Public License for more details.
21 /* ========================================================================= */
23 /* === H E A D E R S ======================================================= */
32 #include "transform.h"
37 /* === U S I N G =========================================================== */
41 using namespace synfig;
43 /* === M A C R O S ========================================================= */
45 /* === G L O B A L S ======================================================= */
47 /* === P R O C E D U R E S ================================================= */
49 /* === M E T H O D S ======================================================= */
52 TransformStack::get_guid()const
56 for(const_iterator iter(begin());iter!=end();++iter)
57 ret%=(*iter)->get_guid();
62 TransformStack::perform(const synfig::Vector& x)const
64 synfig::Vector ret(x);
66 for(const_reverse_iterator iter(rbegin());iter!=rend();++iter)
67 ret=(*iter)->perform(ret);
73 TransformStack::unperform(const synfig::Vector& x)const
75 synfig::Vector ret(x);
77 for(const_iterator iter(begin());iter!=end();++iter)
78 ret=(*iter)->unperform(ret);
84 TransformStack::perform(const synfig::Rect& x)const
86 Point min(x.get_min());
87 Point max(x.get_max());
88 Rect ret(perform(min),perform(max));
90 std::swap(min[1],max[1]);
99 TransformStack::unperform(const synfig::Rect& x)const
101 Point min(x.get_min());
102 Point max(x.get_max());
103 Rect ret(unperform(min),unperform(max));
105 std::swap(min[1],max[1]);
107 .expand(unperform(min))
108 .expand(unperform(max))
114 Transform::perform(const synfig::Rect& x)const
116 if(x.area()>1000000000000.0)
117 return Rect::full_plane();
119 Point min(x.get_min());
120 Point max(x.get_max());
122 Rect ret(perform(min),perform(max));
124 std::swap(min[1],max[1]);
126 .expand(perform(min))
127 .expand(perform(max))
133 Transform::unperform(const synfig::Rect& x)const
135 if(x.area()>1000000000000.0)
136 return Rect::full_plane();
138 Point min(x.get_min());
139 Point max(x.get_max());
141 Rect ret(unperform(min),unperform(max));
143 std::swap(min[1],max[1]);
145 .expand(unperform(min))
146 .expand(unperform(max))