#ifdef __WXMAC__
#include "wx/mac/private.h"
+#include "wx/graphics.h"
#endif
#ifdef __WXGTK__
#endif
-// -- wxDefaultDockArt class implementation --
+// -- wxAuiDefaultDockArt 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 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
for (int i = 0; i <= high; ++i)
{
- int r = start_color.Red() + ((i*rd*100)/high)/100;
- int g = start_color.Green() + ((i*gd*100)/high)/100;
- int b = start_color.Blue() + ((i*bd*100)/high)/100;
+ int r,g,b;
+
+
+ r = start_color.Red() + ((i*rd*100)/high)/100;
+ g = start_color.Green() + ((i*gd*100)/high)/100;
+ b = start_color.Blue() + ((i*bd*100)/high)/100;
wxPen p(wxColor((unsigned char)r,
(unsigned char)g,
}
-wxDefaultDockArt::wxDefaultDockArt()
+static wxString ChopText(wxDC& dc, const wxString& text, int max_size)
+{
+ wxCoord x,y;
+
+ // first check if the text fits with no problems
+ dc.GetTextExtent(text, &x, &y);
+ if (x <= max_size)
+ return text;
+
+ size_t i, len = text.Length();
+ size_t last_good_length = 0;
+ for (i = 0; i < len; ++i)
+ {
+ wxString s = text.Left(i);
+ s += wxT("...");
+
+ dc.GetTextExtent(s, &x, &y);
+ if (x > max_size)
+ break;
+
+ last_good_length = i;
+ }
+
+ wxString ret = text.Left(last_good_length);
+ ret += wxT("...");
+ return ret;
+}
+
+wxAuiDefaultDockArt::wxAuiDefaultDockArt()
{
#ifdef __WXMAC__
wxBrush toolbarbrush;
toolbarbrush.MacSetTheme( kThemeBrushToolbarBackground );
- wxColor base_color = toolbarbrush.GetColour();
+ wxColor base_colour = toolbarbrush.GetColour();
#else
- wxColor base_color = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
+ wxColor base_colour = 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);
- wxColor darker4_color = StepColour(base_color, 50);
- wxColor darker5_color = StepColour(base_color, 40);
+ m_base_colour = base_colour;
+ wxColor darker1_colour = StepColour(base_colour, 85);
+ wxColor darker2_colour = StepColour(base_colour, 70);
+ wxColor darker3_colour = StepColour(base_colour, 60);
+ wxColor darker4_colour = StepColour(base_colour, 50);
+ wxColor darker5_colour = StepColour(base_colour, 40);
- m_active_caption_colour = LightContrastColour(wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT));
- m_active_caption_gradient_colour = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT);
+ m_active_caption_colour = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT);
+ m_active_caption_gradient_colour = LightContrastColour(wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT));
m_active_caption_text_colour = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT);
- m_inactive_caption_colour = StepColour(darker1_color, 80);
- m_inactive_caption_gradient_colour = darker1_color;
+ m_inactive_caption_colour = darker1_colour;
+ m_inactive_caption_gradient_colour = StepColour(base_colour, 97);
m_inactive_caption_text_colour = *wxBLACK;
#ifdef __WXMAC__
m_background_brush = toolbarbrush;
m_gripper_brush = toolbarbrush;
#else
- m_sash_brush = wxBrush(base_color);
- m_background_brush = wxBrush(base_color);
- m_gripper_brush = wxBrush(base_color);
+ m_sash_brush = wxBrush(base_colour);
+ m_background_brush = wxBrush(base_colour);
+ m_gripper_brush = wxBrush(base_colour);
#endif
- m_border_pen = wxPen(darker2_color);
- m_gripper_pen1 = wxPen(darker5_color);
- m_gripper_pen2 = wxPen(darker3_color);
+ m_border_pen = wxPen(darker2_colour);
+ m_gripper_pen1 = wxPen(darker5_colour);
+ m_gripper_pen2 = wxPen(darker3_colour);
m_gripper_pen3 = *wxWHITE_PEN;
#ifdef __WXMAC__
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 };
+#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,
- 0x9f,0xfc,0x3f,0xfe,0x3f,0xfe,0x9f,0xfc,0xcf,0xf9,0xef,0xfb,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xf3, 0xcf, 0xf9,
+ 0x9f, 0xfc, 0x3f, 0xfe, 0x3f, 0xfe, 0x9f, 0xfc, 0xcf, 0xf9, 0xe7, 0xf3,
+ 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,
#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
m_gradient_type = wxAUI_GRADIENT_VERTICAL;
}
-int wxDefaultDockArt::GetMetric(int id)
+int wxAuiDefaultDockArt::GetMetric(int id)
{
switch (id)
{
return 0;
}
-void wxDefaultDockArt::SetMetric(int id, int new_val)
+void wxAuiDefaultDockArt::SetMetric(int id, int new_val)
{
switch (id)
{
}
}
-wxColour wxDefaultDockArt::GetColour(int id)
+wxColour wxAuiDefaultDockArt::GetColour(int id)
{
switch (id)
{
return wxColour();
}
-void wxDefaultDockArt::SetColour(int id, const wxColor& colour)
+void wxAuiDefaultDockArt::SetColour(int id, const wxColor& colour)
{
switch (id)
{
}
}
-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, wxWindow *window, int orientation, const wxRect& rect)
+void wxAuiDefaultDockArt::DrawSash(wxDC& dc, wxWindow *window, int orientation, const wxRect& rect)
{
#if defined(__WXMAC__)
HIRect splitterRect = CGRectMake( rect.x , rect.y , rect.width , rect.height );
#endif
#elif defined(__WXGTK__)
+ // clear out the rectangle first
+ dc.SetPen(*wxTRANSPARENT_PEN);
+ dc.SetBrush(m_sash_brush);
+ dc.DrawRectangle(rect.x, rect.y, rect.width, rect.height);
GdkRectangle gdk_rect;
if (orientation == wxVERTICAL )
}
-void wxDefaultDockArt::DrawBackground(wxDC& dc, wxWindow *WXUNUSED(window), int, const wxRect& rect)
+void wxAuiDefaultDockArt::DrawBackground(wxDC& dc, wxWindow *WXUNUSED(window), int, const wxRect& rect)
{
dc.SetPen(*wxTRANSPARENT_PEN);
#ifdef __WXMAC__
dc.DrawRectangle(rect.x, rect.y, rect.width, rect.height);
}
-void wxDefaultDockArt::DrawBorder(wxDC& dc, wxWindow *WXUNUSED(window), 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);
}
-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)
{
// on mac the gradients are expected to become darker from the top
#ifdef __WXMAC__
DrawGradientRectangle(dc, rect,
- m_active_caption_gradient_colour,
m_active_caption_colour,
+ m_active_caption_gradient_colour,
m_gradient_type);
#else
+ // on other platforms, active gradients become lighter at the top
DrawGradientRectangle(dc, rect,
- m_active_caption_colour,
m_active_caption_gradient_colour,
+ m_active_caption_colour,
m_gradient_type);
#endif
}
else
{
- // on mac the gradients are expected to become darker from the top
#ifdef __WXMAC__
+ // on mac the gradients are expected to become darker from the top
DrawGradientRectangle(dc, rect,
m_inactive_caption_gradient_colour,
m_inactive_caption_colour,
m_gradient_type);
#else
+ // on other platforms, inactive gradients become lighter at the bottom
DrawGradientRectangle(dc, rect,
m_inactive_caption_colour,
m_inactive_caption_gradient_colour,
}
-void wxDefaultDockArt::DrawCaption(wxDC& dc, wxWindow *WXUNUSED(window),
+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);
wxCoord w,h;
dc.GetTextExtent(wxT("ABCDEFHXfgkj"), &w, &h);
- dc.SetClippingRegion(rect);
- dc.DrawText(text, rect.x+3, rect.y+(rect.height/2)-(h/2)-1);
+ wxRect clip_rect = rect;
+ clip_rect.width -= 3; // text offset
+ clip_rect.width -= 2; // button padding
+ if (pane.HasCloseButton())
+ clip_rect.width -= m_button_size;
+ if (pane.HasPinButton())
+ clip_rect.width -= m_button_size;
+ if (pane.HasMaximizeButton())
+ clip_rect.width -= m_button_size;
+
+ wxString draw_text = ChopText(dc, text, clip_rect.width);
+
+ dc.SetClippingRegion(clip_rect);
+ dc.DrawText(draw_text, rect.x+3, rect.y+(rect.height/2)-(h/2)-1);
dc.DestroyClippingRegion();
}
-void wxDefaultDockArt::DrawGripper(wxDC& dc, wxWindow *WXUNUSED(window),
+void wxAuiDefaultDockArt::DrawGripper(wxDC& dc, wxWindow *WXUNUSED(window),
const wxRect& rect,
- wxPaneInfo& pane)
+ wxAuiPaneInfo& pane)
{
dc.SetPen(*wxTRANSPARENT_PEN);
dc.SetBrush(m_gripper_brush);
}
}
-void wxDefaultDockArt::DrawPaneButton(wxDC& dc, wxWindow *WXUNUSED(window),
+void wxAuiDefaultDockArt::DrawPaneButton(wxDC& dc, wxWindow *WXUNUSED(window),
int button,
int button_state,
const wxRect& _rect,
- wxPaneInfo& pane)
+ wxAuiPaneInfo& pane)
{
wxRect rect = _rect;
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)));
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;