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

📄 font.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
字号:
/////////////////////////////////////////////////////////////////////////////// Name:        src/mac/classic/font.cpp// Purpose:     wxFont class// Author:      Stefan Csomor// Modified by:// Created:     1998-01-01// RCS-ID:      $Id: font.cpp,v 1.14 2006/11/20 16:21:08 VS Exp $// Copyright:   (c) Stefan Csomor// Licence:     wxWindows licence/////////////////////////////////////////////////////////////////////////////#include "wx/wxprec.h"#ifdef __BORLANDC__    #pragma hdrstop#endif#include "wx/font.h"#ifndef WX_PRECOMP    #include "wx/string.h"    #include "wx/utils.h"    #include "wx/gdicmn.h"#endif#include "wx/fontutil.h"#include "wx/fontutil.h"#include "wx/mac/private.h"#include <ATSUnicode.h>IMPLEMENT_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("Geneva"))        , m_encoding(wxFONTENCODING_DEFAULT)        , m_macFontNum(0)        , m_macFontSize(0)        , m_macFontStyle(0)        , m_macATSUFontID()    {        Init(10, wxDEFAULT, wxNORMAL, wxNORMAL, false,             wxT("Geneva"), wxFONTENCODING_DEFAULT);    }    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_macFontNum(data.m_macFontNum)        , m_macFontSize(data.m_macFontSize)        , m_macFontStyle(data.m_macFontStyle)        , 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_macFontNum(0)        , m_macFontSize(0)        , m_macFontStyle(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; }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:    short       m_macFontNum;    short       m_macFontSize;    unsigned char  m_macFontStyle;    wxUint32       m_macATSUFontID;    wxNativeFontInfo  m_info;public:    void        MacFindFont() ;};#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_macFontNum = 0 ;    m_macFontSize = 0;    m_macFontStyle = 0;    m_fontId = 0;    m_noAA = false;}wxFontRefData::~wxFontRefData(){}void wxFontRefData::MacFindFont(){    if( m_faceName.empty() )    {        switch( m_family )        {            case wxDEFAULT :                m_macFontNum = ::GetAppFont() ;                break ;            case wxDECORATIVE :                ::GetFNum( "\pTimes" , &m_macFontNum) ;                break ;            case wxROMAN :                ::GetFNum( "\pTimes" , &m_macFontNum) ;                break ;            case wxSCRIPT :                ::GetFNum( "\pTimes" , &m_macFontNum) ;                break ;            case wxSWISS :                ::GetFNum( "\pGeneva" , &m_macFontNum) ;                break ;            case wxMODERN :                ::GetFNum( "\pMonaco" , &m_macFontNum) ;                break ;        }        Str255 name ;        GetFontName( m_macFontNum , name ) ;        m_faceName = wxMacMakeStringFromPascal( name ) ;    }    else    {        if ( m_faceName == wxT("systemfont") )            m_macFontNum = ::GetSysFont() ;        else if ( m_faceName == wxT("applicationfont") )            m_macFontNum = ::GetAppFont() ;        else        {            Str255 fontname ;            wxMacStringToPascal( m_faceName , fontname ) ;            ::GetFNum( fontname, &m_macFontNum);        }    }    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 ;    //TODO:if we supply the style as an additional parameter we must make a testing    //sequence in order to degrade gracefully while trying to maintain most of the style    //information, meanwhile we just take the normal font and apply the features after#ifdef __WXDEBUG__    OSStatus status =#endif // __WXDEBUG__        ::ATSUFONDtoFontID(m_macFontNum, normal /*qdStyle*/, (UInt32*)&m_macATSUFontID);    /*    status = ATSUFindFontFromName ( (Ptr) m_faceName , strlen( m_faceName ) ,        kFontFullName,    kFontMacintoshPlatform, kFontRomanScript , kFontNoLanguage  ,  (UInt32*)&m_macATSUFontID ) ;    */    wxASSERT_MSG( status == noErr , wxT("couldn't retrieve font identifier") ) ;}// ----------------------------------------------------------------------------// wxFont// ----------------------------------------------------------------------------}bool wxFont::Create(const wxNativeFontInfo& info){    return Create(info.pointSize, info.family, info.style, info.weight,                  info.underlined, info.faceName, info.encoding);}wxFont::wxFont(const wxString& fontdesc){    wxNativeFontInfo info;    if ( info.FromString(fontdesc) )        (void)Create(info);}bool wxFont::Create(int pointSize,                    int family,                    int style,                    int weight,                    bool underlined,                    const wxString& faceName,                    wxFontEncoding encoding){    UnRef();    m_refData = new wxFontRefData(pointSize, family, style, weight,                                  underlined, faceName, encoding);    RealizeResource();    return true;}wxFont::~wxFont(){}bool wxFont::RealizeResource(){    M_FONTDATA->MacFindFont() ;    return true;}void wxFont::SetEncoding(wxFontEncoding encoding){    Unshare();    M_FONTDATA->m_encoding = encoding;    RealizeResource();}void wxFont::Unshare(){    // Don't change shared data    if (!m_refData)    {        m_refData = new wxFontRefData();    }    else    {        wxFontRefData* ref = new wxFontRefData(*(wxFontRefData*)m_refData);        UnRef();        m_refData = ref;    }}void wxFont::SetPointSize(int pointSize){    Unshare();    M_FONTDATA->m_pointSize = pointSize;    RealizeResource();}void wxFont::SetFamily(int family){    Unshare();    M_FONTDATA->m_family = family;    RealizeResource();}void wxFont::SetStyle(int style){    Unshare();    M_FONTDATA->m_style = style;    RealizeResource();}void wxFont::SetWeight(int weight){    Unshare();    M_FONTDATA->m_weight = weight;    RealizeResource();}bool wxFont::SetFaceName(const wxString& faceName){    Unshare();    M_FONTDATA->m_faceName = faceName;    RealizeResource();    return wxFontBase::SetFaceName(faceName);}void wxFont::SetUnderlined(bool underlined){    Unshare();    M_FONTDATA->m_underlined = underlined;    RealizeResource();}void wxFont::SetNoAntiAliasing( bool no ){    Unshare();    M_FONTDATA->SetNoAntiAliasing( no );    RealizeResource();}// ----------------------------------------------------------------------------// accessors// ----------------------------------------------------------------------------// TODO: insert checks everywhere for M_FONTDATA == NULL!int wxFont::GetPointSize() const{    return M_FONTDATA->m_pointSize;}int wxFont::GetFamily() const{    return M_FONTDATA->m_family;}int wxFont::GetStyle() const{    return M_FONTDATA->m_style;}int wxFont::GetWeight() const{    return M_FONTDATA->m_weight;}bool wxFont::GetUnderlined() const{    return M_FONTDATA->m_underlined;}wxString wxFont::GetFaceName() const{    wxString str;    if ( M_FONTDATA )        str = M_FONTDATA->m_faceName ;    return str;}wxFontEncoding wxFont::GetEncoding() const{    return M_FONTDATA->m_encoding;}bool wxFont::GetNoAntiAliasing() const{    return M_FONTDATA->m_noAA;}short wxFont::GetMacFontNum() const{    return M_FONTDATA->m_macFontNum;}short wxFont::GetMacFontSize() const{    return M_FONTDATA->m_macFontSize;}wxByte wxFont::GetMacFontStyle() const{    return M_FONTDATA->m_macFontStyle;}wxUint32 wxFont::GetMacATSUFontID() const{    return M_FONTDATA->m_macATSUFontID;}const wxNativeFontInfo *wxFont::GetNativeFontInfo() const{    wxCHECK_MSG( Ok(), NULL, wxT("invalid font") );    M_FONTDATA->m_info.InitFromFont(*this);    return &(M_FONTDATA->m_info);}

⌨️ 快捷键说明

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