cache various bitmaps

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14218 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2002-02-14 21:51:07 +00:00
parent cc4bc3a06b
commit e3400e2eb9

View File

@ -475,6 +475,14 @@ private:
wxFont m_titlebarFont; wxFont m_titlebarFont;
// the checked and unchecked bitmaps for DrawCheckItem()
wxBitmap m_bmpCheckBitmaps[IndicatorStatus_Max];
// the bitmaps returned by GetIndicator()
wxBitmap m_bmpIndicators[IndicatorType_Max]
[IndicatorState_Max]
[IndicatorStatus_Max];
// titlebar icons: // titlebar icons:
wxBitmap m_bmpFrameButtons[FrameButton_Max]; wxBitmap m_bmpFrameButtons[FrameButton_Max];
@ -1068,7 +1076,7 @@ static const char *pressed_unchecked_radio_xpm[] = {
}; };
static const char ** static const char **
bmpIndicators[IndicatorType_Max][IndicatorState_Max][IndicatorStatus_Max] = xpmIndicators[IndicatorType_Max][IndicatorState_Max][IndicatorStatus_Max] =
{ {
// checkboxes first // checkboxes first
{ {
@ -1110,6 +1118,12 @@ static const char **
} }
}; };
static const char **xpmChecked[IndicatorStatus_Max] =
{
checked_item_xpm,
unchecked_item_xpm
};
// ============================================================================ // ============================================================================
// implementation // implementation
// ============================================================================ // ============================================================================
@ -2171,8 +2185,16 @@ void wxWin32Renderer::DrawCheckItem(wxDC& dc,
} }
else // use default bitmap else // use default bitmap
{ {
bmp = wxBitmap(flags & wxCONTROL_CHECKED ? checked_item_xpm IndicatorStatus i = flags & wxCONTROL_CHECKED
: unchecked_item_xpm); ? IndicatorStatus_Checked
: IndicatorStatus_Unchecked;
if ( !m_bmpCheckBitmaps[i].Ok() )
{
m_bmpCheckBitmaps[i] = wxBitmap(xpmChecked[i]);
}
bmp = m_bmpCheckBitmaps[i];
} }
dc.DrawBitmap(bmp, rect.x, rect.y + (rect.height - bmp.GetHeight()) / 2 - 1, dc.DrawBitmap(bmp, rect.x, rect.y + (rect.height - bmp.GetHeight()) / 2 - 1,
@ -2207,14 +2229,19 @@ wxBitmap wxWin32Renderer::GetIndicator(IndicatorType indType, int flags)
? IndicatorStatus_Checked ? IndicatorStatus_Checked
: IndicatorStatus_Unchecked; : IndicatorStatus_Unchecked;
const char **xpm = bmpIndicators[indType][indState][indStatus]; wxBitmap bmp = m_bmpIndicators[indType][indState][indStatus];
if (xpm) if ( !bmp.Ok() )
{ {
wxBitmap bmp(xpm); const char **xpm = xpmIndicators[indType][indState][indStatus];
return bmp; if ( xpm )
{
// create and cache it
bmp = wxBitmap(xpm);
m_bmpIndicators[indType][indState][indStatus] = bmp;
}
} }
else
return wxNullBitmap; return bmp;
} }
void wxWin32Renderer::DrawCheckOrRadioButton(wxDC& dc, void wxWin32Renderer::DrawCheckOrRadioButton(wxDC& dc,