// wxAuiManager::SetDockArt()
-// StepColour() it a utility function that simply darkens
+// wxAuiBlendColour is used by wxAuiStepColour
+double wxAuiBlendColour(double fg, double bg, double alpha)
+{
+ double result = bg + (alpha * (fg - bg));
+ if (result < 0.0)
+ result = 0.0;
+ if (result > 255)
+ result = 255;
+ return result;
+}
+
+// wxAuiStepColour() it a utility function that simply darkens
// or lightens a color, based on the specified percentage
-static wxColor StepColour(const wxColor& c, int percent)
+// ialpha of 0 would be completely black, 100 completely white
+// an ialpha of 100 returns the same colour
+wxColor wxAuiStepColour(const wxColor& c, int ialpha)
{
- int r = c.Red(), g = c.Green(), b = c.Blue();
- return wxColour((unsigned char)wxMin((r*percent)/100,255),
- (unsigned char)wxMin((g*percent)/100,255),
- (unsigned char)wxMin((b*percent)/100,255));
+ if (ialpha == 100)
+ return c;
+
+ double r = c.Red(), g = c.Green(), b = c.Blue();
+ double bg;
+
+ // ialpha is 0..200 where 0 is completely black
+ // and 200 is completely white and 100 is the same
+ // convert that to normal alpha 0.0 - 1.0
+ ialpha = wxMin(ialpha, 200);
+ ialpha = wxMax(ialpha, 0);
+ double alpha = ((double)(ialpha - 100.0))/100.0;
+
+ if (ialpha > 100)
+ {
+ // blend with white
+ bg = 255.0;
+ alpha = 1.0 - alpha; // 0 = transparent fg; 1 = opaque fg
+ }
+ else
+ {
+ // blend with black
+ bg = 0.0;
+ alpha = 1.0 + alpha; // 0 = transparent fg; 1 = opaque fg
+ }
+
+ r = wxAuiBlendColour(r, bg, alpha);
+ g = wxAuiBlendColour(g, bg, alpha);
+ b = wxAuiBlendColour(b, bg, alpha);
+
+ return wxColour((unsigned char)r, (unsigned char)g, (unsigned char)b);
}
-static wxColor LightContrastColour(const wxColour& c)
+
+wxColor wxAuiLightContrastColour(const wxColour& c)
{
int amount = 120;
if (c.Red() < 128 && c.Green() < 128 && c.Blue() < 128)
amount = 160;
- return StepColour(c, amount);
+ return wxAuiStepColour(c, amount);
}
-// BitmapFromBits() is a utility function that creates a
+// wxAuiBitmapFromBits() is a utility function that creates a
// masked bitmap from raw bits (XBM format)
-static wxBitmap BitmapFromBits(const unsigned char bits[], int w, int h,
- const wxColour& color)
+wxBitmap wxAuiBitmapFromBits(const unsigned char bits[], int w, int h,
+ const wxColour& color)
{
wxImage img = wxBitmap((const char*)bits, w, h).ConvertToImage();
img.Replace(0,0,0,123,123,123);
img.SetMaskColour(123,123,123);
return wxBitmap(img);
}
-
+
static void DrawGradientRectangle(wxDC& dc,
const wxRect& rect,
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;
+ r = start_color.Red() + (high <= 0 ? 0 : (((i*rd*100)/high)/100));
+ g = start_color.Green() + (high <= 0 ? 0 : (((i*gd*100)/high)/100));
+ b = start_color.Blue() + (high <= 0 ? 0 : (((i*bd*100)/high)/100));
wxPen p(wxColor((unsigned char)r,
(unsigned char)g,
else
dc.DrawLine(rect.x+i, rect.y, rect.x+i, rect.y+rect.height);
}
-
}
-static wxString ChopText(wxDC& dc, const wxString& text, int max_size)
+wxString wxAuiChopText(wxDC& dc, const wxString& text, int max_size)
{
wxCoord x,y;
wxColor base_colour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
#endif
+ // the base_colour is too pale to use as our base colour,
+ // so darken it a bit --
+ if ((255-base_colour.Red()) +
+ (255-base_colour.Green()) +
+ (255-base_colour.Blue()) < 60)
+ {
+ base_colour = wxAuiStepColour(base_colour, 92);
+ }
+
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);
+ wxColor darker1_colour = wxAuiStepColour(base_colour, 85);
+ wxColor darker2_colour = wxAuiStepColour(base_colour, 75);
+ wxColor darker3_colour = wxAuiStepColour(base_colour, 60);
+ wxColor darker4_colour = wxAuiStepColour(base_colour, 50);
+ wxColor darker5_colour = wxAuiStepColour(base_colour, 40);
m_active_caption_colour = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT);
- m_active_caption_gradient_colour = LightContrastColour(wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT));
+ m_active_caption_gradient_colour = wxAuiLightContrastColour(wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT));
m_active_caption_text_colour = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT);
m_inactive_caption_colour = darker1_colour;
- m_inactive_caption_gradient_colour = StepColour(base_colour, 97);
+ m_inactive_caption_gradient_colour = wxAuiStepColour(base_colour, 97);
m_inactive_caption_text_colour = *wxBLACK;
#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 };
#else
static unsigned char close_bits[]={
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xf3, 0xcf, 0xf9,
0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
#ifdef __WXMAC__
- m_inactive_close_bitmap = BitmapFromBits(close_bits, 16, 16, *wxWHITE);
- m_active_close_bitmap = BitmapFromBits(close_bits, 16, 16, *wxWHITE );
+ m_inactive_close_bitmap = wxAuiBitmapFromBits(close_bits, 16, 16, *wxWHITE);
+ m_active_close_bitmap = wxAuiBitmapFromBits(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);
+ m_inactive_close_bitmap = wxAuiBitmapFromBits(close_bits, 16, 16, m_inactive_caption_text_colour);
+ m_active_close_bitmap = wxAuiBitmapFromBits(close_bits, 16, 16, m_active_caption_text_colour);
#endif
#ifdef __WXMAC__
- m_inactive_maximize_bitmap = BitmapFromBits(maximize_bits, 16, 16, *wxWHITE);
- m_active_maximize_bitmap = BitmapFromBits(maximize_bits, 16, 16, *wxWHITE );
+ m_inactive_maximize_bitmap = wxAuiBitmapFromBits(maximize_bits, 16, 16, *wxWHITE);
+ m_active_maximize_bitmap = wxAuiBitmapFromBits(maximize_bits, 16, 16, *wxWHITE );
#else
- 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);
+ m_inactive_maximize_bitmap = wxAuiBitmapFromBits(maximize_bits, 16, 16, m_inactive_caption_text_colour);
+ m_active_maximize_bitmap = wxAuiBitmapFromBits(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 );
+ m_inactive_restore_bitmap = wxAuiBitmapFromBits(restore_bits, 16, 16, *wxWHITE);
+ m_active_restore_bitmap = wxAuiBitmapFromBits(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);
+ m_inactive_restore_bitmap = wxAuiBitmapFromBits(restore_bits, 16, 16, m_inactive_caption_text_colour);
+ m_active_restore_bitmap = wxAuiBitmapFromBits(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);
+ m_inactive_pin_bitmap = wxAuiBitmapFromBits(pin_bits, 16, 16, m_inactive_caption_text_colour);
+ m_active_pin_bitmap = wxAuiBitmapFromBits(pin_bits, 16, 16, m_active_caption_text_colour);
// default metric values
#if defined(__WXMAC__)
{
switch (id)
{
- case wxAUI_ART_SASH_SIZE: return m_sash_size;
- case wxAUI_ART_CAPTION_SIZE: return m_caption_size;
- case wxAUI_ART_GRIPPER_SIZE: return m_gripper_size;
- case wxAUI_ART_PANE_BORDER_SIZE: return m_border_size;
- case wxAUI_ART_PANE_BUTTON_SIZE: return m_button_size;
- case wxAUI_ART_GRADIENT_TYPE: return m_gradient_type;
+ case wxAUI_DOCKART_SASH_SIZE: return m_sash_size;
+ case wxAUI_DOCKART_CAPTION_SIZE: return m_caption_size;
+ case wxAUI_DOCKART_GRIPPER_SIZE: return m_gripper_size;
+ case wxAUI_DOCKART_PANE_BORDER_SIZE: return m_border_size;
+ case wxAUI_DOCKART_PANE_BUTTON_SIZE: return m_button_size;
+ case wxAUI_DOCKART_GRADIENT_TYPE: return m_gradient_type;
default: wxFAIL_MSG(wxT("Invalid Metric Ordinal")); break;
}
{
switch (id)
{
- case wxAUI_ART_SASH_SIZE: m_sash_size = new_val; break;
- case wxAUI_ART_CAPTION_SIZE: m_caption_size = new_val; break;
- case wxAUI_ART_GRIPPER_SIZE: m_gripper_size = new_val; break;
- case wxAUI_ART_PANE_BORDER_SIZE: m_border_size = new_val; break;
- case wxAUI_ART_PANE_BUTTON_SIZE: m_button_size = new_val; break;
- case wxAUI_ART_GRADIENT_TYPE: m_gradient_type = new_val; break;
+ case wxAUI_DOCKART_SASH_SIZE: m_sash_size = new_val; break;
+ case wxAUI_DOCKART_CAPTION_SIZE: m_caption_size = new_val; break;
+ case wxAUI_DOCKART_GRIPPER_SIZE: m_gripper_size = new_val; break;
+ case wxAUI_DOCKART_PANE_BORDER_SIZE: m_border_size = new_val; break;
+ case wxAUI_DOCKART_PANE_BUTTON_SIZE: m_button_size = new_val; break;
+ case wxAUI_DOCKART_GRADIENT_TYPE: m_gradient_type = new_val; break;
default: wxFAIL_MSG(wxT("Invalid Metric Ordinal")); break;
}
}
{
switch (id)
{
- 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();
+ case wxAUI_DOCKART_BACKGROUND_COLOUR: return m_background_brush.GetColour();
+ case wxAUI_DOCKART_SASH_COLOUR: return m_sash_brush.GetColour();
+ case wxAUI_DOCKART_INACTIVE_CAPTION_COLOUR: return m_inactive_caption_colour;
+ case wxAUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR: return m_inactive_caption_gradient_colour;
+ case wxAUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR: return m_inactive_caption_text_colour;
+ case wxAUI_DOCKART_ACTIVE_CAPTION_COLOUR: return m_active_caption_colour;
+ case wxAUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR: return m_active_caption_gradient_colour;
+ case wxAUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR: return m_active_caption_text_colour;
+ case wxAUI_DOCKART_BORDER_COLOUR: return m_border_pen.GetColour();
+ case wxAUI_DOCKART_GRIPPER_COLOUR: return m_gripper_brush.GetColour();
default: wxFAIL_MSG(wxT("Invalid Metric Ordinal")); break;
}
{
switch (id)
{
- case wxAUI_ART_BACKGROUND_COLOUR: m_background_brush.SetColour(colour); break;
- case wxAUI_ART_SASH_COLOUR: m_sash_brush.SetColour(colour); break;
- case wxAUI_ART_INACTIVE_CAPTION_COLOUR: m_inactive_caption_colour = colour; break;
- case wxAUI_ART_INACTIVE_CAPTION_GRADIENT_COLOUR: m_inactive_caption_gradient_colour = colour; break;
- case wxAUI_ART_INACTIVE_CAPTION_TEXT_COLOUR: m_inactive_caption_text_colour = colour; break;
- case wxAUI_ART_ACTIVE_CAPTION_COLOUR: m_active_caption_colour = colour; break;
- case wxAUI_ART_ACTIVE_CAPTION_GRADIENT_COLOUR: m_active_caption_gradient_colour = colour; break;
- case wxAUI_ART_ACTIVE_CAPTION_TEXT_COLOUR: m_active_caption_text_colour = colour; break;
- case wxAUI_ART_BORDER_COLOUR: m_border_pen.SetColour(colour); break;
- case wxAUI_ART_GRIPPER_COLOUR:
+ case wxAUI_DOCKART_BACKGROUND_COLOUR: m_background_brush.SetColour(colour); break;
+ case wxAUI_DOCKART_SASH_COLOUR: m_sash_brush.SetColour(colour); break;
+ case wxAUI_DOCKART_INACTIVE_CAPTION_COLOUR: m_inactive_caption_colour = colour; break;
+ case wxAUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR: m_inactive_caption_gradient_colour = colour; break;
+ case wxAUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR: m_inactive_caption_text_colour = colour; break;
+ case wxAUI_DOCKART_ACTIVE_CAPTION_COLOUR: m_active_caption_colour = colour; break;
+ case wxAUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR: m_active_caption_gradient_colour = colour; break;
+ case wxAUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR: m_active_caption_text_colour = colour; break;
+ case wxAUI_DOCKART_BORDER_COLOUR: m_border_pen.SetColour(colour); break;
+ case wxAUI_DOCKART_GRIPPER_COLOUR:
m_gripper_brush.SetColour(colour);
- m_gripper_pen1.SetColour(StepColour(colour, 40));
- m_gripper_pen2.SetColour(StepColour(colour, 60));
+ m_gripper_pen1.SetColour(wxAuiStepColour(colour, 40));
+ m_gripper_pen2.SetColour(wxAuiStepColour(colour, 60));
break;
default: wxFAIL_MSG(wxT("Invalid Metric Ordinal")); break;
}
void wxAuiDefaultDockArt::SetFont(int id, const wxFont& font)
{
- if (id == wxAUI_ART_CAPTION_FONT)
+ if (id == wxAUI_DOCKART_CAPTION_FONT)
m_caption_font = font;
}
wxFont wxAuiDefaultDockArt::GetFont(int id)
{
- if (id == wxAUI_ART_CAPTION_FONT)
+ if (id == wxAUI_DOCKART_CAPTION_FONT)
return m_caption_font;
return wxNullFont;
}
#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 )
dc.SetBrush(*wxTRANSPARENT_BRUSH);
wxRect rect = _rect;
- int i, border_width = GetMetric(wxAUI_ART_PANE_BORDER_SIZE);
+ int i, border_width = GetMetric(wxAUI_DOCKART_PANE_BORDER_SIZE);
if (pane.IsToolbar())
{
if (pane.HasMaximizeButton())
clip_rect.width -= m_button_size;
- wxString draw_text = ChopText(dc, text, clip_rect.width);
+ wxString draw_text = wxAuiChopText(dc, text, clip_rect.width);
dc.SetClippingRegion(clip_rect);
dc.DrawText(draw_text, rect.x+3, rect.y+(rect.height/2)-(h/2)-1);
const wxRect& _rect,
wxAuiPaneInfo& pane)
{
+ wxBitmap bmp;
+ switch (button)
+ {
+ default:
+ case wxAUI_BUTTON_CLOSE:
+ if (pane.state & wxAuiPaneInfo::optionActive)
+ bmp = m_active_close_bitmap;
+ else
+ bmp = m_inactive_close_bitmap;
+ break;
+ case wxAUI_BUTTON_PIN:
+ if (pane.state & wxAuiPaneInfo::optionActive)
+ bmp = m_active_pin_bitmap;
+ else
+ bmp = m_inactive_pin_bitmap;
+ break;
+ 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;
+ }
+
+
wxRect rect = _rect;
+ int old_y = rect.y;
+ rect.y = rect.y + (rect.height/2) - (bmp.GetHeight()/2);
+ rect.height = old_y + rect.height - rect.y - 1;
+
+
if (button_state == wxAUI_BUTTON_STATE_PRESSED)
{
rect.x++;
{
if (pane.state & wxAuiPaneInfo::optionActive)
{
- dc.SetBrush(wxBrush(StepColour(m_active_caption_colour, 120)));
- dc.SetPen(wxPen(StepColour(m_active_caption_colour, 70)));
+ dc.SetBrush(wxBrush(wxAuiStepColour(m_active_caption_colour, 120)));
+ dc.SetPen(wxPen(wxAuiStepColour(m_active_caption_colour, 70)));
}
else
{
- dc.SetBrush(wxBrush(StepColour(m_inactive_caption_colour, 120)));
- dc.SetPen(wxPen(StepColour(m_inactive_caption_colour, 70)));
+ dc.SetBrush(wxBrush(wxAuiStepColour(m_inactive_caption_colour, 120)));
+ dc.SetPen(wxPen(wxAuiStepColour(m_inactive_caption_colour, 70)));
}
// draw the background behind the button
dc.DrawRectangle(rect.x, rect.y, 15, 15);
}
- wxBitmap bmp;
- switch (button)
- {
- default:
- 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 wxAUI_BUTTON_PIN:
- if (pane.state & wxAuiPaneInfo::optionActive)
- bmp = m_active_pin_bitmap;
- else
- bmp = m_inactive_pin_bitmap;
- break;
- }
// draw the button itself
dc.DrawBitmap(bmp, rect.x, rect.y, true);