Files
wxWidgets/src/gtk/fontpicker.cpp
2006-06-03 19:20:23 +00:00

124 lines
4.0 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: src/gtk/fontpicker.cpp
// Purpose: implementation of wxFontButton
// Author: Francesco Montorsi
// Modified By:
// Created: 15/04/2006
// Id: $Id$
// Copyright: (c) Francesco Montorsi
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#if wxUSE_FONTPICKERCTRL && defined(__WXGTK24__)
#include "wx/fontpicker.h"
#include "wx/fontutil.h" // for wxNativeFontInfo
#include "wx/gtk/private.h"
// ============================================================================
// implementation
// ============================================================================
//-----------------------------------------------------------------------------
// "font-set"
//-----------------------------------------------------------------------------
extern "C" {
static void gtk_fontbutton_setfont_callback(GtkFontButton *widget,
wxFontButton *p)
{
// update the m_selectedFont member of the wxFontButton
wxASSERT(p);
p->SetNativeFontInfo(gtk_font_button_get_font_name(widget));
// fire the colour-changed event
wxFontPickerEvent event(p, p->GetId(), p->GetSelectedFont());
p->GetEventHandler()->ProcessEvent(event);
}
}
//-----------------------------------------------------------------------------
// wxFontButton
//-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxFontButton, wxGenericFontButton)
bool wxFontButton::Create( wxWindow *parent, wxWindowID id,
const wxFont &initial,
const wxPoint &pos, const wxSize &size,
long style, const wxValidator& validator,
const wxString &name )
{
if (!gtk_check_version(2,4,0))
{
m_needParent = true;
if (!PreCreation( parent, pos, size ) ||
!wxControl::CreateBase(parent, id, pos, size, style, validator, name))
{
wxFAIL_MSG( wxT("wxFontButton creation failed") );
return false;
}
m_widget = gtk_font_button_new();
// set initial font
m_selectedFont = initial;
UpdateFont();
// honour the fontbutton styles
bool showall = (style & wxFNTP_FONTDESC_AS_LABEL) != 0,
usefont = (style & wxFNTP_USEFONT_FOR_LABEL) != 0;
gtk_font_button_set_show_style(GTK_FONT_BUTTON(m_widget), showall);
gtk_font_button_set_show_size(GTK_FONT_BUTTON(m_widget), showall);
gtk_font_button_set_use_size(GTK_FONT_BUTTON(m_widget), usefont);
gtk_font_button_set_use_font(GTK_FONT_BUTTON(m_widget), usefont);
gtk_widget_show( GTK_WIDGET(m_widget) );
// GtkFontButton signals
g_signal_connect(m_widget, "font-set",
G_CALLBACK(gtk_fontbutton_setfont_callback), this);
m_parent->DoAddChild( this );
PostCreation(size);
SetBestSize(size);
}
else
return wxGenericFontButton::Create(parent, id, initial, pos, size,
style, validator, name);
return true;
}
wxFontButton::~wxFontButton()
{
}
void wxFontButton::UpdateFont()
{
if (!gtk_check_version(2,4,0))
{
const wxNativeFontInfo *info = m_selectedFont.GetNativeFontInfo();
wxASSERT_MSG( info, wxT("The fontbutton's internal font is not valid ?") );
const wxString& fontname = info->ToString();
gtk_font_button_set_font_name(GTK_FONT_BUTTON(m_widget), wxGTK_CONV(fontname));
}
else
wxGenericFontButton::UpdateFont();
}
#endif // wxUSE_FONTPICKERCTRL && defined(__WXGTK24__)