/************************************************************** * * 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. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_drawinglayer.hxx" #include #include ////////////////////////////////////////////////////////////////////////////// namespace drawinglayer { namespace attribute { class ImpFontAttribute { public: // refcounter sal_uInt32 mnRefCount; /// core data String maFamilyName; // Font Family Name String maStyleName; // Font Style Name sal_uInt16 mnWeight; // Font weight /// bitfield unsigned mbSymbol : 1; // Symbol Font Flag unsigned mbVertical : 1; // Vertical Text Flag unsigned mbItalic : 1; // Italic Flag unsigned mbOutline : 1; // Outline Flag unsigned mbRTL : 1; // RTL Flag unsigned mbBiDiStrong : 1; // BiDi Flag unsigned mbMonospaced : 1; ImpFontAttribute( const String& rFamilyName, const String& rStyleName, sal_uInt16 nWeight, bool bSymbol, bool bVertical, bool bItalic, bool bMonospaced, bool bOutline, bool bRTL, bool bBiDiStrong) : mnRefCount(0), maFamilyName(rFamilyName), maStyleName(rStyleName), mnWeight(nWeight), mbSymbol(bSymbol), mbVertical(bVertical), mbItalic(bItalic), mbOutline(bOutline), mbRTL(bRTL), mbBiDiStrong(bBiDiStrong), mbMonospaced(bMonospaced) { } // data read access const String& getFamilyName() const { return maFamilyName; } const String& getStyleName() const { return maStyleName; } sal_uInt16 getWeight() const { return mnWeight; } bool getSymbol() const { return mbSymbol; } bool getVertical() const { return mbVertical; } bool getItalic() const { return mbItalic; } bool getOutline() const { return mbOutline; } bool getRTL() const { return mbRTL; } bool getBiDiStrong() const { return mbBiDiStrong; } bool getMonospaced() const { return mbMonospaced; } bool operator==(const ImpFontAttribute& rCompare) const { return (getFamilyName() == rCompare.getFamilyName() && getStyleName() == rCompare.getStyleName() && getWeight() == rCompare.getWeight() && getSymbol() == rCompare.getSymbol() && getVertical() == rCompare.getVertical() && getItalic() == rCompare.getItalic() && getOutline() == rCompare.getOutline() && getRTL() == rCompare.getRTL() && getBiDiStrong() == rCompare.getBiDiStrong() && getMonospaced() == rCompare.getMonospaced()); } static ImpFontAttribute* get_global_default() { static ImpFontAttribute* pDefault = 0; if(!pDefault) { pDefault = new ImpFontAttribute( String(), String(), 0, false, false, false, false, false, false, false); // never delete; start with RefCount 1, not 0 pDefault->mnRefCount++; } return pDefault; } }; FontAttribute::FontAttribute( const String& rFamilyName, const String& rStyleName, sal_uInt16 nWeight, bool bSymbol, bool bVertical, bool bItalic, bool bMonospaced, bool bOutline, bool bRTL, bool bBiDiStrong) : mpFontAttribute(new ImpFontAttribute( rFamilyName, rStyleName, nWeight, bSymbol, bVertical, bItalic, bMonospaced, bOutline, bRTL, bBiDiStrong)) { } FontAttribute::FontAttribute() : mpFontAttribute(ImpFontAttribute::get_global_default()) { mpFontAttribute->mnRefCount++; } FontAttribute::FontAttribute(const FontAttribute& rCandidate) : mpFontAttribute(rCandidate.mpFontAttribute) { mpFontAttribute->mnRefCount++; } FontAttribute::~FontAttribute() { if(mpFontAttribute->mnRefCount) { mpFontAttribute->mnRefCount--; } else { delete mpFontAttribute; } } bool FontAttribute::isDefault() const { return mpFontAttribute == ImpFontAttribute::get_global_default(); } FontAttribute& FontAttribute::operator=(const FontAttribute& rCandidate) { if(rCandidate.mpFontAttribute != mpFontAttribute) { if(mpFontAttribute->mnRefCount) { mpFontAttribute->mnRefCount--; } else { delete mpFontAttribute; } mpFontAttribute = rCandidate.mpFontAttribute; mpFontAttribute->mnRefCount++; } return *this; } bool FontAttribute::operator==(const FontAttribute& rCandidate) const { if(rCandidate.mpFontAttribute == mpFontAttribute) { return true; } if(rCandidate.isDefault() != isDefault()) { return false; } return (*rCandidate.mpFontAttribute == *mpFontAttribute); } const String& FontAttribute::getFamilyName() const { return mpFontAttribute->getFamilyName(); } const String& FontAttribute::getStyleName() const { return mpFontAttribute->getStyleName(); } sal_uInt16 FontAttribute::getWeight() const { return mpFontAttribute->getWeight(); } bool FontAttribute::getSymbol() const { return mpFontAttribute->getSymbol(); } bool FontAttribute::getVertical() const { return mpFontAttribute->getVertical(); } bool FontAttribute::getItalic() const { return mpFontAttribute->getItalic(); } bool FontAttribute::getOutline() const { return mpFontAttribute->getOutline(); } bool FontAttribute::getRTL() const { return mpFontAttribute->getRTL(); } bool FontAttribute::getBiDiStrong() const { return mpFontAttribute->getBiDiStrong(); } bool FontAttribute::getMonospaced() const { return mpFontAttribute->getMonospaced(); } } // end of namespace attribute } // end of namespace drawinglayer ////////////////////////////////////////////////////////////////////////////// // eof