📄 mono.cpp
字号:
// radio { // normal state { xpmRadioChecked, xpmRadioUnchecked, xpmUndeterminate }, // pressed state { xpmUndeterminate, xpmUndeterminate, xpmUndeterminate }, // disabled state { xpmUndeterminate, xpmUndeterminate, xpmUndeterminate }, },};static const char *xpmLeftArrow[] = {/* columns rows colors chars-per-pixel */"8 8 2 1"," c white","X c black",/* pixels */" X "," XX "," XXX ","XXXX ","XXXX "," XXX "," XX "," X ",};static const char *xpmRightArrow[] = {/* columns rows colors chars-per-pixel */"8 8 2 1"," c white","X c black",/* pixels */" X "," XX "," XXX "," XXXX"," XXXX"," XXX "," XX "," X ",};static const char *xpmUpArrow[] = {/* columns rows colors chars-per-pixel */"8 8 2 1"," c white","X c black",/* pixels */" "," XX "," XXXX "," XXXXXX ","XXXXXXXX"," "," "," ",};static const char *xpmDownArrow[] = {/* columns rows colors chars-per-pixel */"8 8 2 1"," c white","X c black",/* pixels */" "," "," ","XXXXXXXX"," XXXXXX "," XXXX "," XX "," ",};const char **wxMonoRenderer::ms_xpmArrows[Arrow_Max] ={ xpmLeftArrow, xpmRightArrow, xpmUpArrow, xpmDownArrow,};// ----------------------------------------------------------------------------// wxMonoColourScheme: uses just white and black// ----------------------------------------------------------------------------class wxMonoColourScheme : public wxColourScheme{public: // we use only 2 colours, white and black, but we avoid referring to them // like this, instead use the functions below wxColour GetFg() const { return wxMONO_FG_COL; } wxColour GetBg() const { return wxMONO_BG_COL; } // implement base class pure virtuals virtual wxColour Get(StdColour col) const; virtual wxColour GetBackground(wxWindow *win) const;};// ----------------------------------------------------------------------------// wxMonoArtProvider// ----------------------------------------------------------------------------class wxMonoArtProvider : public wxArtProvider{protected: virtual wxBitmap CreateBitmap(const wxArtID& id, const wxArtClient& client, const wxSize& size);};// ----------------------------------------------------------------------------// wxMonoTheme// ----------------------------------------------------------------------------class wxMonoTheme : public wxTheme{public: wxMonoTheme(); virtual ~wxMonoTheme(); virtual wxRenderer *GetRenderer(); virtual wxArtProvider *GetArtProvider(); virtual wxInputHandler *GetInputHandler(const wxString& control, wxInputConsumer *consumer); virtual wxColourScheme *GetColourScheme();private: wxMonoRenderer *m_renderer; wxMonoArtProvider *m_artProvider; wxMonoColourScheme *m_scheme; WX_DECLARE_THEME(mono)};// ============================================================================// implementation// ============================================================================WX_IMPLEMENT_THEME(wxMonoTheme, mono, wxTRANSLATE("Simple monochrome theme"));// ----------------------------------------------------------------------------// wxMonoTheme// ----------------------------------------------------------------------------wxMonoTheme::wxMonoTheme(){ m_scheme = NULL; m_renderer = NULL; m_artProvider = NULL;}wxMonoTheme::~wxMonoTheme(){ delete m_renderer; delete m_scheme; delete m_artProvider;}wxRenderer *wxMonoTheme::GetRenderer(){ if ( !m_renderer ) { m_renderer = new wxMonoRenderer(GetColourScheme()); } return m_renderer;}wxArtProvider *wxMonoTheme::GetArtProvider(){ if ( !m_artProvider ) { m_artProvider = new wxMonoArtProvider; } return m_artProvider;}wxColourScheme *wxMonoTheme::GetColourScheme(){ if ( !m_scheme ) { m_scheme = new wxMonoColourScheme; } return m_scheme;}wxInputHandler *wxMonoTheme::GetInputHandler(const wxString& WXUNUSED(control), wxInputConsumer *consumer){ // no special input handlers so far return consumer->DoGetStdInputHandler(NULL);}// ============================================================================// wxMonoColourScheme// ============================================================================wxColour wxMonoColourScheme::GetBackground(wxWindow *win) const{ wxColour col; if ( win->UseBgCol() ) { // use the user specified colour col = win->GetBackgroundColour(); } // doesn't depend on the state if ( !col.Ok() ) { col = GetBg(); } return col;}wxColour wxMonoColourScheme::Get(wxMonoColourScheme::StdColour col) const{ switch ( col ) { case WINDOW: case CONTROL: case CONTROL_PRESSED: case CONTROL_CURRENT: case SCROLLBAR: case SCROLLBAR_PRESSED: case GAUGE: case TITLEBAR: case TITLEBAR_ACTIVE: case HIGHLIGHT_TEXT: case DESKTOP: return GetBg(); case MAX: default: wxFAIL_MSG(_T("invalid standard colour")); // fall through case SHADOW_DARK: case SHADOW_HIGHLIGHT: case SHADOW_IN: case SHADOW_OUT: case CONTROL_TEXT: case CONTROL_TEXT_DISABLED: case CONTROL_TEXT_DISABLED_SHADOW: case TITLEBAR_TEXT: case TITLEBAR_ACTIVE_TEXT: case HIGHLIGHT: return GetFg(); }}// ============================================================================// wxMonoRenderer// ============================================================================// ----------------------------------------------------------------------------// construction// ----------------------------------------------------------------------------wxMonoRenderer::wxMonoRenderer(const wxColourScheme *scheme) : wxStdRenderer(scheme){ m_penFg = wxPen(wxMONO_FG_COL);}// ----------------------------------------------------------------------------// borders// ----------------------------------------------------------------------------wxRect wxMonoRenderer::GetBorderDimensions(wxBorder border) const{ wxCoord width; switch ( border ) { case wxBORDER_SIMPLE: case wxBORDER_STATIC: case wxBORDER_RAISED: case wxBORDER_SUNKEN: width = 1; break; case wxBORDER_DOUBLE: width = 2; break; default: wxFAIL_MSG(_T("unknown border type")); // fall through case wxBORDER_DEFAULT: case wxBORDER_NONE: width = 0; break; } wxRect rect; rect.x = rect.y = rect.width = rect.height = width; return rect;}void wxMonoRenderer::DrawButtonBorder(wxDC& dc, const wxRect& rect, int flags, wxRect *rectIn){ DrawBorder(dc, wxBORDER_SIMPLE, rect, flags, rectIn);}// ----------------------------------------------------------------------------// lines and frames// ----------------------------------------------------------------------------voidwxMonoRenderer::DrawHorizontalLine(wxDC& dc, wxCoord y, wxCoord x1, wxCoord x2){ dc.SetPen(m_penFg); dc.DrawLine(x1, y, x2 + 1, y);}voidwxMonoRenderer::DrawVerticalLine(wxDC& dc, wxCoord x, wxCoord y1, wxCoord y2){ dc.SetPen(m_penFg); dc.DrawLine(x, y1, x, y2 + 1);}void wxMonoRenderer::DrawFocusRect(wxDC& dc, const wxRect& rect, int flags){ // no need to draw the focus rect for selected items, it would be invisible // anyhow if ( !(flags & wxCONTROL_SELECTED) ) { dc.SetPen(m_penFg); dc.SetBrush(*wxTRANSPARENT_BRUSH); dc.DrawRectangle(rect); }}// ----------------------------------------------------------------------------// label// ----------------------------------------------------------------------------void wxMonoRenderer::DrawButtonLabel(wxDC& dc, const wxString& label, const wxBitmap& image, const wxRect& rect, int flags, int alignment, int indexAccel, wxRect *rectBounds){ dc.SetTextForeground(m_penFg.GetColour()); dc.DrawLabel(label, image, rect, alignment, indexAccel, rectBounds); if ( flags & wxCONTROL_DISABLED ) { // this is ugly but I don't know how to show disabled button visually // in monochrome theme otherwise, so cross it out dc.SetPen(m_penFg);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -