136 lines
4.0 KiB
C++
136 lines
4.0 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: src/gtk/fontdlg.cpp
|
|
// Purpose: wxFontDialog
|
|
// Author: Robert Roebling
|
|
// Copyright: (c) 1998 Robert Roebling
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// For compilers that support precompilation, includes "wx.h".
|
|
#include "wx/wxprec.h"
|
|
|
|
#if wxUSE_FONTDLG && !defined(__WXGPE__)
|
|
|
|
#include "wx/fontdlg.h"
|
|
|
|
#ifndef WX_PRECOMP
|
|
#include "wx/intl.h"
|
|
#endif
|
|
|
|
#include "wx/fontutil.h"
|
|
#include "wx/gtk/private.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// "response"
|
|
//-----------------------------------------------------------------------------
|
|
|
|
extern "C" {
|
|
static void response(GtkDialog* dialog, int response_id, wxFontDialog* win)
|
|
{
|
|
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
|
|
{
|
|
wxGCC_WARNING_SUPPRESS(deprecated-declarations)
|
|
GtkFontSelectionDialog* sel = GTK_FONT_SELECTION_DIALOG(dialog);
|
|
wxGtkString name(gtk_font_selection_dialog_get_font_name(sel));
|
|
win->GetFontData().SetChosenFont(wxFont(wxString::FromUTF8(name)));
|
|
wxGCC_WARNING_RESTORE()
|
|
}
|
|
}
|
|
|
|
if (win->IsModal())
|
|
win->EndModal(rc);
|
|
else
|
|
win->Show(false);
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// wxFontDialog
|
|
//-----------------------------------------------------------------------------
|
|
|
|
wxIMPLEMENT_DYNAMIC_CLASS(wxFontDialog, wxDialog);
|
|
|
|
bool wxFontDialog::DoCreate(wxWindow *parent)
|
|
{
|
|
parent = GetParentForModalDialog(parent, 0);
|
|
|
|
if (!PreCreation( parent, wxDefaultPosition, wxDefaultSize ) ||
|
|
!CreateBase( parent, -1, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE,
|
|
wxDefaultValidator, wxT("fontdialog") ))
|
|
{
|
|
wxFAIL_MSG( wxT("wxFontDialog creation failed") );
|
|
return false;
|
|
}
|
|
|
|
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 GLIB_CHECK_VERSION(2, 34, 0)
|
|
g_type_ensure(PANGO_TYPE_FONT_FACE);
|
|
#endif
|
|
if (gtk_check_version(3,2,0) == NULL)
|
|
m_widget = gtk_font_chooser_dialog_new(wxGTK_CONV(message), gtk_parent);
|
|
else
|
|
#endif
|
|
{
|
|
wxGCC_WARNING_SUPPRESS(deprecated-declarations)
|
|
m_widget = gtk_font_selection_dialog_new(wxGTK_CONV(message));
|
|
if (gtk_parent)
|
|
gtk_window_set_transient_for(GTK_WINDOW(m_widget), gtk_parent);
|
|
wxGCC_WARNING_RESTORE()
|
|
}
|
|
g_object_ref(m_widget);
|
|
|
|
g_signal_connect(m_widget, "response", G_CALLBACK(response), this);
|
|
|
|
wxFont font = m_fontData.GetInitialFont();
|
|
if( font.IsOk() )
|
|
{
|
|
const wxNativeFontInfo *info = font.GetNativeFontInfo();
|
|
|
|
if ( info )
|
|
{
|
|
#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
|
|
{
|
|
wxGCC_WARNING_SUPPRESS(deprecated-declarations)
|
|
const wxString& fontname = info->ToString();
|
|
GtkFontSelectionDialog* sel = GTK_FONT_SELECTION_DIALOG(m_widget);
|
|
gtk_font_selection_dialog_set_font_name(sel, wxGTK_CONV(fontname));
|
|
wxGCC_WARNING_RESTORE()
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// this is not supposed to happen!
|
|
wxFAIL_MSG(wxT("font is ok but no native font info?"));
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
wxFontDialog::~wxFontDialog()
|
|
{
|
|
}
|
|
|
|
#endif // wxUSE_FONTDLG && !__WXGPE__
|