1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TEXTDECORATEDPRIMITIVE2D_HXX 25 #define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TEXTDECORATEDPRIMITIVE2D_HXX 26 27 #include <drawinglayer/drawinglayerdllapi.h> 28 #include <drawinglayer/primitive2d/textprimitive2d.hxx> 29 #include <drawinglayer/primitive2d/textenumsprimitive2d.hxx> 30 31 ////////////////////////////////////////////////////////////////////////////// 32 // predeclarations 33 34 namespace basegfx { namespace tools { 35 class B2DHomMatrixBufferedOnDemandDecompose; 36 }} 37 38 namespace com { namespace sun { namespace star { namespace i18n { 39 struct Boundary; 40 }}}} 41 42 ////////////////////////////////////////////////////////////////////////////// 43 44 namespace drawinglayer 45 { 46 namespace primitive2d 47 { 48 /** TextDecoratedPortionPrimitive2D class 49 50 This primitive expands the TextSimplePortionPrimitive2D by common 51 decorations used in the office. It can be decomposed and will create 52 a TextSimplePortionPrimitive2D and all the contained decorations (if used) 53 as geometry. 54 */ 55 class DRAWINGLAYER_DLLPUBLIC TextDecoratedPortionPrimitive2D : public TextSimplePortionPrimitive2D 56 { 57 private: 58 /// decoration definitions 59 basegfx::BColor maOverlineColor; 60 basegfx::BColor maTextlineColor; 61 TextLine meFontOverline; 62 TextLine meFontUnderline; 63 TextStrikeout meTextStrikeout; 64 TextEmphasisMark meTextEmphasisMark; 65 TextRelief meTextRelief; 66 67 /// bitfield 68 unsigned mbUnderlineAbove : 1; 69 unsigned mbWordLineMode : 1; 70 unsigned mbEmphasisMarkAbove : 1; 71 unsigned mbEmphasisMarkBelow : 1; 72 unsigned mbShadow : 1; 73 74 /// helper methods 75 void impCreateGeometryContent( 76 std::vector< Primitive2DReference >& rTarget, 77 basegfx::tools::B2DHomMatrixBufferedOnDemandDecompose& rDecTrans, 78 const String& rText, 79 xub_StrLen aTextPosition, 80 xub_StrLen aTextLength, 81 const ::std::vector< double >& rDXArray, 82 const attribute::FontAttribute& rFontAttribute) const; 83 84 protected: 85 /// local decomposition. 86 virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; 87 88 public: 89 /// constructor 90 TextDecoratedPortionPrimitive2D( 91 92 /// TextSimplePortionPrimitive2D parameters 93 const basegfx::B2DHomMatrix& rNewTransform, 94 const String& rText, 95 xub_StrLen aTextPosition, 96 xub_StrLen aTextLength, 97 const ::std::vector< double >& rDXArray, 98 const attribute::FontAttribute& rFontAttribute, 99 const ::com::sun::star::lang::Locale& rLocale, 100 const basegfx::BColor& rFontColor, 101 102 /// local parameters 103 const basegfx::BColor& rOverlineColor, 104 const basegfx::BColor& rTextlineColor, 105 TextLine eFontOverline = TEXT_LINE_NONE, 106 TextLine eFontUnderline = TEXT_LINE_NONE, 107 bool bUnderlineAbove = false, 108 TextStrikeout eTextStrikeout = TEXT_STRIKEOUT_NONE, 109 bool bWordLineMode = false, 110 TextEmphasisMark eTextEmphasisMark = TEXT_EMPHASISMARK_NONE, 111 bool bEmphasisMarkAbove = true, 112 bool bEmphasisMarkBelow = false, 113 TextRelief eTextRelief = TEXT_RELIEF_NONE, 114 bool bShadow = false); 115 116 /// data read access getFontOverline() const117 TextLine getFontOverline() const { return meFontOverline; } getFontUnderline() const118 TextLine getFontUnderline() const { return meFontUnderline; } getTextStrikeout() const119 TextStrikeout getTextStrikeout() const { return meTextStrikeout; } getTextEmphasisMark() const120 TextEmphasisMark getTextEmphasisMark() const { return meTextEmphasisMark; } getTextRelief() const121 TextRelief getTextRelief() const { return meTextRelief; } getOverlineColor() const122 const basegfx::BColor& getOverlineColor() const { return maOverlineColor; } getTextlineColor() const123 const basegfx::BColor& getTextlineColor() const { return maTextlineColor; } getUnderlineAbove() const124 bool getUnderlineAbove() const { return mbUnderlineAbove; } getWordLineMode() const125 bool getWordLineMode() const { return mbWordLineMode; } getEmphasisMarkAbove() const126 bool getEmphasisMarkAbove() const { return mbEmphasisMarkAbove; } getEmphasisMarkBelow() const127 bool getEmphasisMarkBelow() const { return mbEmphasisMarkBelow; } getShadow() const128 bool getShadow() const { return mbShadow; } 129 130 /// check if this needs to be a TextDecoratedPortionPrimitive2D or 131 /// if a TextSimplePortionPrimitive2D would be suficcient 132 bool decoratedIsNeeded() const; 133 134 /// compare operator 135 virtual bool operator==( const BasePrimitive2D& rPrimitive ) const; 136 137 /// get range 138 virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; 139 140 /// provide unique ID 141 DeclPrimitrive2DIDBlock() 142 }; 143 } // end of namespace primitive2d 144 } // end of namespace drawinglayer 145 146 ////////////////////////////////////////////////////////////////////////////// 147 148 #endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TEXTDECORATEDPRIMITIVE2D_HXX 149 150 ////////////////////////////////////////////////////////////////////////////// 151 // eof 152