#include <wx/fontdlg.h>
#include <wx/fontenum.h>
#include <wx/fontmap.h>
+#include <wx/encconv.h>
#include <wx/textfile.h>
// ----------------------------------------------------------------------------
// event handlers (these functions should _not_ be virtual)
void OnQuit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
+ void OnIncFont(wxCommandEvent& event) { DoResizeFont(+2); }
+ void OnDecFont(wxCommandEvent& event) { DoResizeFont(-2); }
+
void OnViewMsg(wxCommandEvent& event);
void OnSelectFont(wxCommandEvent& event);
void OnEnumerateFamiliesForEncoding(wxCommandEvent& event);
wxFontEncoding encoding = wxFONTENCODING_SYSTEM,
bool silent = FALSE);
+ void DoResizeFont(int diff);
void DoChangeFont(const wxFont& font, const wxColour& col = wxNullColour);
void Resize(const wxSize& size, const wxFont& font = wxNullFont);
+ size_t m_fontSize; // in points
+
wxTextCtrl *m_textctrl;
MyCanvas *m_canvas;
Font_Quit = 1,
Font_About,
Font_ViewMsg,
+ Font_IncSize,
+ Font_DecSize,
Font_Choose = 100,
Font_EnumFamiliesForEncoding,
Font_EnumFamilies,
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(Font_Quit, MyFrame::OnQuit)
EVT_MENU(Font_About, MyFrame::OnAbout)
+ EVT_MENU(Font_IncSize, MyFrame::OnIncFont)
+ EVT_MENU(Font_DecSize, MyFrame::OnDecFont)
EVT_MENU(Font_ViewMsg, MyFrame::OnViewMsg)
EVT_MENU(Font_Choose, MyFrame::OnSelectFont)
EVT_MENU(Font_EnumFamiliesForEncoding, MyFrame::OnEnumerateFamiliesForEncoding)
MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
: wxFrame((wxFrame *)NULL, -1, title, pos, size), m_textctrl(NULL)
{
+ m_fontSize = 12;
+
// create a menu bar
wxMenu *menuFile = new wxMenu;
menuFile->Append(Font_Quit, "E&xit\tAlt-X", "Quit this program");
wxMenu *menuFont = new wxMenu;
+ menuFont->Append(Font_IncSize, "&Increase font size by 2 points\tCtrl-I");
+ menuFont->Append(Font_DecSize, "&Decrease font size by 2 points\tCtrl-D");
+ menuFont->AppendSeparator();
menuFont->Append(Font_Choose, "&Select font...\tCtrl-S",
"Select a standard font");
menuFont->AppendSeparator();
menuFont->Append(Font_EnumFamilies, "Enumerate font &families\tCtrl-F");
menuFont->Append(Font_EnumFixedFamilies,
- "Enumerate f&ixed font families\tCtrl-I");
+ "Enumerate fi&xed font families\tCtrl-X");
menuFont->Append(Font_EnumEncodings,
"Enumerate &encodings\tCtrl-E");
menuFont->Append(Font_EnumFamiliesForEncoding,
SetStatusText("Welcome to wxWindows font demo!");
}
+// --------------------------------------------------------
-// event handlers
-void MyFrame::OnEnumerateEncodings(wxCommandEvent& WXUNUSED(event))
+class MyEncodingEnumerator : public wxFontEnumerator
{
- class MyEncodingEnumerator : public wxFontEnumerator
- {
- public:
- MyEncodingEnumerator() { m_n = 0; }
-
- const wxString& GetText() const { return m_text; }
+public:
+ MyEncodingEnumerator()
+ { m_n = 0; }
- protected:
- virtual bool OnFontEncoding(const wxString& facename,
- const wxString& encoding)
- {
- wxString text;
- text.Printf("Encoding %d: %s (available in facename '%s')\n",
- ++m_n, encoding.c_str(), facename.c_str());
- m_text += text;
+ const wxString& GetText() const
+ { return m_text; }
- return TRUE;
- }
+protected:
+ virtual bool OnFontEncoding(const wxString& facename,
+ const wxString& encoding)
+ {
+ wxString text;
+ text.Printf("Encoding %d: %s (available in facename '%s')\n",
+ ++m_n, encoding.c_str(), facename.c_str());
+ m_text += text;
+ return TRUE;
+ }
- private:
- size_t m_n;
+private:
+ size_t m_n;
+ wxString m_text;
+};
- wxString m_text;
- } fontEnumerator;
+void MyFrame::OnEnumerateEncodings(wxCommandEvent& WXUNUSED(event))
+{
+ MyEncodingEnumerator fontEnumerator;
fontEnumerator.EnumerateEncodings();
fontEnumerator.GetText().c_str());
}
-bool MyFrame::DoEnumerateFamilies(bool fixedWidthOnly,
- wxFontEncoding encoding,
- bool silent)
-{
- class MyFontEnumerator : public wxFontEnumerator
- {
- public:
- bool GotAny() const { return !m_facenames.IsEmpty(); }
+// -------------------------------------------------------------
- const wxArrayString& GetFacenames() const { return m_facenames; }
+class MyFontEnumerator : public wxFontEnumerator
+{
+public:
+ bool GotAny() const
+ { return !m_facenames.IsEmpty(); }
- protected:
- virtual bool OnFacename(const wxString& facename)
- {
- m_facenames.Add(facename);
+ const wxArrayString& GetFacenames() const
+ { return m_facenames; }
- return TRUE;
- }
+protected:
+ virtual bool OnFacename(const wxString& facename)
+ {
+ m_facenames.Add(facename);
+ return TRUE;
+ }
private:
wxArrayString m_facenames;
- } fontEnumerator;
+} fontEnumerator;
+
+bool MyFrame::DoEnumerateFamilies(bool fixedWidthOnly,
+ wxFontEncoding encoding,
+ bool silent)
+{
+ MyFontEnumerator fontEnumerator;
fontEnumerator.EnumerateFacenames(encoding, fixedWidthOnly);
}
}
+void MyFrame::DoResizeFont(int diff)
+{
+ wxFont fontOld = m_canvas->GetTextFont();
+
+ DoChangeFont(
+ wxFont(
+ fontOld.GetPointSize() + diff,
+ fontOld.GetFamily(),
+ fontOld.GetStyle(),
+ fontOld.GetWeight(),
+ fontOld.GetUnderlined(),
+ fontOld.GetFaceName(),
+ fontOld.GetEncoding()
+ )
+ );
+}
+
void MyFrame::DoChangeFont(const wxFont& font, const wxColour& col)
{
Resize(GetSize(), font);
return;
}
+ m_textctrl->LoadFile(filename);
+
+ if (!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;
+ m_textctrl -> SetValue(conv.Convert(m_textctrl -> GetValue()));
+ }
+ else
+ {
+ wxLogWarning("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.",
+ wxFontMapper::GetEncodingDescription(fontenc).c_str());
+ }
+
// and now create the correct font
if ( !DoEnumerateFamilies(FALSE, fontenc, TRUE /* silent */) )
{
wxFontMapper::GetEncodingDescription(fontenc).c_str());
}
}
-
- m_textctrl->LoadFile(filename);
}
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
// output the font name/info
wxString fontInfo;
- fontInfo.Printf("Font family is '%s', style '%s', weight '%s'",
+ fontInfo.Printf("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(),
m_font.GetWeightString().c_str());