X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f6bcfd974ef26faf6f91a62cac09827e09463fd1..39178e3bdf1944bb73ee64586ba2390c505bee24:/samples/font/font.cpp diff --git a/samples/font/font.cpp b/samples/font/font.cpp index c8dd213baa..472ac4a4ab 100644 --- a/samples/font/font.cpp +++ b/samples/font/font.cpp @@ -96,6 +96,8 @@ public: { DoEnumerateFamilies(TRUE); } void OnEnumerateEncodings(wxCommandEvent& event); + void OnCheckNativeToFromString(wxCommandEvent& event); + void OnSize(wxSizeEvent& event); protected: @@ -136,6 +138,7 @@ enum Font_EnumFamilies, Font_EnumFixedFamilies, Font_EnumEncodings, + Font_CheckNativeToFromString, Font_Max }; @@ -157,6 +160,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(Font_EnumFamilies, MyFrame::OnEnumerateFamilies) EVT_MENU(Font_EnumFixedFamilies, MyFrame::OnEnumerateFixedFamilies) EVT_MENU(Font_EnumEncodings, MyFrame::OnEnumerateEncodings) + EVT_MENU(Font_CheckNativeToFromString, MyFrame::OnCheckNativeToFromString) EVT_SIZE(MyFrame::OnSize) END_EVENT_TABLE() @@ -228,6 +232,9 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) menuFont->Append(Font_EnumFamiliesForEncoding, "Find font for en&coding...\tCtrl-C", "Find font families for given encoding"); + menuFont->AppendSeparator(); + menuFont->Append(Font_CheckNativeToFromString, + "Check Native Font Info To/From String"); // now append the freshly created menu to the menu bar... wxMenuBar *menuBar = new wxMenuBar; @@ -255,10 +262,10 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) class MyEncodingEnumerator : public wxFontEnumerator { public: - MyEncodingEnumerator() + MyEncodingEnumerator() { m_n = 0; } - const wxString& GetText() const + const wxString& GetText() const { return m_text; } protected: @@ -266,7 +273,7 @@ protected: const wxString& encoding) { wxString text; - text.Printf("Encoding %d: %s (available in facename '%s')\n", + text.Printf(wxT("Encoding %d: %s (available in facename '%s')\n"), ++m_n, encoding.c_str(), facename.c_str()); m_text += text; return TRUE; @@ -283,7 +290,7 @@ void MyFrame::OnEnumerateEncodings(wxCommandEvent& WXUNUSED(event)) fontEnumerator.EnumerateEncodings(); - wxLogMessage("Enumerating all available encodings:\n%s", + wxLogMessage(wxT("Enumerating all available encodings:\n%s"), fontEnumerator.GetText().c_str()); } @@ -292,10 +299,10 @@ void MyFrame::OnEnumerateEncodings(wxCommandEvent& WXUNUSED(event)) class MyFontEnumerator : public wxFontEnumerator { public: - bool GotAny() const + bool GotAny() const { return !m_facenames.IsEmpty(); } - const wxArrayString& GetFacenames() const + const wxArrayString& GetFacenames() const { return m_facenames; } protected: @@ -322,8 +329,8 @@ bool MyFrame::DoEnumerateFamilies(bool fixedWidthOnly, int nFacenames = fontEnumerator.GetFacenames().GetCount(); if ( !silent ) { - wxLogStatus(this, "Found %d %sfonts", - nFacenames, fixedWidthOnly ? "fixed width " : ""); + wxLogStatus(this, wxT("Found %d %sfonts"), + nFacenames, fixedWidthOnly ? wxT("fixed width ") : wxT("")); } wxString facename; @@ -361,7 +368,7 @@ bool MyFrame::DoEnumerateFamilies(bool fixedWidthOnly, } else if ( !silent ) { - wxLogWarning("No such fonts found."); + wxLogWarning(wxT("No such fonts found.")); } return FALSE; @@ -382,22 +389,22 @@ void MyFrame::OnEnumerateFamiliesForEncoding(wxCommandEvent& WXUNUSED(event)) wxFONTENCODING_CP1252, }; - static const char *encodingNames[] = + static const wxString encodingNames[] = { - "West European (Latin 1)", - "Central European (Latin 2)", - "Cyrillic (Latin 5)", - "Greek (Latin 7)", - "West European new (Latin 0)", + "Western European (ISO-8859-1)", + "Central European (ISO-8859-2)", + "Cyrillic (ISO-8859-5)", + "Greek (ISO-8859-7)", + "Western European with Euro (ISO-8859-15)", "KOI8-R", - "Windows Latin 2", - "Windows Cyrillic", - "Windows Latin 1", + "Windows Central European (CP 1250)", + "Windows Cyrillic (CP 1251)", + "Windows Western European (CP 1252)", }; int n = wxGetSingleChoiceIndex("Choose an encoding", "Font demo", WXSIZEOF(encodingNames), - (char **)encodingNames, + encodingNames, this); if ( n != -1 ) @@ -406,6 +413,25 @@ void MyFrame::OnEnumerateFamiliesForEncoding(wxCommandEvent& WXUNUSED(event)) } } +void MyFrame::OnCheckNativeToFromString(wxCommandEvent& WXUNUSED(event)) +{ + wxString fontInfo = m_canvas->GetTextFont().GetNativeFontInfoDesc(); + + if ( fontInfo.IsEmpty() ) + { + wxLogError(wxT("Native font info string is empty!")); + } + else + { + wxFont *font = wxFont::New(fontInfo); + if ( fontInfo != font->GetNativeFontInfoDesc() ) + wxLogError(wxT("wxNativeFontInfo ToString()/FromString() broken!")); + else + wxLogError(wxT("wxNativeFontInfo works: %s"), fontInfo.c_str()); + delete font; + } +} + void MyFrame::DoResizeFont(int diff) { wxFont fontOld = m_canvas->GetTextFont(); @@ -425,7 +451,7 @@ void MyFrame::DoResizeFont(int diff) void MyFrame::DoChangeFont(const wxFont& font, const wxColour& col) { - Resize(GetSize(), font); + Resize(GetClientSize(), font); m_canvas->SetTextFont(font); if ( col.Ok() ) @@ -500,7 +526,7 @@ void MyFrame::OnViewMsg(wxCommandEvent& WXUNUSED(event)) if ( line.Left(len) == prefix ) { // found! - const char *pc = line.c_str() + len; + const wxChar *pc = line.c_str() + len; if ( *pc == '"' ) pc++; @@ -515,7 +541,7 @@ void MyFrame::OnViewMsg(wxCommandEvent& WXUNUSED(event)) if ( !charset ) { - wxLogError("The file '%s' doesn't contain charset information.", + wxLogError(wxT("The file '%s' doesn't contain charset information."), filename.c_str()); return; @@ -525,20 +551,21 @@ void MyFrame::OnViewMsg(wxCommandEvent& WXUNUSED(event)) wxFontEncoding fontenc = wxTheFontMapper->CharsetToEncoding(charset); if ( fontenc == wxFONTENCODING_SYSTEM ) { - wxLogError("Charset '%s' is unsupported.", charset.c_str()); + wxLogError(wxT("Charset '%s' is unsupported."), charset.c_str()); return; } m_textctrl->LoadFile(filename); - if (!wxTheFontMapper->IsEncodingAvailable(fontenc)) + if ( fontenc == wxFONTENCODING_UTF8 || + !wxTheFontMapper->IsEncodingAvailable(fontenc) ) { // try to find some similar encoding: wxFontEncoding encAlt; if ( wxTheFontMapper->GetAltForEncoding(fontenc, &encAlt) ) { wxEncodingConverter conv; - + if (conv.Init(fontenc, encAlt)) { fontenc = encAlt; @@ -546,13 +573,13 @@ void MyFrame::OnViewMsg(wxCommandEvent& WXUNUSED(event)) } else { - wxLogWarning("Cannot convert from '%s' to '%s'.", + wxLogWarning(wxT("Cannot convert from '%s' to '%s'."), wxFontMapper::GetEncodingDescription(fontenc).c_str(), wxFontMapper::GetEncodingDescription(encAlt).c_str()); } } else - wxLogWarning("No fonts for encoding '%s' on this system.", + wxLogWarning(wxT("No fonts for encoding '%s' on this system."), wxFontMapper::GetEncodingDescription(fontenc).c_str()); } @@ -568,7 +595,7 @@ void MyFrame::OnViewMsg(wxCommandEvent& WXUNUSED(event)) } else { - wxLogWarning("No fonts for encoding '%s' on this system.", + wxLogWarning(wxT("No fonts for encoding '%s' on this system."), wxFontMapper::GetEncodingDescription(fontenc).c_str()); } } @@ -584,9 +611,7 @@ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnSize(wxSizeEvent& event) { - wxSize size = event.GetSize(); - - Resize(size); + Resize(GetClientSize()); event.Skip(); } @@ -642,7 +667,7 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) ) // output the font name/info wxString fontInfo; - fontInfo.Printf("Font size is %d points, family is %s, style %s, weight %s", + fontInfo.Printf(wxT("Font size is %d points, family is %s, style %s, weight %s"), m_font.GetPointSize(), m_font.GetFamilyString().c_str(), m_font.GetStyleString().c_str(), @@ -650,6 +675,14 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) ) dc.DrawText(fontInfo, 5, 5); + if ( m_font.Ok() ) + { + wxString fontDesc = m_font.GetNativeFontInfoDesc(); + dc.SetFont(m_font); + fontInfo.Printf(wxT("Native font info: %s"), fontDesc.c_str()); + dc.DrawText(fontInfo, 5, 5 + dc.GetCharHeight()); + } + // prepare to draw the font dc.SetFont(m_font); dc.SetTextForeground(m_colour); @@ -667,7 +700,7 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) ) { for ( int j = 0; j < 32; j++ ) { - dc.DrawText(char(32*i + j), x + w*j, y + h*i); + dc.DrawText(wxChar(32*i + j), x + w*j, y + h*i); } }