]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/fontpicker.cpp
added wx{Colour|File|Dir|Font}PickerCtrl (patch 1472329 by Francesco)
[wxWidgets.git] / src / gtk / fontpicker.cpp
diff --git a/src/gtk/fontpicker.cpp b/src/gtk/fontpicker.cpp
new file mode 100644 (file)
index 0000000..8934897
--- /dev/null
@@ -0,0 +1,129 @@
+/////////////////////////////////////////////////////////////////////////////
+// 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"
+
+#include "wx/gtk/private.h"
+#include "wx/fontpicker.h"
+
+#include "wx/fontutil.h"        // for wxNativeFontInfo
+#include "wx/gtk/private.h"
+
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
+
+
+
+// ============================================================================
+// implementation
+// ============================================================================
+
+#if wxUSE_FONTPICKERCTRL && defined(__WXGTK24__)
+
+//-----------------------------------------------------------------------------
+// "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