/** * Copyright (C) 2014-2050 * All rights reserved. * * @file SFontPool.h * @brief * @version v1.0 * @author SOUI group * @date 2014/08/02 * * Describe SOUI字体管理模块 */ #pragma once #include #include #include #include #define FF_DEFAULTFONT L"" /** * @class FontKey * @brief 一个FONT的KEY * * Describe 用于实现一个font map */ namespace SOUI { /** * @class CElementTraits< FontKey > * @brief FontKey的Hash及比较模板 * * Describe 用于实现一个font map */ template<> class CElementTraits< FontInfo > : public CElementTraitsBase { public: static ULONG Hash( INARGTYPE fontKey ) { ULONG uRet=SOUI::CElementTraits::Hash(fontKey.strFaceName); uRet = (uRet<<5) + SOUI::CElementTraits::Hash(fontKey.strPropEx); uRet = (uRet<<5) +(UINT)fontKey.style.dwStyle+1; return uRet; } static bool CompareElements( INARGTYPE element1, INARGTYPE element2 ) { return element1.strFaceName==element2.strFaceName && element1.strPropEx==element2.strPropEx && element1.style.dwStyle==element2.style.dwStyle; } static int CompareElementsOrdered( INARGTYPE element1, INARGTYPE element2 ) { int nRet= element1.strFaceName.Compare(element2.strFaceName); if(nRet == 0) nRet = element1.strPropEx.Compare(element2.strPropEx); if(nRet == 0) nRet = element1.style.dwStyle-element2.style.dwStyle; return nRet; } }; typedef IFont * IFontPtr; struct IDefFontListener{ virtual void OnDefFontChanged() = 0; }; /** * @class SFontPool * @brief font pool * * Describe */ class SOUI_EXP SFontPool :public SSingletonMap { SINGLETON2_TYPE(SINGLETON_FONTPOOL) public: SFontPool(IRenderFactory *pRendFactory); static SStringW FontInfoToString(const FontInfo &fontInfo); static FontInfo FontInfoFromString(const SStringW &strFontInfo); /** * GetFont * @brief 获得与指定的strFont对应的IFontPtr * @param const SStringW & strFont -- font描述字符串 * @return IFontPtr -- font对象 * * Describe 描述字符串格式如:face:宋体,bold:0,italic:1,underline:1,strike:1,adding:10 */ IFontPtr GetFont(const SStringW & strFont,int scale); /** * GetFont * @brief 获得与指定的font key对应的IFontPtr * @param FONTSTYLE style -- 字体风格 * @param LPCTSTR strFaceName -- 字体名 * @return IFontPtr -- font对象 * Describe */ IFontPtr GetFont(FONTSTYLE style,const SStringW& strFaceName = SStringW(),pugi::xml_node xmlExProp = pugi::xml_node()); void SetDefFontInfo(const FontInfo & fontInfo); void SetDefFontInfo(const SStringW & strFontInfo); protected: const FontInfo & GetDefFontInfo() const; static void OnKeyRemoved(const IFontPtr & obj); IFontPtr _CreateFont(const LOGFONT &lf); IFontPtr _CreateFont(const FontInfo &fontInfo,pugi::xml_node xmlExProp); SAutoRefPtr m_RenderFactory; FontInfo m_defFontInfo; SCriticalSection m_cs; }; }//namespace SOUI