1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski #ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_BORDERLINEPRIMITIVE2D_HXX 25*b1cdbd2cSJim Jagielski #define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_BORDERLINEPRIMITIVE2D_HXX 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include <drawinglayer/drawinglayerdllapi.h> 28*b1cdbd2cSJim Jagielski #include <drawinglayer/primitive2d/baseprimitive2d.hxx> 29*b1cdbd2cSJim Jagielski #include <basegfx/color/bcolor.hxx> 30*b1cdbd2cSJim Jagielski #include <basegfx/matrix/b2dhommatrix.hxx> 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 33*b1cdbd2cSJim Jagielski 34*b1cdbd2cSJim Jagielski namespace drawinglayer 35*b1cdbd2cSJim Jagielski { 36*b1cdbd2cSJim Jagielski namespace primitive2d 37*b1cdbd2cSJim Jagielski { 38*b1cdbd2cSJim Jagielski /** BorderLinePrimitive2D class 39*b1cdbd2cSJim Jagielski 40*b1cdbd2cSJim Jagielski This is the basic primitive to build frames around objects, e.g. tables. 41*b1cdbd2cSJim Jagielski It defines a single or double line from Start to nd using the LeftWidth, 42*b1cdbd2cSJim Jagielski Distance and RightWidth definitions. 43*b1cdbd2cSJim Jagielski The LineStart/End overlap is defined by the Extend(Inner|Outer)(Start|End) 44*b1cdbd2cSJim Jagielski definitions. 45*b1cdbd2cSJim Jagielski */ 46*b1cdbd2cSJim Jagielski class DRAWINGLAYER_DLLPUBLIC BorderLinePrimitive2D : public BufferedDecompositionPrimitive2D 47*b1cdbd2cSJim Jagielski { 48*b1cdbd2cSJim Jagielski private: 49*b1cdbd2cSJim Jagielski /// the line definition 50*b1cdbd2cSJim Jagielski basegfx::B2DPoint maStart; 51*b1cdbd2cSJim Jagielski basegfx::B2DPoint maEnd; 52*b1cdbd2cSJim Jagielski 53*b1cdbd2cSJim Jagielski /// the widths of single/double line 54*b1cdbd2cSJim Jagielski double mfLeftWidth; 55*b1cdbd2cSJim Jagielski double mfDistance; 56*b1cdbd2cSJim Jagielski double mfRightWidth; 57*b1cdbd2cSJim Jagielski 58*b1cdbd2cSJim Jagielski /// edge overlap sizes 59*b1cdbd2cSJim Jagielski double mfExtendInnerStart; 60*b1cdbd2cSJim Jagielski double mfExtendInnerEnd; 61*b1cdbd2cSJim Jagielski double mfExtendOuterStart; 62*b1cdbd2cSJim Jagielski double mfExtendOuterEnd; 63*b1cdbd2cSJim Jagielski 64*b1cdbd2cSJim Jagielski /// the line color 65*b1cdbd2cSJim Jagielski basegfx::BColor maRGBColor; 66*b1cdbd2cSJim Jagielski 67*b1cdbd2cSJim Jagielski /// bitfield 68*b1cdbd2cSJim Jagielski /// flags to influence inside/outside creation 69*b1cdbd2cSJim Jagielski unsigned mbCreateInside : 1; 70*b1cdbd2cSJim Jagielski unsigned mbCreateOutside : 1; 71*b1cdbd2cSJim Jagielski 72*b1cdbd2cSJim Jagielski /// local helpers getCorrectedLeftWidth() const73*b1cdbd2cSJim Jagielski double getCorrectedLeftWidth() const 74*b1cdbd2cSJim Jagielski { 75*b1cdbd2cSJim Jagielski return basegfx::fTools::equal(1.0, mfLeftWidth) ? 0.0 : mfLeftWidth; 76*b1cdbd2cSJim Jagielski } 77*b1cdbd2cSJim Jagielski getCorrectedDistance() const78*b1cdbd2cSJim Jagielski double getCorrectedDistance() const 79*b1cdbd2cSJim Jagielski { 80*b1cdbd2cSJim Jagielski return basegfx::fTools::equal(1.0, mfDistance) ? 0.0 : mfDistance; 81*b1cdbd2cSJim Jagielski } 82*b1cdbd2cSJim Jagielski getCorrectedRightWidth() const83*b1cdbd2cSJim Jagielski double getCorrectedRightWidth() const 84*b1cdbd2cSJim Jagielski { 85*b1cdbd2cSJim Jagielski return basegfx::fTools::equal(1.0, mfRightWidth) ? 0.0 : mfRightWidth; 86*b1cdbd2cSJim Jagielski } 87*b1cdbd2cSJim Jagielski getWidth() const88*b1cdbd2cSJim Jagielski double getWidth() const 89*b1cdbd2cSJim Jagielski { 90*b1cdbd2cSJim Jagielski return getCorrectedLeftWidth() + getCorrectedDistance() + getCorrectedRightWidth(); 91*b1cdbd2cSJim Jagielski } 92*b1cdbd2cSJim Jagielski leftIsHairline() const93*b1cdbd2cSJim Jagielski bool leftIsHairline() const 94*b1cdbd2cSJim Jagielski { 95*b1cdbd2cSJim Jagielski return basegfx::fTools::equal(1.0, mfLeftWidth); 96*b1cdbd2cSJim Jagielski } 97*b1cdbd2cSJim Jagielski rightIsHairline() const98*b1cdbd2cSJim Jagielski bool rightIsHairline() const 99*b1cdbd2cSJim Jagielski { 100*b1cdbd2cSJim Jagielski return basegfx::fTools::equal(1.0, mfRightWidth); 101*b1cdbd2cSJim Jagielski } 102*b1cdbd2cSJim Jagielski isInsideUsed() const103*b1cdbd2cSJim Jagielski bool isInsideUsed() const 104*b1cdbd2cSJim Jagielski { 105*b1cdbd2cSJim Jagielski return !basegfx::fTools::equalZero(mfLeftWidth); 106*b1cdbd2cSJim Jagielski } 107*b1cdbd2cSJim Jagielski isOutsideUsed() const108*b1cdbd2cSJim Jagielski bool isOutsideUsed() const 109*b1cdbd2cSJim Jagielski { 110*b1cdbd2cSJim Jagielski return !basegfx::fTools::equalZero(mfRightWidth); 111*b1cdbd2cSJim Jagielski } 112*b1cdbd2cSJim Jagielski 113*b1cdbd2cSJim Jagielski protected: 114*b1cdbd2cSJim Jagielski /// create local decomposition 115*b1cdbd2cSJim Jagielski virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; 116*b1cdbd2cSJim Jagielski 117*b1cdbd2cSJim Jagielski public: 118*b1cdbd2cSJim Jagielski /// constructor 119*b1cdbd2cSJim Jagielski BorderLinePrimitive2D( 120*b1cdbd2cSJim Jagielski const basegfx::B2DPoint& rStart, 121*b1cdbd2cSJim Jagielski const basegfx::B2DPoint& rEnd, 122*b1cdbd2cSJim Jagielski double fLeftWidth, 123*b1cdbd2cSJim Jagielski double fDistance, 124*b1cdbd2cSJim Jagielski double fRightWidth, 125*b1cdbd2cSJim Jagielski double fExtendInnerStart, 126*b1cdbd2cSJim Jagielski double fExtendInnerEnd, 127*b1cdbd2cSJim Jagielski double fExtendOuterStart, 128*b1cdbd2cSJim Jagielski double fExtendOuterEnd, 129*b1cdbd2cSJim Jagielski bool bCreateInside, 130*b1cdbd2cSJim Jagielski bool bCreateOutside, 131*b1cdbd2cSJim Jagielski const basegfx::BColor& rRGBColor); 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski /// data read access getStart() const134*b1cdbd2cSJim Jagielski const basegfx::B2DPoint& getStart() const { return maStart; } getEnd() const135*b1cdbd2cSJim Jagielski const basegfx::B2DPoint& getEnd() const { return maEnd; } getLeftWidth() const136*b1cdbd2cSJim Jagielski double getLeftWidth() const { return mfLeftWidth; } getDistance() const137*b1cdbd2cSJim Jagielski double getDistance() const { return mfDistance; } getRightWidth() const138*b1cdbd2cSJim Jagielski double getRightWidth() const { return mfRightWidth; } getExtendInnerStart() const139*b1cdbd2cSJim Jagielski double getExtendInnerStart() const { return mfExtendInnerStart; } getExtendInnerEnd() const140*b1cdbd2cSJim Jagielski double getExtendInnerEnd() const { return mfExtendInnerEnd; } getExtendOuterStart() const141*b1cdbd2cSJim Jagielski double getExtendOuterStart() const { return mfExtendOuterStart; } getExtendOuterEnd() const142*b1cdbd2cSJim Jagielski double getExtendOuterEnd() const { return mfExtendOuterEnd; } getCreateInside() const143*b1cdbd2cSJim Jagielski bool getCreateInside() const { return mbCreateInside; } getCreateOutside() const144*b1cdbd2cSJim Jagielski bool getCreateOutside() const { return mbCreateOutside; } getRGBColor() const145*b1cdbd2cSJim Jagielski const basegfx::BColor& getRGBColor() const { return maRGBColor; } 146*b1cdbd2cSJim Jagielski 147*b1cdbd2cSJim Jagielski /// compare operator 148*b1cdbd2cSJim Jagielski virtual bool operator==(const BasePrimitive2D& rPrimitive) const; 149*b1cdbd2cSJim Jagielski 150*b1cdbd2cSJim Jagielski /// provide unique ID 151*b1cdbd2cSJim Jagielski DeclPrimitrive2DIDBlock() 152*b1cdbd2cSJim Jagielski }; 153*b1cdbd2cSJim Jagielski } // end of namespace primitive2d 154*b1cdbd2cSJim Jagielski } // end of namespace drawinglayer 155*b1cdbd2cSJim Jagielski 156*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 157*b1cdbd2cSJim Jagielski 158*b1cdbd2cSJim Jagielski #endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_BORDERLINEPRIMITIVE2D_HXX 159*b1cdbd2cSJim Jagielski 160*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 161*b1cdbd2cSJim Jagielski // eof 162