/********************************************************************* * 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 ); }
/********************************************************************* * 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 }