blob: 1f54308d4ffea997adfdce8f622cf888d2d73453 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _SDR_OVERLAY_OVERLAYOBJECT_HXX
#define _SDR_OVERLAY_OVERLAYOBJECT_HXX
#include <basegfx/point/b2dpoint.hxx>
#include <basegfx/range/b2drange.hxx>
#include <tools/color.hxx>
#include <svx/sdr/animation/scheduler.hxx>
#include "svx/svxdllapi.h"
#include <drawinglayer/primitive2d/baseprimitive2d.hxx>
#include <vector>
//////////////////////////////////////////////////////////////////////////////
// predeclarations
class OutputDevice;
namespace sdr
{
namespace overlay
{
class OverlayManager;
} // end of namespace overlay
} // end of namespace sdr
namespace basegfx
{
class B2DPolygon;
class B2DPolyPolygon;
class B2DRange;
} // end of namespace basegfx
//////////////////////////////////////////////////////////////////////////////
namespace sdr
{
namespace overlay
{
class SVX_DLLPUBLIC OverlayObject : private ::boost::noncopyable, public ::sdr::animation::Event
{
private:
// Manager is allowed access to private Member mpOverlayManager
friend class OverlayManager;
// pointer to OverlayManager, if object is added. Changed by
// OverlayManager, do not chnge Yourself.
OverlayManager* mpOverlayManager;
// Primitive2DSequence of the OverlayObject
drawinglayer::primitive2d::Primitive2DSequence maPrimitive2DSequence;
protected:
// access methods to maPrimitive2DSequence. The usage of this methods may allow
// later thread-safe stuff to be added if needed. Only to be used by getPrimitive2DSequence()
// implementations for buffering the last decomposition.
const drawinglayer::primitive2d::Primitive2DSequence& getPrimitive2DSequence() const { return maPrimitive2DSequence; }
void setPrimitive2DSequence(const drawinglayer::primitive2d::Primitive2DSequence& rNew) { maPrimitive2DSequence = rNew; }
// the creation method for Primitive2DSequence. Called when getPrimitive2DSequence()
// sees that maPrimitive2DSequence is empty. Needs to be supported by all
// OverlayObject implementations. Default implementation will assert
// a missing implementation
virtual drawinglayer::primitive2d::Primitive2DSequence createOverlayObjectPrimitive2DSequence();
// #i53216# check blink time value range (currently 25 < mnBlinkTime < 10000)
sal_uInt32 impCheckBlinkTimeValueRange(sal_uInt32 nBlinkTime) const;
// region in logical coordinates
basegfx::B2DRange maBaseRange;
// base color of this OverlayObject
Color maBaseColor;
// bitfield
// Flag for visibility
unsigned mbIsVisible : 1;
// Flag to control hittability
unsigned mbIsHittable : 1;
// Flag to hold info if this objects supports animation. Default is
// false. If true, the Trigger() method should be overloaded
// to implement the animation effect and to re-initiate the event.
unsigned mbAllowsAnimation : 1;
// Flag tocontrol if this OverlayObject allows AntiAliased visualisation.
// Default is true, but e.g. for selection visualisation in SC and SW,
// it is switched to false
unsigned mbAllowsAntiAliase : 1;
// set changed flag. Call after change, since the old range is invalidated
// and then the new one is calculated and invalidated, too. This will only
// work after the change.
virtual void objectChange();
// write access to AntiAliase flag. This is protected since
// only implementations are allowed to change this, preferrably in their
// constructor
void allowAntiAliase(bool bNew);
public:
OverlayObject(Color aBaseColor);
virtual ~OverlayObject();
// get OverlayManager
OverlayManager* getOverlayManager() const { return mpOverlayManager; }
// the access method for Primitive2DSequence. Will use createPrimitive2DSequence and
// setPrimitive2DSequence if needed. Overloading may be used to allow disposal of last
// created primitives to react on changed circumstances and to re-create primitives
virtual drawinglayer::primitive2d::Primitive2DSequence getOverlayObjectPrimitive2DSequence() const;
// access to visibility state
bool isVisible() const { return mbIsVisible; }
void setVisible(bool bNew);
// access to hittable flag
bool isHittable() const { return mbIsHittable; }
void setHittable(bool bNew);
// read access to AntiAliase flag
bool allowsAntiAliase() const { return mbAllowsAntiAliase; }
// read access to baseRange. This may trigger createBaseRange() if
// object is changed.
const basegfx::B2DRange& getBaseRange() const;
// access to baseColor
Color getBaseColor() const { return maBaseColor; }
void setBaseColor(Color aNew);
// execute event from base class ::sdr::animation::Event. Default
// implementation does nothing and does not create a new event.
virtual void Trigger(sal_uInt32 nTime);
// acces to AllowsAnimation flag
bool allowsAnimation() const { return mbAllowsAnimation; }
// stripe definition has changed. The OverlayManager does have
// support data to draw graphics in two colors striped. This
// method notifies the OverlayObject if that change takes place.
// Default implementation does nothing.
virtual void stripeDefinitionHasChanged();
};
// typedefs for a vector of OverlayObjects
typedef ::std::vector< OverlayObject* > OverlayObjectVector;
} // end of namespace overlay
} // end of namespace sdr
//////////////////////////////////////////////////////////////////////////////
namespace sdr
{
namespace overlay
{
class SVX_DLLPUBLIC OverlayObjectWithBasePosition : public OverlayObject
{
protected:
// base position in logical coordinates
basegfx::B2DPoint maBasePosition;
public:
OverlayObjectWithBasePosition(const basegfx::B2DPoint& rBasePos, Color aBaseColor);
virtual ~OverlayObjectWithBasePosition();
// access to basePosition
const basegfx::B2DPoint& getBasePosition() const { return maBasePosition; }
void setBasePosition(const basegfx::B2DPoint& rNew);
};
} // end of namespace overlay
} // end of namespace sdr
//////////////////////////////////////////////////////////////////////////////
#endif //_SDR_OVERLAY_OVERLAYOBJECT_HXX
// eof