コード例 #1
0
ファイル: GOL.c プロジェクト: varesa/SnakePIC32
/*********************************************************************
* Function: WORD GOLPanelDrawTsk(void) 
*
* PreCondition: parameters must be set with
*               GOLRndPanelDraw(x,y,radius,width,height,faceClr,embossLtClr,
*								embossDkClr,pBitmap,embossSize)
*
* Input: None
*
* Output: Output: non-zero if drawing is completed
*
* Overview: draws a rounded panel on screen. Must be called repeatedly. Drawing is done
*           when it returns non-zero. 
*
* Note: none
*
********************************************************************/
WORD GOLPanelDrawTsk(void)
{

#ifndef USE_NONBLOCKING_CONFIG

    WORD    counter;

    // check if we need to draw the panels and emboss sides
    if 	(
    		(_pRpnlBitmap == NULL) || 
    		(
    			((_rpnlX2 - _rpnlX1 + (_rpnlR<<1)) > GetImageWidth((void *)_pRpnlBitmap)) 	&& 
            	((_rpnlY2 - _rpnlY1 + (_rpnlR<<1)) > GetImageHeight((void *)_pRpnlBitmap))	&&
    			(_pRpnlBitmap != NULL)	
			)
        )
    {
	    if(_rpnlR)
	    {
	
	        // draw upper left portion of the embossed area
	        SetColor(_rpnlEmbossLtColor);
	        Arc(_rpnlX1, _rpnlY1, _rpnlX2, _rpnlY2, _rpnlR - _rpnlEmbossSize, _rpnlR, 0xE1);
	
	        // draw lower right portion of the embossed area
	        SetColor(_rpnlEmbossDkColor);
	        Arc(_rpnlX1, _rpnlY1, _rpnlX2, _rpnlY2, _rpnlR - _rpnlEmbossSize, _rpnlR, 0x1E);
	    }
	    else
	    {
	
	        // object is rectangular panel draw the embossed areas
	        counter = 1;
	        SetColor(_rpnlEmbossLtColor);
	        while(counter < _rpnlEmbossSize)
	        {
	            Bar(_rpnlX1 + counter, _rpnlY1 + counter, _rpnlX2 - counter, _rpnlY1 + counter);    // draw top
	            Bar(_rpnlX1 + counter, _rpnlY1 + counter, _rpnlX1 + counter, _rpnlY2 - counter);    // draw left
	            counter++;
	        }
	
	        counter = 1;
	        SetColor(_rpnlEmbossDkColor);
	        while(counter < _rpnlEmbossSize)
	        {
	            Bar(_rpnlX1 + counter, _rpnlY2 - counter, _rpnlX2 - counter, _rpnlY2 - counter);    // draw bottom
	            Bar(_rpnlX2 - counter, _rpnlY1 + counter, _rpnlX2 - counter, _rpnlY2 - counter);    // draw right	
	            counter++;
	        }
	    }
	
	    // draw the face color
	    SetColor(_rpnlFaceColor);
#ifdef USE_ALPHABLEND_LITE
        // set alpha value
        SetAlpha(_rpnlAlpha); 
#endif

	    if(_rpnlR)

#ifdef USE_GRADIENT
            if(_gradientScheme.gradientType != GRAD_NONE)
            {
                BevelGradient(_rpnlX1, _rpnlY1, _rpnlX2, _rpnlY2, _rpnlR - _rpnlEmbossSize,
                              _gradientScheme.gradientStartColor,_gradientScheme.gradientEndColor,
                              _gradientScheme.gradientLength,_gradientScheme.gradientType);
            }
            else
#endif
	        FillBevel(_rpnlX1, _rpnlY1, _rpnlX2, _rpnlY2, _rpnlR - _rpnlEmbossSize);
	    else
            { 

             Bar(_rpnlX1 + _rpnlEmbossSize, _rpnlY1 + _rpnlEmbossSize, _rpnlX2 - _rpnlEmbossSize, _rpnlY2 - _rpnlEmbossSize);
	        }
	            #if (COLOR_DEPTH == 1)
	    if(_rpnlFaceColor == _rpnlEmbossDkColor)
	    {
	        SetColor(_rpnlEmbossLtColor);
	        if(_rpnlR)
	            Bevel(_rpnlX1, _rpnlY1, _rpnlX2, _rpnlY2, _rpnlR - (_rpnlEmbossSize - 1));
	        else
	            Bevel
	            (
	                _rpnlX1 + (_rpnlEmbossSize - 1),
	                _rpnlY1 + (_rpnlEmbossSize - 1),
	                _rpnlX2 - (_rpnlEmbossSize - 1),
	                _rpnlY2 - (_rpnlEmbossSize - 1),
	                0
	            );
	    }
	
	            #endif
	} // end of check if we need to draw the panels and emboss sides
	
    // draw bitmap
    if(_pRpnlBitmap != NULL)
    {
        PutImage
        (
            (((_rpnlX2 + _rpnlX1) - (GetImageWidth((void *)_pRpnlBitmap))) >> 1) + 1,
            (((_rpnlY2 + _rpnlY1) - (GetImageHeight((void *)_pRpnlBitmap))) >> 1) + 1,
            _pRpnlBitmap,
            IMAGE_NORMAL
        );
   }
コード例 #2
0
ファイル: GOL.c プロジェクト: gexueyuan/11-ru
/*********************************************************************
* Function: WORD GOLPanelDrawTsk(void) 
*
* PreCondition: parameters must be set with
*               GOLRndPanelDraw(x,y,radius,width,height,faceClr,embossLtClr,
*								embossDkClr,pBitmap,embossSize)
*
* Input: None
*
* Output: Output: non-zero if drawing is completed
*
* Overview: draws a rounded panel on screen. Must be called repeatedly. Drawing is done
*           when it returns non-zero. 
*
* Note: none
*
********************************************************************/
WORD GOLPanelDrawTsk(void) {

//#define SIN45 46341

#ifndef USE_NONBLOCKING_CONFIG

	WORD counter;

	if (_rpnlR) {
		// draw upper left portion of the embossed area
		SetColor(_rpnlEmbossLtColor);
		Arc(_rpnlX1, _rpnlY1, _rpnlX2, _rpnlY2, _rpnlR-_rpnlEmbossSize, _rpnlR, 0xE1);	
		// draw lower right portion of the embossed area
		SetColor(_rpnlEmbossDkColor);
		Arc(_rpnlX1, _rpnlY1, _rpnlX2, _rpnlY2, _rpnlR-_rpnlEmbossSize, _rpnlR, 0x1E);	
	}
	else {
		// object is rectangular panel draw the embossed areas
		counter = 1;
	    SetColor(_rpnlEmbossLtColor);
    	while(counter < _rpnlEmbossSize){
   			Bar( _rpnlX1+counter, _rpnlY1+counter, _rpnlX2-counter, _rpnlY1+counter); 	// draw top
        	Bar( _rpnlX1+counter, _rpnlY1+counter, _rpnlX1+counter, _rpnlY2-counter);	// draw left
           	counter++;
       	}
       	counter = 1;
	    SetColor(_rpnlEmbossDkColor);
    	while(counter < _rpnlEmbossSize){
        	Bar( _rpnlX1+counter, _rpnlY2-counter, _rpnlX2-counter, _rpnlY2-counter);	// draw bottom
        	Bar( _rpnlX2-counter, _rpnlY1+counter, _rpnlX2-counter, _rpnlY2-counter);	// draw right	
           	counter++;
       	}
	}

	// draw bitmap
	if(_pRpnlBitmap != NULL) {
        if (!(_rpnlX2-_rpnlX1) && (_rpnlY2-_rpnlY1)) {			// vertical capsule
        	PutImage(_rpnlX1-(_rpnlR-_rpnlEmbossSize), _rpnlY1, _pRpnlBitmap,IMAGE_NORMAL);
        } else if ((_rpnlX2-_rpnlX1) && !(_rpnlY2-_rpnlY1)) {	// horizontal capsule
        	PutImage(_rpnlX1, _rpnlY1-(_rpnlR-_rpnlEmbossSize), _pRpnlBitmap,IMAGE_NORMAL);
        }	
        else if ((_rpnlX2-_rpnlX1) && (_rpnlY2-_rpnlY1)) {
	        if (_rpnlR) {  	// beveled 
	        	PutImage(_rpnlX1, _rpnlY1, _pRpnlBitmap,IMAGE_NORMAL);
			} else {			// square
	        	PutImage(_rpnlX1+_rpnlEmbossSize, _rpnlY1+_rpnlEmbossSize, _pRpnlBitmap,IMAGE_NORMAL);
	        }
	    } else if (!(_rpnlX2-_rpnlX1) && !(_rpnlY2-_rpnlY1)) { 	// circular 
        	PutImage(_rpnlX1-(_rpnlR-_rpnlEmbossSize), 
        			 _rpnlY1-(_rpnlR-_rpnlEmbossSize), _pRpnlBitmap,IMAGE_NORMAL);
      	} 
    } else {
	    // draw the face color
	    SetColor(_rpnlFaceColor);
		if (_rpnlR) 
		    FillBevel(_rpnlX1, _rpnlY1, _rpnlX2, _rpnlY2, _rpnlR-_rpnlEmbossSize);
		else    
		    Bar(_rpnlX1+_rpnlEmbossSize, _rpnlY1+_rpnlEmbossSize, _rpnlX2-_rpnlEmbossSize, _rpnlY2-_rpnlEmbossSize);	     
#ifdef USE_MONOCHROME
		if (_rpnlFaceColor == BLACK) {
			SetColor(WHITE);
			if (_rpnlR) 
	   			Bevel(_rpnlX1, _rpnlY1, _rpnlX2, _rpnlY2, _rpnlR-(_rpnlEmbossSize-1));	
	   		else	
    			Bevel(_rpnlX1+(_rpnlEmbossSize-1), _rpnlY1+(_rpnlEmbossSize-1), 
    				  _rpnlX2-(_rpnlEmbossSize-1), _rpnlY2-(_rpnlEmbossSize-1), 0);	
		}
#endif
	} 
    
	
	// draw the outline 
    SetColor(_rpnlEmbossDkColor);
    Bevel(_rpnlX1, _rpnlY1, _rpnlX2, _rpnlY2, _rpnlR);
    return 1;

#else

typedef enum {
BEGIN,
ARC1,
DRAW_EMBOSS1,
DRAW_EMBOSS2,
DRAW_EMBOSS3,
DRAW_EMBOSS4,
DRAW_FACECOLOR,
#ifdef USE_MONOCHROME
DRAW_INNERFRAME,
#endif
DRAW_FRAME,
} ROUND_PANEL_DRAW_STATES;

static ROUND_PANEL_DRAW_STATES state = BEGIN;
static WORD counter;

while(1){
    if(IsDeviceBusy())
        return 0;
    switch(state){
        case BEGIN:      
			if (_rpnlR) {
				// draw upper left portion of the embossed area
				SetColor(_rpnlEmbossLtColor);
				if (!Arc(_rpnlX1, _rpnlY1, _rpnlX2, _rpnlY2, _rpnlR-_rpnlEmbossSize, _rpnlR, 0xE1))	
					return 0;
				state = ARC1;
	        } 
	        else {
        		state = DRAW_EMBOSS1;
        		goto rnd_panel_draw_emboss;
        	}

        case ARC1:      
			// draw upper left portion of the embossed area
			SetColor(_rpnlEmbossDkColor);
			if (!Arc(_rpnlX1, _rpnlY1, _rpnlX2, _rpnlY2, _rpnlR-_rpnlEmbossSize, _rpnlR, 0x1E))
				return 0;	
        	state = DRAW_FACECOLOR;
        	goto rnd_panel_draw_facecolor;

		// now draw the upper portion of the embossed area
        case DRAW_EMBOSS1:
rnd_panel_draw_emboss:        
	    	SetColor(_rpnlEmbossLtColor);
            counter = 1;
            while(counter < _rpnlEmbossSize){
   	            if(IsDeviceBusy())
	       	            return 0;
	       	    // draw top        
				Bar( _rpnlX1+counter, _rpnlY1+counter,  \
				     _rpnlX2-counter, _rpnlY1+counter);
              	counter++;
           	}
            counter = 1;
           	state = DRAW_EMBOSS2;
           	break;

		case DRAW_EMBOSS2:
           	while(counter < _rpnlEmbossSize){
               	if(IsDeviceBusy())
                   	return 0;
                // draw left   	
	        	Bar( _rpnlX1+counter, _rpnlY1+counter,  \
	        	     _rpnlX1+counter, _rpnlY2-counter);	
               	counter++;
           	}
           	counter = 1;
           	state = DRAW_EMBOSS3;
           	break;

		// now draw the lower portion of the embossed area
		case DRAW_EMBOSS3:
		    SetColor(_rpnlEmbossDkColor);
	        while(counter < _rpnlEmbossSize){
                if(IsDeviceBusy())
       	            return 0;
       	        // draw bottom    
		       	Bar( _rpnlX1+counter, _rpnlY2-counter,   \
		       	     _rpnlX2-counter, _rpnlY2-counter);
             	counter++;
           	}
           	counter = 1;
           	state = DRAW_EMBOSS4;
           	break;

		case DRAW_EMBOSS4:
			while(counter < _rpnlEmbossSize){
               	if(IsDeviceBusy())
                   	return 0;
                // draw right	   	
	        	Bar( _rpnlX2-counter, _rpnlY1+counter,  \
	        		 _rpnlX2-counter, _rpnlY2-counter);	
    	       	counter++;
			}
            state = DRAW_FACECOLOR;
            break;

		// draw the face color 
		case DRAW_FACECOLOR:
rnd_panel_draw_facecolor:		

			if(_pRpnlBitmap != NULL) {
		        if (!(_rpnlX2-_rpnlX1) && (_rpnlY2-_rpnlY1)) 		// vertical capsule
		        	PutImage(_rpnlX1-(_rpnlR-_rpnlEmbossSize), _rpnlY1, _pRpnlBitmap,IMAGE_NORMAL);
		        else if ((_rpnlX2-_rpnlX1) && !(_rpnlY2-_rpnlY1))	// horizontal capsule
		        	PutImage(_rpnlX1, _rpnlY1-(_rpnlR-_rpnlEmbossSize), _pRpnlBitmap,IMAGE_NORMAL);
		        else if ((_rpnlX2-_rpnlX1) && (_rpnlY2-_rpnlY1)) {
			        if (_rpnlR)  	// beveled 
			        	PutImage(_rpnlX1, _rpnlY1, _pRpnlBitmap,IMAGE_NORMAL);
			        else			// square
			        	PutImage(_rpnlX1+_rpnlEmbossSize, _rpnlY1+_rpnlEmbossSize, _pRpnlBitmap,IMAGE_NORMAL);
			    }
		        else if (!(_rpnlX2-_rpnlX1) && !(_rpnlY2-_rpnlY1)) 	// circular 
		        	PutImage(_rpnlX1-(_rpnlR-_rpnlEmbossSize), 
		        			_rpnlY1-(_rpnlR-_rpnlEmbossSize), _pRpnlBitmap,IMAGE_NORMAL);
		    } else {
			    SetColor(_rpnlFaceColor);
				if (_rpnlR) {
				    if (!FillBevel(_rpnlX1, _rpnlY1, _rpnlX2, _rpnlY2, _rpnlR-_rpnlEmbossSize))
				    	return 0;
				}
				else  {  
				    Bar(_rpnlX1+_rpnlEmbossSize, _rpnlY1+_rpnlEmbossSize,    \
				    	_rpnlX2-_rpnlEmbossSize, _rpnlY2-_rpnlEmbossSize);
				}			    
	       	    #ifdef USE_MONOCHROME
	       	    	state = DRAW_INNERFRAME;
            		break;
	       	    #endif
				
			}
            state = DRAW_FRAME;
            break;

		#ifdef USE_MONOCHROME
		case DRAW_INNERFRAME:
   			if (_rpnlFaceColor == BLACK) {
   				SetColor(WHITE);
				if (_rpnlR) 
	    			Bevel(_rpnlX1, _rpnlY1, _rpnlX2, _rpnlY2, _rpnlR-(_rpnlEmbossSize-1));	
	    		else	
    				Bevel(_rpnlX1+(_rpnlEmbossSize-1), _rpnlY1+(_rpnlEmbossSize-1), 
    					  _rpnlX2-(_rpnlEmbossSize-1), _rpnlY2-(_rpnlEmbossSize-1), 0);	
	    			
    		}
            state = DRAW_FRAME;
            break;
		#endif	

		case DRAW_FRAME:
			// draw the outline frame
			#ifdef USE_MONOCHROME
		    	SetColor(WHITE);
		    #else	
		    	SetColor(_rpnlEmbossDkColor);
		    #endif	
		    Bevel(_rpnlX1, _rpnlY1, _rpnlX2, _rpnlY2, _rpnlR);
            state = BEGIN;
            return 1;
            
    }// end of switch
}// end of while
#endif //#ifndef USE_NONBLOCKING_CONFIG   
}