add support for GtkFontChooserDialog, new in GTK 3.2

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73373 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Paul Cornett 2013-01-15 05:55:15 +00:00
parent e12b91a306
commit dddda0eb88
3 changed files with 53 additions and 90 deletions

View File

@ -8,8 +8,8 @@
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef __GTK_FONTDLGH__
#define __GTK_FONTDLGH__
#ifndef _WX_GTK_FONTDLG_H_
#define _WX_GTK_FONTDLG_H_
//-----------------------------------------------------------------------------
// wxFontDialog
@ -26,9 +26,6 @@ public:
virtual ~wxFontDialog();
// implementation only
void SetChosenFont(const char *name);
#if WXWIN_COMPATIBILITY_2_6
// deprecated interface, don't use
wxDEPRECATED( wxFontDialog(wxWindow *parent, const wxFontData *data) );
@ -38,7 +35,6 @@ protected:
// create the GTK dialog
virtual bool DoCreate(wxWindow *parent);
private:
DECLARE_DYNAMIC_CLASS(wxFontDialog)
};

View File

@ -129,18 +129,6 @@ static inline guint16 wx_gtk_entry_get_text_length(GtkEntry* entry)
}
#define gtk_entry_get_text_length wx_gtk_entry_get_text_length
static inline GtkWidget* wx_gtk_font_selection_dialog_get_cancel_button(GtkFontSelectionDialog* fsd)
{
return fsd->cancel_button;
}
#define gtk_font_selection_dialog_get_cancel_button wx_gtk_font_selection_dialog_get_cancel_button
static inline GtkWidget* wx_gtk_font_selection_dialog_get_ok_button(GtkFontSelectionDialog* fsd)
{
return fsd->ok_button;
}
#define gtk_font_selection_dialog_get_ok_button wx_gtk_font_selection_dialog_get_ok_button
static inline const guchar* wx_gtk_selection_data_get_data(GtkSelectionData* selection_data)
{
return selection_data->data;

View File

@ -16,65 +16,42 @@
#ifndef WX_PRECOMP
#include "wx/intl.h"
#include "wx/utils.h"
#include "wx/msgdlg.h"
#endif
#include "wx/fontutil.h"
#include "wx/gtk/private.h"
//-----------------------------------------------------------------------------
// "delete_event"
// "response"
//-----------------------------------------------------------------------------
extern "C" {
static
bool gtk_fontdialog_delete_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxDialog *win )
static void response(GtkDialog* dialog, int response_id, wxFontDialog* win)
{
/*
printf( "OnDelete from " );
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
printf( win->GetClassInfo()->GetClassName() );
printf( ".\n" );
*/
int rc = wxID_CANCEL;
if (response_id == GTK_RESPONSE_OK)
{
rc = wxID_OK;
#if GTK_CHECK_VERSION(3,2,0)
if (gtk_check_version(3,2,0) == NULL)
{
wxNativeFontInfo info;
info.description = gtk_font_chooser_get_font_desc(GTK_FONT_CHOOSER(dialog));
win->GetFontData().SetChosenFont(wxFont(info));
}
else
#endif
{
GtkFontSelectionDialog* sel = GTK_FONT_SELECTION_DIALOG(dialog);
wxGtkString name(gtk_font_selection_dialog_get_font_name(sel));
win->GetFontData().SetChosenFont(wxFont(wxString::FromUTF8(name)));
}
}
win->Close();
return true;
}
}
//-----------------------------------------------------------------------------
// "clicked" for OK-button
//-----------------------------------------------------------------------------
extern "C" {
static
void gtk_fontdialog_ok_callback( GtkWidget *WXUNUSED(widget), wxFontDialog *dialog )
{
GtkFontSelectionDialog *fontdlg = GTK_FONT_SELECTION_DIALOG(dialog->m_widget);
wxGtkString fontname(gtk_font_selection_dialog_get_font_name(fontdlg));
dialog->SetChosenFont( fontname);
wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK);
event.SetEventObject( dialog );
dialog->HandleWindowEvent( event );
}
}
//-----------------------------------------------------------------------------
// "clicked" for Cancel-button
//-----------------------------------------------------------------------------
extern "C" {
static
void gtk_fontdialog_cancel_callback( GtkWidget *WXUNUSED(w), wxFontDialog *dialog )
{
wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, wxID_CANCEL);
event.SetEventObject( dialog );
dialog->HandleWindowEvent( event );
if (win->IsModal())
win->EndModal(rc);
else
win->Show(false);
}
}
@ -96,24 +73,24 @@ bool wxFontDialog::DoCreate(wxWindow *parent)
return false;
}
wxString m_message( _("Choose font") );
m_widget = gtk_font_selection_dialog_new( wxGTK_CONV( m_message ) );
const wxString message(_("Choose font"));
GtkWindow* gtk_parent = NULL;
if (parent)
gtk_parent = GTK_WINDOW(parent->m_widget);
#if GTK_CHECK_VERSION(3,2,0)
if (gtk_check_version(3,2,0) == NULL)
m_widget = gtk_font_chooser_dialog_new(wxGTK_CONV(message), gtk_parent);
else
#endif
{
m_widget = gtk_font_selection_dialog_new(wxGTK_CONV(message));
if (gtk_parent)
gtk_window_set_transient_for(GTK_WINDOW(m_widget), gtk_parent);
}
g_object_ref(m_widget);
if (parent)
gtk_window_set_transient_for(GTK_WINDOW(m_widget),
GTK_WINDOW(parent->m_widget));
GtkFontSelectionDialog *sel = GTK_FONT_SELECTION_DIALOG(m_widget);
g_signal_connect (gtk_font_selection_dialog_get_ok_button(sel), "clicked",
G_CALLBACK (gtk_fontdialog_ok_callback), this);
g_signal_connect (gtk_font_selection_dialog_get_cancel_button(sel), "clicked",
G_CALLBACK (gtk_fontdialog_cancel_callback), this);
g_signal_connect (m_widget, "delete_event",
G_CALLBACK (gtk_fontdialog_delete_callback), this);
g_signal_connect(m_widget, "response", G_CALLBACK(response), this);
wxFont font = m_fontData.GetInitialFont();
if( font.IsOk() )
@ -122,9 +99,16 @@ bool wxFontDialog::DoCreate(wxWindow *parent)
if ( info )
{
const wxString& fontname = info->ToString();
gtk_font_selection_dialog_set_font_name(sel, wxGTK_CONV(fontname));
#if GTK_CHECK_VERSION(3,2,0)
if (gtk_check_version(3,2,0) == NULL)
gtk_font_chooser_set_font_desc(GTK_FONT_CHOOSER(m_widget), info->description);
else
#endif
{
const wxString& fontname = info->ToString();
GtkFontSelectionDialog* sel = GTK_FONT_SELECTION_DIALOG(m_widget);
gtk_font_selection_dialog_set_font_name(sel, wxGTK_CONV(fontname));
}
}
else
{
@ -140,9 +124,4 @@ wxFontDialog::~wxFontDialog()
{
}
void wxFontDialog::SetChosenFont(const char *fontname)
{
m_fontData.SetChosenFont(wxFont( wxString::FromUTF8(fontname) ));
}
#endif // wxUSE_FONTDLG && !__WXGPE__