+ wxBitmap bmp;
+
+ if ( st & wxODDisabled )
+ {
+ bmp = GetDisabledBitmap();
+ }
+
+ if ( !bmp.Ok() )
+ {
+ // for not checkable bitmaps we should always use unchecked one
+ // because their checked bitmap is not set
+ bmp = GetBitmap(!IsCheckable() || (st & wxODChecked));
+
+#if wxUSE_IMAGE
+ if ( bmp.Ok() && st & wxODDisabled )
+ {
+ // we need to grey out the bitmap as we don't have any specific
+ // disabled bitmap
+ wxImage imgGrey = bmp.ConvertToImage().ConvertToGreyscale();
+ if ( imgGrey.Ok() )
+ bmp = wxBitmap(imgGrey);
+ }
+#endif // wxUSE_IMAGE
+ }
+
+ if ( bmp.Ok() )
+ {
+ wxMemoryDC dcMem(&dc);
+ dcMem.SelectObjectAsSource(bmp);
+
+ // center bitmap
+ int nBmpWidth = bmp.GetWidth(),
+ nBmpHeight = bmp.GetHeight();
+
+ // there should be enough space!
+ wxASSERT((nBmpWidth <= rc.GetWidth()) && (nBmpHeight <= rc.GetHeight()));
+
+ int heightDiff = m_nHeight - nBmpHeight;
+ dc.Blit(rc.x + (margin - nBmpWidth) / 2,
+ rc.y + heightDiff / 2,
+ nBmpWidth, nBmpHeight,
+ &dcMem, 0, 0, wxCOPY, true /* use mask */);
+
+ if ( ( st & wxODSelected ) && !( st & wxODDisabled ) && draw_bitmap_edge )
+ {
+ RECT rectBmp = { rc.GetLeft(), rc.GetTop(),
+ rc.GetLeft() + margin,
+ rc.GetTop() + m_nHeight };
+ SetBkColor(hdc, colBack);
+
+ DrawEdge(hdc, &rectBmp, BDR_RAISEDINNER, BF_RECT);
+ }
+ }