X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/76d88590ff9f9e46f0702e409d991d40b8e0ec00..e6b3b53c2c20fe75dc410a22a99b88a63653aef5:/src/msw/font.cpp diff --git a/src/msw/font.cpp b/src/msw/font.cpp index ae1df60343..3add9ac4cc 100644 --- a/src/msw/font.cpp +++ b/src/msw/font.cpp @@ -32,7 +32,6 @@ #include "wx/app.h" #include "wx/log.h" #include "wx/encinfo.h" - #include "wx/scopeguard.h" #endif // WX_PRECOMP #include "wx/msw/private.h" @@ -44,6 +43,7 @@ #include "wx/sysopt.h" #endif +#include "wx/scopeguard.h" #include "wx/tokenzr.h" #if wxUSE_EXTENDED_RTTI @@ -205,8 +205,7 @@ public: WXHFONT GetHFONT() const { - if ( !m_hFont ) - const_cast(this)->Alloc(); + AllocIfNeeded(); return (WXHFONT)m_hFont; } @@ -281,7 +280,18 @@ public: } const wxNativeFontInfo& GetNativeFontInfo() const - { return m_nativeFontInfo; } + { + // we need to create the font now to get the corresponding LOGFONT if + // it hadn't been done yet + AllocIfNeeded(); + + // ensure that we have a valid face name in our font information: + // GetFaceName() will try to retrieve it from our HFONT and save it if + // it was successful + (void)GetFaceName(); + + return m_nativeFontInfo; + } void SetNativeFontInfo(const wxNativeFontInfo& nativeFontInfo) { @@ -304,6 +314,12 @@ protected: void Init(const wxNativeFontInfo& info, WXHFONT hFont = 0); + void AllocIfNeeded() const + { + if ( !m_hFont ) + const_cast(this)->Alloc(); + } + // retrieve the face name really being used by the font: this is used to // get the face name selected by the system when we don't specify it (but // use just the family for example) @@ -330,11 +346,14 @@ protected: return wxString(); } - // in spite of its type, the otmpFaceName field of OUTLINETEXTMETRIC - // gives an offset in _bytes_ of the face name from the struct start - // while the name itself is an array of TCHARs + // in spite of its type, the otmpFamilyName field of OUTLINETEXTMETRIC + // gives an offset in _bytes_ of the face (not family!) name from the + // struct start while the name itself is an array of TCHARs + // + // FWIW otmpFaceName contains the same thing as otmpFamilyName followed + // by a possible " Italic" or " Bold" or something else suffix return reinterpret_cast(otm) + - wxPtrToUInt(otm->otmpFaceName)/sizeof(wxChar); + wxPtrToUInt(otm->otmpFamilyName)/sizeof(wxChar); } // are we using m_nativeFontInfo.lf.lfHeight for point size or pixel size? @@ -644,6 +663,10 @@ void wxNativeFontInfo::SetFamily(wxFontFamily family) case wxFONTFAMILY_DEFAULT: ff_family = FF_SWISS; break; + + case wxFONTFAMILY_UNKNOWN: + wxFAIL_MSG( "invalid font family" ); + return; } wxCHECK_RET( ff_family != FF_DONTCARE, "unknown wxFontFamily" ); @@ -762,7 +785,7 @@ bool wxNativeFontInfo::FromString(const wxString& s) return false; // the face name may be empty - wxStrcpy(lf.lfFaceName, tokenizer.GetNextToken()); + SetFaceName(tokenizer.GetNextToken()); return true; } @@ -1040,24 +1063,6 @@ const wxNativeFontInfo *wxFont::GetNativeFontInfo() const return IsOk() ? &(M_FONTDATA->GetNativeFontInfo()) : NULL; } -wxString wxFont::GetNativeFontInfoDesc() const -{ - wxCHECK_MSG( IsOk(), wxEmptyString, wxT("invalid font") ); - - // be sure we have an HFONT associated... - const_cast(this)->RealizeResource(); - return wxFontBase::GetNativeFontInfoDesc(); -} - -wxString wxFont::GetNativeFontInfoUserDesc() const -{ - wxCHECK_MSG( IsOk(), wxEmptyString, wxT("invalid font") ); - - // be sure we have an HFONT associated... - const_cast(this)->RealizeResource(); - return wxFontBase::GetNativeFontInfoUserDesc(); -} - bool wxFont::IsFixedWidth() const { wxCHECK_MSG( IsOk(), false, wxT("invalid font") );