/* -*- 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 2000, 2010 Oracle and/or its affiliates. * * 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 * * for a copy of the LGPLv3 License. * ************************************************************************/ #ifndef _ENHANCEDCUSTOMSHAPE2D_HXX #define _ENHANCEDCUSTOMSHAPE2D_HXX #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define DFF_CUSTOMSHAPE_FLIP_V 1 #define DFF_CUSTOMSHAPE_FLIP_H 2 #define DFF_CUSTOMSHAPE_EXCH 4 class SdrModel; class SdrObject; class SfxItemSet; struct SvxMSDffVertPair; struct SvxMSDffCalculationData; struct SvxMSDffTextRectangles; class SvxMSDffAdjustmentHandle; #define HANDLE_FLAGS_MIRRORED_X 0x0001 #define HANDLE_FLAGS_MIRRORED_Y 0x0002 #define HANDLE_FLAGS_SWITCHED 0x0004 #define HANDLE_FLAGS_POLAR 0x0008 #define HANDLE_FLAGS_MAP 0x0010 #define HANDLE_FLAGS_RANGE_X_MINIMUM 0x0020 #define HANDLE_FLAGS_RANGE_X_MAXIMUM 0x0040 #define HANDLE_FLAGS_RANGE_Y_MINIMUM 0x0080 #define HANDLE_FLAGS_RANGE_Y_MAXIMUM 0x0100 #define HANDLE_FLAGS_RADIUS_RANGE_MINIMUM 0x0200 #define HANDLE_FLAGS_RADIUS_RANGE_MAXIMUM 0x0400 #define HANDLE_FLAGS_REFX 0x0800 #define HANDLE_FLAGS_REFY 0x1000 #define HANDLE_FLAGS_REFANGLE 0x2000 #define HANDLE_FLAGS_REFR 0x4000 // MSDFF_HANDLE_FLAGS_RANGE_Y seems to be not defined in // escher, but we are using it internally in to differentiate // between X_RANGE and Y_RANGE class SdrPathObj; class EnhancedCustomShape2d : public SfxItemSet { SdrObject* pCustomShapeObj; MSO_SPT eSpType; sal_Int32 nCoordLeft; sal_Int32 nCoordTop; sal_Int32 nCoordWidth; sal_Int32 nCoordHeight; Rectangle aLogicRect; double fXScale; double fYScale; double fXRatio; double fYRatio; sal_Int32 nXRef; sal_Int32 nYRef; sal_uInt32 nFlags; sal_uInt32 nColorData; /* */ com::sun::star::uno::Sequence< rtl::OUString > seqEquations; std::vector< ::boost::shared_ptr< EnhancedCustomShape::ExpressionNode > > vNodesSharedPtr; com::sun::star::uno::Sequence< com::sun::star::drawing::EnhancedCustomShapeSegment > seqSegments; com::sun::star::uno::Sequence< com::sun::star::drawing::EnhancedCustomShapeParameterPair> seqCoordinates; com::sun::star::uno::Sequence< com::sun::star::drawing::EnhancedCustomShapeTextFrame > seqTextFrames; com::sun::star::uno::Sequence< com::sun::star::drawing::EnhancedCustomShapeParameterPair> seqGluePoints; com::sun::star::uno::Sequence< com::sun::star::drawing::EnhancedCustomShapeAdjustmentValue > seqAdjustmentValues; com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValues > seqHandles; sal_Bool bTextFlow : 1; sal_Bool bFilled : 1; sal_Bool bStroked : 1; sal_Bool bFlipH; sal_Bool bFlipV; sal_Int32 nRotateAngle; sal_Bool SetAdjustValueAsDouble( const double& rValue, const sal_Int32 nIndex ); sal_Int32 GetLuminanceChange( sal_uInt32 nIndex ) const; Color GetColorData( const Color& rFillColor, sal_uInt32 nIndex ) const; void AdaptObjColor(SdrPathObj& rObj, const SfxItemSet& rCustomShapeSet, sal_uInt32& nColorIndex, sal_uInt32 nColorCount); sal_Bool GetParameter( double& rParameterReturnValue, const com::sun::star::drawing::EnhancedCustomShapeParameter&, const sal_Bool bReplaceGeoWidth, const sal_Bool bReplaceGeoHeight ) const; Point GetPoint( const com::sun::star::drawing::EnhancedCustomShapeParameterPair&, const sal_Bool bScale = sal_True, const sal_Bool bReplaceGeoSize = sal_False ) const; void CreateSubPath( sal_uInt16& rSrcPt, sal_uInt16& rSegmentInd, std::vector< SdrPathObj* >& rObjectList, sal_Bool bLineGeometryNeededOnly, sal_Bool bSortFilledObjectsToBack ); SdrObject* CreatePathObj( sal_Bool bLineGeometryNeededOnly ); const sal_Int32* ApplyShapeAttributes( const SdrCustomShapeGeometryItem& rItem ); public : struct Handle { sal_uInt32 nFlags; sal_Bool bMirroredX; sal_Bool bMirroredY; sal_Bool bSwitched; com::sun::star::drawing::EnhancedCustomShapeParameterPair aPosition; com::sun::star::drawing::EnhancedCustomShapeParameterPair aPolar; sal_Int32 nRefX; sal_Int32 nRefY; sal_Int32 nRefAngle; sal_Int32 nRefR; com::sun::star::drawing::EnhancedCustomShapeParameter aRadiusRangeMinimum; com::sun::star::drawing::EnhancedCustomShapeParameter aRadiusRangeMaximum; com::sun::star::drawing::EnhancedCustomShapeParameter aXRangeMinimum; com::sun::star::drawing::EnhancedCustomShapeParameter aXRangeMaximum; com::sun::star::drawing::EnhancedCustomShapeParameter aYRangeMinimum; com::sun::star::drawing::EnhancedCustomShapeParameter aYRangeMaximum; Handle() : bMirroredX ( sal_False ), bMirroredY ( sal_False ), bSwitched( sal_False ), nRefX( -1 ), nRefY( -1 ), nRefAngle( -1 ), nRefR( -1 ) {}; }; sal_Bool IsFlipVert() { return bFlipV; }; sal_Bool IsFlipHorz() { return bFlipH; }; sal_Int32 GetRotateAngle() { return nRotateAngle; }; SVX_DLLPUBLIC SdrObject* CreateLineGeometry(); SVX_DLLPUBLIC SdrObject* CreateObject( sal_Bool bLineGeometryNeededOnly ); SVX_DLLPUBLIC void ApplyGluePoints( SdrObject* pObj ); SVX_DLLPUBLIC Rectangle GetTextRect() const; SVX_DLLPUBLIC sal_uInt32 GetHdlCount() const; SVX_DLLPUBLIC sal_Bool GetHandlePosition( const sal_uInt32 nIndex, Point& rReturnPosition ) const; SVX_DLLPUBLIC sal_Bool SetHandleControllerPosition( const sal_uInt32 nIndex, const com::sun::star::awt::Point& rPosition ); SVX_DLLPUBLIC EnhancedCustomShape2d( SdrObject* pSdrObjCustomShape ); SVX_DLLPUBLIC ~EnhancedCustomShape2d(); enum EnumFunc { ENUM_FUNC_PI, ENUM_FUNC_LEFT, ENUM_FUNC_TOP, ENUM_FUNC_RIGHT, ENUM_FUNC_BOTTOM, ENUM_FUNC_XSTRETCH, ENUM_FUNC_YSTRETCH, ENUM_FUNC_HASSTROKE, ENUM_FUNC_HASFILL, ENUM_FUNC_WIDTH, ENUM_FUNC_HEIGHT, ENUM_FUNC_LOGWIDTH, ENUM_FUNC_LOGHEIGHT }; double GetEnumFunc( const EnumFunc eVal ) const; double GetAdjustValueAsDouble( const sal_Int32 nIndex ) const; double GetEquationValueAsDouble( const sal_Int32 nIndex ) const; sal_Int32 GetAdjustValueAsInteger( const sal_Int32 nIndex, const sal_Int32 nDefault = 0 ) const; SVX_DLLPUBLIC static rtl::OUString GetEquation( const sal_uInt16 nFlags, sal_Int16 nPara1, sal_Int16 nPara2, sal_Int16 nPara3 ); static void AppendEnhancedCustomShapeEquationParameter( rtl::OUString& rParameter, const sal_Int16 nPara, const sal_Bool bIsSpecialValue ); static void SetEnhancedCustomShapeEquationParameter( com::sun::star::drawing::EnhancedCustomShapeParameter& rParameter, const sal_Int16 nPara, const sal_Bool bIsSpecialValue ); SVX_DLLPUBLIC static void SetEnhancedCustomShapeParameter( com::sun::star::drawing::EnhancedCustomShapeParameter& rParameter, const sal_Int32 nValue ); SVX_DLLPUBLIC static void SetEnhancedCustomShapeHandleParameter( com::sun::star::drawing::EnhancedCustomShapeParameter& rParameter, const sal_Int32 nPara, const sal_Bool bIsSpecialValue, sal_Bool bHorz ); static sal_Bool ConvertSequenceToEnhancedCustomShape2dHandle( const com::sun::star::beans::PropertyValues& rHandleProperties, EnhancedCustomShape2d::Handle& rDestinationHandle ); static void SwapStartAndEndArrow( SdrObject* pObj ); }; #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */