]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/gtk/fontdlg.cpp
[ 1508778 ] Fix for wxOwnerDrawnComboBox list selection rendering.
[wxWidgets.git] / src / gtk / fontdlg.cpp
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: src/gtk/fontdlg.cpp
3// Purpose: wxFontDialog
4// Author: Robert Roebling
5// Id: $Id$
6// Copyright: (c) 1998 Robert Roebling
7// Licence: wxWindows licence
8/////////////////////////////////////////////////////////////////////////////
9
10// For compilers that support precompilation, includes "wx.h".
11#include "wx/wxprec.h"
12
13#if wxUSE_FONTDLG && !defined(__WXGPE__)
14
15#include "wx/fontdlg.h"
16
17#ifndef WX_PRECOMP
18 #include "wx/intl.h"
19 #include "wx/utils.h"
20 #include "wx/msgdlg.h"
21#endif
22
23#include "wx/fontutil.h"
24
25#include "wx/gtk/private.h"
26
27//-----------------------------------------------------------------------------
28// "delete_event"
29//-----------------------------------------------------------------------------
30
31extern "C" {
32static
33bool gtk_fontdialog_delete_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxDialog *win )
34{
35 if (g_isIdle)
36 wxapp_install_idle_handler();
37
38/*
39 printf( "OnDelete from " );
40 if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
41 printf( win->GetClassInfo()->GetClassName() );
42 printf( ".\n" );
43*/
44
45 win->Close();
46
47 return true;
48}
49}
50
51//-----------------------------------------------------------------------------
52// "clicked" for OK-button
53//-----------------------------------------------------------------------------
54
55extern "C" {
56static
57void gtk_fontdialog_ok_callback( GtkWidget *WXUNUSED(widget), wxFontDialog *dialog )
58{
59 if (g_isIdle)
60 wxapp_install_idle_handler();
61
62 GtkFontSelectionDialog *fontdlg = GTK_FONT_SELECTION_DIALOG(dialog->m_widget);
63
64 gchar *fontname = gtk_font_selection_dialog_get_font_name(fontdlg);
65 dialog->SetChosenFont( fontname);
66
67 g_free( fontname );
68
69 wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK);
70 event.SetEventObject( dialog );
71 dialog->GetEventHandler()->ProcessEvent( event );
72}
73}
74
75//-----------------------------------------------------------------------------
76// "clicked" for Cancel-button
77//-----------------------------------------------------------------------------
78
79extern "C" {
80static
81void gtk_fontdialog_cancel_callback( GtkWidget *WXUNUSED(w), wxFontDialog *dialog )
82{
83 if (g_isIdle)
84 wxapp_install_idle_handler();
85
86 wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, wxID_CANCEL);
87 event.SetEventObject( dialog );
88 dialog->GetEventHandler()->ProcessEvent( event );
89}
90}
91
92//-----------------------------------------------------------------------------
93// wxFontDialog
94//-----------------------------------------------------------------------------
95
96IMPLEMENT_DYNAMIC_CLASS(wxFontDialog, wxDialog)
97
98bool wxFontDialog::DoCreate(wxWindow *parent)
99{
100 m_needParent = false;
101
102 if (!PreCreation( parent, wxDefaultPosition, wxDefaultSize ) ||
103 !CreateBase( parent, -1, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE,
104 wxDefaultValidator, wxT("fontdialog") ))
105 {
106 wxFAIL_MSG( wxT("wxFontDialog creation failed") );
107 return false;
108 }
109
110 wxString m_message( _("Choose font") );
111 m_widget = gtk_font_selection_dialog_new( wxGTK_CONV( m_message ) );
112
113 if (parent)
114 gtk_window_set_transient_for(GTK_WINDOW(m_widget),
115 GTK_WINDOW(parent->m_widget));
116
117 GtkFontSelectionDialog *sel = GTK_FONT_SELECTION_DIALOG(m_widget);
118
119 g_signal_connect (sel->ok_button, "clicked",
120 G_CALLBACK (gtk_fontdialog_ok_callback), this);
121
122 g_signal_connect (sel->cancel_button, "clicked",
123 G_CALLBACK (gtk_fontdialog_cancel_callback), this);
124
125 g_signal_connect (m_widget, "delete_event",
126 G_CALLBACK (gtk_fontdialog_delete_callback), this);
127
128 wxFont font = m_fontData.GetInitialFont();
129 if( font.Ok() )
130 {
131 const wxNativeFontInfo *info = font.GetNativeFontInfo();
132
133 if ( info )
134 {
135
136 const wxString& fontname = info->ToString();
137 gtk_font_selection_dialog_set_font_name(sel, wxGTK_CONV(fontname));
138 }
139 else
140 {
141 // this is not supposed to happen!
142 wxFAIL_MSG(_T("font is ok but no native font info?"));
143 }
144 }
145
146 return true;
147}
148
149wxFontDialog::~wxFontDialog()
150{
151}
152
153void wxFontDialog::SetChosenFont(const char *fontname)
154{
155 m_fontData.SetChosenFont(wxFont( wxString::FromAscii(fontname) ));
156}
157
158#endif // wxUSE_FONTDLG && !__WXGPE__