1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/gtk/fontdlg.cpp
3 // Purpose: wxFontDialog
4 // Author: Robert Roebling
5 // Copyright: (c) 1998 Robert Roebling
6 // Licence: wxWindows licence
7 /////////////////////////////////////////////////////////////////////////////
8
9 // For compilers that support precompilation, includes "wx.h".
10 #include "wx/wxprec.h"
11
12 #if wxUSE_FONTDLG && !defined(__WXGPE__)
13
14 #include "wx/fontdlg.h"
15
16 #ifndef WX_PRECOMP
17 #include "wx/intl.h"
18 #endif
19
20 #include "wx/fontutil.h"
21 #include "wx/gtk/private.h"
22
23 //-----------------------------------------------------------------------------
24 // "response"
25 //-----------------------------------------------------------------------------
26
27 extern "C" {
response(GtkDialog * dialog,int response_id,wxFontDialog * win)28 static void response(GtkDialog* dialog, int response_id, wxFontDialog* win)
29 {
30 int rc = wxID_CANCEL;
31 if (response_id == GTK_RESPONSE_OK)
32 {
33 rc = wxID_OK;
34 #if GTK_CHECK_VERSION(3,2,0)
35 if (gtk_check_version(3,2,0) == NULL)
36 {
37 wxNativeFontInfo info;
38 info.description = gtk_font_chooser_get_font_desc(GTK_FONT_CHOOSER(dialog));
39 win->GetFontData().SetChosenFont(wxFont(info));
40 }
41 else
42 #endif
43 {
44 GtkFontSelectionDialog* sel = GTK_FONT_SELECTION_DIALOG(dialog);
45 wxGtkString name(gtk_font_selection_dialog_get_font_name(sel));
46 win->GetFontData().SetChosenFont(wxFont(wxString::FromUTF8(name)));
47 }
48 }
49
50 if (win->IsModal())
51 win->EndModal(rc);
52 else
53 win->Show(false);
54 }
55 }
56
57 //-----------------------------------------------------------------------------
58 // wxFontDialog
59 //-----------------------------------------------------------------------------
60
IMPLEMENT_DYNAMIC_CLASS(wxFontDialog,wxDialog)61 IMPLEMENT_DYNAMIC_CLASS(wxFontDialog, wxDialog)
62
63 bool wxFontDialog::DoCreate(wxWindow *parent)
64 {
65 parent = GetParentForModalDialog(parent, 0);
66
67 if (!PreCreation( parent, wxDefaultPosition, wxDefaultSize ) ||
68 !CreateBase( parent, -1, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE,
69 wxDefaultValidator, wxT("fontdialog") ))
70 {
71 wxFAIL_MSG( wxT("wxFontDialog creation failed") );
72 return false;
73 }
74
75 const wxString message(_("Choose font"));
76 GtkWindow* gtk_parent = NULL;
77 if (parent)
78 gtk_parent = GTK_WINDOW(parent->m_widget);
79
80 #if GTK_CHECK_VERSION(3,2,0)
81 g_type_ensure(PANGO_TYPE_FONT_FACE);
82 if (gtk_check_version(3,2,0) == NULL)
83 m_widget = gtk_font_chooser_dialog_new(wxGTK_CONV(message), gtk_parent);
84 else
85 #endif
86 {
87 m_widget = gtk_font_selection_dialog_new(wxGTK_CONV(message));
88 if (gtk_parent)
89 gtk_window_set_transient_for(GTK_WINDOW(m_widget), gtk_parent);
90 }
91 g_object_ref(m_widget);
92
93 g_signal_connect(m_widget, "response", G_CALLBACK(response), this);
94
95 wxFont font = m_fontData.GetInitialFont();
96 if( font.IsOk() )
97 {
98 const wxNativeFontInfo *info = font.GetNativeFontInfo();
99
100 if ( info )
101 {
102 #if GTK_CHECK_VERSION(3,2,0)
103 if (gtk_check_version(3,2,0) == NULL)
104 gtk_font_chooser_set_font_desc(GTK_FONT_CHOOSER(m_widget), info->description);
105 else
106 #endif
107 {
108 const wxString& fontname = info->ToString();
109 GtkFontSelectionDialog* sel = GTK_FONT_SELECTION_DIALOG(m_widget);
110 gtk_font_selection_dialog_set_font_name(sel, wxGTK_CONV(fontname));
111 }
112 }
113 else
114 {
115 // this is not supposed to happen!
116 wxFAIL_MSG(wxT("font is ok but no native font info?"));
117 }
118 }
119
120 return true;
121 }
122
~wxFontDialog()123 wxFontDialog::~wxFontDialog()
124 {
125 }
126
127 #endif // wxUSE_FONTDLG && !__WXGPE__
128