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;
// 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:
wxBitmap m_bmpFrameButtons[FrameButton_Max];
@ -1068,7 +1076,7 @@ static const char *pressed_unchecked_radio_xpm[] = {
};
static const char **
bmpIndicators[IndicatorType_Max][IndicatorState_Max][IndicatorStatus_Max] =
xpmIndicators[IndicatorType_Max][IndicatorState_Max][IndicatorStatus_Max] =
{
// checkboxes first
{
@ -1110,6 +1118,12 @@ static const char **
}
};
static const char **xpmChecked[IndicatorStatus_Max] =
{
checked_item_xpm,
unchecked_item_xpm
};
// ============================================================================
// implementation
// ============================================================================
@ -2171,8 +2185,16 @@ void wxWin32Renderer::DrawCheckItem(wxDC& dc,
}
else // use default bitmap
{
bmp = wxBitmap(flags & wxCONTROL_CHECKED ? checked_item_xpm
: unchecked_item_xpm);
IndicatorStatus i = flags & wxCONTROL_CHECKED
? 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,
@ -2207,14 +2229,19 @@ wxBitmap wxWin32Renderer::GetIndicator(IndicatorType indType, int flags)
? IndicatorStatus_Checked
: IndicatorStatus_Unchecked;
const char **xpm = bmpIndicators[indType][indState][indStatus];
if (xpm)
wxBitmap bmp = m_bmpIndicators[indType][indState][indStatus];
if ( !bmp.Ok() )
{
wxBitmap bmp(xpm);
return bmp;
const char **xpm = xpmIndicators[indType][indState][indStatus];
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,