From 32205ebbce7870cdfc61467a58430e8037fe1e8c Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Sat, 2 Sep 2006 11:50:48 +0000 Subject: [PATCH] Added native GTK+ sash drawing to wxAUI. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40957 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/aui/dockart.cpp | 64 +++++++++++++++++++++++++++++++++++----- src/aui/framemanager.cpp | 14 ++++----- 2 files changed, 63 insertions(+), 15 deletions(-) diff --git a/src/aui/dockart.cpp b/src/aui/dockart.cpp index b0867750de..1045f438e0 100644 --- a/src/aui/dockart.cpp +++ b/src/aui/dockart.cpp @@ -38,6 +38,13 @@ #include "wx/mac/private.h" #endif +#ifdef __WXGTK__ +#include +#include "wx/gtk/win_gtk.h" +#include "wx/renderer.h" +#endif + + // -- wxDefaultDockArt class implementation -- // wxDefaultDockArt is an art provider class which does all of the drawing for @@ -198,10 +205,12 @@ wxDefaultDockArt::wxDefaultDockArt() m_active_pin_bitmap = BitmapFromBits(pin_bits, 16, 16, m_active_caption_text_colour); // default metric values -#ifdef __WXMAC__ +#if defined(__WXMAC__) SInt32 height; GetThemeMetric( kThemeMetricSmallPaneSplitterHeight , &height ); m_sash_size = height; +#elif defined(__WXGTK__) + m_sash_size = wxRendererNative::Get().GetSplitterParams(NULL).widthSash; #else m_sash_size = 4; #endif @@ -297,9 +306,9 @@ wxFont wxDefaultDockArt::GetFont(int id) return wxNullFont; } -void wxDefaultDockArt::DrawSash(wxDC& dc, int, const wxRect& rect) +void wxDefaultDockArt::DrawSash(wxDC& dc, wxWindow *window, int orientation, const wxRect& rect) { -#ifdef __WXMAC__ +#if defined(__WXMAC__) HIRect splitterRect = CGRectMake( rect.x , rect.y , rect.width , rect.height ); CGContextRef cgContext ; #if wxMAC_USE_CORE_GRAPHICS @@ -323,6 +332,45 @@ void wxDefaultDockArt::DrawSash(wxDC& dc, int, const wxRect& rect) QDEndCGContext( (CGrafPtr) dc.m_macPort , &cgContext ) ; #endif +#elif defined(__WXGTK__) + + GdkRectangle gdk_rect; + if (orientation == wxVERTICAL ) + { + gdk_rect.x = rect.x; + gdk_rect.y = rect.y; + gdk_rect.width = m_sash_size; + gdk_rect.height = rect.height; + } + else + { + gdk_rect.x = rect.x; + gdk_rect.y = rect.y; + gdk_rect.width = rect.width; + gdk_rect.height = m_sash_size; + } + + if (!window) return; + if (!window->m_wxwindow) return; + if (!GTK_PIZZA(window->m_wxwindow)->bin_window) return; + + gtk_paint_handle + ( + window->m_wxwindow->style, + GTK_PIZZA(window->m_wxwindow)->bin_window, + // flags & wxCONTROL_CURRENT ? GTK_STATE_PRELIGHT : GTK_STATE_NORMAL, + GTK_STATE_NORMAL, + GTK_SHADOW_NONE, + NULL /* no clipping */, + window->m_wxwindow, + "paned", + rect.x, + rect.y, + rect.width, + rect.height, + (orientation == wxVERTICAL) ? GTK_ORIENTATION_VERTICAL : GTK_ORIENTATION_HORIZONTAL + ); + #else dc.SetPen(*wxTRANSPARENT_PEN); dc.SetBrush(m_sash_brush); @@ -331,7 +379,7 @@ void wxDefaultDockArt::DrawSash(wxDC& dc, int, const wxRect& rect) } -void wxDefaultDockArt::DrawBackground(wxDC& dc, int, const wxRect& rect) +void wxDefaultDockArt::DrawBackground(wxDC& dc, wxWindow *window, int, const wxRect& rect) { dc.SetPen(*wxTRANSPARENT_PEN); #ifdef __WXMAC__ @@ -344,7 +392,7 @@ void wxDefaultDockArt::DrawBackground(wxDC& dc, int, const wxRect& rect) dc.DrawRectangle(rect.x, rect.y, rect.width, rect.height); } -void wxDefaultDockArt::DrawBorder(wxDC& dc, const wxRect& _rect, +void wxDefaultDockArt::DrawBorder(wxDC& dc, wxWindow *window, const wxRect& _rect, wxPaneInfo& pane) { dc.SetPen(m_border_pen); @@ -426,7 +474,7 @@ void wxDefaultDockArt::DrawCaptionBackground(wxDC& dc, const wxRect& rect, bool } -void wxDefaultDockArt::DrawCaption(wxDC& dc, +void wxDefaultDockArt::DrawCaption(wxDC& dc, wxWindow *window, const wxString& text, const wxRect& rect, wxPaneInfo& pane) @@ -451,7 +499,7 @@ void wxDefaultDockArt::DrawCaption(wxDC& dc, dc.DestroyClippingRegion(); } -void wxDefaultDockArt::DrawGripper(wxDC& dc, +void wxDefaultDockArt::DrawGripper(wxDC& dc, wxWindow *window, const wxRect& rect, wxPaneInfo& pane) { @@ -502,7 +550,7 @@ void wxDefaultDockArt::DrawGripper(wxDC& dc, } } -void wxDefaultDockArt::DrawPaneButton(wxDC& dc, +void wxDefaultDockArt::DrawPaneButton(wxDC& dc, wxWindow *window, int button, int button_state, const wxRect& _rect, diff --git a/src/aui/framemanager.cpp b/src/aui/framemanager.cpp index 9ae35c3b1e..495e462ad8 100644 --- a/src/aui/framemanager.cpp +++ b/src/aui/framemanager.cpp @@ -3163,22 +3163,22 @@ void wxFrameManager::OnRender(wxFrameManagerEvent& evt) { case wxDockUIPart::typeDockSizer: case wxDockUIPart::typePaneSizer: - m_art->DrawSash(*dc, part.orientation, part.rect); + m_art->DrawSash(*dc, m_frame, part.orientation, part.rect); break; case wxDockUIPart::typeBackground: - m_art->DrawBackground(*dc, part.orientation, part.rect); + m_art->DrawBackground(*dc, m_frame, part.orientation, part.rect); break; case wxDockUIPart::typeCaption: - m_art->DrawCaption(*dc, part.pane->caption, part.rect, *part.pane); + m_art->DrawCaption(*dc, m_frame, part.pane->caption, part.rect, *part.pane); break; case wxDockUIPart::typeGripper: - m_art->DrawGripper(*dc, part.rect, *part.pane); + m_art->DrawGripper(*dc, m_frame, part.rect, *part.pane); break; case wxDockUIPart::typePaneBorder: - m_art->DrawBorder(*dc, part.rect, *part.pane); + m_art->DrawBorder(*dc, m_frame, part.rect, *part.pane); break; case wxDockUIPart::typePaneButton: - m_art->DrawPaneButton(*dc, part.button->button_id, + m_art->DrawPaneButton(*dc, m_frame, part.button->button_id, wxAUI_BUTTON_STATE_NORMAL, part.rect, *part.pane); break; } @@ -3329,7 +3329,7 @@ void wxFrameManager::UpdateButtonOnScreen(wxDockUIPart* button_ui_part, if (pt.x != 0 || pt.y != 0) cdc.SetDeviceOrigin(pt.x, pt.y); - m_art->DrawPaneButton(cdc, + m_art->DrawPaneButton(cdc, m_frame, button_ui_part->button->button_id, state, button_ui_part->rect, -- 2.45.2