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 // MARKER(update_precomp.py): autogen include statement, do not remove 25*b1cdbd2cSJim Jagielski #include "precompiled_drawinglayer.hxx" 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include <drawinglayer/attribute/fontattribute.hxx> 28*b1cdbd2cSJim Jagielski #include <tools/string.hxx> 29*b1cdbd2cSJim Jagielski 30*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski namespace drawinglayer 33*b1cdbd2cSJim Jagielski { 34*b1cdbd2cSJim Jagielski namespace attribute 35*b1cdbd2cSJim Jagielski { 36*b1cdbd2cSJim Jagielski class ImpFontAttribute 37*b1cdbd2cSJim Jagielski { 38*b1cdbd2cSJim Jagielski public: 39*b1cdbd2cSJim Jagielski // refcounter 40*b1cdbd2cSJim Jagielski sal_uInt32 mnRefCount; 41*b1cdbd2cSJim Jagielski 42*b1cdbd2cSJim Jagielski /// core data 43*b1cdbd2cSJim Jagielski String maFamilyName; // Font Family Name 44*b1cdbd2cSJim Jagielski String maStyleName; // Font Style Name 45*b1cdbd2cSJim Jagielski sal_uInt16 mnWeight; // Font weight 46*b1cdbd2cSJim Jagielski 47*b1cdbd2cSJim Jagielski /// bitfield 48*b1cdbd2cSJim Jagielski unsigned mbSymbol : 1; // Symbol Font Flag 49*b1cdbd2cSJim Jagielski unsigned mbVertical : 1; // Vertical Text Flag 50*b1cdbd2cSJim Jagielski unsigned mbItalic : 1; // Italic Flag 51*b1cdbd2cSJim Jagielski unsigned mbOutline : 1; // Outline Flag 52*b1cdbd2cSJim Jagielski unsigned mbRTL : 1; // RTL Flag 53*b1cdbd2cSJim Jagielski unsigned mbBiDiStrong : 1; // BiDi Flag 54*b1cdbd2cSJim Jagielski unsigned mbMonospaced : 1; 55*b1cdbd2cSJim Jagielski ImpFontAttribute(const String & rFamilyName,const String & rStyleName,sal_uInt16 nWeight,bool bSymbol,bool bVertical,bool bItalic,bool bMonospaced,bool bOutline,bool bRTL,bool bBiDiStrong)56*b1cdbd2cSJim Jagielski ImpFontAttribute( 57*b1cdbd2cSJim Jagielski const String& rFamilyName, 58*b1cdbd2cSJim Jagielski const String& rStyleName, 59*b1cdbd2cSJim Jagielski sal_uInt16 nWeight, 60*b1cdbd2cSJim Jagielski bool bSymbol, 61*b1cdbd2cSJim Jagielski bool bVertical, 62*b1cdbd2cSJim Jagielski bool bItalic, 63*b1cdbd2cSJim Jagielski bool bMonospaced, 64*b1cdbd2cSJim Jagielski bool bOutline, 65*b1cdbd2cSJim Jagielski bool bRTL, 66*b1cdbd2cSJim Jagielski bool bBiDiStrong) 67*b1cdbd2cSJim Jagielski : mnRefCount(0), 68*b1cdbd2cSJim Jagielski maFamilyName(rFamilyName), 69*b1cdbd2cSJim Jagielski maStyleName(rStyleName), 70*b1cdbd2cSJim Jagielski mnWeight(nWeight), 71*b1cdbd2cSJim Jagielski mbSymbol(bSymbol), 72*b1cdbd2cSJim Jagielski mbVertical(bVertical), 73*b1cdbd2cSJim Jagielski mbItalic(bItalic), 74*b1cdbd2cSJim Jagielski mbOutline(bOutline), 75*b1cdbd2cSJim Jagielski mbRTL(bRTL), 76*b1cdbd2cSJim Jagielski mbBiDiStrong(bBiDiStrong), 77*b1cdbd2cSJim Jagielski mbMonospaced(bMonospaced) 78*b1cdbd2cSJim Jagielski { 79*b1cdbd2cSJim Jagielski } 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski // data read access getFamilyName() const82*b1cdbd2cSJim Jagielski const String& getFamilyName() const { return maFamilyName; } getStyleName() const83*b1cdbd2cSJim Jagielski const String& getStyleName() const { return maStyleName; } getWeight() const84*b1cdbd2cSJim Jagielski sal_uInt16 getWeight() const { return mnWeight; } getSymbol() const85*b1cdbd2cSJim Jagielski bool getSymbol() const { return mbSymbol; } getVertical() const86*b1cdbd2cSJim Jagielski bool getVertical() const { return mbVertical; } getItalic() const87*b1cdbd2cSJim Jagielski bool getItalic() const { return mbItalic; } getOutline() const88*b1cdbd2cSJim Jagielski bool getOutline() const { return mbOutline; } getRTL() const89*b1cdbd2cSJim Jagielski bool getRTL() const { return mbRTL; } getBiDiStrong() const90*b1cdbd2cSJim Jagielski bool getBiDiStrong() const { return mbBiDiStrong; } getMonospaced() const91*b1cdbd2cSJim Jagielski bool getMonospaced() const { return mbMonospaced; } 92*b1cdbd2cSJim Jagielski operator ==(const ImpFontAttribute & rCompare) const93*b1cdbd2cSJim Jagielski bool operator==(const ImpFontAttribute& rCompare) const 94*b1cdbd2cSJim Jagielski { 95*b1cdbd2cSJim Jagielski return (getFamilyName() == rCompare.getFamilyName() 96*b1cdbd2cSJim Jagielski && getStyleName() == rCompare.getStyleName() 97*b1cdbd2cSJim Jagielski && getWeight() == rCompare.getWeight() 98*b1cdbd2cSJim Jagielski && getSymbol() == rCompare.getSymbol() 99*b1cdbd2cSJim Jagielski && getVertical() == rCompare.getVertical() 100*b1cdbd2cSJim Jagielski && getItalic() == rCompare.getItalic() 101*b1cdbd2cSJim Jagielski && getOutline() == rCompare.getOutline() 102*b1cdbd2cSJim Jagielski && getRTL() == rCompare.getRTL() 103*b1cdbd2cSJim Jagielski && getBiDiStrong() == rCompare.getBiDiStrong() 104*b1cdbd2cSJim Jagielski && getMonospaced() == rCompare.getMonospaced()); 105*b1cdbd2cSJim Jagielski } 106*b1cdbd2cSJim Jagielski get_global_default()107*b1cdbd2cSJim Jagielski static ImpFontAttribute* get_global_default() 108*b1cdbd2cSJim Jagielski { 109*b1cdbd2cSJim Jagielski static ImpFontAttribute* pDefault = 0; 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski if(!pDefault) 112*b1cdbd2cSJim Jagielski { 113*b1cdbd2cSJim Jagielski pDefault = new ImpFontAttribute( 114*b1cdbd2cSJim Jagielski String(), String(), 115*b1cdbd2cSJim Jagielski 0, 116*b1cdbd2cSJim Jagielski false, false, false, false, false, false, false); 117*b1cdbd2cSJim Jagielski 118*b1cdbd2cSJim Jagielski // never delete; start with RefCount 1, not 0 119*b1cdbd2cSJim Jagielski pDefault->mnRefCount++; 120*b1cdbd2cSJim Jagielski } 121*b1cdbd2cSJim Jagielski 122*b1cdbd2cSJim Jagielski return pDefault; 123*b1cdbd2cSJim Jagielski } 124*b1cdbd2cSJim Jagielski }; 125*b1cdbd2cSJim Jagielski FontAttribute(const String & rFamilyName,const String & rStyleName,sal_uInt16 nWeight,bool bSymbol,bool bVertical,bool bItalic,bool bMonospaced,bool bOutline,bool bRTL,bool bBiDiStrong)126*b1cdbd2cSJim Jagielski FontAttribute::FontAttribute( 127*b1cdbd2cSJim Jagielski const String& rFamilyName, 128*b1cdbd2cSJim Jagielski const String& rStyleName, 129*b1cdbd2cSJim Jagielski sal_uInt16 nWeight, 130*b1cdbd2cSJim Jagielski bool bSymbol, 131*b1cdbd2cSJim Jagielski bool bVertical, 132*b1cdbd2cSJim Jagielski bool bItalic, 133*b1cdbd2cSJim Jagielski bool bMonospaced, 134*b1cdbd2cSJim Jagielski bool bOutline, 135*b1cdbd2cSJim Jagielski bool bRTL, 136*b1cdbd2cSJim Jagielski bool bBiDiStrong) 137*b1cdbd2cSJim Jagielski : mpFontAttribute(new ImpFontAttribute( 138*b1cdbd2cSJim Jagielski rFamilyName, rStyleName, nWeight, bSymbol, bVertical, bItalic, bMonospaced, bOutline, bRTL, bBiDiStrong)) 139*b1cdbd2cSJim Jagielski { 140*b1cdbd2cSJim Jagielski } 141*b1cdbd2cSJim Jagielski FontAttribute()142*b1cdbd2cSJim Jagielski FontAttribute::FontAttribute() 143*b1cdbd2cSJim Jagielski : mpFontAttribute(ImpFontAttribute::get_global_default()) 144*b1cdbd2cSJim Jagielski { 145*b1cdbd2cSJim Jagielski mpFontAttribute->mnRefCount++; 146*b1cdbd2cSJim Jagielski } 147*b1cdbd2cSJim Jagielski FontAttribute(const FontAttribute & rCandidate)148*b1cdbd2cSJim Jagielski FontAttribute::FontAttribute(const FontAttribute& rCandidate) 149*b1cdbd2cSJim Jagielski : mpFontAttribute(rCandidate.mpFontAttribute) 150*b1cdbd2cSJim Jagielski { 151*b1cdbd2cSJim Jagielski mpFontAttribute->mnRefCount++; 152*b1cdbd2cSJim Jagielski } 153*b1cdbd2cSJim Jagielski ~FontAttribute()154*b1cdbd2cSJim Jagielski FontAttribute::~FontAttribute() 155*b1cdbd2cSJim Jagielski { 156*b1cdbd2cSJim Jagielski if(mpFontAttribute->mnRefCount) 157*b1cdbd2cSJim Jagielski { 158*b1cdbd2cSJim Jagielski mpFontAttribute->mnRefCount--; 159*b1cdbd2cSJim Jagielski } 160*b1cdbd2cSJim Jagielski else 161*b1cdbd2cSJim Jagielski { 162*b1cdbd2cSJim Jagielski delete mpFontAttribute; 163*b1cdbd2cSJim Jagielski } 164*b1cdbd2cSJim Jagielski } 165*b1cdbd2cSJim Jagielski isDefault() const166*b1cdbd2cSJim Jagielski bool FontAttribute::isDefault() const 167*b1cdbd2cSJim Jagielski { 168*b1cdbd2cSJim Jagielski return mpFontAttribute == ImpFontAttribute::get_global_default(); 169*b1cdbd2cSJim Jagielski } 170*b1cdbd2cSJim Jagielski operator =(const FontAttribute & rCandidate)171*b1cdbd2cSJim Jagielski FontAttribute& FontAttribute::operator=(const FontAttribute& rCandidate) 172*b1cdbd2cSJim Jagielski { 173*b1cdbd2cSJim Jagielski if(rCandidate.mpFontAttribute != mpFontAttribute) 174*b1cdbd2cSJim Jagielski { 175*b1cdbd2cSJim Jagielski if(mpFontAttribute->mnRefCount) 176*b1cdbd2cSJim Jagielski { 177*b1cdbd2cSJim Jagielski mpFontAttribute->mnRefCount--; 178*b1cdbd2cSJim Jagielski } 179*b1cdbd2cSJim Jagielski else 180*b1cdbd2cSJim Jagielski { 181*b1cdbd2cSJim Jagielski delete mpFontAttribute; 182*b1cdbd2cSJim Jagielski } 183*b1cdbd2cSJim Jagielski 184*b1cdbd2cSJim Jagielski mpFontAttribute = rCandidate.mpFontAttribute; 185*b1cdbd2cSJim Jagielski mpFontAttribute->mnRefCount++; 186*b1cdbd2cSJim Jagielski } 187*b1cdbd2cSJim Jagielski 188*b1cdbd2cSJim Jagielski return *this; 189*b1cdbd2cSJim Jagielski } 190*b1cdbd2cSJim Jagielski operator ==(const FontAttribute & rCandidate) const191*b1cdbd2cSJim Jagielski bool FontAttribute::operator==(const FontAttribute& rCandidate) const 192*b1cdbd2cSJim Jagielski { 193*b1cdbd2cSJim Jagielski if(rCandidate.mpFontAttribute == mpFontAttribute) 194*b1cdbd2cSJim Jagielski { 195*b1cdbd2cSJim Jagielski return true; 196*b1cdbd2cSJim Jagielski } 197*b1cdbd2cSJim Jagielski 198*b1cdbd2cSJim Jagielski if(rCandidate.isDefault() != isDefault()) 199*b1cdbd2cSJim Jagielski { 200*b1cdbd2cSJim Jagielski return false; 201*b1cdbd2cSJim Jagielski } 202*b1cdbd2cSJim Jagielski 203*b1cdbd2cSJim Jagielski return (*rCandidate.mpFontAttribute == *mpFontAttribute); 204*b1cdbd2cSJim Jagielski } 205*b1cdbd2cSJim Jagielski getFamilyName() const206*b1cdbd2cSJim Jagielski const String& FontAttribute::getFamilyName() const 207*b1cdbd2cSJim Jagielski { 208*b1cdbd2cSJim Jagielski return mpFontAttribute->getFamilyName(); 209*b1cdbd2cSJim Jagielski } 210*b1cdbd2cSJim Jagielski getStyleName() const211*b1cdbd2cSJim Jagielski const String& FontAttribute::getStyleName() const 212*b1cdbd2cSJim Jagielski { 213*b1cdbd2cSJim Jagielski return mpFontAttribute->getStyleName(); 214*b1cdbd2cSJim Jagielski } 215*b1cdbd2cSJim Jagielski getWeight() const216*b1cdbd2cSJim Jagielski sal_uInt16 FontAttribute::getWeight() const 217*b1cdbd2cSJim Jagielski { 218*b1cdbd2cSJim Jagielski return mpFontAttribute->getWeight(); 219*b1cdbd2cSJim Jagielski } 220*b1cdbd2cSJim Jagielski getSymbol() const221*b1cdbd2cSJim Jagielski bool FontAttribute::getSymbol() const 222*b1cdbd2cSJim Jagielski { 223*b1cdbd2cSJim Jagielski return mpFontAttribute->getSymbol(); 224*b1cdbd2cSJim Jagielski } 225*b1cdbd2cSJim Jagielski getVertical() const226*b1cdbd2cSJim Jagielski bool FontAttribute::getVertical() const 227*b1cdbd2cSJim Jagielski { 228*b1cdbd2cSJim Jagielski return mpFontAttribute->getVertical(); 229*b1cdbd2cSJim Jagielski } 230*b1cdbd2cSJim Jagielski getItalic() const231*b1cdbd2cSJim Jagielski bool FontAttribute::getItalic() const 232*b1cdbd2cSJim Jagielski { 233*b1cdbd2cSJim Jagielski return mpFontAttribute->getItalic(); 234*b1cdbd2cSJim Jagielski } 235*b1cdbd2cSJim Jagielski getOutline() const236*b1cdbd2cSJim Jagielski bool FontAttribute::getOutline() const 237*b1cdbd2cSJim Jagielski { 238*b1cdbd2cSJim Jagielski return mpFontAttribute->getOutline(); 239*b1cdbd2cSJim Jagielski } 240*b1cdbd2cSJim Jagielski getRTL() const241*b1cdbd2cSJim Jagielski bool FontAttribute::getRTL() const 242*b1cdbd2cSJim Jagielski { 243*b1cdbd2cSJim Jagielski return mpFontAttribute->getRTL(); 244*b1cdbd2cSJim Jagielski } 245*b1cdbd2cSJim Jagielski getBiDiStrong() const246*b1cdbd2cSJim Jagielski bool FontAttribute::getBiDiStrong() const 247*b1cdbd2cSJim Jagielski { 248*b1cdbd2cSJim Jagielski return mpFontAttribute->getBiDiStrong(); 249*b1cdbd2cSJim Jagielski } 250*b1cdbd2cSJim Jagielski getMonospaced() const251*b1cdbd2cSJim Jagielski bool FontAttribute::getMonospaced() const 252*b1cdbd2cSJim Jagielski { 253*b1cdbd2cSJim Jagielski return mpFontAttribute->getMonospaced(); 254*b1cdbd2cSJim Jagielski } 255*b1cdbd2cSJim Jagielski 256*b1cdbd2cSJim Jagielski 257*b1cdbd2cSJim Jagielski } // end of namespace attribute 258*b1cdbd2cSJim Jagielski } // end of namespace drawinglayer 259*b1cdbd2cSJim Jagielski 260*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 261*b1cdbd2cSJim Jagielski // eof 262