X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/50acee04cdaf2fec9f3fa4cd0035ff2d9ed7d53a..e17b6377be593ce71d722beb3cdcffb67baccf00:/src/aui/dockart.cpp diff --git a/src/aui/dockart.cpp b/src/aui/dockart.cpp index 2890dbd432..f26a5bbaf1 100644 --- a/src/aui/dockart.cpp +++ b/src/aui/dockart.cpp @@ -1,10 +1,10 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: dockart.cpp +// Name: src/aui/dockart.cpp // Purpose: wxaui: wx advanced user interface - docking window manager // Author: Benjamin I. Williams // Modified by: // Created: 2005-05-17 -// RCS-ID: +// RCS-ID: $Id$ // Copyright: (C) Copyright 2005-2006, Kirix Corporation, All Rights Reserved // Licence: wxWindows Library Licence, Version 3.1 /////////////////////////////////////////////////////////////////////////////// @@ -25,14 +25,26 @@ #if wxUSE_AUI -#include "wx/image.h" #include "wx/aui/framemanager.h" #include "wx/aui/dockart.h" #ifndef WX_PRECOMP -// #include "wx/log.h" + #include "wx/settings.h" + #include "wx/dcclient.h" + #include "wx/image.h" #endif +#ifdef __WXMAC__ +#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 @@ -48,9 +60,9 @@ static wxColor StepColour(const wxColor& c, int percent) { int r = c.Red(), g = c.Green(), b = c.Blue(); - return wxColour(wxMin((r*percent)/100,255), - wxMin((g*percent)/100,255), - wxMin((b*percent)/100,255)); + return wxColour((unsigned char)wxMin((r*percent)/100,255), + (unsigned char)wxMin((g*percent)/100,255), + (unsigned char)wxMin((b*percent)/100,255)); } static wxColor LightContrastColour(const wxColour& c) @@ -71,8 +83,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); } @@ -100,7 +112,9 @@ static void DrawGradientRectangle(wxDC& dc, int g = start_color.Green() + ((i*gd*100)/high)/100; int b = start_color.Blue() + ((i*bd*100)/high)/100; - wxPen p(wxColor(r,g,b)); + wxPen p(wxColor((unsigned char)r, + (unsigned char)g, + (unsigned char)b)); dc.SetPen(p); if (direction == wxAUI_GRADIENT_VERTICAL) @@ -120,7 +134,7 @@ wxDefaultDockArt::wxDefaultDockArt() #else wxColor base_color = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE); #endif - + wxColor darker1_color = StepColour(base_color, 85); wxColor darker2_color = StepColour(base_color, 70); wxColor darker3_color = StepColour(base_color, 60); @@ -155,11 +169,16 @@ wxDefaultDockArt::wxDefaultDockArt() #endif // some built in bitmaps -#ifdef __WXMAC__ +#if defined( __WXMAC__ ) static unsigned char close_bits[]={ 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFE, 0x03, 0xF8, 0x01, 0xF0, 0x19, 0xF3, 0xB8, 0xE3, 0xF0, 0xE1, 0xE0, 0xE0, 0xF0, 0xE1, 0xB8, 0xE3, 0x19, 0xF3, 0x01, 0xF0, 0x03, 0xF8, 0x0F, 0xFE, 0xFF, 0xFF }; +#elif defined( __WXGTK__) + static unsigned char close_bits[]={ + 0xff, 0xff, 0xff, 0xff, 0x07, 0xf0, 0xfb, 0xef, 0xdb, 0xed, 0x8b, 0xe8, + 0x1b, 0xec, 0x3b, 0xee, 0x1b, 0xec, 0x8b, 0xe8, 0xdb, 0xed, 0xfb, 0xef, + 0x07, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; #else static unsigned char close_bits[]={ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xfb,0xcf,0xf9, @@ -171,7 +190,7 @@ wxDefaultDockArt::wxDefaultDockArt() 0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0xfc,0xdf,0xfc,0xdf,0xfc, 0xdf,0xfc,0xdf,0xfc,0xdf,0xfc,0x0f,0xf8,0x7f,0xff,0x7f,0xff, 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; - + #ifdef __WXMAC__ m_inactive_close_bitmap = BitmapFromBits(close_bits, 16, 16, *wxWHITE); #else @@ -186,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 @@ -234,16 +255,16 @@ wxColour wxDefaultDockArt::GetColour(int id) { switch (id) { - case wxAUI_ART_BACKGROUND_COLOUR: return m_background_brush.GetColour(); break; - case wxAUI_ART_SASH_COLOUR: return m_sash_brush.GetColour(); break; - case wxAUI_ART_INACTIVE_CAPTION_COLOUR: return m_inactive_caption_colour; break; - case wxAUI_ART_INACTIVE_CAPTION_GRADIENT_COLOUR: return m_inactive_caption_gradient_colour; break; - case wxAUI_ART_INACTIVE_CAPTION_TEXT_COLOUR: return m_inactive_caption_text_colour; break; - case wxAUI_ART_ACTIVE_CAPTION_COLOUR: return m_active_caption_colour; break; - case wxAUI_ART_ACTIVE_CAPTION_GRADIENT_COLOUR: return m_active_caption_gradient_colour; break; - case wxAUI_ART_ACTIVE_CAPTION_TEXT_COLOUR: return m_active_caption_text_colour; break; - case wxAUI_ART_BORDER_COLOUR: return m_border_pen.GetColour(); break; - case wxAUI_ART_GRIPPER_COLOUR: return m_gripper_brush.GetColour(); break; + case wxAUI_ART_BACKGROUND_COLOUR: return m_background_brush.GetColour(); + case wxAUI_ART_SASH_COLOUR: return m_sash_brush.GetColour(); + case wxAUI_ART_INACTIVE_CAPTION_COLOUR: return m_inactive_caption_colour; + case wxAUI_ART_INACTIVE_CAPTION_GRADIENT_COLOUR: return m_inactive_caption_gradient_colour; + case wxAUI_ART_INACTIVE_CAPTION_TEXT_COLOUR: return m_inactive_caption_text_colour; + case wxAUI_ART_ACTIVE_CAPTION_COLOUR: return m_active_caption_colour; + case wxAUI_ART_ACTIVE_CAPTION_GRADIENT_COLOUR: return m_active_caption_gradient_colour; + case wxAUI_ART_ACTIVE_CAPTION_TEXT_COLOUR: return m_active_caption_text_colour; + case wxAUI_ART_BORDER_COLOUR: return m_border_pen.GetColour(); + case wxAUI_ART_GRIPPER_COLOUR: return m_gripper_brush.GetColour(); default: wxFAIL_MSG(wxT("Invalid Metric Ordinal")); break; } @@ -285,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 @@ -299,19 +320,60 @@ void wxDefaultDockArt::DrawSash(wxDC& dc, int, const wxRect& rect) CGContextTranslateCTM( cgContext , 0 , bounds.bottom - bounds.top ) ; CGContextScaleCTM( cgContext , 1 , -1 ) ; #endif - + HIThemeSplitterDrawInfo drawInfo ; drawInfo.version = 0 ; drawInfo.state = kThemeStateActive ; drawInfo.adornment = kHIThemeSplitterAdornmentNone ; - HIThemeDrawPaneSplitter( &splitterRect , &drawInfo , cgContext , kHIThemeOrientationNormal ) ; - + HIThemeDrawPaneSplitter( &splitterRect , &drawInfo , cgContext , kHIThemeOrientationNormal ) ; + #if wxMAC_USE_CORE_GRAPHICS #else 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); @@ -319,7 +381,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 *WXUNUSED(window), int, const wxRect& rect) { dc.SetPen(*wxTRANSPARENT_PEN); #ifdef __WXMAC__ @@ -332,7 +394,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 *WXUNUSED(window), const wxRect& _rect, wxPaneInfo& pane) { dc.SetPen(m_border_pen); @@ -348,7 +410,7 @@ void wxDefaultDockArt::DrawBorder(wxDC& dc, const wxRect& _rect, dc.SetPen(*wxWHITE_PEN); dc.DrawLine(rect.x, rect.y, rect.x+rect.width, rect.y); dc.DrawLine(rect.x, rect.y, rect.x, rect.y+rect.height); - dc.SetPen(m_border_pen); + dc.SetPen(m_border_pen); dc.DrawLine(rect.x, rect.y+rect.height-1, rect.x+rect.width, rect.y+rect.height-1); dc.DrawLine(rect.x+rect.width-1, rect.y, @@ -356,7 +418,7 @@ void wxDefaultDockArt::DrawBorder(wxDC& dc, const wxRect& _rect, rect.Deflate(1); } } - else + else { for (i = 0; i < border_width; ++i) { @@ -378,7 +440,7 @@ void wxDefaultDockArt::DrawCaptionBackground(wxDC& dc, const wxRect& rect, bool dc.DrawRectangle(rect.x, rect.y, rect.width, rect.height); } - else + else { if (active) { @@ -414,7 +476,7 @@ void wxDefaultDockArt::DrawCaptionBackground(wxDC& dc, const wxRect& rect, bool } -void wxDefaultDockArt::DrawCaption(wxDC& dc, +void wxDefaultDockArt::DrawCaption(wxDC& dc, wxWindow *WXUNUSED(window), const wxString& text, const wxRect& rect, wxPaneInfo& pane) @@ -427,7 +489,7 @@ void wxDefaultDockArt::DrawCaption(wxDC& dc, if (pane.state & wxPaneInfo::optionActive) dc.SetTextForeground(m_active_caption_text_colour); - else + else dc.SetTextForeground(m_inactive_caption_text_colour); @@ -439,7 +501,7 @@ void wxDefaultDockArt::DrawCaption(wxDC& dc, dc.DestroyClippingRegion(); } -void wxDefaultDockArt::DrawGripper(wxDC& dc, +void wxDefaultDockArt::DrawGripper(wxDC& dc, wxWindow *WXUNUSED(window), const wxRect& rect, wxPaneInfo& pane) { @@ -490,7 +552,7 @@ void wxDefaultDockArt::DrawGripper(wxDC& dc, } } -void wxDefaultDockArt::DrawPaneButton(wxDC& dc, +void wxDefaultDockArt::DrawPaneButton(wxDC& dc, wxWindow *WXUNUSED(window), int button, int button_state, const wxRect& _rect,