X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f6bcfd974ef26faf6f91a62cac09827e09463fd1..b6e5eaa59701315ca06996ff845872ca4122695f:/samples/font/font.cpp?ds=sidebyside diff --git a/samples/font/font.cpp b/samples/font/font.cpp index c8dd213baa..d919ea6a59 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: @@ -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: @@ -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("Native font info string is empty!"); + } + else + { + wxFont *font = wxFont::New(fontInfo); + if ( fontInfo != font->GetNativeFontInfoDesc() ) + wxLogError("wxNativeFontInfo ToString()/FromString() broken!"); + else + wxLogError("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() ) @@ -531,14 +557,15 @@ void MyFrame::OnViewMsg(wxCommandEvent& WXUNUSED(event)) 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; @@ -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(); } @@ -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("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);