void GVOWorldMap::drawMap( HDC hdc, const GVOShip& ship )
{
+ const SIZE mapSize = scaledMapSize();
+ GVOImage scaledMapImage;
+ GVOImage *mapImage = &m_mapImage;
+
::SaveDC( hdc );
if ( m_viewScale < 1.0 ) {
- POINT brushOrg;
- ::GetBrushOrgEx( hdc, &brushOrg );
- ::SetStretchBltMode( hdc, HALFTONE );
- ::SetBrushOrgEx( hdc, brushOrg.x, brushOrg.y, NULL );
- }
- else {
- ::SetStretchBltMode( hdc, COLORONCOLOR );
+ // \8fk\8f¬\89æ\91\9c\95`\89æ\83R\83X\83g\82ð\8cy\8c¸\82·\82é\88×\82É\83L\83\83\83b\83V\83\85\82ð\8dì\90¬\81B
+ // \95p\94É\82É\8fk\8f¬\94ä\97¦\82ð\95Ï\8dX\82·\82é\8e\9e\82¾\82¯\83R\83X\83g\82ª\8d\82\82\95t\82\82ª\81A
+ // \96w\82Ç\82Ì\8fê\8d\87\82É\82¨\82¢\82ÄCPU\95\89\89×\82ª\8cy\8c¸\82³\82ê\82é\81B
+ if ( !m_reducedMapImageCache.isCompatible(mapSize) ) {
+ m_reducedMapImageCache.stretchCopy( m_mapImage, mapSize );
+ }
+ mapImage = &m_reducedMapImageCache;
}
+ ::SetStretchBltMode( hdc, COLORONCOLOR );
HDC hdcMem = ::CreateCompatibleDC( hdc );
::SaveDC( hdcMem );
- ::SelectObject( hdcMem, m_mapImage.bitmapHandle() );
+ ::SelectObject( hdcMem, mapImage->bitmapHandle() );
- const SIZE mapSize = scaledMapSize();
const POINT mapTopLeft = mapOriginInView();
int xDrawOrigin, yDrawOrigin;
mapSize.cx, mapSize.cy,
hdcMem,
0, 0,
- m_mapImage.width(), m_mapImage.height(),
+ mapImage->width(), mapImage->height(),
SRCCOPY );
xDrawOrigin += mapSize.cx;