⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 font.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/////////////////////////////////////////////////////////////////////////////// Name:        src/mac/carbon/font.cpp// Purpose:     wxFont class// Author:      Stefan Csomor// Modified by:// Created:     1998-01-01// RCS-ID:      $Id: font.cpp,v 1.53 2006/11/20 16:21:04 VS Exp $// Copyright:   (c) Stefan Csomor// Licence:     wxWindows licence/////////////////////////////////////////////////////////////////////////////#include "wx/wxprec.h"#include "wx/font.h"#ifndef WX_PRECOMP    #include "wx/string.h"    #include "wx/utils.h"    #include "wx/intl.h"    #include "wx/gdicmn.h"#endif#include "wx/fontutil.h"#include "wx/graphics.h"#include "wx/mac/private.h"#ifndef __DARWIN__#include <ATSUnicode.h>#endifIMPLEMENT_DYNAMIC_CLASS(wxFont, wxGDIObject)class WXDLLEXPORT wxFontRefData: public wxGDIRefData{    friend class WXDLLEXPORT wxFont;public:    wxFontRefData()        : m_fontId(0)        , m_pointSize(10)        , m_family(wxDEFAULT)        , m_style(wxNORMAL)        , m_weight(wxNORMAL)        , m_underlined(false)        , m_faceName(wxT("applicationfont"))        , m_encoding(wxFONTENCODING_DEFAULT)        , m_macFontFamily(0)        , m_macFontSize(0)        , m_macFontStyle(0)        , m_macATSUStyle(0)        , m_macATSUFontID(0)    {        Init(m_pointSize, m_family, m_style, m_weight,             m_underlined, m_faceName, m_encoding);    }    wxFontRefData(const wxFontRefData& data)        : wxGDIRefData()        , m_fontId(data.m_fontId)        , m_pointSize(data.m_pointSize)        , m_family(data.m_family)        , m_style(data.m_style)        , m_weight(data.m_weight)        , m_underlined(data.m_underlined)        , m_faceName(data.m_faceName)        , m_encoding(data.m_encoding)        , m_macFontFamily(data.m_macFontFamily)        , m_macFontSize(data.m_macFontSize)        , m_macFontStyle(data.m_macFontStyle)        , m_macATSUStyle(0)        , m_macATSUFontID(data.m_macATSUFontID)    {        Init(data.m_pointSize, data.m_family, data.m_style, data.m_weight,             data.m_underlined, data.m_faceName, data.m_encoding);    }    wxFontRefData(int size,                  int family,                  int style,                  int weight,                  bool underlined,                  const wxString& faceName,                  wxFontEncoding encoding)        : m_fontId(0)        , m_pointSize(size)        , m_family(family)        , m_style(style)        , m_weight(weight)        , m_underlined(underlined)        , m_faceName(faceName)        , m_encoding(encoding)        , m_macFontFamily(0)        , m_macFontSize(0)        , m_macFontStyle(0)        , m_macATSUStyle(0)        , m_macATSUFontID(0)    {        Init(size, family, style, weight, underlined, faceName, encoding);    }    virtual ~wxFontRefData();    void SetNoAntiAliasing( bool no = true )    { m_noAA = no; }    bool GetNoAntiAliasing() const    { return m_noAA; }    void MacFindFont();protected:    // common part of all ctors    void Init(int size,              int family,              int style,              int weight,              bool underlined,              const wxString& faceName,              wxFontEncoding encoding);    // font characterstics    int             m_fontId;    int             m_pointSize;    int             m_family;    int             m_style;    int             m_weight;    bool            m_underlined;    wxString        m_faceName;    wxFontEncoding  m_encoding;    bool            m_noAA;      // No anti-aliasingpublic:    FMFontFamily    m_macFontFamily;    FMFontSize      m_macFontSize;    FMFontStyle     m_macFontStyle;    // ATSU Font Information    // this is split into an ATSU font id that may    // contain some styles (special bold fonts etc) and    // these are the additional qd styles that are not    // included in the ATSU font id    ATSUStyle       m_macATSUStyle ;    ATSUFontID      m_macATSUFontID;    FMFontStyle     m_macATSUAdditionalQDStyles ;    // for true themeing support we must store the correct font    // information here, as this speeds up and optimizes rendering    ThemeFontID     m_macThemeFontID ;    wxNativeFontInfo  m_info;};#define M_FONTDATA ((wxFontRefData*)m_refData)// ============================================================================// implementation// ============================================================================// ----------------------------------------------------------------------------// wxFontRefData// ----------------------------------------------------------------------------void wxFontRefData::Init(int pointSize,    int family,    int style,    int weight,    bool underlined,    const wxString& faceName,    wxFontEncoding encoding){    m_style = style;    m_pointSize = pointSize;    m_family = family;    m_style = style;    m_weight = weight;    m_underlined = underlined;    m_faceName = faceName;    m_encoding = encoding;    m_macFontFamily = 0 ;    m_macFontSize = 0;    m_macFontStyle = 0;    m_macATSUFontID = 0;    m_macATSUAdditionalQDStyles = 0 ;    m_macATSUStyle = NULL ;    m_macThemeFontID = kThemeCurrentPortFont ;    m_noAA = false;}wxFontRefData::~wxFontRefData(){    if ( m_macATSUStyle )    {        ::ATSUDisposeStyle((ATSUStyle)m_macATSUStyle);        m_macATSUStyle = NULL ;    }}void wxFontRefData::MacFindFont(){    OSStatus status ;    Str255 qdFontName ;    if ( m_macThemeFontID != kThemeCurrentPortFont )    {        Style style ;        GetThemeFont( m_macThemeFontID, GetApplicationScript(), qdFontName, &m_macFontSize, &style );        m_macFontStyle = style ;        m_faceName = wxMacMakeStringFromPascal( qdFontName );        if ( m_macFontStyle & bold )            m_weight = wxBOLD ;        else            m_weight = wxNORMAL ;        if ( m_macFontStyle & italic )            m_style = wxITALIC ;        if ( m_macFontStyle & underline )            m_underlined = true ;        m_pointSize = m_macFontSize ;#ifndef __LP64__        m_macFontFamily = FMGetFontFamilyFromName( qdFontName );#endif    }    else    {        if ( m_faceName.empty() )        {            if ( m_family == wxDEFAULT )            {#ifndef __LP64__                m_macFontFamily = GetAppFont();                FMGetFontFamilyName(m_macFontFamily,qdFontName);                m_faceName = wxMacMakeStringFromPascal( qdFontName );#endif            }            else            {                switch ( m_family )                {                    case wxSCRIPT :                    case wxROMAN :                    case wxDECORATIVE :                        m_faceName = wxT("Times");                        break ;                    case wxSWISS :                        m_faceName =  wxT("Lucida Grande");                        break ;                    case wxMODERN :                        m_faceName =  wxT("Monaco");                        break ;                    default:                        m_faceName =  wxT("Times");                        break ;                }#ifndef __LP64__                wxMacStringToPascal( m_faceName , qdFontName );                m_macFontFamily = FMGetFontFamilyFromName( qdFontName );#endif            }        }        else        {#ifndef __LP64__            if ( m_faceName == wxT("systemfont") )                m_macFontFamily = GetSysFont();            else if ( m_faceName == wxT("applicationfont") )                m_macFontFamily = GetAppFont();            else#else            if ( m_faceName == wxT("systemfont") )                m_faceName =  wxT("Lucida Grande");            else if ( m_faceName == wxT("applicationfont") )                m_faceName =  wxT("Lucida Grande");#endif            {                wxMacCFStringHolder cf( m_faceName, wxLocale::GetSystemEncoding() );                ATSFontFamilyRef atsfamily = ATSFontFamilyFindFromName( cf , kATSOptionFlagsDefault );                wxASSERT_MSG( atsfamily != (ATSFontFamilyRef) -1 , wxT("ATSFontFamilyFindFromName failed") );                m_macFontFamily = FMGetFontFamilyFromATSFontFamilyRef( atsfamily );            }        }        m_macFontStyle = 0;        if (m_weight == wxBOLD)             m_macFontStyle |= bold;        if (m_style == wxITALIC || m_style == wxSLANT)            m_macFontStyle |= italic;        if (m_underlined)            m_macFontStyle |= underline;        m_macFontSize = m_pointSize ;    }    // we try to get as much styles as possible into ATSU    // ATSUFontID and FMFont are equivalent    FMFontStyle intrinsicStyle = 0 ;#ifndef __LP64__    status = FMGetFontFromFontFamilyInstance( m_macFontFamily , m_macFontStyle , &m_macATSUFontID , &intrinsicStyle);    wxASSERT_MSG( status == noErr , wxT("couldn't get an ATSUFont from font family") );#endif    m_macATSUAdditionalQDStyles = m_macFontStyle & (~intrinsicStyle );    if ( m_macATSUStyle )    {        ::ATSUDisposeStyle((ATSUStyle)m_macATSUStyle);        m_macATSUStyle = NULL ;    }    status = ::ATSUCreateStyle((ATSUStyle *)&m_macATSUStyle);    wxASSERT_MSG( status == noErr , wxT("couldn't create ATSU style") );    ATSUAttributeTag atsuTags[] =    {        kATSUFontTag ,        kATSUSizeTag ,        kATSUVerticalCharacterTag,        kATSUQDBoldfaceTag ,        kATSUQDItalicTag ,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -