virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height) { if (!m_type) { m_original_dc->DrawRectangle(x, y, width, height); return; } else if (m_type == 1) { m_rectangle_called++; wxColour c = wxSystemSettings::GetColour(TABCOLOUR); if (c.Red() + c.Green() + c.Blue() >= 384) m_original_dc->DrawRectangle(x, y, width, height); else { if (m_rectangle_called != 2) m_original_dc->DrawRectangle(x, y, width, height); else { wxColour new_init = wxAuiStepColour(c, 150); wxColour new_dest = wxAuiStepColour(c, 100); m_original_dc->GradientFillLinear(wxRect(x, y, width + 1, height), new_init, new_dest, wxNORTH); } } } else { wxColour c = wxSystemSettings::GetColour(TABCOLOUR); if (c.Red() + c.Green() + c.Blue() < 384) m_original_dc->SetBrush(wxBrush(wxAuiStepColour(c, 100))); m_original_dc->DrawRectangle(x, y, width, height); } }
static void DrawButtons(wxDC& dc, const wxRect& _rect, const wxBitmap& bmp, const wxColour& bkcolour, int button_state) { wxRect rect = _rect; if (button_state == wxAUI_BUTTON_STATE_PRESSED) { rect.x++; rect.y++; } if (button_state == wxAUI_BUTTON_STATE_HOVER || button_state == wxAUI_BUTTON_STATE_PRESSED) { dc.SetBrush(wxBrush(wxAuiStepColour(bkcolour, 120))); dc.SetPen(wxPen(wxAuiStepColour(bkcolour, 75))); // draw the background behind the button dc.DrawRectangle(rect.x, rect.y, 15, 15); } // draw the button itself dc.DrawBitmap(bmp, rect.x, rect.y, true); }
// -------------------------------------------------------------------------------- // guAuiManagerPanel::guAuiManagerPanel( wxWindow * parent ) : wxPanel( parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL | wxNO_BORDER ) { m_MenuBar = NULL; m_AuiManager.SetManagedWindow( this ); m_AuiManager.SetArtProvider( new guAuiDockArt() ); m_AuiManager.SetFlags( wxAUI_MGR_ALLOW_FLOATING | wxAUI_MGR_TRANSPARENT_DRAG | wxAUI_MGR_TRANSPARENT_HINT ); wxVisualAttributes VisualAttributes = wxStaticText::GetClassDefaultAttributes(); wxAuiDockArt * AuiDockArt = m_AuiManager.GetArtProvider(); wxColour BaseColor = VisualAttributes.colBg; //wxSystemSettings::GetColour( wxSYS_COLOUR_3DFACE ); AuiDockArt->SetColour( wxAUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR, wxSystemSettings::GetColour( wxSYS_COLOUR_INACTIVECAPTIONTEXT ) ); AuiDockArt->SetColour( wxAUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR, wxSystemSettings::GetColour( wxSYS_COLOUR_CAPTIONTEXT ) ); AuiDockArt->SetColour( wxAUI_DOCKART_ACTIVE_CAPTION_COLOUR, BaseColor ); AuiDockArt->SetColour( wxAUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR, wxAuiStepColour( BaseColor, 93 ) ); AuiDockArt->SetColour( wxAUI_DOCKART_INACTIVE_CAPTION_COLOUR, BaseColor ); AuiDockArt->SetColour( wxAUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR, wxAuiStepColour( BaseColor, 93 ) ); AuiDockArt->SetColour( wxAUI_DOCKART_SASH_COLOUR, wxAuiStepColour( BaseColor, 98 ) ); AuiDockArt->SetMetric( wxAUI_DOCKART_PANE_BORDER_SIZE, 0 ); //AuiDockArt->SetMetric( wxAUI_DOCKART_PANE_BUTTON_SIZE, 16 ); AuiDockArt->SetMetric( wxAUI_DOCKART_CAPTION_SIZE, 22 ); AuiDockArt->SetMetric( wxAUI_DOCKART_PANE_BORDER_SIZE, 1 ); AuiDockArt->SetMetric( wxAUI_DOCKART_SASH_SIZE, 5 ); AuiDockArt->SetMetric( wxAUI_DOCKART_GRADIENT_TYPE, wxAUI_GRADIENT_VERTICAL ); m_AuiManager.Connect( wxEVT_AUI_PANE_CLOSE, wxAuiManagerEventHandler( guAuiManagerPanel::OnPaneClose ), NULL, this ); }
wxColor wxAuiLightContrastColour(const wxColour& c) { int amount = 120; // if the color is especially dark, then // make the contrast even lighter if (c.Red() < 128 && c.Green() < 128 && c.Blue() < 128) amount = 160; return wxAuiStepColour(c, amount); }
void wxAuiDefaultDockArt::SetColour(int id, const wxColor& colour) { switch (id) { 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(wxAuiStepColour(colour, 40)); m_gripper_pen2.SetColour(wxAuiStepColour(colour, 60)); break; default: wxFAIL_MSG(wxT("Invalid Metric Ordinal")); break; } }
void wxAuiDefaultDockArt::DrawPaneButton(wxDC& dc, wxWindow *WXUNUSED(window), int button, int button_state, const wxRect& _rect, wxAuiPaneInfo& pane) { wxBitmap bmp; if (!(&pane)) return; 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++; rect.y++; } if (button_state == wxAUI_BUTTON_STATE_HOVER || button_state == wxAUI_BUTTON_STATE_PRESSED) { if (pane.state & wxAuiPaneInfo::optionActive) { dc.SetBrush(wxBrush(wxAuiStepColour(m_active_caption_colour, 120))); dc.SetPen(wxPen(wxAuiStepColour(m_active_caption_colour, 70))); } else { 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); } // draw the button itself dc.DrawBitmap(bmp, rect.x, rect.y, true); }
wxAuiDefaultDockArt::wxAuiDefaultDockArt() { #if defined( __WXMAC__ ) && wxOSX_USE_COCOA_OR_CARBON wxColor base_colour = wxColour( wxMacCreateCGColorFromHITheme(kThemeBrushToolbarBackground)); #else 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 = 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 = 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 = wxAuiStepColour(base_colour, 97); m_inactive_caption_text_colour = *wxBLACK; m_sash_brush = wxBrush(base_colour); m_background_brush = wxBrush(base_colour); m_gripper_brush = wxBrush(base_colour); 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__ m_caption_font = *wxSMALL_FONT; #else m_caption_font = wxFont(8, wxDEFAULT, wxNORMAL, wxNORMAL, FALSE); #endif // some built in bitmaps #if defined( __WXMAC__ ) static const 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 const 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 const unsigned char close_bits[]={ // reduced height, symmetric 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xf3, 0x9f, 0xf9, 0x3f, 0xfc, 0x7f, 0xfe, 0x3f, 0xfc, 0x9f, 0xf9, 0xcf, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; /* // same height as maximize/restore 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xe7, 0xcf, 0xf3, 0x9f, 0xf9, 0x3f, 0xfc, 0x7f, 0xfe, 0x3f, 0xfc, 0x9f, 0xf9, 0xcf, 0xf3, 0xe7, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; */ #endif static const 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 const 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 const 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, 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; #ifdef __WXMAC__ 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 = 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 = wxAuiBitmapFromBits(maximize_bits, 16, 16, *wxWHITE); m_active_maximize_bitmap = wxAuiBitmapFromBits(maximize_bits, 16, 16, *wxWHITE ); #else 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 = wxAuiBitmapFromBits(restore_bits, 16, 16, *wxWHITE); m_active_restore_bitmap = wxAuiBitmapFromBits(restore_bits, 16, 16, *wxWHITE ); #else 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 = 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__ ) && wxOSX_USE_COCOA_OR_CARBON 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 m_caption_size = 17; m_border_size = 1; m_button_size = 14; m_gripper_size = 9; m_gradient_type = wxAUI_GRADIENT_VERTICAL; }
virtual void DoGradientFillLinear(const wxRect& rect, const wxColour& initialColour, const wxColour& destColour, wxDirection nDirection = wxEAST) { m_gradient_called++; if (m_type == 1) { if (initialColour.Red() + initialColour.Green() + initialColour.Blue() >= 384) { // Light theme m_original_dc->GradientFillLinear(rect, initialColour, destColour, nDirection); return; } // Dark theme wxColour new_init = wxAuiStepColour(initialColour, 100); wxColour new_dest = wxAuiStepColour(initialColour, 120); m_original_dc->GradientFillLinear(rect, new_init, new_dest, nDirection); } else if (!m_type) { if (destColour.Red() + destColour.Green() + destColour.Blue() >= 384) { // Light theme m_original_dc->GradientFillLinear(rect, initialColour, destColour, nDirection); return; } // Dark theme wxRect r = rect; r.x--; r.width++; wxRect r2 = r; r2.x--; r2.width += 2; if (m_gradient_called == 1) { // Lighter inner border m_original_dc->SetBrush(wxBrush(wxAuiStepColour(destColour, 105))); m_original_dc->SetPen(wxPen(wxAuiStepColour(destColour, 105))); m_original_dc->DrawRectangle(r2); wxColour new_init = wxAuiStepColour(destColour, 95); wxColour new_dest = wxAuiStepColour(destColour, 65); m_original_dc->GradientFillLinear(r, new_init, new_dest, nDirection); if (!m_bottom) { m_original_dc->SetPen(wxPen(destColour)); m_original_dc->DrawPoint(r.x, r.y); m_original_dc->DrawPoint(r.x + r.width - 1, r.y); } } else { // Correct for rounding error in AUI code if (!m_odd_tab_height) r.height -= 1; else r2.height += 1; // Lighter inner border m_original_dc->SetBrush(wxBrush(wxAuiStepColour(destColour, 105))); m_original_dc->SetPen(wxPen(wxAuiStepColour(destColour, 105))); m_original_dc->DrawRectangle(r2); wxColour new_dest = wxAuiStepColour(destColour, 65); if (!m_bottom) r.height++; m_original_dc->GradientFillLinear(r, new_dest, new_dest, nDirection); if (m_bottom) { m_original_dc->SetPen(wxPen(destColour)); m_original_dc->DrawPoint(r.x, r.y + r.height - 1); m_original_dc->DrawPoint(r.x + r.width - 1, r.y + r.height - 1); } } } else if (m_type == 2) { wxColour c = wxSystemSettings::GetColour(TABCOLOUR); if (c.Red() + c.Green() + c.Blue() >= 384) m_original_dc->GradientFillLinear(rect, initialColour, destColour, nDirection); else { wxColour new_init, new_dest; if (m_bottom) { new_init = wxAuiStepColour(c, 70); new_dest = wxAuiStepColour(c, 100); } else { new_init = wxAuiStepColour(c, 85); new_dest = wxAuiStepColour(c, 100); } m_original_dc->GradientFillLinear(rect, new_init, new_dest, nDirection); } } }