From 1ca7bb11061ec62e8ddca2c5a96d0a75c22a15da Mon Sep 17 00:00:00 2001
From: Oliver Bolte <obo@openoffice.org>
Date: Tue, 17 Jul 2007 14:19:50 +0000
Subject: INTEGRATION: CWS presfixes12 (1.4.12); FILE MERGED 2007/04/30
 07:24:13 thb 1.4.12.5: #i37778# Added extra transformation query method, to
 account for the fact that sprite positioning and static shape positioning
 might have different offsets. 2007/02/25 01:10:28 thb 1.4.12.4: #i37778#
 Cleared up error handling a lot: no longer quenching RuntimeExceptions;
 reporting assertions in the debug case; ViewLayer  now reports resized sprite
 (which needs re-render from all shapes); fixed missing subset area reduction
 for glyph-level animations; added return of resize state from 
 Layer::commitLayerBounds(); adapted unit tests to corrected behaviour
 2007/02/13 14:33:13 thb 1.4.12.3: #i37778# Split up View::clear() into
 clear() and clearAll() method, to facilitate local, clip-region based slide
 updates 2007/02/06 17:18:15 thb 1.4.12.2: #i37778# Moved clear() method from
 View to ViewLayer (also sprites need to be cleared); fixed a few more cases
 of local code style violations; removed redundant inline keywords; finished
 Layer/LayerManager rework (Layer now represents ViewLayers, shapes and
 rendering are fully under LayerManager control); made shape comparator
 reusable 2007/01/29 14:02:32 thb 1.4.12.1: Issue number: #i37778#

Larger slideshow refactoring. Wrote design and coding style manifest,
and adapted the code to actually conform to this. In detail:
 - cleaned up ownership/disposable/weak_ptr story. removed hacks and
   explicit Disposable implementations, where workaround were available
 - removed object mutices, where superfluous
 - reworked EventMultiplexer (using templatized listener class now), added
   more events. EventMultiplexer now serves as a true blackboard
 - reworked directory structure: disjunct parts are now physically separated
   into directories, instantiation happens via factories & abstract interfaces
 - added CursorManager, to make setting mouse cursor less hackish
 - reworked DrawShape, to implement SeparateListener pattern
 - reworked IntrinsicAnimationActivity, to avoid cyclic references
 - modified hyperlink & shape cursor handling to communicate via
   EventMultiplexer
 - renamed & cleaned up files (presentation.cxx now named slideshowimpl.cxx,
   etc.)
 - added first version of the z-order fix to layer/layermanager
 - cleaned up include guards and include syntax
---
 slideshow/source/inc/viewlayer.hxx | 139 +++++++++++++++++++++++++++++--------
 1 file changed, 110 insertions(+), 29 deletions(-)

(limited to 'slideshow')

diff --git a/slideshow/source/inc/viewlayer.hxx b/slideshow/source/inc/viewlayer.hxx
index 7e0b9053dd23..97eac0d17980 100644
--- a/slideshow/source/inc/viewlayer.hxx
+++ b/slideshow/source/inc/viewlayer.hxx
@@ -4,9 +4,9 @@
  *
  *  $RCSfile: viewlayer.hxx,v $
  *
- *  $Revision: 1.4 $
+ *  $Revision: 1.5 $
  *
- *  last change: $Author: kz $ $Date: 2006-12-13 16:07:55 $
+ *  last change: $Author: obo $ $Date: 2007-07-17 15:19:50 $
  *
  *  The Contents of this file are made available subject to
  *  the terms of GNU Lesser General Public License Version 2.1.
@@ -33,16 +33,25 @@
  *
  ************************************************************************/
 
-#ifndef _SLIDESHOW_VIEWLAYER_HXX
-#define _SLIDESHOW_VIEWLAYER_HXX
-
-#include <cppcanvas/spritecanvas.hxx>
-
-#include <basegfx/range/b2irectangle.hxx>
+#ifndef INCLUDED_SLIDESHOW_VIEWLAYER_HXX
+#define INCLUDED_SLIDESHOW_VIEWLAYER_HXX
 
+#include <sal/config.h>
 #include <boost/shared_ptr.hpp>
 
-namespace basegfx { class B1DRange; class B2DRange; }
+namespace basegfx
+{
+    class B1DRange;
+    class B2DRange;
+    class B2DVector;
+    class B2DHomMatrix;
+    class B2DPolyPolygon;
+}
+namespace cppcanvas
+{
+    class Canvas;
+    class CustomSprite;
+}
 
 
 /* Definition of ViewLayer interface */
@@ -51,52 +60,124 @@ namespace slideshow
 {
     namespace internal
     {
+        class View;
+
         class ViewLayer
         {
         public:
             virtual ~ViewLayer() {}
 
+            /** Query whether layer displays on given view.
+
+                @return true, if this layer displays on the given
+                view.
+            */
+            virtual bool isOnView(boost::shared_ptr<View> const& rView) const = 0;
+
             /** Get the associated canvas of this layer.
 
                 The canvas returned by this method must not change, as
                 long as this object is alive.
             */
-            virtual ::cppcanvas::CanvasSharedPtr getCanvas() const = 0;
+            virtual boost::shared_ptr< cppcanvas::Canvas > getCanvas() const = 0;
+
+            /** Clear the clipped view layer area
+
+                This method clears the area inside the clip polygon,
+                if none is set, the transformed unit rectangle of the
+                view.
+             */
+            virtual void clear() const = 0;
+
+            /** Clear the complete view
+
+                This method clears the full view area (not only the
+                transformed unit rectangle, or within the clip). If
+                this ViewLayer represents the background layer, the
+                whole XSlideShowView is cleared. If this ViewLayer is
+                implemented using sprites (i.e. one of the upper
+                layers), the sprite is cleared to fully transparent.
+             */
+            virtual void clearAll() const = 0;
 
             /** Create a sprite for this layer
 
                 @param rSpriteSizePixel
                 Sprite size in device pixel
 
-                @return the sprite, or NULL on failure (or if this canvas
-                does not support sprites)
+                @param nPriority
+                Sprite priority. This value determines the priority of
+                this sprite, relative to all other sprites of this
+                ViewLayer. The higher the priority, the closer to the
+                foreground the sprite will be.
+
+                @return the sprite, or NULL on failure (or if this
+                canvas does not support sprites).
             */
-            virtual ::cppcanvas::CustomSpriteSharedPtr createSprite( const ::basegfx::B2DSize& rSpriteSizePixel ) const = 0;
+            virtual boost::shared_ptr< cppcanvas::CustomSprite >
+            createSprite( const basegfx::B2DVector& rSpriteSizePixel,
+                          double                    nPriority ) const = 0;
 
-            /** Compute a sprite priority relative to this layer.
+            /** Set the layer priority range
 
-                @param nSpritePrio
-                Priority of the Sprite within this layer
+                This method influences the relative priority of this
+                layer, i.e. the z position in relation to other layers
+                on the parent view. The higher the priority range, the
+                further in front the layer resides.
 
-                @return absolute sprite priority, to be set at a ::cppcanvas::Sprite
+                @param rRange
+                Priority range, must be in the range [0,1]
             */
-            virtual double getSpritePriority( double nSpritePrio ) const = 0;
-
-            /** Set the layer priority
+            virtual void setPriority( const basegfx::B1DRange& rRange ) = 0;
+
+            /** Get the overall view transformation.
+
+                This method should <em>not</em> simply return the
+                underlying canvas' transformation, but rather provide
+                a layer above that. This enables clients of the
+                slideshow to set their own user space transformation
+                at the canvas, whilst the slideshow adds their
+                transformation on top of that. Concretely, this method
+                returns the user transform (implicitely calculated
+                from the setViewSize() method), combined with the view
+                transformation.
+            */
+            virtual basegfx::B2DHomMatrix getTransformation() const = 0;
 
-                This method influences the relative priority of this
-                layer, i.e. the z position in relation to other layers on
-                the parent view. The higher the priority, the further in front
-                the layer resides.
+            /** Get the overall view transformation.
 
-                @param nPrio
-                Priority, must be in the range [0,1]
+                Same transformation as with getTransformation(), only
+                that you can safely use this one to position sprites
+                on screen (no ViewLayer offsets included whatsoever).
             */
-            virtual void setPriority( double nPrio ) = 0;
+            virtual basegfx::B2DHomMatrix getSpriteTransformation() const = 0;
+
+            /** Set clipping on this view layer.
+
+                @param rClip
+                Clip poly-polygon to set. The polygon is interpreted
+                in the user coordinate system, i.e. the view layer has
+                the size as given by setViewSize() on its
+                corresponding View.
+             */
+            virtual void setClip( const basegfx::B2DPolyPolygon& rClip ) = 0;
+
+            /** Resize this view layer.
+
+                @param rArea
+                New area to cover. The area is interpreted in the user
+                coordinate system, i.e. relative to the size as given
+                by setViewSize() on the corresponding View.
+
+                @return true, if layer was actually resized (which
+                invalidates its content)
+             */
+            virtual bool resize( const basegfx::B2DRange& rArea ) = 0;
+
         };
 
-        typedef ::boost::shared_ptr< ViewLayer > ViewLayerSharedPtr;
+        typedef boost::shared_ptr< ViewLayer > ViewLayerSharedPtr;
     }
 }
 
-#endif /* _SLIDESHOW_VIEWLAYER_HXX */
+#endif /* INCLUDED_SLIDESHOW_VIEWLAYER_HXX */
-- 
cgit