implement vertical scrolling using BitBlt. It's faster and smoother, but

commented out for now since it may be better not to add so late in the cycle.
This commit is contained in:
ehouse 2006-06-22 04:59:18 +00:00
parent 8277d3736a
commit e8731492b4

View file

@ -933,12 +933,55 @@ DRAW_FUNC_NAME(destroyCtxt)( DrawCtx* p_dctx )
#ifdef DRAW_LINK_DIRECT
DLSTATIC XP_Bool
DRAW_FUNC_NAME(vertScrollBoard)( DrawCtx* dctx, XP_Rect* rect,
DRAW_FUNC_NAME(vertScrollBoard)( DrawCtx* p_dctx, XP_Rect* rect,
XP_S16 dist )
{
#if 0 /* don't turn this on until after ship? */
if ( dist < 0 ) {
return XP_FALSE;
}
} else {
XP_Bool success = XP_FALSE;
/* board passes in the whole board rect, so we need to subtract from it
the height of the area to be overwritten. If dist is negative, the
dest is above the src. Otherwise it's below. */
CEDrawCtx* dctx = (CEDrawCtx*)p_dctx;
CEAppGlobals* globals = dctx->globals;
int destY, srcY;
XP_Bool down = dist <= 0;
if ( down ) {
srcY = rect->top;
dist = -dist; /* make it positive */
destY = srcY + dist;
} else {
destY = rect->top;
srcY = destY + dist;
}
success = BitBlt( globals->hdc, /* HDC hdcDest, */
rect->left, /* int nXDest */
destY,
rect->width, /* width */
rect->height - dist, /* int nHeight */
globals->hdc, /* HDC hdcSrc */
rect->left, /* int nXSrc */
srcY,
SRCCOPY ); /* DWORD dwRop */
/* need to return the rect that must still be redrawn */
if ( success ) {
if ( !down ) {
rect->top += rect->height - dist;
}
rect->height = dist;
}
return success;
}
#else
return XP_FALSE;
#endif
}
#else /* #ifdef DRAW_LINK_DIRECT */
static void
ce_draw_doNothing( DrawCtx* dctx, ... )
{