Added native GTK+ sash drawing to wxAUI.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40957 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2006-09-02 11:50:48 +00:00
parent a15585e0b2
commit 32205ebbce
2 changed files with 63 additions and 15 deletions

View File

@@ -38,6 +38,13 @@
#include "wx/mac/private.h" #include "wx/mac/private.h"
#endif #endif
#ifdef __WXGTK__
#include <gtk/gtk.h>
#include "wx/gtk/win_gtk.h"
#include "wx/renderer.h"
#endif
// -- wxDefaultDockArt class implementation -- // -- wxDefaultDockArt class implementation --
// wxDefaultDockArt is an art provider class which does all of the drawing for // 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); m_active_pin_bitmap = BitmapFromBits(pin_bits, 16, 16, m_active_caption_text_colour);
// default metric values // default metric values
#ifdef __WXMAC__ #if defined(__WXMAC__)
SInt32 height; SInt32 height;
GetThemeMetric( kThemeMetricSmallPaneSplitterHeight , &height ); GetThemeMetric( kThemeMetricSmallPaneSplitterHeight , &height );
m_sash_size = height; m_sash_size = height;
#elif defined(__WXGTK__)
m_sash_size = wxRendererNative::Get().GetSplitterParams(NULL).widthSash;
#else #else
m_sash_size = 4; m_sash_size = 4;
#endif #endif
@@ -297,9 +306,9 @@ wxFont wxDefaultDockArt::GetFont(int id)
return wxNullFont; 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 ); HIRect splitterRect = CGRectMake( rect.x , rect.y , rect.width , rect.height );
CGContextRef cgContext ; CGContextRef cgContext ;
#if wxMAC_USE_CORE_GRAPHICS #if wxMAC_USE_CORE_GRAPHICS
@@ -323,6 +332,45 @@ void wxDefaultDockArt::DrawSash(wxDC& dc, int, const wxRect& rect)
QDEndCGContext( (CGrafPtr) dc.m_macPort , &cgContext ) ; QDEndCGContext( (CGrafPtr) dc.m_macPort , &cgContext ) ;
#endif #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 #else
dc.SetPen(*wxTRANSPARENT_PEN); dc.SetPen(*wxTRANSPARENT_PEN);
dc.SetBrush(m_sash_brush); 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); dc.SetPen(*wxTRANSPARENT_PEN);
#ifdef __WXMAC__ #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); 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) wxPaneInfo& pane)
{ {
dc.SetPen(m_border_pen); 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 wxString& text,
const wxRect& rect, const wxRect& rect,
wxPaneInfo& pane) wxPaneInfo& pane)
@@ -451,7 +499,7 @@ void wxDefaultDockArt::DrawCaption(wxDC& dc,
dc.DestroyClippingRegion(); dc.DestroyClippingRegion();
} }
void wxDefaultDockArt::DrawGripper(wxDC& dc, void wxDefaultDockArt::DrawGripper(wxDC& dc, wxWindow *window,
const wxRect& rect, const wxRect& rect,
wxPaneInfo& pane) 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,
int button_state, int button_state,
const wxRect& _rect, const wxRect& _rect,

View File

@@ -3163,22 +3163,22 @@ void wxFrameManager::OnRender(wxFrameManagerEvent& evt)
{ {
case wxDockUIPart::typeDockSizer: case wxDockUIPart::typeDockSizer:
case wxDockUIPart::typePaneSizer: case wxDockUIPart::typePaneSizer:
m_art->DrawSash(*dc, part.orientation, part.rect); m_art->DrawSash(*dc, m_frame, part.orientation, part.rect);
break; break;
case wxDockUIPart::typeBackground: case wxDockUIPart::typeBackground:
m_art->DrawBackground(*dc, part.orientation, part.rect); m_art->DrawBackground(*dc, m_frame, part.orientation, part.rect);
break; break;
case wxDockUIPart::typeCaption: 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; break;
case wxDockUIPart::typeGripper: case wxDockUIPart::typeGripper:
m_art->DrawGripper(*dc, part.rect, *part.pane); m_art->DrawGripper(*dc, m_frame, part.rect, *part.pane);
break; break;
case wxDockUIPart::typePaneBorder: case wxDockUIPart::typePaneBorder:
m_art->DrawBorder(*dc, part.rect, *part.pane); m_art->DrawBorder(*dc, m_frame, part.rect, *part.pane);
break; break;
case wxDockUIPart::typePaneButton: 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); wxAUI_BUTTON_STATE_NORMAL, part.rect, *part.pane);
break; break;
} }
@@ -3329,7 +3329,7 @@ void wxFrameManager::UpdateButtonOnScreen(wxDockUIPart* button_ui_part,
if (pt.x != 0 || pt.y != 0) if (pt.x != 0 || pt.y != 0)
cdc.SetDeviceOrigin(pt.x, pt.y); cdc.SetDeviceOrigin(pt.x, pt.y);
m_art->DrawPaneButton(cdc, m_art->DrawPaneButton(cdc, m_frame,
button_ui_part->button->button_id, button_ui_part->button->button_id,
state, state,
button_ui_part->rect, button_ui_part->rect,