X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ab5fe83396c13f9fbf01630c52adf4df7607cbfe..cc402e6431b66a8eb7d567caa55a1bece42902b7:/src/common/fontcmn.cpp diff --git a/src/common/fontcmn.cpp b/src/common/fontcmn.cpp index ad280cef8e..7c3412b48d 100644 --- a/src/common/fontcmn.cpp +++ b/src/common/fontcmn.cpp @@ -6,7 +6,7 @@ // Created: 20.09.99 // RCS-ID: $Id$ // Copyright: (c) wxWindows team -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -17,22 +17,29 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ - #pragma implementation "fontbase.h" +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) +#pragma implementation "fontbase.h" #endif // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ - #pragma hdrstop +#pragma hdrstop #endif #ifndef WX_PRECOMP - #include "wx/font.h" +#include "wx/font.h" +#include "wx/intl.h" #endif // WX_PRECOMP #include "wx/gdicmn.h" + +#if defined(__WXMSW__) + #include "wx/msw/private.h" // includes windows.h for LOGFONT + #include "wx/msw/winundef.h" +#endif + #include "wx/fontutil.h" // for wxNativeFontInfo #include "wx/fontmap.h" @@ -48,6 +55,22 @@ wxFontEncoding wxFontBase::ms_encodingDefault = wxFONTENCODING_SYSTEM; +/* static */ +void wxFontBase::SetDefaultEncoding(wxFontEncoding encoding) +{ + // GetDefaultEncoding() should return something != wxFONTENCODING_DEFAULT + // and, besides, using this value here doesn't make any sense + wxCHECK_RET( encoding != wxFONTENCODING_DEFAULT, + _T("can't set default encoding to wxFONTENCODING_DEFAULT") ); + + ms_encodingDefault = encoding; +} + +wxFontBase::~wxFontBase() +{ + // this destructor is required for Darwin +} + /* static */ wxFont *wxFontBase::New(int size, int family, @@ -60,6 +83,33 @@ wxFont *wxFontBase::New(int size, return new wxFont(size, family, style, weight, underlined, face, encoding); } +/* static */ +wxFont *wxFontBase::New(int pointSize, + wxFontFamily family, + int flags, + const wxString& face, + wxFontEncoding encoding) +{ + return New + ( + pointSize, + family, + flags & wxFONTFLAG_ITALIC + ? wxFONTSTYLE_ITALIC + : flags & wxFONTFLAG_SLANT + ? wxFONTSTYLE_SLANT + : wxFONTSTYLE_NORMAL, + flags & wxFONTFLAG_LIGHT + ? wxFONTWEIGHT_LIGHT + : flags & wxFONTFLAG_BOLD + ? wxFONTWEIGHT_BOLD + : wxFONTWEIGHT_NORMAL, + (flags & wxFONTFLAG_UNDERLINED) != 0, + face, + encoding + ); +} + /* static */ wxFont *wxFontBase::New(const wxNativeFontInfo& info) { @@ -76,26 +126,12 @@ wxFont *wxFontBase::New(const wxString& strNativeFontDesc) return New(fontInfo); } -wxNativeFontInfo *wxFontBase::GetNativeFontInfo() const +bool wxFontBase::IsFixedWidth() const { -#ifdef wxNO_NATIVE_FONTINFO - wxNativeFontInfo *fontInfo = new wxNativeFontInfo(); - - fontInfo->SetPointSize(GetPointSize()); - fontInfo->SetFamily(GetFamily()); - fontInfo->SetStyle((wxFontStyle)GetStyle()); - fontInfo->SetWeight((wxFontWeight)GetWeight()); - fontInfo->SetUnderlined(GetUnderlined()); - fontInfo->SetFaceName(GetFaceName()); - fontInfo->SetEncoding(GetEncoding()); - - return fontInfo; -#else - return (wxNativeFontInfo *)NULL; -#endif + return GetFamily() == wxFONTFAMILY_TELETYPE; } -void wxFontBase::SetNativeFontInfo(const wxNativeFontInfo& info) +void wxFontBase::DoSetNativeFontInfo(const wxNativeFontInfo& info) { #ifdef wxNO_NATIVE_FONTINFO SetPointSize(info.pointSize); @@ -113,11 +149,10 @@ void wxFontBase::SetNativeFontInfo(const wxNativeFontInfo& info) wxString wxFontBase::GetNativeFontInfoDesc() const { wxString fontDesc; - wxNativeFontInfo *fontInfo = GetNativeFontInfo(); + const wxNativeFontInfo *fontInfo = GetNativeFontInfo(); if ( fontInfo ) { fontDesc = fontInfo->ToString(); - delete fontInfo; } return fontDesc; @@ -126,11 +161,10 @@ wxString wxFontBase::GetNativeFontInfoDesc() const wxString wxFontBase::GetNativeFontInfoUserDesc() const { wxString fontDesc; - wxNativeFontInfo *fontInfo = GetNativeFontInfo(); + const wxNativeFontInfo *fontInfo = GetNativeFontInfo(); if ( fontInfo ) { fontDesc = fontInfo->ToUserString(); - delete fontInfo; } return fontDesc; @@ -256,7 +290,7 @@ bool wxNativeFontInfo::FromString(const wxString& s) token = tokenizer.GetNextToken(); if ( !token.ToLong(&l) ) return FALSE; - family = (int)l; + family = (wxFontFamily)l; token = tokenizer.GetNextToken(); if ( !token.ToLong(&l) ) @@ -274,8 +308,11 @@ bool wxNativeFontInfo::FromString(const wxString& s) underlined = l != 0; faceName = tokenizer.GetNextToken(); + +#ifndef __WXMAC__ if( !faceName ) return FALSE; +#endif token = tokenizer.GetNextToken(); if ( !token.ToLong(&l) ) @@ -304,7 +341,7 @@ wxString wxNativeFontInfo::ToString() const void wxNativeFontInfo::Init() { - pointSize = wxNORMAL_FONT->GetPointSize(); + pointSize = 0; family = wxFONTFAMILY_DEFAULT; style = wxFONTSTYLE_NORMAL; weight = wxFONTWEIGHT_NORMAL; @@ -338,6 +375,11 @@ wxString wxNativeFontInfo::GetFaceName() const return faceName; } +wxFontFamily wxNativeFontInfo::GetFamily() const +{ + return family; +} + wxFontEncoding wxNativeFontInfo::GetEncoding() const { return encoding; @@ -365,7 +407,12 @@ void wxNativeFontInfo::SetUnderlined(bool underlined_) void wxNativeFontInfo::SetFaceName(wxString facename_) { - facename = facename_; + faceName = facename_; +} + +void wxNativeFontInfo::SetFamily(wxFontFamily family_) +{ + family = family_; } void wxNativeFontInfo::SetEncoding(wxFontEncoding encoding_) @@ -380,7 +427,7 @@ void wxNativeFontInfo::SetEncoding(wxFontEncoding encoding_) // format there anyhow (but there is a well-defined standard for X11 fonts used // by wxGTK and wxMotif) -#if defined(wxNO_NATIVE_FONTINFO) || defined(__WXMSW__) +#if defined(wxNO_NATIVE_FONTINFO) || defined(__WXMSW__) || defined (__WXPM__) wxString wxNativeFontInfo::ToUserString() const { @@ -423,19 +470,31 @@ wxString wxNativeFontInfo::ToUserString() const // we don't distinguish between the two for now anyhow... case wxFONTSTYLE_ITALIC: case wxFONTSTYLE_SLANT: - desc << _("italic "); + desc << _("italic"); break; } - if ( !facename.empty() ) + wxString face = GetFaceName(); + if ( !face.empty() ) { - desc << facename << _T(' '); + desc << _T(' ') << face; } - if ( pointsize != wxNORMAL_FONT->GetPointSize() ) + int size = GetPointSize(); + if ( size != wxNORMAL_FONT->GetPointSize() ) { - desc << pointsize; + desc << _T(' ') << size; } + +#if wxUSE_FONTMAP + wxFontEncoding enc = GetEncoding(); + if ( enc != wxFONTENCODING_DEFAULT && enc != wxFONTENCODING_SYSTEM ) + { + desc << _T(' ') << wxFontMapper::Get()->GetEncodingName(enc); + } +#endif // wxUSE_FONTMAP + + return desc; } bool wxNativeFontInfo::FromUserString(const wxString& s) @@ -450,7 +509,10 @@ bool wxNativeFontInfo::FromUserString(const wxString& s) wxString face; unsigned long size; + +#if wxUSE_FONTMAP wxFontEncoding encoding; +#endif // wxUSE_FONTMAP while ( tokenizer.HasMoreTokens() ) { @@ -478,13 +540,15 @@ bool wxNativeFontInfo::FromUserString(const wxString& s) } else if ( token.ToULong(&size) ) { - pointsize = (int)size; + SetPointSize(size); } - else if ( (encoding = wxTheFontMapper->CharsetToEncoding(token, FALSE)) +#if wxUSE_FONTMAP + else if ( (encoding = wxFontMapper::Get()->CharsetToEncoding(token, FALSE)) != wxFONTENCODING_DEFAULT ) { SetEncoding(encoding); } +#endif // wxUSE_FONTMAP else // assume it is the face name { if ( !face.empty() ) @@ -517,5 +581,5 @@ bool wxNativeFontInfo::FromUserString(const wxString& s) return TRUE; } -#endif // generic or wxMSW +#endif // generic or wxMSW or wxOS2