/** ** Let the (remaining) areas taken by the cursors, as determined by ** DrawAnyCursor and InvalidateAreaAndCheckcursor, be invalidated. ** Note: building-cursor is already invalidated by redraw-map */ global void InvalidateCursorAreas(void) { //Invalidate cursor sprite if ( OldCursorInvalidate ) { InvalidateArea(OldCursorX,OldCursorY,OldCursorW,OldCursorH); OldCursorInvalidate=0; } //Invalidate hidden cursor sprite if ( HiddenCursorW ) { InvalidateArea(HiddenCursorX,HiddenCursorY,HiddenCursorW,HiddenCursorH); HiddenCursorW=0; } //Invalidate cursor rectangle if ( OldCursorRectangleInvalidate ) { InvalidateRectangle(OldCursorRectangleX,OldCursorRectangleY, OldCursorRectangleW,OldCursorRectangleH); OldCursorRectangleInvalidate=0; } //Invalidate hidden cursor rectangle if ( HiddenCursorRectangleW ) { InvalidateRectangle(HiddenCursorRectangleX,HiddenCursorRectangleY, HiddenCursorRectangleW,HiddenCursorRectangleH); HiddenCursorRectangleW=0; } }
/********************************************************************* * Function: WORD GOLDraw() * * PreCondition: none * * Input: none * * Output: non-zero if drawing is complete * * Side Effects: none * * Overview: redraws objects in the current linked list * * Note: none * ********************************************************************/ WORD GOLDraw(void) { static OBJ_HEADER *pCurrentObj = NULL; SHORT done; #ifdef USE_DOUBLE_BUFFERING static BYTE DisplayUpdated = 0; if(IsDisplayUpdatePending()) { return 0; } #endif // USE_DOUBLE_BUFFERING if(pCurrentObj == NULL) { if(GOLDrawCallback()) { #ifdef USE_DOUBLE_BUFFERING #ifdef USE_TRANSITION_EFFECTS if(TransitionPendingStatus) { TransitionPendingStatus = 0; while(IsDisplayUpdatePending()); GFXExecutePendingTransition(GetDrawBufferAddress(), GetFrameBufferAddress()); } #endif #endif //USE_DOUBLE_BUFFERING // It's last object jump to head pCurrentObj = _pGolObjects; #ifdef USE_DOUBLE_BUFFERING if(DisplayUpdated) { RequestDisplayUpdate(); DisplayUpdated = 0; return(0); } #endif //USE_DOUBLE_BUFFERING } else { return (0); // drawing is not done } } done = 0; while(pCurrentObj != NULL) { if(IsObjUpdated(pCurrentObj)) { done = pCurrentObj->DrawObj(pCurrentObj); if(done) { GOLDrawComplete(pCurrentObj); #ifdef USE_DOUBLE_BUFFERING InvalidateRectangle(pCurrentObj->left, pCurrentObj->top, pCurrentObj->right, pCurrentObj->bottom); DisplayUpdated = 1; #endif //USE_DOUBLE_BUFFERING } else { return (0); // drawing is not done } } pCurrentObj = (OBJ_HEADER *)pCurrentObj->pNxtObj; } #if defined(USE_TRANSITION_EFFECTS) && defined(USE_DOUBLE_BUFFERING) TransitionPendingStatus = GFXIsTransitionPending(); InvalidateAll(); //If needed, invalidate only the transition rectangle instead #endif return (1); // drawing is completed }