X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/55bd3f34b68f55f2cdccf29f40581b7683b9e524..33754c4d83c59b7523a6da0c4fb21079cb60301c:/src/msw/font.cpp diff --git a/src/msw/font.cpp b/src/msw/font.cpp index 39f7d08a7e..2ab0fbb804 100644 --- a/src/msw/font.cpp +++ b/src/msw/font.cpp @@ -41,6 +41,7 @@ #include "wx/tokenzr.h" #include "wx/msw/private.h" +#include "wx/tokenzr.h" IMPLEMENT_DYNAMIC_CLASS(wxFont, wxGDIObject) @@ -85,9 +86,9 @@ public: Init(size, family, style, weight, underlined, faceName, encoding); } - wxFontRefData(const wxNativeFontInfo& info) + wxFontRefData(const wxNativeFontInfo& info, WXHFONT hFont = 0) { - Init(info); + Init(info, hFont); } virtual ~wxFontRefData(); @@ -102,7 +103,7 @@ protected: const wxString& faceName, wxFontEncoding encoding); - void Init(const wxNativeFontInfo& info); + void Init(const wxNativeFontInfo& info, WXHFONT hFont = 0); // If TRUE, the pointer to the actual font is temporary and SHOULD NOT BE // DELETED by destructor @@ -160,7 +161,7 @@ void wxFontRefData::Init(int pointSize, m_nativeFontInfoOk = FALSE; } -void wxFontRefData::Init(const wxNativeFontInfo& info) +void wxFontRefData::Init(const wxNativeFontInfo& info, WXHFONT hFont) { // extract family from pitch-and-family int lfFamily = info.lf.lfPitchAndFamily; @@ -229,7 +230,11 @@ void wxFontRefData::Init(const wxNativeFontInfo& info) m_fontId = 0; m_temporary = FALSE; - m_hFont = 0; + // hFont may be zero, or it be passed in case we really want to + // use the exact font created in the underlying system + // (for example where we can't guarantee conversion from HFONT + // to LOGFONT back to HFONT) + m_hFont = hFont; m_nativeFontInfoOk = TRUE; m_nativeFontInfo = info; @@ -290,42 +295,42 @@ bool wxNativeFontInfo::FromString(const wxString& s) token = tokenizer.GetNextToken(); if ( !token.ToLong(&l) ) return FALSE; - lf.lfItalic = l; + lf.lfItalic = (BYTE)l; token = tokenizer.GetNextToken(); if ( !token.ToLong(&l) ) return FALSE; - lf.lfUnderline = l; + lf.lfUnderline = (BYTE)l; token = tokenizer.GetNextToken(); if ( !token.ToLong(&l) ) return FALSE; - lf.lfStrikeOut = l; + lf.lfStrikeOut = (BYTE)l; token = tokenizer.GetNextToken(); if ( !token.ToLong(&l) ) return FALSE; - lf.lfCharSet = l; + lf.lfCharSet = (BYTE)l; token = tokenizer.GetNextToken(); if ( !token.ToLong(&l) ) return FALSE; - lf.lfOutPrecision = l; + lf.lfOutPrecision = (BYTE)l; token = tokenizer.GetNextToken(); if ( !token.ToLong(&l) ) return FALSE; - lf.lfClipPrecision = l; + lf.lfClipPrecision = (BYTE)l; token = tokenizer.GetNextToken(); if ( !token.ToLong(&l) ) return FALSE; - lf.lfQuality = l; + lf.lfQuality = (BYTE)l; token = tokenizer.GetNextToken(); if ( !token.ToLong(&l) ) return FALSE; - lf.lfPitchAndFamily = l; + lf.lfPitchAndFamily = (BYTE)l; token = tokenizer.GetNextToken(); if(!token) @@ -365,15 +370,13 @@ wxString wxNativeFontInfo::ToString() const void wxFont::Init() { - if ( wxTheFontList ) - wxTheFontList->Append(this); } -bool wxFont::Create(const wxNativeFontInfo& info) +bool wxFont::Create(const wxNativeFontInfo& info, WXHFONT hFont) { UnRef(); - m_refData = new wxFontRefData(info); + m_refData = new wxFontRefData(info, hFont); RealizeResource(); @@ -415,8 +418,6 @@ bool wxFont::Create(int pointSize, wxFont::~wxFont() { - if ( wxTheFontList ) - wxTheFontList->DeleteObject(this); } // ---------------------------------------------------------------------------- @@ -450,7 +451,7 @@ bool wxFont::RealizeResource() return TRUE; } -bool wxFont::FreeResource(bool force) +bool wxFont::FreeResource(bool WXUNUSED(force)) { if ( GetResourceHandle() ) {