X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ff03f5670752dcc897e6f46872fa1fc51c9ebfa0..5df663afecdfe2db0447064ea64a4dd8ecbbf889:/src/aui/dockart.cpp diff --git a/src/aui/dockart.cpp b/src/aui/dockart.cpp index 933390a24d..9e3e793c6e 100644 --- a/src/aui/dockart.cpp +++ b/src/aui/dockart.cpp @@ -36,16 +36,24 @@ #ifdef __WXMAC__ #include "wx/mac/private.h" +#include "wx/graphics.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 -// wxFrameManager. This allows the library caller to customize the dock art +// -- wxAuiDefaultDockArt class implementation -- + +// wxAuiDefaultDockArt is an art provider class which does all of the drawing for +// wxAuiManager. This allows the library caller to customize the dock art // (probably by deriving from this class), or to completely replace all drawing // with custom dock art (probably by writing a new stand-alone class derived -// from the wxDockArt base class). The active dock art class can be set via -// wxFrameManager::SetDockArt() +// from the wxAuiDockArt base class). The active dock art class can be set via +// wxAuiManager::SetDockArt() // StepColour() it a utility function that simply darkens @@ -76,8 +84,8 @@ static wxBitmap BitmapFromBits(const unsigned char bits[], int w, int h, const wxColour& color) { wxImage img = wxBitmap((const char*)bits, w, h).ConvertToImage(); - img.Replace(255,255,255,123,123,123); - img.Replace(0,0,0,color.Red(),color.Green(),color.Blue()); + img.Replace(0,0,0,123,123,123); + img.Replace(255,255,255,color.Red(),color.Green(),color.Blue()); img.SetMaskColour(123,123,123); return wxBitmap(img); } @@ -118,7 +126,7 @@ static void DrawGradientRectangle(wxDC& dc, } -wxDefaultDockArt::wxDefaultDockArt() +wxAuiDefaultDockArt::wxAuiDefaultDockArt() { #ifdef __WXMAC__ wxBrush toolbarbrush; @@ -179,6 +187,16 @@ wxDefaultDockArt::wxDefaultDockArt() 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; #endif + static unsigned char maximize_bits[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xf0, 0xf7, 0xf7, 0x07, 0xf0, + 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0x07, 0xf0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + + static unsigned char restore_bits[]={ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xf0, 0x1f, 0xf0, 0xdf, 0xf7, + 0x07, 0xf4, 0x07, 0xf4, 0xf7, 0xf5, 0xf7, 0xf1, 0xf7, 0xfd, 0xf7, 0xfd, + 0x07, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + static unsigned char pin_bits[]={ 0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0xfc,0xdf,0xfc,0xdf,0xfc, 0xdf,0xfc,0xdf,0xfc,0xdf,0xfc,0x0f,0xf8,0x7f,0xff,0x7f,0xff, @@ -186,22 +204,38 @@ wxDefaultDockArt::wxDefaultDockArt() #ifdef __WXMAC__ m_inactive_close_bitmap = BitmapFromBits(close_bits, 16, 16, *wxWHITE); + m_active_close_bitmap = BitmapFromBits(close_bits, 16, 16, *wxWHITE ); #else m_inactive_close_bitmap = BitmapFromBits(close_bits, 16, 16, m_inactive_caption_text_colour); + m_active_close_bitmap = BitmapFromBits(close_bits, 16, 16, m_active_caption_text_colour); #endif - m_inactive_pin_bitmap = BitmapFromBits(pin_bits, 16, 16, m_inactive_caption_text_colour); + #ifdef __WXMAC__ - m_active_close_bitmap = BitmapFromBits(close_bits, 16, 16, *wxWHITE ); + m_inactive_maximize_bitmap = BitmapFromBits(maximize_bits, 16, 16, *wxWHITE); + m_active_maximize_bitmap = BitmapFromBits(maximize_bits, 16, 16, *wxWHITE ); #else - m_active_close_bitmap = BitmapFromBits(close_bits, 16, 16, m_active_caption_text_colour); + m_inactive_maximize_bitmap = BitmapFromBits(maximize_bits, 16, 16, m_inactive_caption_text_colour); + m_active_maximize_bitmap = BitmapFromBits(maximize_bits, 16, 16, m_active_caption_text_colour); +#endif + +#ifdef __WXMAC__ + m_inactive_restore_bitmap = BitmapFromBits(restore_bits, 16, 16, *wxWHITE); + m_active_restore_bitmap = BitmapFromBits(restore_bits, 16, 16, *wxWHITE ); +#else + m_inactive_restore_bitmap = BitmapFromBits(restore_bits, 16, 16, m_inactive_caption_text_colour); + m_active_restore_bitmap = BitmapFromBits(restore_bits, 16, 16, m_active_caption_text_colour); #endif + + m_inactive_pin_bitmap = BitmapFromBits(pin_bits, 16, 16, m_inactive_caption_text_colour); 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 @@ -212,7 +246,7 @@ wxDefaultDockArt::wxDefaultDockArt() m_gradient_type = wxAUI_GRADIENT_VERTICAL; } -int wxDefaultDockArt::GetMetric(int id) +int wxAuiDefaultDockArt::GetMetric(int id) { switch (id) { @@ -228,7 +262,7 @@ int wxDefaultDockArt::GetMetric(int id) return 0; } -void wxDefaultDockArt::SetMetric(int id, int new_val) +void wxAuiDefaultDockArt::SetMetric(int id, int new_val) { switch (id) { @@ -242,7 +276,7 @@ void wxDefaultDockArt::SetMetric(int id, int new_val) } } -wxColour wxDefaultDockArt::GetColour(int id) +wxColour wxAuiDefaultDockArt::GetColour(int id) { switch (id) { @@ -262,7 +296,7 @@ wxColour wxDefaultDockArt::GetColour(int id) return wxColour(); } -void wxDefaultDockArt::SetColour(int id, const wxColor& colour) +void wxAuiDefaultDockArt::SetColour(int id, const wxColor& colour) { switch (id) { @@ -284,26 +318,26 @@ void wxDefaultDockArt::SetColour(int id, const wxColor& colour) } } -void wxDefaultDockArt::SetFont(int id, const wxFont& font) +void wxAuiDefaultDockArt::SetFont(int id, const wxFont& font) { if (id == wxAUI_ART_CAPTION_FONT) m_caption_font = font; } -wxFont wxDefaultDockArt::GetFont(int id) +wxFont wxAuiDefaultDockArt::GetFont(int id) { if (id == wxAUI_ART_CAPTION_FONT) return m_caption_font; return wxNullFont; } -void wxDefaultDockArt::DrawSash(wxDC& dc, int, const wxRect& rect) +void wxAuiDefaultDockArt::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 - cgContext = ((wxMacCGContext*)(dc.GetGraphicContext()))->GetNativeContext() ; + cgContext = (CGContextRef) dc.GetGraphicsContext()->GetNativeContext() ; #else Rect bounds ; GetPortBounds( (CGrafPtr) dc.m_macPort , &bounds ) ; @@ -323,7 +357,48 @@ 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 + wxUnusedVar(window); + wxUnusedVar(orientation); dc.SetPen(*wxTRANSPARENT_PEN); dc.SetBrush(m_sash_brush); dc.DrawRectangle(rect.x, rect.y, rect.width, rect.height); @@ -331,7 +406,7 @@ void wxDefaultDockArt::DrawSash(wxDC& dc, int, const wxRect& rect) } -void wxDefaultDockArt::DrawBackground(wxDC& dc, int, const wxRect& rect) +void wxAuiDefaultDockArt::DrawBackground(wxDC& dc, wxWindow *WXUNUSED(window), int, const wxRect& rect) { dc.SetPen(*wxTRANSPARENT_PEN); #ifdef __WXMAC__ @@ -344,8 +419,8 @@ 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, - wxPaneInfo& pane) +void wxAuiDefaultDockArt::DrawBorder(wxDC& dc, wxWindow *WXUNUSED(window), const wxRect& _rect, + wxAuiPaneInfo& pane) { dc.SetPen(m_border_pen); dc.SetBrush(*wxTRANSPARENT_BRUSH); @@ -379,7 +454,7 @@ void wxDefaultDockArt::DrawBorder(wxDC& dc, const wxRect& _rect, } -void wxDefaultDockArt::DrawCaptionBackground(wxDC& dc, const wxRect& rect, bool active) +void wxAuiDefaultDockArt::DrawCaptionBackground(wxDC& dc, const wxRect& rect, bool active) { if (m_gradient_type == wxAUI_GRADIENT_NONE) { @@ -426,18 +501,18 @@ void wxDefaultDockArt::DrawCaptionBackground(wxDC& dc, const wxRect& rect, bool } -void wxDefaultDockArt::DrawCaption(wxDC& dc, +void wxAuiDefaultDockArt::DrawCaption(wxDC& dc, wxWindow *WXUNUSED(window), const wxString& text, const wxRect& rect, - wxPaneInfo& pane) + wxAuiPaneInfo& pane) { dc.SetPen(*wxTRANSPARENT_PEN); dc.SetFont(m_caption_font); DrawCaptionBackground(dc, rect, - (pane.state & wxPaneInfo::optionActive)?true:false); + (pane.state & wxAuiPaneInfo::optionActive)?true:false); - if (pane.state & wxPaneInfo::optionActive) + if (pane.state & wxAuiPaneInfo::optionActive) dc.SetTextForeground(m_active_caption_text_colour); else dc.SetTextForeground(m_inactive_caption_text_colour); @@ -451,9 +526,9 @@ void wxDefaultDockArt::DrawCaption(wxDC& dc, dc.DestroyClippingRegion(); } -void wxDefaultDockArt::DrawGripper(wxDC& dc, +void wxAuiDefaultDockArt::DrawGripper(wxDC& dc, wxWindow *WXUNUSED(window), const wxRect& rect, - wxPaneInfo& pane) + wxAuiPaneInfo& pane) { dc.SetPen(*wxTRANSPARENT_PEN); dc.SetBrush(m_gripper_brush); @@ -502,11 +577,11 @@ void wxDefaultDockArt::DrawGripper(wxDC& dc, } } -void wxDefaultDockArt::DrawPaneButton(wxDC& dc, +void wxAuiDefaultDockArt::DrawPaneButton(wxDC& dc, wxWindow *WXUNUSED(window), int button, int button_state, const wxRect& _rect, - wxPaneInfo& pane) + wxAuiPaneInfo& pane) { wxRect rect = _rect; @@ -519,7 +594,7 @@ void wxDefaultDockArt::DrawPaneButton(wxDC& dc, if (button_state == wxAUI_BUTTON_STATE_HOVER || button_state == wxAUI_BUTTON_STATE_PRESSED) { - if (pane.state & wxPaneInfo::optionActive) + if (pane.state & wxAuiPaneInfo::optionActive) { dc.SetBrush(wxBrush(StepColour(m_active_caption_colour, 120))); dc.SetPen(wxPen(StepColour(m_active_caption_colour, 70))); @@ -538,14 +613,27 @@ void wxDefaultDockArt::DrawPaneButton(wxDC& dc, switch (button) { default: - case wxPaneInfo::buttonClose: - if (pane.state & wxPaneInfo::optionActive) + case wxAUI_BUTTON_MAXIMIZE_RESTORE: + if (pane.IsMaximized()) { + if (pane.state & wxAuiPaneInfo::optionActive) + bmp = m_active_restore_bitmap; + else + bmp = m_inactive_restore_bitmap; + } else { + if (pane.state & wxAuiPaneInfo::optionActive) + bmp = m_active_maximize_bitmap; + else + bmp = m_inactive_maximize_bitmap; + } + break; + case wxAUI_BUTTON_CLOSE: + if (pane.state & wxAuiPaneInfo::optionActive) bmp = m_active_close_bitmap; else bmp = m_inactive_close_bitmap; break; - case wxPaneInfo::buttonPin: - if (pane.state & wxPaneInfo::optionActive) + case wxAUI_BUTTON_PIN: + if (pane.state & wxAuiPaneInfo::optionActive) bmp = m_active_pin_bitmap; else bmp = m_inactive_pin_bitmap;