]> git.saurik.com Git - wxWidgets.git/commitdiff
add wxRenderer::GetCheckBoxSize(); refactor wxGTK code to avoid duplication (#9642)
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 2 Aug 2008 21:51:22 +0000 (21:51 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 2 Aug 2008 21:51:22 +0000 (21:51 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@54934 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

12 files changed:
Makefile.in
build/bakefiles/files.bkl
include/wx/gtk/private.h
include/wx/renderer.h
interface/wx/renderer.h
src/generic/renderg.cpp
src/gtk/private.cpp [new file with mode: 0644]
src/gtk/renderer.cpp
src/gtk/win_gtk.cpp
src/gtk/window.cpp
src/msw/renderer.cpp
src/osx/carbon/renderer.cpp

index ad24c31a1ba393d68127c1f0e3d0810e45e5f2ec..4136201748fbb1af2abcd8f6024493e91ddb9b43 100644 (file)
@@ -4240,6 +4240,7 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_2___LOWLEVEL_SRC_OBJECTS =  \
        monodll_minifram.o \
        monodll_pen.o \
        monodll_popupwin.o \
+       monodll_private.o \
        monodll_region.o \
        monodll_renderer.o \
        monodll_settings.o \
@@ -5105,6 +5106,7 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_2___LOWLEVEL_SRC_OBJECTS_1 =  \
        monodll_minifram.o \
        monodll_pen.o \
        monodll_popupwin.o \
+       monodll_private.o \
        monodll_region.o \
        monodll_renderer.o \
        monodll_settings.o \
@@ -6138,6 +6140,7 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_2___LOWLEVEL_SRC_OBJECTS_2 =  \
        monolib_minifram.o \
        monolib_pen.o \
        monolib_popupwin.o \
+       monolib_private.o \
        monolib_region.o \
        monolib_renderer.o \
        monolib_settings.o \
@@ -7004,6 +7007,7 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_2___LOWLEVEL_SRC_OBJECTS_3 =  \
        monolib_minifram.o \
        monolib_pen.o \
        monolib_popupwin.o \
+       monolib_private.o \
        monolib_region.o \
        monolib_renderer.o \
        monolib_settings.o \
@@ -8298,6 +8302,7 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_2___LOWLEVEL_SRC_OBJECTS_4 =  \
        coredll_minifram.o \
        coredll_pen.o \
        coredll_popupwin.o \
+       coredll_private.o \
        coredll_region.o \
        coredll_renderer.o \
        coredll_settings.o \
@@ -9164,6 +9169,7 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_2___LOWLEVEL_SRC_OBJECTS_5 =  \
        coredll_minifram.o \
        coredll_pen.o \
        coredll_popupwin.o \
+       coredll_private.o \
        coredll_region.o \
        coredll_renderer.o \
        coredll_settings.o \
@@ -9795,6 +9801,7 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_2___LOWLEVEL_SRC_OBJECTS_6 =  \
        corelib_minifram.o \
        corelib_pen.o \
        corelib_popupwin.o \
+       corelib_private.o \
        corelib_region.o \
        corelib_renderer.o \
        corelib_settings.o \
@@ -10661,6 +10668,7 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_2___LOWLEVEL_SRC_OBJECTS_7 =  \
        corelib_minifram.o \
        corelib_pen.o \
        corelib_popupwin.o \
+       corelib_private.o \
        corelib_region.o \
        corelib_renderer.o \
        corelib_settings.o \
@@ -15653,6 +15661,9 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP)
 @COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@monodll_popupwin.o: $(srcdir)/src/os2/popupwin.cpp $(MONODLL_ODEP)
 @COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@   $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/os2/popupwin.cpp
 
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@monodll_private.o: $(srcdir)/src/gtk/private.cpp $(MONODLL_ODEP)
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/gtk/private.cpp
+
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@monodll_region.o: $(srcdir)/src/gtk/region.cpp $(MONODLL_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/gtk/region.cpp
 
@@ -20141,6 +20152,9 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP)
 @COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@monolib_popupwin.o: $(srcdir)/src/os2/popupwin.cpp $(MONOLIB_ODEP)
 @COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@   $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/os2/popupwin.cpp
 
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@monolib_private.o: $(srcdir)/src/gtk/private.cpp $(MONOLIB_ODEP)
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/gtk/private.cpp
+
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@monolib_region.o: $(srcdir)/src/gtk/region.cpp $(MONOLIB_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/gtk/region.cpp
 
@@ -25121,6 +25135,9 @@ coredll_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(COREDLL_ODEP)
 @COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@coredll_popupwin.o: $(srcdir)/src/os2/popupwin.cpp $(COREDLL_ODEP)
 @COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@   $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/os2/popupwin.cpp
 
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@coredll_private.o: $(srcdir)/src/gtk/private.cpp $(COREDLL_ODEP)
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/gtk/private.cpp
+
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@coredll_region.o: $(srcdir)/src/gtk/region.cpp $(COREDLL_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/gtk/region.cpp
 
@@ -28193,6 +28210,9 @@ corelib_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(CORELIB_ODEP)
 @COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@corelib_popupwin.o: $(srcdir)/src/os2/popupwin.cpp $(CORELIB_ODEP)
 @COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@   $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/os2/popupwin.cpp
 
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@corelib_private.o: $(srcdir)/src/gtk/private.cpp $(CORELIB_ODEP)
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/gtk/private.cpp
+
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@corelib_region.o: $(srcdir)/src/gtk/region.cpp $(CORELIB_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/gtk/region.cpp
 
index 4c0fb1e63ea19e9e614009f8a05f018400b4edff..a5e9e1a6b2bbb6bf000f20d08c82c750b95a68da 100644 (file)
@@ -997,6 +997,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
     src/gtk/minifram.cpp
     src/gtk/pen.cpp
     src/gtk/popupwin.cpp
+    src/gtk/private.cpp
     src/gtk/region.cpp
     src/gtk/renderer.cpp
     src/gtk/settings.cpp
index 868dfe72eb1344f8eba136dd503118d0dfd3c9d2..7be4c61cf3c86712f120846056e685e87a29d5ec 100644 (file)
@@ -104,5 +104,27 @@ void gtk_window_set_policy (GtkWindow *window,
 
 } // extern "C"
 
+
+// ----------------------------------------------------------------------------
+// various private helper functions
+// ----------------------------------------------------------------------------
+
+namespace wxGTKPrivate
+{
+
+// these functions create the GTK widgets of the specified types which can then
+// used to retrieve their styles, pass them to drawing functions &c
+//
+// the returned widgets shouldn't be destroyed, this is done automatically on
+// shutdown
+GtkWidget *GetButtonWidget();
+GtkWidget *GetCheckButtonWidget();
+GtkWidget *GetEntryWidget();
+GtkWidget *GetHeaderButtonWidget();
+GtkWidget *GetSplitterWidget();
+GtkWidget *GetTreeWidget();
+
+} // wxGTKPrivate
+
 #endif // _WX_GTK_PRIVATE_H_
 
index 2ed03eea96f29c83e6001b77739c009118773c75..94119d8994dc93baa3becd5bc851134475264eb5 100644 (file)
@@ -28,7 +28,7 @@
 class WXDLLIMPEXP_FWD_CORE wxDC;
 class WXDLLIMPEXP_FWD_CORE wxWindow;
 
-#include "wx/gdicmn.h" // for wxPoint
+#include "wx/gdicmn.h" // for wxPoint, wxSize
 #include "wx/colour.h"
 #include "wx/font.h"
 #include "wx/bitmap.h"
@@ -227,6 +227,9 @@ public:
                               const wxRect& rect,
                               int flags = 0) = 0;
 
+    // Returns the default size of a check box.
+    virtual wxSize GetCheckBoxSize(wxWindow *win) = 0;
+
     // draw blank button
     //
     // flags may use wxCONTROL_PRESSED, wxCONTROL_CURRENT and wxCONTROL_ISDEFAULT
@@ -373,6 +376,9 @@ public:
                               int flags = 0 )
         { m_rendererNative.DrawCheckBox( win, dc, rect, flags ); }
 
+    virtual wxSize GetCheckBoxSize(wxWindow *win)
+        { return m_rendererNative.GetCheckBoxSize(win); }
+
     virtual void DrawPushButton(wxWindow *win,
                                 wxDC& dc,
                                 const wxRect& rect,
index c2d963d8ed49c975de6e9e408c3b6b7392caacaa..59e578b78bc407214ef6d7da5d95052ffcfdb597 100644 (file)
@@ -211,6 +211,8 @@ public:
     virtual void DrawCheckBox(wxWindow *win, wxDC& dc,
                               const wxRect& rect, int flags = 0 );
 
+    virtual wxSize GetCheckBoxSize(wxWindow *win);
+
     virtual void DrawPushButton(wxWindow *win, wxDC& dc,
                                 const wxRect& rect, int flags = 0 );
 
@@ -286,7 +288,7 @@ public:
     ~wxRendererNative();
 
     /**
-        Draw a check box (used by wxDataViewCtrl).
+        Draw a check box.
 
         @a flags may have the @c wxCONTROL_CHECKED, @c wxCONTROL_CURRENT or
         @c wxCONTROL_UNDETERMINED bit set, see @ref wxCONTROL_FLAGS.
@@ -427,6 +429,11 @@ public:
     */
     static wxRendererNative GetGeneric();
 
+    /**
+        Returns the size of a check box.
+    */
+    virtual wxSize GetCheckBoxSize(wxWindow *win);
+
     /**
         Returns the height of a header button, either a fixed platform height if
         available, or a
index 5ad90db583eccaa25daf9cd5cb9e098753866924..daba7bf33a4296542a5eac5c37bc41315158b3c7 100644 (file)
@@ -98,6 +98,8 @@ public:
                               const wxRect& rect,
                               int flags = 0);
 
+    virtual wxSize GetCheckBoxSize(wxWindow *win);
+
     virtual void DrawPushButton(wxWindow *win,
                                 wxDC& dc,
                                 const wxRect& rect,
@@ -618,6 +620,11 @@ wxRendererGeneric::DrawCheckBox(wxWindow *WXUNUSED(win),
     }
 }
 
+wxSize wxRendererGeneric::GetCheckBoxSize(wxWindow *WXUNUSED(win))
+{
+    return wxSize(16, 16);
+}
+
 void
 wxRendererGeneric::DrawPushButton(wxWindow *win,
                                   wxDC& dc,
diff --git a/src/gtk/private.cpp b/src/gtk/private.cpp
new file mode 100644 (file)
index 0000000..3f421fb
--- /dev/null
@@ -0,0 +1,169 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name:        src/gtk/private.cpp
+// Purpose:     implementation of wxGTK private functions
+// Author:      Marcin Malich
+// Modified by:
+// Created:     28.06.2008
+// RCS-ID:      $Id$
+// Copyright:   (c) 2008 Marcin Malich <me@malcom.pl>
+// License:     wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+// ============================================================================
+// declarations
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+// for compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+    #include "wx/module.h"
+#endif
+
+#include "wx/gtk/private.h"
+
+// ----------------------------------------------------------------------------
+// wxGTKPrivate functions implementation
+// ----------------------------------------------------------------------------
+
+namespace wxGTKPrivate
+{
+
+static GtkWidget *gs_container = NULL;
+
+static GtkContainer* GetContainer()
+{
+    if ( gs_container == NULL )
+    {
+        GtkWidget* window = gtk_window_new(GTK_WINDOW_POPUP);
+        gs_container = gtk_fixed_new();
+        gtk_container_add(GTK_CONTAINER(window), gs_container);
+    }
+    return GTK_CONTAINER(gs_container);
+}
+
+GtkWidget *GetButtonWidget()
+{
+    static GtkWidget *s_button = NULL;
+
+    if ( !s_button )
+    {
+        s_button = gtk_button_new();
+        gtk_container_add(GetContainer(), s_button);
+        gtk_widget_realize(s_button);
+    }
+
+    return s_button;
+}
+
+GtkWidget *GetCheckButtonWidget()
+{
+    static GtkWidget *s_button = NULL;
+
+    if ( !s_button )
+    {
+        s_button = gtk_check_button_new();
+        gtk_container_add(GetContainer(), s_button);
+        gtk_widget_realize(s_button);
+    }
+
+    return s_button;
+}
+
+GtkWidget *GetEntryWidget()
+{
+    static GtkWidget *s_entry = NULL;
+
+    if ( !s_entry )
+    {
+        s_entry = gtk_entry_new();
+        gtk_container_add(GetContainer(), s_entry);
+        gtk_widget_realize(s_entry);
+    }
+
+    return s_entry;
+}
+
+// This one just gets the button used by the column header. Although it's
+// still a gtk_button the themes will typically differentiate and draw them
+// differently if the button is in a treeview.
+GtkWidget *GetHeaderButtonWidget()
+{
+    static GtkWidget *s_button = NULL;
+
+    if ( !s_button )
+    {
+        // Get the dummy tree widget, give it a column, and then use the
+        // widget in the column header for the rendering code.
+        GtkWidget* treewidget = GetTreeWidget();
+        GtkTreeViewColumn *column = gtk_tree_view_column_new();
+        gtk_tree_view_append_column(GTK_TREE_VIEW(treewidget), column);
+        s_button = column->button;
+    }
+
+    return s_button;
+}
+
+GtkWidget* GetSplitterWidget()
+{
+    static GtkWidget* widget;
+
+    if (widget == NULL)
+    {
+        widget = gtk_vpaned_new();
+        gtk_container_add(GetContainer(), widget);
+        gtk_widget_realize(widget);
+    }
+
+    return widget;
+}
+
+GtkWidget *GetTreeWidget()
+{
+    static GtkWidget *s_tree = NULL;
+
+    if ( !s_tree )
+    {
+        s_tree = gtk_tree_view_new();
+        gtk_container_add(GetContainer(), s_tree);
+        gtk_widget_realize(s_tree);
+    }
+
+    return s_tree;
+}
+
+
+// Module for destroying created widgets
+class WidgetsCleanupModule : public wxModule
+{
+public:
+    virtual bool OnInit()
+    {
+        return true;
+    }
+
+    virtual void OnExit()
+    {
+        if ( gs_container )
+        {
+            GtkWidget* parent = gtk_widget_get_parent(gs_container);
+            gtk_widget_destroy(parent);
+        }
+    }
+
+    DECLARE_DYNAMIC_CLASS(WidgetsCleanupModule)
+};
+
+IMPLEMENT_DYNAMIC_CLASS(WidgetsCleanupModule, wxModule)
+
+static WidgetsCleanupModule gs_widgetsCleanupModule;
+
+} // wxGTKPrivate namespace
index a8eb92b00734e525dc7f46c54276dc16c93206a5..a3490229d3e0f21227d95a67cee793281e2ace9d 100644 (file)
@@ -34,6 +34,7 @@
 #endif
 
 #include "wx/gtk/dc.h"
+#include "wx/gtk/private.h"
 
 #include <gtk/gtk.h>
 
@@ -96,58 +97,15 @@ public:
 
     virtual void DrawFocusRect(wxWindow* win, wxDC& dc, const wxRect& rect, int flags = 0);
 
-    virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win);
-
-    class Module;
-    friend class Module;
-
-private:
-    // used by DrawPushButton and DrawDropArrow
-    static GtkWidget *GetButtonWidget();
-
-    // used by DrawTreeItemButton()
-    static GtkWidget *GetTreeWidget();
-
-    // used by DrawCheckBox()
-    static GtkWidget *GetCheckButtonWidget();
-
-    // Used by DrawHeaderButton
-    static GtkWidget *GetHeaderButtonWidget();
-
-    static GtkWidget* GetSplitterWidget();
-
-    // container for created widgets
-    static GtkContainer* GetContainer();
-    static GtkWidget* ms_container;
-};
+    virtual wxSize GetCheckBoxSize(wxWindow *win);
 
-// Module for destroying created widgets
-class wxRendererGTK::Module: public wxModule
-{
-public:
-    virtual bool OnInit()
-    {
-        return true;
-    }
-    virtual void OnExit()
-    {
-        if (wxRendererGTK::ms_container)
-        {
-            GtkWidget* parent =
-                gtk_widget_get_parent(wxRendererGTK::ms_container);
-            gtk_widget_destroy(parent);
-        }
-    }
-    DECLARE_DYNAMIC_CLASS(wxRendererGTK::Module)
+    virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win);
 };
-IMPLEMENT_DYNAMIC_CLASS(wxRendererGTK::Module, wxModule)
 
 // ============================================================================
 // implementation
 // ============================================================================
 
-GtkWidget* wxRendererGTK::ms_container;
-
 /* static */
 wxRendererNative& wxRendererNative::GetDefault()
 {
@@ -156,117 +114,6 @@ wxRendererNative& wxRendererNative::GetDefault()
     return s_rendererGTK;
 }
 
-// ----------------------------------------------------------------------------
-// helper functions
-// ----------------------------------------------------------------------------
-
-GtkContainer* wxRendererGTK::GetContainer()
-{
-    if (ms_container == NULL)
-    {
-        GtkWidget* window = gtk_window_new(GTK_WINDOW_POPUP);
-        ms_container = gtk_fixed_new();
-        gtk_container_add(GTK_CONTAINER(window), ms_container);
-    }
-    return GTK_CONTAINER(ms_container);
-}
-
-GtkWidget *
-wxRendererGTK::GetButtonWidget()
-{
-    static GtkWidget *s_button = NULL;
-
-    if ( !s_button )
-    {
-        s_button = gtk_button_new();
-        gtk_container_add(GetContainer(), s_button);
-        gtk_widget_realize( s_button );
-    }
-
-    return s_button;
-}
-
-GtkWidget *
-wxRendererGTK::GetCheckButtonWidget()
-{
-    static GtkWidget *s_button = NULL;
-
-    if ( !s_button )
-    {
-        s_button = gtk_check_button_new();
-        gtk_container_add(GetContainer(), s_button);
-        gtk_widget_realize( s_button );
-    }
-
-    return s_button;
-}
-
-GtkWidget *
-wxRendererGTK::GetTreeWidget()
-{
-    static GtkWidget *s_tree = NULL;
-
-    if ( !s_tree )
-    {
-        s_tree = gtk_tree_view_new();
-        gtk_container_add(GetContainer(), s_tree);
-        gtk_widget_realize( s_tree );
-    }
-
-    return s_tree;
-}
-
-// used elsewhere
-GtkWidget *GetEntryWidget()
-{
-    static GtkWidget *s_entry = NULL;
-    static GtkWidget *s_window = NULL;
-
-    if ( !s_entry )
-    {
-        s_window = gtk_window_new( GTK_WINDOW_POPUP );
-        gtk_widget_realize( s_window );
-        s_entry = gtk_entry_new();
-        gtk_container_add( GTK_CONTAINER(s_window), s_entry );
-        gtk_widget_realize( s_entry );
-    }
-
-    return s_entry;
-}
-
-// This one just gets the button used by the column header.  Although it's
-// still a gtk_button the themes will typically differentiate and draw them
-// differently if the button is in a treeview.
-GtkWidget *
-wxRendererGTK::GetHeaderButtonWidget()
-{
-    static GtkWidget *s_button = NULL;
-
-    if ( !s_button )
-    {
-        // Get the dummy tree widget, give it a column, and then use the
-        // widget in the column header for the rendering code.
-        GtkWidget* treewidget = GetTreeWidget();
-        GtkTreeViewColumn*  column = gtk_tree_view_column_new();
-        gtk_tree_view_append_column(GTK_TREE_VIEW(treewidget), column);
-        s_button = column->button;
-    }
-
-    return s_button;
-}
-
-GtkWidget* wxRendererGTK::GetSplitterWidget()
-{
-    static GtkWidget* widget;
-    if (widget == NULL)
-    {
-        widget = gtk_vpaned_new();
-        gtk_container_add(GetContainer(), widget);
-        gtk_widget_realize(widget);
-    }
-    return widget;
-}
-
 // ----------------------------------------------------------------------------
 // list/tree controls drawing
 // ----------------------------------------------------------------------------
@@ -280,7 +127,7 @@ wxRendererGTK::DrawHeaderButton(wxWindow *win,
                                 wxHeaderButtonParams* params)
 {
 
-    GtkWidget *button = GetHeaderButtonWidget();
+    GtkWidget *button = wxGTKPrivate::GetHeaderButtonWidget();
 
     GdkWindow* gdk_window = NULL;
 #if wxUSE_NEW_DC
@@ -327,7 +174,7 @@ void
 wxRendererGTK::DrawTreeItemButton(wxWindow* win,
                                   wxDC& dc, const wxRect& rect, int flags)
 {
-    GtkWidget *tree = GetTreeWidget();
+    GtkWidget *tree = wxGTKPrivate::GetTreeWidget();
 
     GdkWindow* gdk_window = NULL;
 #if wxUSE_NEW_DC
@@ -387,7 +234,7 @@ wxRendererGTK::GetSplitterParams(const wxWindow *WXUNUSED(win))
     // we don't draw any border, hence 0 for the second field
     return wxSplitterRenderParams
            (
-               GetGtkSplitterFullSize(GetSplitterWidget()),
+               GetGtkSplitterFullSize(wxGTKPrivate::GetSplitterWidget()),
                0,
                true     // hot sensitive
            );
@@ -428,7 +275,7 @@ wxRendererGTK::DrawSplitterSash(wxWindow *win,
     wxASSERT_MSG( gdk_window,
                   wxT("cannot use wxRendererNative on wxDC of this type") );
 
-    wxCoord full_size = GetGtkSplitterFullSize(GetSplitterWidget());
+    wxCoord full_size = GetGtkSplitterFullSize(wxGTKPrivate::GetSplitterWidget());
 
     // are we drawing vertical or horizontal splitter?
     const bool isVert = orient == wxVERTICAL;
@@ -477,7 +324,7 @@ wxRendererGTK::DrawDropArrow(wxWindow *WXUNUSED(win),
                              const wxRect& rect,
                              int flags)
 {
-    GtkWidget *button = GetButtonWidget();
+    GtkWidget *button = wxGTKPrivate::GetButtonWidget();
 
     // If we give GTK_PIZZA(win->m_wxwindow)->bin_window as
     // a window for gtk_paint_xxx function, then it won't
@@ -546,13 +393,26 @@ wxRendererGTK::DrawComboBoxDropButton(wxWindow *win,
     DrawDropArrow(win,dc,rect);
 }
 
+wxSize
+wxRendererGTK::GetCheckBoxSize(wxWindow *WXUNUSED(win))
+{
+    gint indicator_size, indicator_spacing;
+    gtk_widget_style_get(wxGTKPrivate::GetCheckButtonWidget(),
+                         "indicator_size", &indicator_size,
+                         "indicator_spacing", &indicator_spacing,
+                         NULL);
+
+    int size = indicator_size + indicator_spacing * 2;
+    return wxSize(size, size);
+}
+
 void
 wxRendererGTK::DrawCheckBox(wxWindow *WXUNUSED(win),
                             wxDC& dc,
                             const wxRect& rect,
                             int flags )
 {
-    GtkWidget *button = GetCheckButtonWidget();
+    GtkWidget *button = wxGTKPrivate::GetCheckButtonWidget();
 
     GdkWindow* gdk_window = NULL;
 #if wxUSE_NEW_DC
@@ -566,6 +426,12 @@ wxRendererGTK::DrawCheckBox(wxWindow *WXUNUSED(win),
     wxASSERT_MSG( gdk_window,
                   wxT("cannot use wxRendererNative on wxDC of this type") );
 
+    gint indicator_size, indicator_spacing;
+    gtk_widget_style_get(button,
+                         "indicator_size", &indicator_size,
+                         "indicator_spacing", &indicator_spacing,
+                         NULL);
+
     GtkStateType state;
 
     if ( flags & wxCONTROL_PRESSED )
@@ -586,9 +452,9 @@ wxRendererGTK::DrawCheckBox(wxWindow *WXUNUSED(win),
         NULL,
         button,
         "cellcheck",
-        dc.LogicalToDeviceX(rect.x)+2,
-        dc.LogicalToDeviceY(rect.y)+3,
-        13, 13
+        dc.LogicalToDeviceX(rect.x) + indicator_spacing,
+        dc.LogicalToDeviceY(rect.y) + indicator_spacing,
+        indicator_size, indicator_size
     );
 }
 
@@ -598,7 +464,7 @@ wxRendererGTK::DrawPushButton(wxWindow *WXUNUSED(win),
                               const wxRect& rect,
                               int flags)
 {
-    GtkWidget *button = GetButtonWidget();
+    GtkWidget *button = wxGTKPrivate::GetButtonWidget();
 
     GdkWindow* gdk_window = NULL;
 #if wxUSE_NEW_DC
index 30576aa367b60abcfb375be53d880ba7674e2b0f..841c01225f7a2591ff8068b8e518c6e103ec55ae 100644 (file)
@@ -8,6 +8,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 #include "wx/defs.h"
+#include "wx/gtk/private.h"
 #include "wx/gtk/private/win_gtk.h"
 
 /*
@@ -382,8 +383,6 @@ void wxPizza::scroll(int dx, int dy)
     }
 }
 
-extern GtkWidget *GetEntryWidget();
-
 void wxPizza::get_border_widths(int& x, int& y)
 {
     x = y = 0;
@@ -391,7 +390,7 @@ void wxPizza::get_border_widths(int& x, int& y)
         x = y = 1;
     else if (m_border_style)
     {
-        GtkWidget *entry_widget = GetEntryWidget();
+        GtkWidget *entry_widget = wxGTKPrivate::GetEntryWidget();
         if (entry_widget->style)
         {
             x = entry_widget->style->xthickness;
index 177777000b1dc7227b896efa4a5f87cfdf6a521d..f62c235b8b7170b780c1c25004a586d2983f5741 100644 (file)
@@ -301,8 +301,6 @@ gtk_window_expose_callback( GtkWidget* widget,
 
 #ifndef __WXUNIVERSAL__
 
-GtkWidget* GetEntryWidget();
-
 extern "C" {
 static gboolean
 expose_event_border(GtkWidget* widget, GdkEventExpose* gdk_event, wxWindow* win)
@@ -343,7 +341,7 @@ expose_event_border(GtkWidget* widget, GdkEventExpose* gdk_event, wxWindow* win)
             // for scrollable ones
             detail = "viewport";
 
-        GtkWidget* styleWidget = GetEntryWidget();
+        GtkWidget* styleWidget = wxGTKPrivate::GetEntryWidget();
         gtk_paint_shadow(
            styleWidget->style, gdk_event->window, GTK_STATE_NORMAL,
            shadow, NULL, styleWidget, detail, x, y, w, h);
index 5ffa82c1c5a07b7be67e0d304162cc8045c3fc9c..c2b4173972b7683b7858a3771978a98d409e74e4 100644 (file)
@@ -122,6 +122,8 @@ public:
                                const wxRect& rect,
                                int flags = 0);
 
+    virtual wxSize GetCheckBoxSize(wxWindow *win);
+
     virtual int GetHeaderButtonHeight(wxWindow *win);
 
 private:
@@ -295,6 +297,12 @@ void wxRendererMSW::DrawFocusRect(wxWindow * WXUNUSED(win),
     ::DrawFocusRect(GetHdcOf(*((wxMSWDCImpl*)dc.GetImpl())), &rc);
 }
 
+wxSize wxRendererMSW::GetCheckBoxSize(wxWindow * WXUNUSED(win))
+{
+    return wxSize(::GetSystemMetrics(SM_CXMENUCHECK),
+                  ::GetSystemMetrics(SM_CYMENUCHECK));
+}
+
 int wxRendererMSW::GetHeaderButtonHeight(wxWindow * WXUNUSED(win))
 {
     // some "reasonable" value returned in case of error, it doesn't really
@@ -560,7 +568,7 @@ wxRendererXP::DrawItemSelectionRect(wxWindow *win,
     dc.SetBrush(brush);
     dc.SetPen(*wxTRANSPARENT_PEN);
     dc.DrawRectangle( rect );
-    
+
     if ((flags & wxCONTROL_FOCUSED) && (flags & wxCONTROL_CURRENT))
         DrawFocusRect( win, dc, rect, flags );
 }
index bac3e528c4a04ed06c7a798a759705109433d9c5..c69359628231c3bdae86757a08d8e0bfa92e63c0 100644 (file)
@@ -62,6 +62,8 @@ public:
                               const wxRect& rect,
                               int flags = 0);
 
+    virtual wxSize GetCheckBoxSize(wxWindow* win);
+
     virtual void DrawComboBoxDropButton(wxWindow *win,
                                         wxDC& dc,
                                         const wxRect& rect,
@@ -344,6 +346,27 @@ wxRendererMac::DrawCheckBox(wxWindow *win,
                        kThemeCheckBox, kThemeAdornmentNone);
 }
 
+wxSize wxRendererMac::GetCheckBoxSize(wxWindow* WXUNUSED(win))
+{
+    wxSize size;
+    SInt32 width, height;
+    OSStatus errStatus;
+
+    errStatus = GetThemeMetric(kThemeMetricCheckBoxWidth, &width);
+    if (errStatus == noErr)
+    {
+        size.SetWidth(width);
+    }
+
+    errStatus = GetThemeMetric(kThemeMetricCheckBoxHeight, &height);
+    if (errStatus == noErr)
+    {
+        size.SetHeight(height);
+    }
+
+    return size;
+}
+
 void
 wxRendererMac::DrawComboBoxDropButton(wxWindow *win,
                               wxDC& dc,
@@ -405,4 +428,3 @@ wxRendererMac::DrawFocusRect(wxWindow* win, wxDC& dc, const wxRect& rect, int fl
 
     HIThemeDrawFocusRect( &cgrect , true , cgContext , kHIThemeOrientationNormal ) ;
 }
-