Ejemplo n.º 1
0
/**
**      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;
  }
}
Ejemplo n.º 2
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
}