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 && defined(__WXGTK24__) 
  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
->GetEventHandler()->ProcessEvent(event
); 
  49 //----------------------------------------------------------------------------- 
  51 //----------------------------------------------------------------------------- 
  53 IMPLEMENT_DYNAMIC_CLASS(wxFontButton
, wxGenericFontButton
) 
  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 (!gtk_check_version(2,4,0)) 
  64         m_acceptsFocus 
= true; 
  66         if (!PreCreation( parent
, pos
, size 
) || 
  67             !wxControl::CreateBase(parent
, id
, pos
, size
, style
, validator
, name
)) 
  69             wxFAIL_MSG( wxT("wxFontButton creation failed") ); 
  73         m_widget 
= gtk_font_button_new(); 
  76         m_selectedFont 
= initial
; 
  79         // honour the fontbutton styles 
  80         bool showall 
= (style 
& wxFNTP_FONTDESC_AS_LABEL
) != 0, 
  81              usefont 
= (style 
& wxFNTP_USEFONT_FOR_LABEL
) != 0; 
  82         gtk_font_button_set_show_style(GTK_FONT_BUTTON(m_widget
), showall
); 
  83         gtk_font_button_set_show_size(GTK_FONT_BUTTON(m_widget
), showall
); 
  85         gtk_font_button_set_use_size(GTK_FONT_BUTTON(m_widget
), usefont
); 
  86         gtk_font_button_set_use_font(GTK_FONT_BUTTON(m_widget
), usefont
); 
  88         gtk_widget_show( GTK_WIDGET(m_widget
) ); 
  90         // GtkFontButton signals 
  91         g_signal_connect(m_widget
, "font-set", 
  92                         G_CALLBACK(gtk_fontbutton_setfont_callback
), this); 
  95         m_parent
->DoAddChild( this ); 
 101         return wxGenericFontButton::Create(parent
, id
, initial
, pos
, size
, 
 102                                            style
, validator
, name
); 
 106 wxFontButton::~wxFontButton() 
 110 void wxFontButton::UpdateFont() 
 112     if (!gtk_check_version(2,4,0)) 
 114         const wxNativeFontInfo 
*info 
= m_selectedFont
.GetNativeFontInfo(); 
 115         wxASSERT_MSG( info
, wxT("The fontbutton's internal font is not valid ?") ); 
 117         const wxString
& fontname 
= info
->ToString(); 
 118         gtk_font_button_set_font_name(GTK_FONT_BUTTON(m_widget
), wxGTK_CONV(fontname
)); 
 121         wxGenericFontButton::UpdateFont(); 
 124 #endif      // wxUSE_FONTPICKERCTRL && defined(__WXGTK24__)