1 ///////////////////////////////////////////////////////////////////////////// 
   2 // Name:        src/gtk/fontpicker.cpp 
   3 // Purpose:     implementation of wxFontButton 
   4 // Author:      Francesco Montorsi 
   8 // Copyright:   (c) Francesco Montorsi 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  13 // ---------------------------------------------------------------------------- 
  15 // ---------------------------------------------------------------------------- 
  17 // For compilers that support precompilation, includes "wx.h". 
  18 #include "wx/wxprec.h" 
  20 #if wxUSE_FONTPICKERCTRL 
  22 #include "wx/fontpicker.h" 
  24 #include "wx/fontutil.h"        // for wxNativeFontInfo 
  25 #include "wx/gtk/private.h" 
  27 // ============================================================================ 
  29 // ============================================================================ 
  31 //----------------------------------------------------------------------------- 
  33 //----------------------------------------------------------------------------- 
  36 static void gtk_fontbutton_setfont_callback(GtkFontButton 
*widget
, 
  39     // update the m_selectedFont member of the wxFontButton 
  41     p
->SetNativeFontInfo(gtk_font_button_get_font_name(widget
)); 
  43     // fire the colour-changed event 
  44     wxFontPickerEvent 
event(p
, p
->GetId(), p
->GetSelectedFont()); 
  45     p
->HandleWindowEvent(event
); 
  49 //----------------------------------------------------------------------------- 
  51 //----------------------------------------------------------------------------- 
  53 IMPLEMENT_DYNAMIC_CLASS(wxFontButton
, wxButton
) 
  55 bool wxFontButton::Create( wxWindow 
*parent
, wxWindowID id
, 
  56                         const wxFont 
&initial
, 
  57                         const wxPoint 
&pos
, const wxSize 
&size
, 
  58                         long style
, const wxValidator
& validator
, 
  59                         const wxString 
&name 
) 
  61     if (!PreCreation( parent
, pos
, size 
) || 
  62         !wxControl::CreateBase(parent
, id
, pos
, size
, style
, validator
, name
)) 
  64         wxFAIL_MSG( wxT("wxFontButton creation failed") ); 
  68     m_widget 
= gtk_font_button_new(); 
  69     g_object_ref(m_widget
); 
  72     m_selectedFont 
= initial
.IsOk() ? initial 
: *wxNORMAL_FONT
; 
  75     // honour the fontbutton styles 
  76     bool showall 
= (style 
& wxFNTP_FONTDESC_AS_LABEL
) != 0, 
  77          usefont 
= (style 
& wxFNTP_USEFONT_FOR_LABEL
) != 0; 
  78     gtk_font_button_set_show_style(GTK_FONT_BUTTON(m_widget
), showall
); 
  79     gtk_font_button_set_show_size(GTK_FONT_BUTTON(m_widget
), showall
); 
  81     gtk_font_button_set_use_size(GTK_FONT_BUTTON(m_widget
), usefont
); 
  82     gtk_font_button_set_use_font(GTK_FONT_BUTTON(m_widget
), usefont
); 
  84     gtk_widget_show(m_widget
); 
  86     // GtkFontButton signals 
  87     g_signal_connect(m_widget
, "font-set", 
  88                     G_CALLBACK(gtk_fontbutton_setfont_callback
), this); 
  91     m_parent
->DoAddChild( this ); 
  99 wxFontButton::~wxFontButton() 
 103 void wxFontButton::UpdateFont() 
 105     const wxNativeFontInfo 
*info 
= m_selectedFont
.GetNativeFontInfo(); 
 106     wxASSERT_MSG( info
, wxT("The fontbutton's internal font is not valid ?") ); 
 108     const wxString
& fontname 
= info
->ToString(); 
 109     gtk_font_button_set_font_name(GTK_FONT_BUTTON(m_widget
), wxGTK_CONV(fontname
)); 
 112 #endif // wxUSE_FONTPICKERCTRL