1 /////////////////////////////////////////////////////////////////////////////// 
   2 // Name:        src/univ/themes/mono.cpp 
   3 // Purpose:     wxUniversal theme for monochrome displays 
   4 // Author:      Vadim Zeitlin 
   8 // Copyright:   (c) 2006 REA Elektronik GmbH 
   9 // Licence:     wxWindows licence 
  10 /////////////////////////////////////////////////////////////////////////////// 
  12 // =========================================================================== 
  14 // =========================================================================== 
  16 // --------------------------------------------------------------------------- 
  18 // --------------------------------------------------------------------------- 
  20 // for compilers that support precompilation, includes "wx.h". 
  21 #include "wx/wxprec.h" 
  27 #include "wx/univ/theme.h" 
  32     #include "wx/window.h" 
  36 #include "wx/artprov.h" 
  37 #include "wx/univ/stdrend.h" 
  38 #include "wx/univ/inphand.h" 
  39 #include "wx/univ/colschem.h" 
  41 class wxMonoColourScheme
; 
  43 #define wxMONO_BG_COL   (*wxWHITE) 
  44 #define wxMONO_FG_COL   (*wxBLACK) 
  46 // ---------------------------------------------------------------------------- 
  47 // wxMonoRenderer: draw the GUI elements in simplest possible way 
  48 // ---------------------------------------------------------------------------- 
  50 // Warning: many of the methods here are not implemented, the code won't work 
  51 // if any but a few wxUSE_XXXs are on 
  52 class wxMonoRenderer 
: public wxStdRenderer
 
  55     wxMonoRenderer(const wxColourScheme 
*scheme
); 
  57     virtual void DrawButtonLabel(wxDC
& dc
, 
  58                                  const wxString
& label
, 
  59                                  const wxBitmap
& image
, 
  62                                  int alignment 
= wxALIGN_LEFT 
| wxALIGN_TOP
, 
  64                                  wxRect 
*rectBounds 
= NULL
); 
  66     virtual void DrawFocusRect(wxWindow
* win
, wxDC
& dc
, const wxRect
& rect
, int flags 
= 0); 
  68     virtual void DrawButtonBorder(wxDC
& dc
, 
  71                                   wxRect 
*rectIn 
= NULL
); 
  73     virtual void DrawHorizontalLine(wxDC
& dc
, 
  74                                     wxCoord y
, wxCoord x1
, wxCoord x2
); 
  76     virtual void DrawVerticalLine(wxDC
& dc
, 
  77                                   wxCoord x
, wxCoord y1
, wxCoord y2
); 
  79     virtual void DrawArrow(wxDC
& dc
, 
  83     virtual void DrawScrollbarThumb(wxDC
& dc
, 
  87     virtual void DrawScrollbarShaft(wxDC
& dc
, 
  93     virtual void DrawToolBarButton(wxDC
& dc
, 
  94                                    const wxString
& label
, 
  95                                    const wxBitmap
& bitmap
, 
 100 #endif // wxUSE_TOOLBAR 
 103     virtual void DrawTab(wxDC
& dc
, 
 106                          const wxString
& label
, 
 107                          const wxBitmap
& bitmap 
= wxNullBitmap
, 
 109                          int indexAccel 
= -1); 
 110 #endif // wxUSE_NOTEBOOK 
 113     virtual void DrawSliderShaft(wxDC
& dc
, 
 116                                  wxOrientation orient
, 
 119                                  wxRect 
*rectShaft 
= NULL
); 
 121     virtual void DrawSliderThumb(wxDC
& dc
, 
 123                                  wxOrientation orient
, 
 127     virtual void DrawSliderTicks(wxDC
& dc
, 
 130                                  wxOrientation orient
, 
 136 #endif // wxUSE_SLIDER 
 139     virtual void DrawMenuBarItem(wxDC
& dc
, 
 141                                  const wxString
& label
, 
 143                                  int indexAccel 
= -1); 
 145     virtual void DrawMenuItem(wxDC
& dc
, 
 147                               const wxMenuGeometryInfo
& geometryInfo
, 
 148                               const wxString
& label
, 
 149                               const wxString
& accel
, 
 150                               const wxBitmap
& bitmap 
= wxNullBitmap
, 
 152                               int indexAccel 
= -1); 
 154     virtual void DrawMenuSeparator(wxDC
& dc
, 
 156                                    const wxMenuGeometryInfo
& geomInfo
); 
 157 #endif // wxUSE_MENUS 
 160     virtual void GetComboBitmaps(wxBitmap 
*bmpNormal
, 
 162                                  wxBitmap 
*bmpPressed
, 
 163                                  wxBitmap 
*bmpDisabled
); 
 164 #endif // wxUSE_COMBOBOX 
 167     virtual wxRect 
GetBorderDimensions(wxBorder border
) const; 
 170     virtual wxSize 
GetScrollbarArrowSize() const { return GetStdBmpSize(); } 
 171 #endif // wxUSE_SCROLLBAR 
 173     virtual wxSize 
GetCheckBitmapSize() const { return GetStdBmpSize(); } 
 174     virtual wxSize 
GetRadioBitmapSize() const { return GetStdBmpSize(); } 
 177     virtual wxSize 
GetToolBarButtonSize(wxCoord 
*separator
) const; 
 179     virtual wxSize 
GetToolBarMargin() const; 
 180 #endif // wxUSE_TOOLBAR 
 183     virtual wxSize 
GetTabIndent() const; 
 185     virtual wxSize 
GetTabPadding() const; 
 186 #endif // wxUSE_NOTEBOOK 
 189     virtual wxCoord 
GetSliderDim() const; 
 191     virtual wxCoord 
GetSliderTickLen() const; 
 193     virtual wxRect 
GetSliderShaftRect(const wxRect
& rect
, 
 195                                       wxOrientation orient
, 
 196                                       long style 
= 0) const; 
 198     virtual wxSize 
GetSliderThumbSize(const wxRect
& rect
, 
 200                                       wxOrientation orient
) const; 
 201 #endif // wxUSE_SLIDER 
 203     virtual wxSize 
GetProgressBarStep() const; 
 206     virtual wxSize 
GetMenuBarItemSize(const wxSize
& sizeText
) const; 
 208     virtual wxMenuGeometryInfo 
*GetMenuGeometry(wxWindow 
*win
, 
 209                                                 const wxMenu
& menu
) const; 
 210 #endif // wxUSE_MENUS 
 213     virtual wxCoord 
GetStatusBarBorderBetweenFields() const; 
 215     virtual wxSize 
GetStatusBarFieldMargins() const; 
 216 #endif // wxUSE_STATUSBAR 
 219     // override base class border drawing routines: we always draw just a 
 220     // single simple border 
 221     void DrawSimpleBorder(wxDC
& dc
, wxRect 
*rect
) 
 222         { DrawRect(dc
, rect
, m_penFg
); } 
 224     virtual void DrawRaisedBorder(wxDC
& dc
, wxRect 
*rect
) 
 225         { DrawSimpleBorder(dc
, rect
); } 
 226     virtual void DrawSunkenBorder(wxDC
& dc
, wxRect 
*rect
) 
 227         { DrawSimpleBorder(dc
, rect
); } 
 228     virtual void DrawAntiSunkenBorder(wxDC
& dc
, wxRect 
*rect
) 
 229         { DrawSimpleBorder(dc
, rect
); } 
 230     virtual void DrawBoxBorder(wxDC
& dc
, wxRect 
*rect
) 
 231         { DrawSimpleBorder(dc
, rect
); } 
 232     virtual void DrawStaticBorder(wxDC
& dc
, wxRect 
*rect
) 
 233         { DrawSimpleBorder(dc
, rect
); } 
 234     virtual void DrawExtraBorder(wxDC
& WXUNUSED(dc
), wxRect 
* WXUNUSED(rect
)) 
 235         { /* no extra borders for us */ } 
 237     // all our XPMs are of this size 
 238     static wxSize 
GetStdBmpSize() { return wxSize(8, 8); } 
 240     wxBitmap 
GetIndicator(IndicatorType indType
, int flags
); 
 241     virtual wxBitmap 
GetCheckBitmap(int flags
) 
 242         { return GetIndicator(IndicatorType_Check
, flags
); } 
 243     virtual wxBitmap 
GetRadioBitmap(int flags
) 
 244         { return GetIndicator(IndicatorType_Radio
, flags
); } 
 246     virtual wxBitmap 
GetFrameButtonBitmap(FrameButtonType type
); 
 247     virtual int GetFrameBorderWidth(int flags
) const; 
 250     // the bitmaps returned by GetIndicator() 
 251     wxBitmap m_bmpIndicators
[IndicatorType_MaxCtrl
] 
 252                             [IndicatorState_MaxCtrl
] 
 253                             [IndicatorStatus_Max
]; 
 255     static const char **ms_xpmIndicators
[IndicatorType_MaxCtrl
] 
 256                                         [IndicatorState_MaxCtrl
] 
 257                                         [IndicatorStatus_Max
]; 
 259     // the arrow bitmaps used by DrawArrow() 
 260     wxBitmap m_bmpArrows
[Arrow_Max
]; 
 262     static const char **ms_xpmArrows
[Arrow_Max
]; 
 264     // the close bitmap for the frame for GetFrameButtonBitmap() 
 265     wxBitmap m_bmpFrameClose
; 
 267     // pen used for foreground drawing 
 271 // ---------------------------------------------------------------------------- 
 273 // ---------------------------------------------------------------------------- 
 275 static const char *xpmUnchecked
[] = { 
 276 /* columns rows colors chars-per-pixel */ 
 291 static const char *xpmChecked
[] = { 
 292 /* columns rows colors chars-per-pixel */ 
 307 static const char *xpmUndeterminate
[] = { 
 308 /* columns rows colors chars-per-pixel */ 
 323 static const char *xpmRadioUnchecked
[] = { 
 324 /* columns rows colors chars-per-pixel */ 
 339 static const char *xpmRadioChecked
[] = { 
 340 /* columns rows colors chars-per-pixel */ 
 355 const char **wxMonoRenderer::ms_xpmIndicators
[IndicatorType_MaxCtrl
] 
 356                                              [IndicatorState_MaxCtrl
] 
 357                                              [IndicatorStatus_Max
] = 
 362         { xpmChecked
, xpmUnchecked
, xpmUndeterminate 
}, 
 365         { xpmUndeterminate
, xpmUndeterminate
, xpmUndeterminate 
}, 
 368         { xpmUndeterminate
, xpmUndeterminate
, xpmUndeterminate 
}, 
 374         { xpmRadioChecked
, xpmRadioUnchecked
, xpmUndeterminate 
}, 
 377         { xpmUndeterminate
, xpmUndeterminate
, xpmUndeterminate 
}, 
 380         { xpmUndeterminate
, xpmUndeterminate
, xpmUndeterminate 
}, 
 384 static const char *xpmLeftArrow
[] = { 
 385 /* columns rows colors chars-per-pixel */ 
 400 static const char *xpmRightArrow
[] = { 
 401 /* columns rows colors chars-per-pixel */ 
 416 static const char *xpmUpArrow
[] = { 
 417 /* columns rows colors chars-per-pixel */ 
 432 static const char *xpmDownArrow
[] = { 
 433 /* columns rows colors chars-per-pixel */ 
 448 const char **wxMonoRenderer::ms_xpmArrows
[Arrow_Max
] = 
 450     xpmLeftArrow
, xpmRightArrow
, xpmUpArrow
, xpmDownArrow
, 
 453 // ---------------------------------------------------------------------------- 
 454 // wxMonoColourScheme: uses just white and black 
 455 // ---------------------------------------------------------------------------- 
 457 class wxMonoColourScheme 
: public wxColourScheme
 
 460     // we use only 2 colours, white and black, but we avoid referring to them 
 461     // like this, instead use the functions below 
 462     wxColour 
GetFg() const { return wxMONO_FG_COL
; } 
 463     wxColour 
GetBg() const { return wxMONO_BG_COL
; } 
 465     // implement base class pure virtuals 
 466     virtual wxColour 
Get(StdColour col
) const; 
 467     virtual wxColour 
GetBackground(wxWindow 
*win
) const; 
 470 // ---------------------------------------------------------------------------- 
 472 // ---------------------------------------------------------------------------- 
 474 class wxMonoArtProvider 
: public wxArtProvider
 
 477     virtual wxBitmap 
CreateBitmap(const wxArtID
& id
, 
 478                                   const wxArtClient
& client
, 
 482 // ---------------------------------------------------------------------------- 
 484 // ---------------------------------------------------------------------------- 
 486 class wxMonoTheme 
: public wxTheme
 
 490     virtual ~wxMonoTheme(); 
 492     virtual wxRenderer 
*GetRenderer(); 
 493     virtual wxArtProvider 
*GetArtProvider(); 
 494     virtual wxInputHandler 
*GetInputHandler(const wxString
& control
, 
 495                                             wxInputConsumer 
*consumer
); 
 496     virtual wxColourScheme 
*GetColourScheme(); 
 499     wxMonoRenderer 
*m_renderer
; 
 500     wxMonoArtProvider 
*m_artProvider
; 
 501     wxMonoColourScheme 
*m_scheme
; 
 503     WX_DECLARE_THEME(mono
) 
 506 // ============================================================================ 
 508 // ============================================================================ 
 510 WX_IMPLEMENT_THEME(wxMonoTheme
, mono
, wxTRANSLATE("Simple monochrome theme")); 
 512 // ---------------------------------------------------------------------------- 
 514 // ---------------------------------------------------------------------------- 
 516 wxMonoTheme::wxMonoTheme() 
 520     m_artProvider 
= NULL
; 
 523 wxMonoTheme::~wxMonoTheme() 
 527     delete m_artProvider
; 
 530 wxRenderer 
*wxMonoTheme::GetRenderer() 
 534         m_renderer 
= new wxMonoRenderer(GetColourScheme()); 
 540 wxArtProvider 
*wxMonoTheme::GetArtProvider() 
 542     if ( !m_artProvider 
) 
 544         m_artProvider 
= new wxMonoArtProvider
; 
 547     return m_artProvider
; 
 550 wxColourScheme 
*wxMonoTheme::GetColourScheme() 
 554         m_scheme 
= new wxMonoColourScheme
; 
 560 wxInputHandler 
*wxMonoTheme::GetInputHandler(const wxString
& WXUNUSED(control
), 
 561                                              wxInputConsumer 
*consumer
) 
 563     // no special input handlers so far 
 564     return consumer
->DoGetStdInputHandler(NULL
); 
 567 // ============================================================================ 
 568 // wxMonoColourScheme 
 569 // ============================================================================ 
 571 wxColour 
wxMonoColourScheme::GetBackground(wxWindow 
*win
) const 
 574     if ( win
->UseBgCol() ) 
 576         // use the user specified colour 
 577         col 
= win
->GetBackgroundColour(); 
 580     // doesn't depend on the state 
 589 wxColour 
wxMonoColourScheme::Get(wxMonoColourScheme::StdColour col
) const 
 595         case CONTROL_PRESSED
: 
 596         case CONTROL_CURRENT
: 
 598         case SCROLLBAR_PRESSED
: 
 601         case TITLEBAR_ACTIVE
: 
 609             wxFAIL_MSG(_T("invalid standard colour")); 
 613         case SHADOW_HIGHLIGHT
: 
 617         case CONTROL_TEXT_DISABLED
: 
 618         case CONTROL_TEXT_DISABLED_SHADOW
: 
 620         case TITLEBAR_ACTIVE_TEXT
: 
 627 // ============================================================================ 
 629 // ============================================================================ 
 631 // ---------------------------------------------------------------------------- 
 633 // ---------------------------------------------------------------------------- 
 635 wxMonoRenderer::wxMonoRenderer(const wxColourScheme 
*scheme
) 
 636               : wxStdRenderer(scheme
) 
 638     m_penFg 
= wxPen(wxMONO_FG_COL
); 
 641 // ---------------------------------------------------------------------------- 
 643 // ---------------------------------------------------------------------------- 
 645 wxRect 
wxMonoRenderer::GetBorderDimensions(wxBorder border
) const 
 650         case wxBORDER_SIMPLE
: 
 651         case wxBORDER_STATIC
: 
 652         case wxBORDER_RAISED
: 
 653         case wxBORDER_SUNKEN
: 
 658         case wxBORDER_DOUBLE: 
 663             wxFAIL_MSG(_T("unknown border type")); 
 666         case wxBORDER_DEFAULT
: 
 681 void wxMonoRenderer::DrawButtonBorder(wxDC
& dc
, 
 686     DrawBorder(dc
, wxBORDER_SIMPLE
, rect
, flags
, rectIn
); 
 689 // ---------------------------------------------------------------------------- 
 691 // ---------------------------------------------------------------------------- 
 694 wxMonoRenderer::DrawHorizontalLine(wxDC
& dc
, wxCoord y
, wxCoord x1
, wxCoord x2
) 
 697     dc
.DrawLine(x1
, y
, x2 
+ 1, y
); 
 701 wxMonoRenderer::DrawVerticalLine(wxDC
& dc
, wxCoord x
, wxCoord y1
, wxCoord y2
) 
 704     dc
.DrawLine(x
, y1
, x
, y2 
+ 1); 
 707 void wxMonoRenderer::DrawFocusRect(wxWindow
* WXUNUSED(win
), wxDC
& dc
, const wxRect
& rect
, int flags
) 
 709     // no need to draw the focus rect for selected items, it would be invisible 
 711     if ( !(flags 
& wxCONTROL_SELECTED
) ) 
 714         dc
.SetBrush(*wxTRANSPARENT_BRUSH
); 
 715         dc
.DrawRectangle(rect
); 
 719 // ---------------------------------------------------------------------------- 
 721 // ---------------------------------------------------------------------------- 
 723 void wxMonoRenderer::DrawButtonLabel(wxDC
& dc
, 
 724                                      const wxString
& label
, 
 725                                      const wxBitmap
& image
, 
 732     dc
.DrawLabel(label
, image
, rect
, alignment
, indexAccel
, rectBounds
); 
 734     if ( flags 
& wxCONTROL_DISABLED 
) 
 736         // this is ugly but I don't know how to show disabled button visually 
 737         // in monochrome theme otherwise, so cross it out 
 739         dc
.DrawLine(rect
.GetTopLeft(), rect
.GetBottomRight()); 
 740         dc
.DrawLine(rect
.GetTopRight(), rect
.GetBottomLeft()); 
 744 // ---------------------------------------------------------------------------- 
 746 // ---------------------------------------------------------------------------- 
 748 wxBitmap 
wxMonoRenderer::GetIndicator(IndicatorType indType
, int flags
) 
 750     IndicatorState indState
; 
 751     IndicatorStatus indStatus
; 
 752     GetIndicatorsFromFlags(flags
, indState
, indStatus
); 
 754     wxBitmap
& bmp 
= m_bmpIndicators
[indType
][indState
][indStatus
]; 
 757         const char **xpm 
= ms_xpmIndicators
[indType
][indState
][indStatus
]; 
 760             // create and cache it 
 768 wxBitmap 
wxMonoRenderer::GetFrameButtonBitmap(FrameButtonType type
) 
 770     if ( type 
== FrameButton_Close 
) 
 772         if ( !m_bmpFrameClose
.Ok() ) 
 774             static const char *xpmFrameClose
[] = { 
 775             /* columns rows colors chars-per-pixel */ 
 790             m_bmpFrameClose 
= wxBitmap(xpmFrameClose
); 
 793         return m_bmpFrameClose
; 
 796     // we don't show any other buttons than close 
 800 // ---------------------------------------------------------------------------- 
 802 // ---------------------------------------------------------------------------- 
 806 void wxMonoRenderer::DrawToolBarButton(wxDC
& WXUNUSED(dc
), 
 807                                        const wxString
& WXUNUSED(label
), 
 808                                        const wxBitmap
& WXUNUSED(bitmap
), 
 809                                        const wxRect
& WXUNUSED(rect
), 
 811                                        long WXUNUSED(style
), 
 812                                        int WXUNUSED(tbarStyle
)) 
 814     wxFAIL_MSG(_T("TODO")); 
 817 wxSize 
wxMonoRenderer::GetToolBarButtonSize(wxCoord 
*WXUNUSED(separator
)) const 
 819     wxFAIL_MSG(_T("TODO")); 
 824 wxSize 
wxMonoRenderer::GetToolBarMargin() const 
 826     wxFAIL_MSG(_T("TODO")); 
 831 #endif // wxUSE_TOOLBAR 
 833 // ---------------------------------------------------------------------------- 
 835 // ---------------------------------------------------------------------------- 
 839 void wxMonoRenderer::DrawTab(wxDC
& WXUNUSED(dc
), 
 840                              const wxRect
& WXUNUSED(rect
), 
 841                              wxDirection 
WXUNUSED(dir
), 
 842                              const wxString
& WXUNUSED(label
), 
 843                              const wxBitmap
& WXUNUSED(bitmap
), 
 845                              int WXUNUSED(indexAccel
)) 
 847     wxFAIL_MSG(_T("TODO")); 
 850 wxSize 
wxMonoRenderer::GetTabIndent() const 
 852     wxFAIL_MSG(_T("TODO")); 
 857 wxSize 
wxMonoRenderer::GetTabPadding() const 
 859     wxFAIL_MSG(_T("TODO")); 
 864 #endif // wxUSE_NOTEBOOK 
 866 // ---------------------------------------------------------------------------- 
 868 // ---------------------------------------------------------------------------- 
 872 void wxMonoRenderer::GetComboBitmaps(wxBitmap 
*WXUNUSED(bmpNormal
), 
 873                                      wxBitmap 
*WXUNUSED(bmpFocus
), 
 874                                      wxBitmap 
*WXUNUSED(bmpPressed
), 
 875                                      wxBitmap 
*WXUNUSED(bmpDisabled
)) 
 877     wxFAIL_MSG(_T("TODO")); 
 880 #endif // wxUSE_COMBOBOX 
 882 // ---------------------------------------------------------------------------- 
 884 // ---------------------------------------------------------------------------- 
 888 void wxMonoRenderer::DrawMenuBarItem(wxDC
& WXUNUSED(dc
), 
 889                                      const wxRect
& WXUNUSED(rect
), 
 890                                      const wxString
& WXUNUSED(label
), 
 892                                      int WXUNUSED(indexAccel
)) 
 894     wxFAIL_MSG(_T("TODO")); 
 897 void wxMonoRenderer::DrawMenuItem(wxDC
& WXUNUSED(dc
), 
 899                                   const wxMenuGeometryInfo
& WXUNUSED(geometryInfo
), 
 900                                   const wxString
& WXUNUSED(label
), 
 901                                   const wxString
& WXUNUSED(accel
), 
 902                                   const wxBitmap
& WXUNUSED(bitmap
), 
 904                                   int WXUNUSED(indexAccel
)) 
 906     wxFAIL_MSG(_T("TODO")); 
 909 void wxMonoRenderer::DrawMenuSeparator(wxDC
& WXUNUSED(dc
), 
 911                                        const wxMenuGeometryInfo
& WXUNUSED(geomInfo
)) 
 913     wxFAIL_MSG(_T("TODO")); 
 916 wxSize 
wxMonoRenderer::GetMenuBarItemSize(const wxSize
& WXUNUSED(sizeText
)) const 
 918     wxFAIL_MSG(_T("TODO")); 
 923 wxMenuGeometryInfo 
*wxMonoRenderer::GetMenuGeometry(wxWindow 
*WXUNUSED(win
), 
 924                                                     const wxMenu
& WXUNUSED(menu
)) const 
 926     wxFAIL_MSG(_T("TODO")); 
 931 #endif // wxUSE_MENUS 
 933 // ---------------------------------------------------------------------------- 
 935 // ---------------------------------------------------------------------------- 
 939 void wxMonoRenderer::DrawSliderShaft(wxDC
& WXUNUSED(dc
), 
 940                                      const wxRect
& WXUNUSED(rect
), 
 941                                      int WXUNUSED(lenThumb
), 
 942                                      wxOrientation 
WXUNUSED(orient
), 
 944                                      long WXUNUSED(style
), 
 945                                      wxRect 
*WXUNUSED(rectShaft
)) 
 947     wxFAIL_MSG(_T("TODO")); 
 951 void wxMonoRenderer::DrawSliderThumb(wxDC
& WXUNUSED(dc
), 
 952                                      const wxRect
& WXUNUSED(rect
), 
 953                                      wxOrientation 
WXUNUSED(orient
), 
 955                                      long WXUNUSED(style
)) 
 957     wxFAIL_MSG(_T("TODO")); 
 960 void wxMonoRenderer::DrawSliderTicks(wxDC
& WXUNUSED(dc
), 
 961                                      const wxRect
& WXUNUSED(rect
), 
 962                                      int WXUNUSED(lenThumb
), 
 963                                      wxOrientation 
WXUNUSED(orient
), 
 968                                      long WXUNUSED(style
)) 
 970     wxFAIL_MSG(_T("TODO")); 
 973 wxCoord 
wxMonoRenderer::GetSliderDim() const 
 975     wxFAIL_MSG(_T("TODO")); 
 980 wxCoord 
wxMonoRenderer::GetSliderTickLen() const 
 982     wxFAIL_MSG(_T("TODO")); 
 988 wxRect 
wxMonoRenderer::GetSliderShaftRect(const wxRect
& WXUNUSED(rect
), 
 989                                           int WXUNUSED(lenThumb
), 
 990                                           wxOrientation 
WXUNUSED(orient
), 
 991                                           long WXUNUSED(style
)) const 
 993     wxFAIL_MSG(_T("TODO")); 
 998 wxSize 
wxMonoRenderer::GetSliderThumbSize(const wxRect
& WXUNUSED(rect
), 
 999                                           int WXUNUSED(lenThumb
), 
1000                                           wxOrientation 
WXUNUSED(orient
)) const 
1002     wxFAIL_MSG(_T("TODO")); 
1007 #endif // wxUSE_SLIDER 
1009 wxSize 
wxMonoRenderer::GetProgressBarStep() const 
1011     wxFAIL_MSG(_T("TODO")); 
1017 // ---------------------------------------------------------------------------- 
1019 // ---------------------------------------------------------------------------- 
1021 void wxMonoRenderer::DrawArrow(wxDC
& dc
, 
1024                                int WXUNUSED(flags
)) 
1026     ArrowDirection arrowDir 
= GetArrowDirection(dir
); 
1027     wxCHECK_RET( arrowDir 
!= Arrow_Max
, _T("invalid arrow direction") ); 
1029     wxBitmap
& bmp 
= m_bmpArrows
[arrowDir
]; 
1032         bmp 
= wxBitmap(ms_xpmArrows
[arrowDir
]); 
1035     wxRect 
rectArrow(0, 0, bmp
.GetWidth(), bmp
.GetHeight()); 
1036     dc
.DrawBitmap(bmp
, rectArrow
.CentreIn(rect
).GetPosition(), true /* use mask */); 
1039 void wxMonoRenderer::DrawScrollbarThumb(wxDC
& dc
, 
1040                                         wxOrientation 
WXUNUSED(orient
), 
1042                                         int WXUNUSED(flags
)) 
1044     DrawSolidRect(dc
, wxMONO_BG_COL
, rect
); 
1046     // manually draw stipple pattern (wxDFB doesn't implement the wxSTIPPLE 
1049     for ( wxCoord y 
= rect
.GetTop(); y 
<= rect
.GetBottom(); y
++ ) 
1051         for ( wxCoord x 
= rect
.GetLeft() + (y 
% 2); x 
<= rect
.GetRight(); x
+=2 ) 
1058 void wxMonoRenderer::DrawScrollbarShaft(wxDC
& dc
, 
1059                                         wxOrientation 
WXUNUSED(orient
), 
1061                                         int WXUNUSED(flags
)) 
1063     DrawSolidRect(dc
, wxMONO_BG_COL
, rect
); 
1066 // ---------------------------------------------------------------------------- 
1068 // ---------------------------------------------------------------------------- 
1072 wxCoord 
wxMonoRenderer::GetStatusBarBorderBetweenFields() const 
1077 wxSize 
wxMonoRenderer::GetStatusBarFieldMargins() const 
1079     return wxSize(1, 1); 
1082 #endif // wxUSE_STATUSBAR 
1084 // ---------------------------------------------------------------------------- 
1085 // top level windows 
1086 // ---------------------------------------------------------------------------- 
1088 int wxMonoRenderer::GetFrameBorderWidth(int WXUNUSED(flags
)) const 
1090     // all our borders are simple 
1094 // ---------------------------------------------------------------------------- 
1095 // wxMonoArtProvider 
1096 // ---------------------------------------------------------------------------- 
1098 wxBitmap 
wxMonoArtProvider::CreateBitmap(const wxArtID
& WXUNUSED(id
), 
1099                                          const wxArtClient
& WXUNUSED(client
), 
1100                                          const wxSize
& WXUNUSED(size
)) 
1102     return wxNullBitmap
; 
1105 #endif // wxUSE_THEME_MONO