1*aaef562fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*aaef562fSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*aaef562fSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*aaef562fSAndrew Rist  * distributed with this work for additional information
6*aaef562fSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*aaef562fSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*aaef562fSAndrew Rist  * "License"); you may not use this file except in compliance
9*aaef562fSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*aaef562fSAndrew Rist  *
11*aaef562fSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*aaef562fSAndrew Rist  *
13*aaef562fSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*aaef562fSAndrew Rist  * software distributed under the License is distributed on an
15*aaef562fSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*aaef562fSAndrew Rist  * KIND, either express or implied.  See the License for the
17*aaef562fSAndrew Rist  * specific language governing permissions and limitations
18*aaef562fSAndrew Rist  * under the License.
19*aaef562fSAndrew Rist  *
20*aaef562fSAndrew Rist  *************************************************************/
21*aaef562fSAndrew Rist 
22*aaef562fSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #ifndef INCLUDED_SLIDESHOW_PARAMETRICPOLYPOLYGON_HXX
25cdf0e10cSrcweir #define INCLUDED_SLIDESHOW_PARAMETRICPOLYPOLYGON_HXX
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include <basegfx/polygon/b2dpolypolygon.hxx>
28cdf0e10cSrcweir #include <boost/shared_ptr.hpp>
29cdf0e10cSrcweir 
30cdf0e10cSrcweir 
31cdf0e10cSrcweir /* Definition of ParametricPolyPolygon interface */
32cdf0e10cSrcweir 
33cdf0e10cSrcweir namespace slideshow
34cdf0e10cSrcweir {
35cdf0e10cSrcweir     namespace internal
36cdf0e10cSrcweir     {
37cdf0e10cSrcweir         /** Interface defining a parametric poly-polygon.
38cdf0e10cSrcweir 
39cdf0e10cSrcweir         	This interface defines a poly-polygon, whose actual shape
40cdf0e10cSrcweir         	is parameterized by a floating point value. This is
41cdf0e10cSrcweir         	e.g. used to generically access the various clip polygon
42cdf0e10cSrcweir         	generators for transition effects.
43cdf0e10cSrcweir 
44cdf0e10cSrcweir             Since for every parametric poly-polygon, there is a set of
45cdf0e10cSrcweir             variations, which can easily be generated by simple
46cdf0e10cSrcweir             transformations or change in parameter range sweep
47cdf0e10cSrcweir             direction, objects implementing this interface only
48cdf0e10cSrcweir             generate <em>one</em> prototypical instance of the
49cdf0e10cSrcweir             parametric poly-polygon. Generally speaking, the main
50cdf0e10cSrcweir             effect direction should be horizontal, it should make
51cdf0e10cSrcweir             increasingly more area visible (transition 'in'), and when
52cdf0e10cSrcweir             there is a designated direction given, that should be
53cdf0e10cSrcweir             left-to-right.
54cdf0e10cSrcweir          */
55cdf0e10cSrcweir         class ParametricPolyPolygon
56cdf0e10cSrcweir         {
57cdf0e10cSrcweir         public:
~ParametricPolyPolygon()58cdf0e10cSrcweir             virtual ~ParametricPolyPolygon() {}
59cdf0e10cSrcweir 
60cdf0e10cSrcweir             /** Retrieve the poly-polygon for value t.
61cdf0e10cSrcweir 
62cdf0e10cSrcweir                 @param t
63cdf0e10cSrcweir                 Current parameter value to retrieve the corresponding
64cdf0e10cSrcweir                 poly-polygon for. Permissible values for t must be in
65cdf0e10cSrcweir                 the range [0,1].
66cdf0e10cSrcweir 
67cdf0e10cSrcweir                 @return a poly-polygon corresponding to the given
68cdf0e10cSrcweir                 parameter value. The poly-polygon is interpreted as
69cdf0e10cSrcweir                 living in the unit rectangle (i.e. [0,1]x[0,1]), but
70cdf0e10cSrcweir                 is not necessarily constrained to completely lie in
71cdf0e10cSrcweir                 this area (this very much depends on the actual effect
72cdf0e10cSrcweir                 to be generated). Although, from a performance
73cdf0e10cSrcweir                 perspective, it currently <em>is</em> advantageous to
74cdf0e10cSrcweir                 try to keep the poly-polygon within these bounds (at
75cdf0e10cSrcweir                 least if there are no hard reasons not to do so),
76cdf0e10cSrcweir                 because then reversion or out transformations are
77cdf0e10cSrcweir                 potentially faster to compute (see the
78cdf0e10cSrcweir                 TransitionInfo::meReverseMethod member in
79cdf0e10cSrcweir                 transitionfactory.cxx). Furthermore, if one of the
80cdf0e10cSrcweir                 polygon modifications involve subtraction (also see
81cdf0e10cSrcweir                 TransitionInfo::meReverseMethod), all generated
82cdf0e10cSrcweir                 polygons should be oriented clock-wise
83cdf0e10cSrcweir                 (i.e. traversing the polygon vertices with increasing
84cdf0e10cSrcweir                 vertex index should generate a clock-wise movement).
85cdf0e10cSrcweir              */
86cdf0e10cSrcweir             virtual ::basegfx::B2DPolyPolygon operator()( double t ) = 0;
87cdf0e10cSrcweir         };
88cdf0e10cSrcweir 
89cdf0e10cSrcweir         typedef ::boost::shared_ptr< ParametricPolyPolygon > ParametricPolyPolygonSharedPtr;
90cdf0e10cSrcweir 
91cdf0e10cSrcweir     }
92cdf0e10cSrcweir }
93cdf0e10cSrcweir 
94cdf0e10cSrcweir #endif /* INCLUDED_SLIDESHOW_PARAMETRICPOLYPOLYGON_HXX */
95