1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: src/aui/dockart.cpp
3 // Purpose: wxaui: wx advanced user interface - docking window manager
4 // Author: Benjamin I. Williams
8 // Copyright: (C) Copyright 2005-2006, Kirix Corporation, All Rights Reserved
9 // Licence: wxWindows Library Licence, Version 3.1
10 ///////////////////////////////////////////////////////////////////////////////
12 // ============================================================================
14 // ============================================================================
16 // ----------------------------------------------------------------------------
18 // ----------------------------------------------------------------------------
20 #include "wx/wxprec.h"
28 #include "wx/aui/framemanager.h"
29 #include "wx/aui/dockart.h"
32 #include "wx/settings.h"
33 #include "wx/dcclient.h"
38 #include "wx/mac/private.h"
39 #include "wx/graphics.h"
44 #include "wx/gtk/win_gtk.h"
45 #include "wx/renderer.h"
49 // -- wxAuiDefaultDockArt class implementation --
51 // wxAuiDefaultDockArt is an art provider class which does all of the drawing for
52 // wxAuiManager. This allows the library caller to customize the dock art
53 // (probably by deriving from this class), or to completely replace all drawing
54 // with custom dock art (probably by writing a new stand-alone class derived
55 // from the wxAuiDockArt base class). The active dock art class can be set via
56 // wxAuiManager::SetDockArt()
59 // StepColour() it a utility function that simply darkens
60 // or lightens a color, based on the specified percentage
61 static wxColor
StepColour(const wxColor
& c
, int percent
)
63 int r
= c
.Red(), g
= c
.Green(), b
= c
.Blue();
64 return wxColour((unsigned char)wxMin((r
*percent
)/100,255),
65 (unsigned char)wxMin((g
*percent
)/100,255),
66 (unsigned char)wxMin((b
*percent
)/100,255));
69 static wxColor
LightContrastColour(const wxColour
& c
)
73 // if the color is especially dark, then
74 // make the contrast even lighter
75 if (c
.Red() < 128 && c
.Green() < 128 && c
.Blue() < 128)
78 return StepColour(c
, amount
);
81 // BitmapFromBits() is a utility function that creates a
82 // masked bitmap from raw bits (XBM format)
83 static wxBitmap
BitmapFromBits(const unsigned char bits
[], int w
, int h
,
84 const wxColour
& color
)
86 wxImage img
= wxBitmap((const char*)bits
, w
, h
).ConvertToImage();
87 img
.Replace(0,0,0,123,123,123);
88 img
.Replace(255,255,255,color
.Red(),color
.Green(),color
.Blue());
89 img
.SetMaskColour(123,123,123);
94 static void DrawGradientRectangle(wxDC
& dc
,
96 const wxColour
& start_color
,
97 const wxColour
& end_color
,
100 int rd
, gd
, bd
, high
= 0;
101 rd
= end_color
.Red() - start_color
.Red();
102 gd
= end_color
.Green() - start_color
.Green();
103 bd
= end_color
.Blue() - start_color
.Blue();
105 if (direction
== wxAUI_GRADIENT_VERTICAL
)
106 high
= rect
.GetHeight()-1;
108 high
= rect
.GetWidth()-1;
110 for (int i
= 0; i
<= high
; ++i
)
115 r
= start_color
.Red() + ((i
*rd
*100)/high
)/100;
116 g
= start_color
.Green() + ((i
*gd
*100)/high
)/100;
117 b
= start_color
.Blue() + ((i
*bd
*100)/high
)/100;
119 wxPen
p(wxColor((unsigned char)r
,
124 if (direction
== wxAUI_GRADIENT_VERTICAL
)
125 dc
.DrawLine(rect
.x
, rect
.y
+i
, rect
.x
+rect
.width
, rect
.y
+i
);
127 dc
.DrawLine(rect
.x
+i
, rect
.y
, rect
.x
+i
, rect
.y
+rect
.height
);
132 static wxString
ChopText(wxDC
& dc
, const wxString
& text
, int max_size
)
136 // first check if the text fits with no problems
137 dc
.GetTextExtent(text
, &x
, &y
);
141 size_t i
, len
= text
.Length();
142 size_t last_good_length
= 0;
143 for (i
= 0; i
< len
; ++i
)
145 wxString s
= text
.Left(i
);
148 dc
.GetTextExtent(s
, &x
, &y
);
152 last_good_length
= i
;
155 wxString ret
= text
.Left(last_good_length
);
160 wxAuiDefaultDockArt::wxAuiDefaultDockArt()
163 wxBrush toolbarbrush
;
164 toolbarbrush
.MacSetTheme( kThemeBrushToolbarBackground
);
165 wxColor base_colour
= toolbarbrush
.GetColour();
167 wxColor base_colour
= wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE
);
170 m_base_colour
= base_colour
;
171 wxColor darker1_colour
= StepColour(base_colour
, 85);
172 wxColor darker2_colour
= StepColour(base_colour
, 70);
173 wxColor darker3_colour
= StepColour(base_colour
, 60);
174 wxColor darker4_colour
= StepColour(base_colour
, 50);
175 wxColor darker5_colour
= StepColour(base_colour
, 40);
177 m_active_caption_colour
= wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT
);
178 m_active_caption_gradient_colour
= LightContrastColour(wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT
));
179 m_active_caption_text_colour
= wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT
);
180 m_inactive_caption_colour
= darker1_colour
;
181 m_inactive_caption_gradient_colour
= StepColour(base_colour
, 97);
182 m_inactive_caption_text_colour
= *wxBLACK
;
185 m_sash_brush
= toolbarbrush
;
186 m_background_brush
= toolbarbrush
;
187 m_gripper_brush
= toolbarbrush
;
189 m_sash_brush
= wxBrush(base_colour
);
190 m_background_brush
= wxBrush(base_colour
);
191 m_gripper_brush
= wxBrush(base_colour
);
193 m_border_pen
= wxPen(darker2_colour
);
194 m_gripper_pen1
= wxPen(darker5_colour
);
195 m_gripper_pen2
= wxPen(darker3_colour
);
196 m_gripper_pen3
= *wxWHITE_PEN
;
199 m_caption_font
= *wxSMALL_FONT
;
201 m_caption_font
= wxFont(8, wxDEFAULT
, wxNORMAL
, wxNORMAL
, FALSE
);
204 // some built in bitmaps
205 #if defined( __WXMAC__ )
206 static unsigned char close_bits
[]={
207 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFE, 0x03, 0xF8, 0x01, 0xF0, 0x19, 0xF3,
208 0xB8, 0xE3, 0xF0, 0xE1, 0xE0, 0xE0, 0xF0, 0xE1, 0xB8, 0xE3, 0x19, 0xF3,
209 0x01, 0xF0, 0x03, 0xF8, 0x0F, 0xFE, 0xFF, 0xFF };
210 #elif defined( __WXGTK__)
211 static unsigned char close_bits
[]={
212 0xff, 0xff, 0xff, 0xff, 0x07, 0xf0, 0xfb, 0xef, 0xdb, 0xed, 0x8b, 0xe8,
213 0x1b, 0xec, 0x3b, 0xee, 0x1b, 0xec, 0x8b, 0xe8, 0xdb, 0xed, 0xfb, 0xef,
214 0x07, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
216 static unsigned char close_bits
[]={
217 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xf3, 0xcf, 0xf9,
218 0x9f, 0xfc, 0x3f, 0xfe, 0x3f, 0xfe, 0x9f, 0xfc, 0xcf, 0xf9, 0xe7, 0xf3,
219 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
222 static unsigned char maximize_bits
[] = {
223 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xf0, 0xf7, 0xf7, 0x07, 0xf0,
224 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0x07, 0xf0,
225 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
227 static unsigned char restore_bits
[]={
228 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xf0, 0x1f, 0xf0, 0xdf, 0xf7,
229 0x07, 0xf4, 0x07, 0xf4, 0xf7, 0xf5, 0xf7, 0xf1, 0xf7, 0xfd, 0xf7, 0xfd,
230 0x07, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
232 static unsigned char pin_bits
[]={
233 0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0xfc,0xdf,0xfc,0xdf,0xfc,
234 0xdf,0xfc,0xdf,0xfc,0xdf,0xfc,0x0f,0xf8,0x7f,0xff,0x7f,0xff,
235 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
238 m_inactive_close_bitmap
= BitmapFromBits(close_bits
, 16, 16, *wxWHITE
);
239 m_active_close_bitmap
= BitmapFromBits(close_bits
, 16, 16, *wxWHITE
);
241 m_inactive_close_bitmap
= BitmapFromBits(close_bits
, 16, 16, m_inactive_caption_text_colour
);
242 m_active_close_bitmap
= BitmapFromBits(close_bits
, 16, 16, m_active_caption_text_colour
);
246 m_inactive_maximize_bitmap
= BitmapFromBits(maximize_bits
, 16, 16, *wxWHITE
);
247 m_active_maximize_bitmap
= BitmapFromBits(maximize_bits
, 16, 16, *wxWHITE
);
249 m_inactive_maximize_bitmap
= BitmapFromBits(maximize_bits
, 16, 16, m_inactive_caption_text_colour
);
250 m_active_maximize_bitmap
= BitmapFromBits(maximize_bits
, 16, 16, m_active_caption_text_colour
);
254 m_inactive_restore_bitmap
= BitmapFromBits(restore_bits
, 16, 16, *wxWHITE
);
255 m_active_restore_bitmap
= BitmapFromBits(restore_bits
, 16, 16, *wxWHITE
);
257 m_inactive_restore_bitmap
= BitmapFromBits(restore_bits
, 16, 16, m_inactive_caption_text_colour
);
258 m_active_restore_bitmap
= BitmapFromBits(restore_bits
, 16, 16, m_active_caption_text_colour
);
261 m_inactive_pin_bitmap
= BitmapFromBits(pin_bits
, 16, 16, m_inactive_caption_text_colour
);
262 m_active_pin_bitmap
= BitmapFromBits(pin_bits
, 16, 16, m_active_caption_text_colour
);
264 // default metric values
265 #if defined(__WXMAC__)
267 GetThemeMetric( kThemeMetricSmallPaneSplitterHeight
, &height
);
268 m_sash_size
= height
;
269 #elif defined(__WXGTK__)
270 m_sash_size
= wxRendererNative::Get().GetSplitterParams(NULL
).widthSash
;
278 m_gradient_type
= wxAUI_GRADIENT_VERTICAL
;
281 int wxAuiDefaultDockArt::GetMetric(int id
)
285 case wxAUI_ART_SASH_SIZE
: return m_sash_size
;
286 case wxAUI_ART_CAPTION_SIZE
: return m_caption_size
;
287 case wxAUI_ART_GRIPPER_SIZE
: return m_gripper_size
;
288 case wxAUI_ART_PANE_BORDER_SIZE
: return m_border_size
;
289 case wxAUI_ART_PANE_BUTTON_SIZE
: return m_button_size
;
290 case wxAUI_ART_GRADIENT_TYPE
: return m_gradient_type
;
291 default: wxFAIL_MSG(wxT("Invalid Metric Ordinal")); break;
297 void wxAuiDefaultDockArt::SetMetric(int id
, int new_val
)
301 case wxAUI_ART_SASH_SIZE
: m_sash_size
= new_val
; break;
302 case wxAUI_ART_CAPTION_SIZE
: m_caption_size
= new_val
; break;
303 case wxAUI_ART_GRIPPER_SIZE
: m_gripper_size
= new_val
; break;
304 case wxAUI_ART_PANE_BORDER_SIZE
: m_border_size
= new_val
; break;
305 case wxAUI_ART_PANE_BUTTON_SIZE
: m_button_size
= new_val
; break;
306 case wxAUI_ART_GRADIENT_TYPE
: m_gradient_type
= new_val
; break;
307 default: wxFAIL_MSG(wxT("Invalid Metric Ordinal")); break;
311 wxColour
wxAuiDefaultDockArt::GetColour(int id
)
315 case wxAUI_ART_BACKGROUND_COLOUR
: return m_background_brush
.GetColour();
316 case wxAUI_ART_SASH_COLOUR
: return m_sash_brush
.GetColour();
317 case wxAUI_ART_INACTIVE_CAPTION_COLOUR
: return m_inactive_caption_colour
;
318 case wxAUI_ART_INACTIVE_CAPTION_GRADIENT_COLOUR
: return m_inactive_caption_gradient_colour
;
319 case wxAUI_ART_INACTIVE_CAPTION_TEXT_COLOUR
: return m_inactive_caption_text_colour
;
320 case wxAUI_ART_ACTIVE_CAPTION_COLOUR
: return m_active_caption_colour
;
321 case wxAUI_ART_ACTIVE_CAPTION_GRADIENT_COLOUR
: return m_active_caption_gradient_colour
;
322 case wxAUI_ART_ACTIVE_CAPTION_TEXT_COLOUR
: return m_active_caption_text_colour
;
323 case wxAUI_ART_BORDER_COLOUR
: return m_border_pen
.GetColour();
324 case wxAUI_ART_GRIPPER_COLOUR
: return m_gripper_brush
.GetColour();
325 default: wxFAIL_MSG(wxT("Invalid Metric Ordinal")); break;
331 void wxAuiDefaultDockArt::SetColour(int id
, const wxColor
& colour
)
335 case wxAUI_ART_BACKGROUND_COLOUR
: m_background_brush
.SetColour(colour
); break;
336 case wxAUI_ART_SASH_COLOUR
: m_sash_brush
.SetColour(colour
); break;
337 case wxAUI_ART_INACTIVE_CAPTION_COLOUR
: m_inactive_caption_colour
= colour
; break;
338 case wxAUI_ART_INACTIVE_CAPTION_GRADIENT_COLOUR
: m_inactive_caption_gradient_colour
= colour
; break;
339 case wxAUI_ART_INACTIVE_CAPTION_TEXT_COLOUR
: m_inactive_caption_text_colour
= colour
; break;
340 case wxAUI_ART_ACTIVE_CAPTION_COLOUR
: m_active_caption_colour
= colour
; break;
341 case wxAUI_ART_ACTIVE_CAPTION_GRADIENT_COLOUR
: m_active_caption_gradient_colour
= colour
; break;
342 case wxAUI_ART_ACTIVE_CAPTION_TEXT_COLOUR
: m_active_caption_text_colour
= colour
; break;
343 case wxAUI_ART_BORDER_COLOUR
: m_border_pen
.SetColour(colour
); break;
344 case wxAUI_ART_GRIPPER_COLOUR
:
345 m_gripper_brush
.SetColour(colour
);
346 m_gripper_pen1
.SetColour(StepColour(colour
, 40));
347 m_gripper_pen2
.SetColour(StepColour(colour
, 60));
349 default: wxFAIL_MSG(wxT("Invalid Metric Ordinal")); break;
353 void wxAuiDefaultDockArt::SetFont(int id
, const wxFont
& font
)
355 if (id
== wxAUI_ART_CAPTION_FONT
)
356 m_caption_font
= font
;
359 wxFont
wxAuiDefaultDockArt::GetFont(int id
)
361 if (id
== wxAUI_ART_CAPTION_FONT
)
362 return m_caption_font
;
366 void wxAuiDefaultDockArt::DrawSash(wxDC
& dc
, wxWindow
*window
, int orientation
, const wxRect
& rect
)
368 #if defined(__WXMAC__)
369 HIRect splitterRect
= CGRectMake( rect
.x
, rect
.y
, rect
.width
, rect
.height
);
370 CGContextRef cgContext
;
371 #if wxMAC_USE_CORE_GRAPHICS
372 cgContext
= (CGContextRef
) dc
.GetGraphicsContext()->GetNativeContext() ;
375 GetPortBounds( (CGrafPtr
) dc
.m_macPort
, &bounds
) ;
376 QDBeginCGContext( (CGrafPtr
) dc
.m_macPort
, &cgContext
) ;
377 CGContextTranslateCTM( cgContext
, 0 , bounds
.bottom
- bounds
.top
) ;
378 CGContextScaleCTM( cgContext
, 1 , -1 ) ;
381 HIThemeSplitterDrawInfo drawInfo
;
382 drawInfo
.version
= 0 ;
383 drawInfo
.state
= kThemeStateActive
;
384 drawInfo
.adornment
= kHIThemeSplitterAdornmentNone
;
385 HIThemeDrawPaneSplitter( &splitterRect
, &drawInfo
, cgContext
, kHIThemeOrientationNormal
) ;
387 #if wxMAC_USE_CORE_GRAPHICS
389 QDEndCGContext( (CGrafPtr
) dc
.m_macPort
, &cgContext
) ;
392 #elif defined(__WXGTK__)
393 // clear out the rectangle first
394 dc
.SetPen(*wxTRANSPARENT_PEN
);
395 dc
.SetBrush(m_sash_brush
);
396 dc
.DrawRectangle(rect
.x
, rect
.y
, rect
.width
, rect
.height
);
398 GdkRectangle gdk_rect
;
399 if (orientation
== wxVERTICAL
)
403 gdk_rect
.width
= m_sash_size
;
404 gdk_rect
.height
= rect
.height
;
410 gdk_rect
.width
= rect
.width
;
411 gdk_rect
.height
= m_sash_size
;
415 if (!window
->m_wxwindow
) return;
416 if (!GTK_PIZZA(window
->m_wxwindow
)->bin_window
) return;
420 window
->m_wxwindow
->style
,
421 GTK_PIZZA(window
->m_wxwindow
)->bin_window
,
422 // flags & wxCONTROL_CURRENT ? GTK_STATE_PRELIGHT : GTK_STATE_NORMAL,
425 NULL
/* no clipping */,
432 (orientation
== wxVERTICAL
) ? GTK_ORIENTATION_VERTICAL
: GTK_ORIENTATION_HORIZONTAL
437 wxUnusedVar(orientation
);
438 dc
.SetPen(*wxTRANSPARENT_PEN
);
439 dc
.SetBrush(m_sash_brush
);
440 dc
.DrawRectangle(rect
.x
, rect
.y
, rect
.width
, rect
.height
);
445 void wxAuiDefaultDockArt::DrawBackground(wxDC
& dc
, wxWindow
*WXUNUSED(window
), int, const wxRect
& rect
)
447 dc
.SetPen(*wxTRANSPARENT_PEN
);
449 // we have to clear first, otherwise we are drawing a light striped pattern
450 // over an already darker striped background
451 dc
.SetBrush(*wxWHITE_BRUSH
) ;
452 dc
.DrawRectangle(rect
.x
, rect
.y
, rect
.width
, rect
.height
);
454 dc
.SetBrush(m_background_brush
);
455 dc
.DrawRectangle(rect
.x
, rect
.y
, rect
.width
, rect
.height
);
458 void wxAuiDefaultDockArt::DrawBorder(wxDC
& dc
, wxWindow
*WXUNUSED(window
), const wxRect
& _rect
,
461 dc
.SetPen(m_border_pen
);
462 dc
.SetBrush(*wxTRANSPARENT_BRUSH
);
465 int i
, border_width
= GetMetric(wxAUI_ART_PANE_BORDER_SIZE
);
467 if (pane
.IsToolbar())
469 for (i
= 0; i
< border_width
; ++i
)
471 dc
.SetPen(*wxWHITE_PEN
);
472 dc
.DrawLine(rect
.x
, rect
.y
, rect
.x
+rect
.width
, rect
.y
);
473 dc
.DrawLine(rect
.x
, rect
.y
, rect
.x
, rect
.y
+rect
.height
);
474 dc
.SetPen(m_border_pen
);
475 dc
.DrawLine(rect
.x
, rect
.y
+rect
.height
-1,
476 rect
.x
+rect
.width
, rect
.y
+rect
.height
-1);
477 dc
.DrawLine(rect
.x
+rect
.width
-1, rect
.y
,
478 rect
.x
+rect
.width
-1, rect
.y
+rect
.height
);
484 for (i
= 0; i
< border_width
; ++i
)
486 dc
.DrawRectangle(rect
.x
, rect
.y
, rect
.width
, rect
.height
);
493 void wxAuiDefaultDockArt::DrawCaptionBackground(wxDC
& dc
, const wxRect
& rect
, bool active
)
495 if (m_gradient_type
== wxAUI_GRADIENT_NONE
)
498 dc
.SetBrush(wxBrush(m_active_caption_colour
));
500 dc
.SetBrush(wxBrush(m_inactive_caption_colour
));
502 dc
.DrawRectangle(rect
.x
, rect
.y
, rect
.width
, rect
.height
);
508 // on mac the gradients are expected to become darker from the top
510 DrawGradientRectangle(dc
, rect
,
511 m_active_caption_colour
,
512 m_active_caption_gradient_colour
,
515 // on other platforms, active gradients become lighter at the top
516 DrawGradientRectangle(dc
, rect
,
517 m_active_caption_gradient_colour
,
518 m_active_caption_colour
,
525 // on mac the gradients are expected to become darker from the top
526 DrawGradientRectangle(dc
, rect
,
527 m_inactive_caption_gradient_colour
,
528 m_inactive_caption_colour
,
531 // on other platforms, inactive gradients become lighter at the bottom
532 DrawGradientRectangle(dc
, rect
,
533 m_inactive_caption_colour
,
534 m_inactive_caption_gradient_colour
,
542 void wxAuiDefaultDockArt::DrawCaption(wxDC
& dc
, wxWindow
*WXUNUSED(window
),
543 const wxString
& text
,
547 dc
.SetPen(*wxTRANSPARENT_PEN
);
548 dc
.SetFont(m_caption_font
);
550 DrawCaptionBackground(dc
, rect
,
551 (pane
.state
& wxAuiPaneInfo::optionActive
)?true:false);
553 if (pane
.state
& wxAuiPaneInfo::optionActive
)
554 dc
.SetTextForeground(m_active_caption_text_colour
);
556 dc
.SetTextForeground(m_inactive_caption_text_colour
);
560 dc
.GetTextExtent(wxT("ABCDEFHXfgkj"), &w
, &h
);
562 wxRect clip_rect
= rect
;
563 clip_rect
.width
-= 3; // text offset
564 clip_rect
.width
-= 2; // button padding
565 if (pane
.HasCloseButton())
566 clip_rect
.width
-= m_button_size
;
567 if (pane
.HasPinButton())
568 clip_rect
.width
-= m_button_size
;
569 if (pane
.HasMaximizeButton())
570 clip_rect
.width
-= m_button_size
;
572 wxString draw_text
= ChopText(dc
, text
, clip_rect
.width
);
574 dc
.SetClippingRegion(clip_rect
);
575 dc
.DrawText(draw_text
, rect
.x
+3, rect
.y
+(rect
.height
/2)-(h
/2)-1);
576 dc
.DestroyClippingRegion();
579 void wxAuiDefaultDockArt::DrawGripper(wxDC
& dc
, wxWindow
*WXUNUSED(window
),
583 dc
.SetPen(*wxTRANSPARENT_PEN
);
584 dc
.SetBrush(m_gripper_brush
);
586 dc
.DrawRectangle(rect
.x
, rect
.y
, rect
.width
,rect
.height
);
588 if (!pane
.HasGripperTop())
593 dc
.SetPen(m_gripper_pen1
);
594 dc
.DrawPoint(rect
.x
+3, rect
.y
+y
);
595 dc
.SetPen(m_gripper_pen2
);
596 dc
.DrawPoint(rect
.x
+3, rect
.y
+y
+1);
597 dc
.DrawPoint(rect
.x
+4, rect
.y
+y
);
598 dc
.SetPen(m_gripper_pen3
);
599 dc
.DrawPoint(rect
.x
+5, rect
.y
+y
+1);
600 dc
.DrawPoint(rect
.x
+5, rect
.y
+y
+2);
601 dc
.DrawPoint(rect
.x
+4, rect
.y
+y
+2);
604 if (y
> rect
.GetHeight()-5)
613 dc
.SetPen(m_gripper_pen1
);
614 dc
.DrawPoint(rect
.x
+x
, rect
.y
+3);
615 dc
.SetPen(m_gripper_pen2
);
616 dc
.DrawPoint(rect
.x
+x
+1, rect
.y
+3);
617 dc
.DrawPoint(rect
.x
+x
, rect
.y
+4);
618 dc
.SetPen(m_gripper_pen3
);
619 dc
.DrawPoint(rect
.x
+x
+1, rect
.y
+5);
620 dc
.DrawPoint(rect
.x
+x
+2, rect
.y
+5);
621 dc
.DrawPoint(rect
.x
+x
+2, rect
.y
+4);
624 if (x
> rect
.GetWidth()-5)
630 void wxAuiDefaultDockArt::DrawPaneButton(wxDC
& dc
, wxWindow
*WXUNUSED(window
),
638 if (button_state
== wxAUI_BUTTON_STATE_PRESSED
)
644 if (button_state
== wxAUI_BUTTON_STATE_HOVER
||
645 button_state
== wxAUI_BUTTON_STATE_PRESSED
)
647 if (pane
.state
& wxAuiPaneInfo::optionActive
)
649 dc
.SetBrush(wxBrush(StepColour(m_active_caption_colour
, 120)));
650 dc
.SetPen(wxPen(StepColour(m_active_caption_colour
, 70)));
654 dc
.SetBrush(wxBrush(StepColour(m_inactive_caption_colour
, 120)));
655 dc
.SetPen(wxPen(StepColour(m_inactive_caption_colour
, 70)));
658 // draw the background behind the button
659 dc
.DrawRectangle(rect
.x
, rect
.y
, 15, 15);
666 case wxAUI_BUTTON_MAXIMIZE_RESTORE
:
667 if (pane
.IsMaximized()) {
668 if (pane
.state
& wxAuiPaneInfo::optionActive
)
669 bmp
= m_active_restore_bitmap
;
671 bmp
= m_inactive_restore_bitmap
;
673 if (pane
.state
& wxAuiPaneInfo::optionActive
)
674 bmp
= m_active_maximize_bitmap
;
676 bmp
= m_inactive_maximize_bitmap
;
679 case wxAUI_BUTTON_CLOSE
:
680 if (pane
.state
& wxAuiPaneInfo::optionActive
)
681 bmp
= m_active_close_bitmap
;
683 bmp
= m_inactive_close_bitmap
;
685 case wxAUI_BUTTON_PIN
:
686 if (pane
.state
& wxAuiPaneInfo::optionActive
)
687 bmp
= m_active_pin_bitmap
;
689 bmp
= m_inactive_pin_bitmap
;
693 // draw the button itself
694 dc
.DrawBitmap(bmp
, rect
.x
, rect
.y
, true);