Single Photo displayed on LPC4088
Dependencies: DMBasicGUI DMSupport
easyGUIFixed/GuiGraph.h
- Committer:
- jmitc91516
- Date:
- 2017-07-28
- Revision:
- 0:9140ec6aa604
File content as of revision 0:9140ec6aa604:
/* ************************************************************************ */ /* */ /* (C)2004-2015 IBIS Solutions ApS */ /* sales@easyGUI.com */ /* www.easyGUI.com */ /* */ /* Graphics include library */ /* v6.0.9.005 */ /* */ /* GuiLib.c include file - do NOT reference it in your linker setup */ /* */ /* ************************************************************************ */ //============================================================================== #define GuiLib_DEG 10 #define GuiLib_DEG360 360 * GuiLib_DEG #define GuiLib_RAD 4096 #define GuiLib_RAD_QUARTER_PI 3217 #define GuiLib_RAD_HALF_PI 6434 #define GuiLib_RAD_PI 12868 #define GuiLib_RAD_2_PI 25736 #define GuiLib_RAD_TO_DEG 573 //============================================================================== //------------------------------------------------------------------------------ GuiConst_INT32S GuiLib_DegToRad( GuiConst_INT32S Angle) { return ((GuiLib_RAD * Angle) / GuiLib_RAD_TO_DEG); } //------------------------------------------------------------------------------ GuiConst_INT32S GuiLib_RadToDeg( GuiConst_INT32S Angle) { return ((GuiLib_RAD_TO_DEG * Angle) / GuiLib_RAD); } //------------------------------------------------------------------------------ GuiConst_INT32S GuiLib_SinRad( GuiConst_INT32S Angle) { GuiConst_INT32S A, B, X2; Angle %= GuiLib_RAD_2_PI; if (Angle > GuiLib_RAD_PI) X2 = GuiLib_RAD_2_PI - Angle; else X2 = Angle; if (X2 > GuiLib_RAD_HALF_PI) X2 = GuiLib_RAD_PI - X2; A = ((((X2 * X2) >> 12) * X2) / 6) >> 12; B = ((((A * X2) >> 12) * X2) / 20) >> 12; B = X2 - A + B - ((((B * X2) / 42) * X2) >> 24); if (Angle > GuiLib_RAD_PI) return (-B); else return (B); } //------------------------------------------------------------------------------ GuiConst_INT32S GuiLib_SinDeg( GuiConst_INT32S Angle) { return (GuiLib_SinRad(GuiLib_DegToRad(Angle))); } //------------------------------------------------------------------------------ GuiConst_INT32S GuiLib_CosRad( GuiConst_INT32S Angle) { GuiConst_INT32S A, B, C, X2; Angle %= GuiLib_RAD_2_PI; if (Angle > GuiLib_RAD_PI) Angle = GuiLib_RAD_2_PI - Angle; if (Angle > GuiLib_RAD_HALF_PI) X2 = GuiLib_RAD_PI - Angle; else X2 = Angle; A = (X2 * X2) >> 13; B = ((((A * X2) >> 12) * X2) / 12) >> 12; C = (((B * X2) / 30) * X2) >> 24; C = GuiLib_RAD - A + B - C + (((((C * X2) / 8) * X2) / 7) >> 24); if (Angle > GuiLib_RAD_HALF_PI) return (-C); else return (C); } //------------------------------------------------------------------------------ GuiConst_INT32S GuiLib_CosDeg( GuiConst_INT32S Angle) { return (GuiLib_CosRad(GuiLib_DegToRad(Angle))); } //------------------------------------------------------------------------------ GuiConst_INT32U GuiLib_Sqrt( GuiConst_INT32U X) { GuiConst_INT32U X1, X2; if (X == 0) return (0); X1 = (X / 2) + 1; X2 = (X1 + (X / X1)) / 2; while (X2 < X1) { X1 = X2; X2 = (X1 + (X / X1)) / 2; } return (X1); } //------------------------------------------------------------------------------ GuiConst_INT8U GuiLib_GetRedRgbColor( GuiConst_INT32U RgbColor) { return (RgbColor & 0x000000FF); } //------------------------------------------------------------------------------ GuiConst_INT32U GuiLib_SetRedRgbColor( GuiConst_INT32U RgbColor, GuiConst_INT8U RedColor) { return ((RgbColor & 0x00FFFF00) | RedColor); } //------------------------------------------------------------------------------ GuiConst_INT8U GuiLib_GetGreenRgbColor( GuiConst_INT32U RgbColor) { return (GuiConst_INT8U)((RgbColor & 0x0000FF00) >> 8); } //------------------------------------------------------------------------------ GuiConst_INT32U GuiLib_SetGreenRgbColor( GuiConst_INT32U RgbColor, GuiConst_INT8U GreenColor) { return ((RgbColor & 0x00FF00FF) | ((GuiConst_INT32U)GreenColor << 8)); } //------------------------------------------------------------------------------ GuiConst_INT8U GuiLib_GetBlueRgbColor( GuiConst_INT32U RgbColor) { return (GuiConst_INT8U)((RgbColor & 0x00FF0000) >> 16); } //------------------------------------------------------------------------------ GuiConst_INT32U GuiLib_SetBlueRgbColor( GuiConst_INT32U RgbColor, GuiConst_INT8U BlueColor) { return ((RgbColor & 0xFF00FFFF) | ((GuiConst_INT32U)BlueColor << 16)); } //------------------------------------------------------------------------------ GuiConst_INTCOLOR GuiLib_RgbToPixelColor( GuiConst_INT32U RgbColor) { #ifdef GuiConst_COLOR_MODE_GRAY return ((GuiConst_COLOR_MAX * (GuiConst_INT16U)GuiLib_RgbColorToGrayScale(RgbColor)) / 255); #else #ifdef GuiConst_COLOR_MODE_PALETTE GuiConst_INT16U ColorR, ColorG, ColorB; GuiConst_INT16U I, I2, byte, shift; GuiConst_INT16U Rating, NewRating; GuiConst_INT32U PColor; ColorR = RgbColor & 0x000000FF; ColorG = (RgbColor & 0x0000FF00) >> 8; ColorB = (RgbColor & 0x00FF0000) >> 16; #ifndef GuiConst_COLOR_RGB_STANDARD ColorR = (GuiConst_COLORCODING_R_MAX * ColorR) / 255; ColorG = (GuiConst_COLORCODING_G_MAX * ColorG) / 255; ColorB = (GuiConst_COLORCODING_B_MAX * ColorB) / 255; #endif Rating = 0xFFFF; for (I = 0; I < GuiConst_PALETTE_SIZE; I++) { PColor = 0; for (byte=0,shift=0;byte < GuiConst_COLOR_BYTE_SIZE; byte++, shift +=8) PColor |= ((GuiConst_INT32U)GuiStruct_Palette[I][byte] << shift); NewRating = abs(ColorR - ((PColor & GuiConst_COLORCODING_R_MASK) >> GuiConst_COLORCODING_R_START)) + abs(ColorG - ((PColor & GuiConst_COLORCODING_G_MASK) >> GuiConst_COLORCODING_G_START)) + abs(ColorB - ((PColor & GuiConst_COLORCODING_B_MASK) >> GuiConst_COLORCODING_B_START)); if (NewRating < Rating) { Rating = NewRating; I2 = I; } } return (I2); #else #ifdef GuiConst_COLOR_RGB_STANDARD return (RgbColor); #else return ((((GuiConst_COLORCODING_R_MAX * (RgbColor & 0x000000FF)) / 255) << GuiConst_COLORCODING_R_START) | (((GuiConst_COLORCODING_G_MAX * ((RgbColor & 0x0000FF00) >> 8)) / 255) << GuiConst_COLORCODING_G_START) | (((GuiConst_COLORCODING_B_MAX * ((RgbColor & 0x00FF0000) >> 16)) / 255) << GuiConst_COLORCODING_B_START)); #endif #endif #endif } //------------------------------------------------------------------------------ GuiConst_INTCOLOR GuiLib_Rgb888ToPixelColor( GuiConst_INT8U Red, GuiConst_INT8U Green, GuiConst_INT8U Blue) { #ifdef GuiConst_COLOR_MODE_GRAY return ((GuiConst_COLOR_MAX * (GuiConst_INT16U)GuiLib_Rgb888ColorToGrayScale(Red, Green, Blue)) / 255); #else #ifdef GuiConst_COLOR_MODE_PALETTE GuiConst_INT16U ColorR, ColorG, ColorB; GuiConst_INT16U I, I2, byte, shift; GuiConst_INT16U Rating, NewRating; GuiConst_INT32U PColor; ColorR = Red; ColorG = Green; ColorB = Blue; #ifndef GuiConst_COLOR_RGB_STANDARD ColorR = (GuiConst_COLORCODING_R_MAX * ColorR) / 255; ColorG = (GuiConst_COLORCODING_G_MAX * ColorG) / 255; ColorB = (GuiConst_COLORCODING_B_MAX * ColorB) / 255; #endif Rating = 0xFFFF; for (I = 0; I < GuiConst_PALETTE_SIZE; I++) { PColor = 0; for (byte=0,shift=0;byte < GuiConst_COLOR_BYTE_SIZE; byte++, shift +=8) PColor |= ((GuiConst_INT32U)GuiStruct_Palette[I][byte] << shift); NewRating = abs(ColorR - ((PColor & GuiConst_COLORCODING_R_MASK) >> GuiConst_COLORCODING_R_START)) + abs(ColorG - ((PColor & GuiConst_COLORCODING_G_MASK) >> GuiConst_COLORCODING_G_START)) + abs(ColorB - ((PColor & GuiConst_COLORCODING_B_MASK) >> GuiConst_COLORCODING_B_START)); if (NewRating < Rating) { Rating = NewRating; I2 = I; } } return (I2); #else #ifdef GuiConst_COLOR_RGB_STANDARD return (Red | (Green << 8) | (Blue << 16)); #else return ((((GuiConst_COLORCODING_R_MAX * Red) / 255) << GuiConst_COLORCODING_R_START) | (((GuiConst_COLORCODING_G_MAX * Green) / 255) << GuiConst_COLORCODING_G_START) | (((GuiConst_COLORCODING_B_MAX * Blue) / 255) << GuiConst_COLORCODING_B_START)); #endif #endif #endif } //------------------------------------------------------------------------------ GuiConst_INT32U GuiLib_PixelToRgbColor( GuiConst_INTCOLOR PixelColor) { #ifdef GuiConst_COLOR_MODE_GRAY GuiConst_INT16U GrayValue; GrayValue = (255 * PixelColor) / GuiConst_COLOR_MAX; return (GuiLib_GrayScaleToRgbColor((GuiConst_INT8U)GrayValue)); #else GuiConst_INT32U PColor; #ifdef GuiConst_COLOR_MODE_PALETTE GuiConst_INT16U byte, shift; #endif #ifndef GuiConst_COLOR_RGB_STANDARD GuiConst_INT32U ColorR, ColorG, ColorB; #endif #ifdef GuiConst_COLOR_MODE_PALETTE PColor = 0; for (byte=0,shift=0;byte < GuiConst_COLOR_BYTE_SIZE; byte++, shift +=8) PColor |= ((GuiConst_INT32U)GuiStruct_Palette[PixelColor][byte] << shift); #else PColor = PixelColor; #endif #ifdef GuiConst_COLOR_RGB_STANDARD return (PColor); #else ColorR = (PColor & GuiConst_COLORCODING_R_MASK) >> GuiConst_COLORCODING_R_START; ColorG = (PColor & GuiConst_COLORCODING_G_MASK) >> GuiConst_COLORCODING_G_START; ColorB = (PColor & GuiConst_COLORCODING_B_MASK) >> GuiConst_COLORCODING_B_START; ColorR = (255 * ColorR) / GuiConst_COLORCODING_R_MAX; ColorG = (255 * ColorG) / GuiConst_COLORCODING_G_MAX; ColorB = (255 * ColorB) / GuiConst_COLORCODING_B_MAX; return (ColorR | (ColorG << 8) | (ColorB << 16)); #endif #endif } //------------------------------------------------------------------------------ GuiConst_INT8U GuiLib_RgbColorToGrayScale( GuiConst_INT32U RgbColor) { return (((RgbColor & 0x000000FF) + ((RgbColor & 0x0000FF00) >> 8) + ((RgbColor & 0x00FF0000) >> 16)) / 3); } //------------------------------------------------------------------------------ GuiConst_INT8U GuiLib_Rgb888ColorToGrayScale( GuiConst_INT8U Red, GuiConst_INT8U Green, GuiConst_INT8U Blue) { return ((Red + Green + Blue) / 3); } //------------------------------------------------------------------------------ GuiConst_INT32U GuiLib_GrayScaleToRgbColor( GuiConst_INT8U GrayValue) { return ((GuiConst_INT32U)GrayValue | ((GuiConst_INT32U)GrayValue << 8) | ((GuiConst_INT32U)GrayValue << 16)); } //------------------------------------------------------------------------------ GuiConst_INT8U GuiLib_PixelColorToGrayScale( GuiConst_INTCOLOR PixelColor) { return (GuiLib_RgbColorToGrayScale(GuiLib_PixelToRgbColor(PixelColor))); } //------------------------------------------------------------------------------ GuiConst_INTCOLOR GuiLib_GrayScaleToPixelColor( GuiConst_INT8U GrayValue) { return (GuiLib_RgbToPixelColor(GuiLib_GrayScaleToRgbColor(GrayValue))); } //------------------------------------------------------------------------------ GuiConst_INT32U GuiLib_BrightenRgbColor( GuiConst_INT32U RgbColor, GuiConst_INT16U Amount) { GuiConst_INT32U ColorR, ColorG, ColorB; if (Amount == 0) return (RgbColor); else { ColorR = 255 - ((GuiConst_INT32U)(255 - GuiLib_GetRedRgbColor(RgbColor)) * (1000 - Amount) / 1000); ColorG = 255 - ((GuiConst_INT32U)(255 - GuiLib_GetGreenRgbColor(RgbColor)) * (1000 - Amount) / 1000); ColorB = 255 - ((GuiConst_INT32U)(255 - GuiLib_GetBlueRgbColor(RgbColor)) * (1000 - Amount) / 1000); return (ColorR | (ColorG << 8) | (ColorB << 16)); } } //------------------------------------------------------------------------------ GuiConst_INTCOLOR GuiLib_BrightenPixelColor( GuiConst_INTCOLOR PixelColor, GuiConst_INT16U Amount) { return (GuiLib_RgbToPixelColor( GuiLib_BrightenRgbColor(GuiLib_PixelToRgbColor(PixelColor), Amount))); } //------------------------------------------------------------------------------ GuiConst_INT32U GuiLib_DarkenRgbColor( GuiConst_INT32U RgbColor, GuiConst_INT16U Amount) { GuiConst_INT32U ColorR, ColorG, ColorB; if (Amount == 0) return (RgbColor); else { ColorR = (GuiConst_INT32U)GuiLib_GetRedRgbColor(RgbColor) * (1000 - Amount) / 1000; ColorG = (GuiConst_INT32U)GuiLib_GetGreenRgbColor(RgbColor) * (1000 - Amount) / 1000; ColorB = (GuiConst_INT32U)GuiLib_GetBlueRgbColor(RgbColor) * (1000 - Amount) / 1000; return (ColorR | (ColorG << 8) | (ColorB << 16)); } } //------------------------------------------------------------------------------ GuiConst_INTCOLOR GuiLib_DarkenPixelColor( GuiConst_INTCOLOR PixelColor, GuiConst_INT16U Amount) { return (GuiLib_RgbToPixelColor( GuiLib_DarkenRgbColor(GuiLib_PixelToRgbColor(PixelColor), Amount))); } //------------------------------------------------------------------------------ GuiConst_INT32U GuiLib_MiddleRgbColor( GuiConst_INT32U RgbColor1, GuiConst_INT32U RgbColor2, GuiConst_INT16U Amount) { GuiConst_INT32S ColorR, ColorG, ColorB; if (Amount == 0) return (RgbColor1); else if (Amount >= 1000) return (RgbColor2); else { ColorR = (GuiConst_INT32U)GuiLib_GetRedRgbColor(RgbColor1); ColorR = ColorR + (((GuiConst_INT32S)Amount * ((GuiConst_INT32S)GuiLib_GetRedRgbColor(RgbColor2) - ColorR)) / 1000); ColorG = (GuiConst_INT32U)GuiLib_GetGreenRgbColor(RgbColor1); ColorG = ColorG + (((GuiConst_INT32S)Amount * ((GuiConst_INT32S)GuiLib_GetGreenRgbColor(RgbColor2) - ColorG)) / 1000); ColorB = (GuiConst_INT32U)GuiLib_GetBlueRgbColor(RgbColor1); ColorB = ColorB + (((GuiConst_INT32S)Amount * ((GuiConst_INT32S)GuiLib_GetBlueRgbColor(RgbColor2) - ColorB)) / 1000); return (ColorR | (ColorG << 8) | (ColorB << 16)); } } // ----------------------------------------------------------------------------- GuiConst_INTCOLOR GuiLib_MiddlePixelColor( GuiConst_INTCOLOR PixelColor1, GuiConst_INTCOLOR PixelColor2, GuiConst_INT16U Amount) { return (GuiLib_RgbToPixelColor( GuiLib_MiddleRgbColor(GuiLib_PixelToRgbColor(PixelColor1), GuiLib_PixelToRgbColor(PixelColor2), Amount))); } // ----------------------------------------------------------------------------- GuiConst_INT32U GuiLib_DesaturateRgbColor( GuiConst_INT32U RgbColor, GuiConst_INT16U Amount) { GuiConst_INT32U GrayValue; GuiConst_INT32U ColorDesat; GrayValue = (GuiConst_INT32U)GuiLib_RgbColorToGrayScale(RgbColor); ColorDesat = GrayValue | (GrayValue << 8) | (GrayValue << 16); return (GuiLib_MiddleRgbColor(RgbColor, ColorDesat, Amount)); } // ----------------------------------------------------------------------------- GuiConst_INTCOLOR GuiLib_DesaturatePixelColor( GuiConst_INTCOLOR PixelColor, GuiConst_INT16U Amount) { return (GuiLib_RgbToPixelColor( GuiLib_DesaturateRgbColor(GuiLib_PixelToRgbColor(PixelColor), Amount))); } //------------------------------------------------------------------------------ GuiConst_INT32U GuiLib_AccentuateRgbColor( GuiConst_INT32U RgbColor, GuiConst_INT16U Amount) { if (Amount == 0) return (RgbColor); else if (GuiLib_RgbColorToGrayScale(RgbColor) <= 127) return (GuiLib_BrightenRgbColor(RgbColor, Amount)); else return (GuiLib_DarkenRgbColor(RgbColor, Amount)); } //------------------------------------------------------------------------------ GuiConst_INTCOLOR GuiLib_AccentuatePixelColor( GuiConst_INTCOLOR PixelColor, GuiConst_INT16U Amount) { return (GuiLib_RgbToPixelColor( GuiLib_AccentuateRgbColor(GuiLib_PixelToRgbColor(PixelColor), Amount))); } //------------------------------------------------------------------------------ void Ellipse( GuiConst_INT16S X, GuiConst_INT16S Y, GuiConst_INT16U Radius1, GuiConst_INT16U Radius2, GuiConst_INT32S BorderColor, GuiConst_INT32S FillColor, GuiConst_INT8U Q1, GuiConst_INT8U Q2, GuiConst_INT8U Q3, GuiConst_INT8U Q4) { GuiConst_INT16S PX, PY; GuiConst_INT16S L1, L2, LP1, LP2, LX, LY; GuiConst_INT16S PX2, PY2; GuiConst_INTCOLOR BColor; GuiConst_INT8U Filling, LFilling, First; GuiConst_INT16S R1, R2; GuiConst_INT32S R22; GuiConst_INT8U Q12, Q34, Q14, Q23, Qfull; Filling = (FillColor != GuiLib_NO_COLOR); if (BorderColor == GuiLib_NO_COLOR) { if (!Filling) return; else BColor = (GuiConst_INTCOLOR)FillColor; } else BColor = (GuiConst_INTCOLOR)BorderColor; Q12 = (Q1 || Q2); Q34 = (Q3 || Q4); Q14 = (Q1 || Q4); Q23 = (Q2 || Q3); Qfull = Q1 & Q2 & Q3 & Q4; if (!(Q12 || Q34)) return; if (Radius1 == 0) { if (Qfull) GuiLib_VLine(X, Y - Radius2, Y + Radius2, BColor); else if (Q12) GuiLib_VLine(X, Y, Y + Radius2, BColor); else GuiLib_VLine(X, Y - Radius2, Y, BColor); } else if (Radius2 == 0) { if (Qfull) GuiLib_HLine(X - Radius1, X + Radius1, Y, BColor); else if (Q14) GuiLib_HLine(X, X + Radius1, Y, BColor); else GuiLib_HLine(X - Radius1, X, Y, BColor); } else if (Radius1 == 1) { PY = Radius2 / 2; if (Q23) { if (Q2 && Q3) GuiLib_VLine(X - 1, Y - PY, Y + PY, BColor); else if (Q2) GuiLib_VLine(X - 1, Y, Y + PY, BColor); else GuiLib_VLine(X - 1, Y - PY, Y, BColor); } if (Q34) GuiLib_VLine(X, Y - Radius2, Y - PY - 1, BColor); if (Filling) { if (Q12 && Q34) GuiLib_VLine(X, Y - PY, Y + PY, (GuiConst_INTCOLOR)FillColor); else if (Q12) GuiLib_VLine(X, Y, Y + PY, (GuiConst_INTCOLOR)FillColor); else GuiLib_VLine(X, Y - PY, Y, (GuiConst_INTCOLOR)FillColor); } if (Q12) GuiLib_VLine(X, Y + PY + 1, Y + Radius2, BColor); if (Q14) { if (Q1 && Q4) GuiLib_VLine(X + 1, Y - PY, Y + PY, BColor); else if (Q1) GuiLib_VLine(X + 1, Y, Y + PY, BColor); else GuiLib_VLine(X + 1, Y - PY, Y, BColor); } } else if (Radius2 == 1) { PX = Radius1 / 2; if (Q34) { if (Q3 && Q4) GuiLib_HLine(X - PX, X + PX, Y - 1, BColor); else if (Q4) GuiLib_HLine(X, X + PX, Y - 1, BColor); else GuiLib_HLine(X - PX, X, Y - 1, BColor); } if (Q23) GuiLib_HLine(X - Radius1, X - PX - 1, Y, BColor); if (Filling) { if (Q14 && Q23) GuiLib_HLine(X - PX, X + PX, Y, (GuiConst_INTCOLOR)FillColor); else if (Q14) GuiLib_HLine(X, X + PX, Y, (GuiConst_INTCOLOR)FillColor); else GuiLib_HLine(X - PX, X, Y, (GuiConst_INTCOLOR)FillColor); } if (Q14) GuiLib_HLine(X + PX + 1, X + Radius1, Y, BColor); if (Q12) { if (Q1 && Q2) GuiLib_HLine(X - PX, X + PX, Y + 1, BColor); else if (Q1) GuiLib_HLine(X, X + PX, Y + 1, BColor); else GuiLib_HLine(X - PX, X, Y + 1, BColor); } } else { R1 = Radius1 << 3; R2 = Radius2 << 3; if (Radius1 >= Radius2) { R22 = (GuiConst_INT32S)R2 * R2; PX = 0; First = 1; for (PY = R2 - 4; PY >= 4; PY -= 8) { PX2 = PX + 8; PX = (GuiConst_INT16S)((R1 * GuiLib_Sqrt((0x00000400 - ((((GuiConst_INT32S)PY * (PY + 3)) << 10) / R22)) << 8)) >> 9) + 1; LY = (PY + 4) >> 3; if (First) { L1 = X - (PX >> 3); L2 = X + (PX >> 3); if (Q12) { if (Q1 && Q2) GuiLib_HLine(L1, L2, Y + LY, BColor); else if (Q1) GuiLib_HLine(X, L2, Y + LY, BColor); else GuiLib_HLine(L1, X, Y + LY, BColor); } if (Q34) { if (Q3 && Q4) GuiLib_HLine(L1, L2, Y - LY, BColor); else if (Q4) GuiLib_HLine(X, L2, Y - LY, BColor); else GuiLib_HLine(L1, X, Y - LY, BColor); } First = 0; } else { LP1 = X - (PX2 >> 3); LP2 = X + (PX2 >> 3); L1 = X - (PX >> 3); L2 = X + (PX >> 3); if (LP1 < L1) { LP1 = L1; LP2 = L2; } LFilling = Filling & (LP2 - LP1 >= 2); if (Q12) { if (Q2) GuiLib_HLine(L1, LP1, Y + LY, BColor); if (LFilling) { if (Q1 && Q2) GuiLib_HLine(LP1 + 1, LP2 - 1, Y + LY, (GuiConst_INTCOLOR)FillColor); else if (Q1) GuiLib_HLine(X, LP2 - 1, Y + LY, (GuiConst_INTCOLOR)FillColor); else GuiLib_HLine(LP1 + 1, X, Y + LY, (GuiConst_INTCOLOR)FillColor); } if (Q1) GuiLib_HLine(LP2, L2, Y + LY, BColor); } if (Q34) { if (Q3) GuiLib_HLine(L1, LP1, Y - LY, BColor); if (LFilling) { if (Q3 && Q4) GuiLib_HLine(LP1 + 1, LP2 - 1, Y - LY, (GuiConst_INTCOLOR)FillColor); else if (Q4) GuiLib_HLine(X, LP2 - 1, Y - LY, (GuiConst_INTCOLOR)FillColor); else GuiLib_HLine(LP1 + 1, X, Y - LY, (GuiConst_INTCOLOR)FillColor); } if (Q4) GuiLib_HLine(LP2, L2, Y - LY, BColor); } } } L1 = (PX + 8) >> 3; if (L1 > Radius1) L1 = Radius1; if (Q23) GuiLib_HLine(X - Radius1, X - L1, Y, BColor); if (Filling & (L1 >= 1)) { if (Q14 && Q23) GuiLib_HLine(X - L1 + 1, X + L1 - 1, Y, (GuiConst_INTCOLOR)FillColor); else if (Q14) GuiLib_HLine(X, X + L1 - 1, Y, (GuiConst_INTCOLOR)FillColor); else GuiLib_HLine(X - L1 + 1, X, Y, (GuiConst_INTCOLOR)FillColor); } if (Q14) GuiLib_HLine(X + L1, X + Radius1, Y, BColor); } else { R22 = (GuiConst_INT32S)R1 * R1; PY = 0; First = 1; for (PX = R1 - 4; PX >= 4; PX -= 8) { PY2 = PY + 8; PY = (GuiConst_INT16S)((R2 * GuiLib_Sqrt((0x00000400 - ((((GuiConst_INT32S)PX * (PX + 3)) << 10) / R22)) << 8)) >> 9) + 1; LX = (PX + 4) >> 3; if (First) { L1 = Y - (PY >> 3); L2 = Y + (PY >> 3); if (Q14) { if (Q1 && Q4) GuiLib_VLine(X + LX, L1, L2, BColor); else if (Q1) GuiLib_VLine(X + LX, Y, L2, BColor); else GuiLib_VLine(X + LX, L1, Y, BColor); } if (Q23) { if (Q2 && Q3) GuiLib_VLine(X - LX, L1, L2, BColor); else if (Q2) GuiLib_VLine(X - LX, Y, L2, BColor); else GuiLib_VLine(X - LX, L1, Y, BColor); } First = 0; } else { LP1 = Y - (PY2 >> 3); LP2 = Y + (PY2 >> 3); L1 = Y - (PY >> 3); L2 = Y + (PY >> 3); if (LP1 < L1) { LP1 = L1; LP2 = L2; } LFilling = Filling & (LP2 - LP1 >= 2); if (Q14) { if (Q4) GuiLib_VLine(X + LX, L1, LP1, BColor); if (LFilling) { if (Q1 && Q4) GuiLib_VLine(X + LX, LP1 + 1, LP2 - 1, (GuiConst_INTCOLOR)FillColor); else if (Q1) GuiLib_VLine(X + LX, Y, LP2 - 1, (GuiConst_INTCOLOR)FillColor); else GuiLib_VLine(X + LX, LP1 + 1, Y, (GuiConst_INTCOLOR)FillColor); } if (Q1) GuiLib_VLine(X + LX, LP2, L2, BColor); } if (Q23) { if (Q3) GuiLib_VLine(X - LX, L1, LP1, BColor); if (LFilling) { if (Q2 && Q3) GuiLib_VLine(X - LX, LP1 + 1, LP2 - 1, (GuiConst_INTCOLOR)FillColor); else if (Q2) GuiLib_VLine(X - LX, Y, LP2 - 1, (GuiConst_INTCOLOR)FillColor); else GuiLib_VLine(X - LX, LP1 + 1, Y, (GuiConst_INTCOLOR)FillColor); } if (Q2) GuiLib_VLine(X - LX, LP2, L2, BColor); } } } L1 = (PY + 8) >> 3; if (L1 > Radius2) L1 = Radius2; if (Q34) GuiLib_VLine(X, Y - Radius2, Y - L1, BColor); if (Filling & (L1 >= 1)) { if (Q12 && Q34) GuiLib_VLine(X, Y - L1 + 1, Y + L1 - 1, (GuiConst_INTCOLOR)FillColor); else if (Q12) GuiLib_VLine(X, Y, Y + L1 - 1, (GuiConst_INTCOLOR)FillColor); else GuiLib_VLine(X, Y - L1 + 1, Y, (GuiConst_INTCOLOR)FillColor); } if (Q12) GuiLib_VLine(X, Y + L1, Y + Radius2, BColor); } } } //------------------------------------------------------------------------------ void Circle( GuiConst_INT16S X, GuiConst_INT16S Y, GuiConst_INT16U Radius, GuiConst_INTCOLOR Color, GuiConst_INT8U S0, GuiConst_INT8U S1, GuiConst_INT8U S2, GuiConst_INT8U S3, GuiConst_INT8U S4, GuiConst_INT8U S5, GuiConst_INT8U S6, GuiConst_INT8U S7, GuiConst_INT8U IF) { GuiConst_INT16S PX, PY, PX2; GuiConst_INT16S L1, L2, LP1, LP2, LX, LY, LX2; GuiConst_INT8U First; GuiConst_INT16S R; GuiConst_INT32S R2; if (!(S0 || S1 || S2 || S3 || S4 || S5 || S6 || S7)) return; if (Radius == 0) return; if (Radius == 1) { if (S7 || S0) GuiLib_Dot(X + 1, Y, Color); if (S1 || S2) GuiLib_Dot(X, Y + 1, Color); if (S3 || S4) GuiLib_Dot(X - 1, Y, Color); if (S5 || S6) GuiLib_Dot(X, Y - 1, Color); } else { R = Radius << 3; R2 = (GuiConst_INT32S)R * R; First = 1; PX = 0; for (PY = R - 4; PY >= R / 2; PY -= 8) { PX2 = PX + 8; PX = (GuiConst_INT16S)((R * GuiLib_Sqrt((0x00000400 - ((((GuiConst_INT32S)PY * (PY + 3)) << 10) / R2)) << 8)) >> 9) + 1; LX2 = (PX2 + 4) >> 3; LX = (PX + 4) >> 3; LY = (PY + 4) >> 3; if (First) { if (S1 || S2) { if (S1) L2 = X + LX; else L2 = X; if (S2) L1 = X - LX; else L1 = X; GuiLib_HLine(L1, L2, Y + LY, Color); if (IF) GuiLib_HLine(L1, L2, Y + LY - 1, Color); } if (S5 || S6) { if (S5) L1 = X - LX; else L1 = X; if (S6) L2 = X + LX; else L2 = X; GuiLib_HLine(L1, L2, Y - LY, Color); if (IF) GuiLib_HLine(L1, L2, Y - LY +1, Color); } if (S3 || S4) { if (S3) L2 = Y + LX; else L2 = Y; if (S4) L1 = Y - LX; else L1 = Y; GuiLib_VLine(X - LY, L1, L2, Color); if (IF) GuiLib_VLine(X - LY + 1, L1, L2, Color); } if (S7 || S0) { if (S7) L1 = Y - LX; else L1 = Y; if (S0) L2 = Y + LX; else L2 = Y; GuiLib_VLine(X + LY, L1, L2, Color); if (IF) GuiLib_VLine(X + LY - 1, L1, L2, Color); } First = 0; } else if (LX < LY) { LP1 = X - LX2; LP2 = X + LX2; L1 = X - LX; L2 = X + LX; if (S1) { GuiLib_HLine(LP2, L2, Y + LY, Color); if (IF) GuiLib_HLine(LP2, L2, Y + LY - 1, Color); } if (S2) { GuiLib_HLine(L1, LP1, Y + LY, Color); if (IF) GuiLib_HLine(L1, LP1, Y + LY - 1, Color); } if (S5) { GuiLib_HLine(L1, LP1, Y - LY, Color); if (IF) GuiLib_HLine(L1, LP1, Y - LY + 1, Color); } if (S6) { GuiLib_HLine(LP2, L2, Y - LY, Color); if (IF) GuiLib_HLine(LP2, L2, Y - LY + 1, Color); } LP1 = Y - LX2; LP2 = Y + LX2; L1 = Y - LX; L2 = Y + LX; if (S7) { GuiLib_VLine(X + LY, L1, LP1, Color); if (IF) GuiLib_VLine(X + LY - 1, L1, LP1, Color); } if (S0) { GuiLib_VLine(X + LY, LP2, L2, Color); if (IF) GuiLib_VLine(X + LY - 1, LP2, L2, Color); } if (S3) { GuiLib_VLine(X - LY, LP2, L2, Color); if (IF) GuiLib_VLine(X - LY + 1, LP2, L2, Color); } if (S4) { GuiLib_VLine(X - LY, L1, LP1, Color); if (IF) GuiLib_VLine(X - LY + 1, L1, LP1, Color); } } else { if (S0) { GuiLib_Dot(X + LY, Y + LX2, Color); if (IF) GuiLib_Dot(X + LY - 1, Y + LX2, Color); } if (S1) { GuiLib_Dot(X + LX2, Y + LY, Color); if (IF) GuiLib_Dot(X + LX2, Y + LY - 1, Color); } if (S2) { GuiLib_Dot(X - LX2, Y + LY, Color); if (IF) GuiLib_Dot(X - LX2, Y + LY - 1, Color); } if (S3) { GuiLib_Dot(X - LY, Y + LX2, Color); if (IF) GuiLib_Dot(X - LY + 1, Y + LX2, Color); } if (S4) { GuiLib_Dot(X - LY, Y - LX2, Color); if (IF) GuiLib_Dot(X - LY + 1, Y - LX2, Color); } if (S5) { GuiLib_Dot(X - LX2, Y - LY, Color); if (IF) GuiLib_Dot(X - LX2, Y - LY + 1, Color); } if (S6) { GuiLib_Dot(X + LX2, Y - LY, Color); if (IF) GuiLib_Dot(X + LX2, Y - LY + 1, Color); } if (S7) { GuiLib_Dot(X + LY, Y - LX2, Color); if (IF) GuiLib_Dot(X + LY - 1, Y - LX2, Color); } break; } } if (S7 || S0) GuiLib_Dot(X + Radius, Y, Color); if (S3 || S4) GuiLib_Dot(X - Radius, Y, Color); } } //------------------------------------------------------------------------------ void FilledCircle( GuiConst_INT16S X, GuiConst_INT16S Y, GuiConst_INT16U Radius, GuiConst_INTCOLOR Color) { GuiConst_INT16S PX, PY, PX2; GuiConst_INT16S LX, LY, LXY, LX2; GuiConst_INT16S R; GuiConst_INT32S R2; if (Radius == 0) return; if (Radius == 1) { GuiLib_Dot(X, Y - 1, Color); GuiLib_HLine(X - 1, X + 1, Y, Color); GuiLib_Dot(X, Y + 1, Color); } else { R = Radius << 3; R2 = (GuiConst_INT32S)R * R; LXY = (707 * (GuiConst_INT32S)Radius) / 1000; PX = 0; LY = 0; for (PY = R - 4; PY >= R / 2; PY -= 8) { PX2 = PX + 8; PX = (GuiConst_INT16S)((R * GuiLib_Sqrt((0x00000400 - ((((GuiConst_INT32S)PY * (PY + 3)) << 10) / R2)) << 8)) >> 9) + 1; LX2 = (PX2 + 4) >> 3; LX = (PX + 4) >> 3; LY = (PY + 4) >> 3; if (LX < LY) { GuiLib_HLine(X - LX, X + LX, Y + LY, Color); GuiLib_HLine(X - LX, X + LX, Y - LY, Color); if (LX > LXY) LX = LXY; GuiLib_VLine(X - LY, Y - LX, Y + LX, Color); GuiLib_VLine(X + LY, Y - LX, Y + LX, Color); } else { GuiLib_HLine(X - LX2, X + LX2, Y - LY, Color); GuiLib_HLine(X - LX2, X + LX2, Y + LY, Color); GuiLib_VLine(X - LY, Y - LX2, Y + LX2, Color); GuiLib_VLine(X + LY, Y - LX2, Y + LX2, Color); break; } } GuiLib_FillBox(X - LY + 1, Y - LY + 1, X + LY - 1, Y + LY - 1, Color); } } //------------------------------------------------------------------------------ void GuiLib_Circle( GuiConst_INT16S X, GuiConst_INT16S Y, GuiConst_INT16U Radius, GuiConst_INT32S BorderColor, GuiConst_INT32S FillColor) { Ellipse(X, Y, Radius, Radius, BorderColor, FillColor, 1, 1, 1, 1); } //------------------------------------------------------------------------------ void GuiLib_Ellipse( GuiConst_INT16S X, GuiConst_INT16S Y, GuiConst_INT16U Radius1, GuiConst_INT16U Radius2, GuiConst_INT32S BorderColor, GuiConst_INT32S FillColor) { Ellipse(X, Y, Radius1, Radius2, BorderColor, FillColor, 1, 1, 1, 1); } //============================================================================== #ifdef GuiConst_CLIPPING_SUPPORT_ON //------------------------------------------------------------------------------ void GuiLib_ResetClipping(void) { sgl.ClippingTotal = 0; SetClipping( 0, 0, GuiConst_DISPLAY_WIDTH_HW - 1, GuiConst_DISPLAY_HEIGHT_HW - 1); } //------------------------------------------------------------------------------ void GuiLib_SetClipping( GuiConst_INT16S X1, GuiConst_INT16S Y1, GuiConst_INT16S X2, GuiConst_INT16S Y2) { sgl.ClippingTotal = ((X1 > X2) || (Y1 > Y2)); GuiLib_COORD_ADJUST(X1, Y1); GuiLib_COORD_ADJUST(X2, Y2); OrderCoord(&X1, &X2); OrderCoord(&Y1, &Y2); SetClipping(X1, Y1, X2, Y2); } #endif //------------------------------------------------------------------------------ void GuiLib_ResetDisplayRepaint(void) { GuiConst_INT16S LineNo; if (!sgl.BaseLayerDrawing) return; for (LineNo = 0; LineNo < GuiConst_BYTE_LINES; LineNo++) { GuiLib_DisplayRepaint[LineNo].ByteEnd = -1; #ifdef GuiConst_VNC_REMOTE_SUPPORT_ON GuiLib_VncRepaint[LineNo].ByteEnd = -1; #endif } } //------------------------------------------------------------------------------ void GuiLib_MarkDisplayBoxRepaint( GuiConst_INT16S X1, GuiConst_INT16S Y1, GuiConst_INT16S X2, GuiConst_INT16S Y2) { if (!sgl.BaseLayerDrawing) return; GuiLib_COORD_ADJUST(X1, Y1); GuiLib_COORD_ADJUST(X2, Y2); OrderCoord(&X1, &X2); OrderCoord(&Y1, &Y2); #ifdef GuiConst_CLIPPING_SUPPORT_ON if (CheckRect (&X1, &Y1, &X2, &Y2)) #endif MarkDisplayBoxRepaint(X1, Y1, X2, Y2); } //------------------------------------------------------------------------------ void GuiLib_ClearDisplay(void) { ClearDisplay(); MarkDisplayBoxRepaint( 0, 0, GuiConst_DISPLAY_WIDTH_HW - 1, GuiConst_DISPLAY_HEIGHT_HW - 1); } //------------------------------------------------------------------------------ void GuiLib_Dot( GuiConst_INT16S X, GuiConst_INT16S Y, GuiConst_INTCOLOR Color) { GuiLib_COORD_ADJUST(X, Y); GuiLib_COLOR_ADJUST(Color); MakeDot(X, Y, Color); } //------------------------------------------------------------------------------ GuiConst_INTCOLOR GuiLib_GetDot( GuiConst_INT16S X, GuiConst_INT16S Y) { GuiLib_COORD_ADJUST(X, Y); return (ReadDot(X, Y)); } //------------------------------------------------------------------------------ void GuiLib_Line( GuiConst_INT16S X1, GuiConst_INT16S Y1, GuiConst_INT16S X2, GuiConst_INT16S Y2, GuiConst_INTCOLOR Color) { GuiConst_INT16S X, Y; GuiConst_INT16S PX1, PY1, PX2, PY2; GuiConst_INT16S RemCoord; GuiConst_INT32S Slope; GuiConst_INT16S Offset, NewOffset; GuiConst_INT16U OffsetCnt; GuiConst_INT16S OffsetDir; GuiLib_COORD_ADJUST(X1, Y1); GuiLib_COORD_ADJUST(X2, Y2); GuiLib_COLOR_ADJUST(Color); if (X1 == X2) { OrderCoord(&Y1, &Y2); #ifdef GuiConst_CLIPPING_SUPPORT_ON if (CheckRect (&X1, &Y1, &X2, &Y2)) #endif { VertLine(X1, Y1, Y2, Color); MarkDisplayBoxRepaint(X1, Y1, X1, Y2); } } else if (Y1 == Y2) { OrderCoord(&X1, &X2); #ifdef GuiConst_CLIPPING_SUPPORT_ON if (CheckRect (&X1, &Y1, &X2, &Y2)) #endif { HorzLine(X1, X2, Y1, Color); MarkDisplayBoxRepaint(X1, Y1, X2, Y1); } } else { Slope = labs ((10000 * (GuiConst_INT32S) (Y2 - Y1))) / labs ((GuiConst_INT32S) (X2 - X1)); if (Slope <= 10000) { if (OrderCoord(&X1, &X2)) SwapCoord(&Y1, &Y2); X = 0; Offset = 0; RemCoord = 0; OffsetCnt = 0; if (Y1 < Y2) OffsetDir = 1; else OffsetDir = -1; do { NewOffset = (((GuiConst_INT32S) X * Slope) + 5000) / 10000; if (((X > 0) && (NewOffset != Offset)) || (X > X2 - X1)) { PX1 = X1 + RemCoord; PY1 = Y1 + OffsetDir * Offset; PX2 = PX1 + OffsetCnt - 1; if (OffsetCnt == 1) MakeDot(PX1, PY1, Color); else #ifdef GuiConst_CLIPPING_SUPPORT_ON if (CheckRect (&PX1, &PY1, &PX2, &PY1)) #endif { HorzLine(PX1, PX2, PY1, Color); MarkDisplayBoxRepaint(PX1, PY1, PX2, PY1); } OffsetCnt = 1; RemCoord = X; if (X > X2 - X1) return; } else OffsetCnt++; Offset = NewOffset; X++; } while (1); } else { if (OrderCoord(&Y1, &Y2)) SwapCoord(&X1, &X2); Y = 0; Offset = 0; RemCoord = 0; OffsetCnt = 0; if (X1 < X2) OffsetDir = 1; else OffsetDir = -1; do { NewOffset = (((GuiConst_INT32S) Y * 10000) + (Slope / 2)) / Slope; if (((Y > 0) && (NewOffset != Offset)) || (Y > Y2 - Y1)) { PX1 = X1 + OffsetDir * Offset; PY1 = Y1 + RemCoord; PY2 = PY1 + OffsetCnt - 1; if (OffsetCnt == 1) MakeDot(PX1, PY1, Color); else #ifdef GuiConst_CLIPPING_SUPPORT_ON if (CheckRect (&PX1, &PY1, &PX1, &PY2)) #endif { VertLine(PX1, PY1, PY2, Color); MarkDisplayBoxRepaint(PX1, PY1, PX1, PY2); } OffsetCnt = 1; RemCoord = Y; if (Y > Y2 - Y1) return; } else OffsetCnt++; Offset = NewOffset; Y++; } while (1); } } } //------------------------------------------------------------------------------ void GuiLib_LinePattern( GuiConst_INT16S X1, GuiConst_INT16S Y1, GuiConst_INT16S X2, GuiConst_INT16S Y2, GuiConst_INT8U LinePattern, GuiConst_INTCOLOR Color) { GuiConst_INT16S X,Y; GuiConst_INT32S Slope; GuiConst_INT16S Offset; GuiConst_INT8U MaskTemp; GuiConst_INT8U MaskCtr = 0; GuiConst_INT8U Vertical; GuiLib_COORD_ADJUST(X1, Y1); GuiLib_COORD_ADJUST(X2, Y2); GuiLib_COLOR_ADJUST(Color); Vertical = (X1 == X2); if (Vertical) Offset = 0; else Slope = labs ((10000 * (GuiConst_INT32S)(Y2 - Y1))) / labs ((GuiConst_INT32S)(X2 - X1)); if (Vertical || (Slope > 10000)) { if (OrderCoord(&Y1, &Y2)) SwapCoord(&X1, &X2); for (Y = 0; Y <= Y2 - Y1; Y++) { if (MaskCtr == 0 ) { MaskCtr = 8; MaskTemp = LinePattern; } if (MaskTemp & 0x01) { if (!Vertical) Offset = (((GuiConst_INT32S) Y * 10000) + (Slope / 2)) / Slope; if (X1 < X2) MakeDot(X1 + Offset, Y1 + Y, Color); else MakeDot(X1 - Offset, Y1 + Y, Color); } MaskTemp >>= 1; MaskCtr--; } } else { if (OrderCoord(&X1, &X2)) SwapCoord(&Y1, &Y2); for (X = 0; X <= X2 - X1; X++) { if (MaskCtr == 0 ) { MaskCtr = 8; MaskTemp = LinePattern; } if (MaskTemp & 0x01) { Offset = (((GuiConst_INT32S) X * Slope) + 5000) / 10000; if (Y1 < Y2) MakeDot(X1 + X, Y1 + Offset, Color); else MakeDot(X1 + X, Y1 - Offset, Color); } MaskTemp >>= 1; MaskCtr--; } } } //------------------------------------------------------------------------------ void GuiLib_HLine( GuiConst_INT16S X1, GuiConst_INT16S X2, GuiConst_INT16S Y, GuiConst_INTCOLOR Color) { GuiLib_Line(X1, Y, X2, Y, Color); } //------------------------------------------------------------------------------ void GuiLib_VLine( GuiConst_INT16S X, GuiConst_INT16S Y1, GuiConst_INT16S Y2, GuiConst_INTCOLOR Color) { GuiLib_Line(X, Y1, X, Y2, Color); } //------------------------------------------------------------------------------ void GuiLib_Box( GuiConst_INT16S X1, GuiConst_INT16S Y1, GuiConst_INT16S X2, GuiConst_INT16S Y2, GuiConst_INTCOLOR Color) { GuiConst_INT16S X1C; GuiConst_INT16S Y1C; GuiConst_INT16S X2C; GuiConst_INT16S Y2C; GuiLib_COORD_ADJUST(X1, Y1); GuiLib_COORD_ADJUST(X2, Y2); GuiLib_COLOR_ADJUST(Color); OrderCoord(&X1, &X2); OrderCoord(&Y1, &Y2); X1C = X1; Y1C = Y1; X2C = X2; Y2C = Y2; #ifdef GuiConst_CLIPPING_SUPPORT_ON if (CheckRect(&X1C, &Y1C, &X2C, &Y2C)) #endif { MarkDisplayBoxRepaint(X1C, Y1C, X2C, Y2C); X1C = X1; Y1C = Y1; X2C = X1; Y2C = Y2; #ifdef GuiConst_CLIPPING_SUPPORT_ON if (CheckRect(&X1C, &Y1C, &X1C, &Y2C)) #endif VertLine(X1C, Y1C, Y2C, Color); X1C = X2; Y1C = Y1; X2C = X2; Y2C = Y2; #ifdef GuiConst_CLIPPING_SUPPORT_ON if (CheckRect(&X2C, &Y1C, &X2C, &Y2C)) #endif VertLine(X2C, Y1C, Y2C, Color); if (X2 - X1 > 1) { X1C = X1 + 1; Y1C = Y1; X2C = X2 - 1; #ifdef GuiConst_CLIPPING_SUPPORT_ON if (CheckRect(&X1C, &Y1C, &X2C, &Y1C)) #endif HorzLine(X1C, X2C, Y1C, Color); X1C = X1 + 1; Y1C = Y2; X2C = X2 - 1; Y2C = Y2; #ifdef GuiConst_CLIPPING_SUPPORT_ON if (CheckRect(&X1C, &Y2C, &X2C, &Y2C)) #endif HorzLine(X1C, X2C, Y2C, Color); } } } //------------------------------------------------------------------------------ void GuiLib_FillBox( GuiConst_INT16S X1, GuiConst_INT16S Y1, GuiConst_INT16S X2, GuiConst_INT16S Y2, GuiConst_INTCOLOR Color) { GuiLib_COORD_ADJUST(X1, Y1); GuiLib_COORD_ADJUST(X2, Y2); GuiLib_COLOR_ADJUST(Color); OrderCoord(&X1, &X2); OrderCoord(&Y1, &Y2); #ifdef GuiConst_CLIPPING_SUPPORT_ON if (CheckRect (&X1, &Y1, &X2, &Y2)) #endif { MarkDisplayBoxRepaint(X1, Y1, X2, Y2); #ifdef GuiConst_BYTE_HORIZONTAL while (Y1 <= Y2) { HorzLine(X1, X2, Y1, Color); Y1++; } #else while (X1 <= X2) { VertLine(X1, Y1, Y2, Color); X1++; } #endif } } //------------------------------------------------------------------------------ void GuiLib_BorderBox( GuiConst_INT16S X1, GuiConst_INT16S Y1, GuiConst_INT16S X2, GuiConst_INT16S Y2, GuiConst_INTCOLOR BorderColor, GuiConst_INTCOLOR FillColor) { GuiLib_Box(X1, Y1, X2, Y2, BorderColor); OrderCoord(&X1, &X2); OrderCoord(&Y1, &Y2); if (((X2 - X1) >= 2) && ((Y2 - Y1) >= 2)) GuiLib_FillBox(X1+1, Y1+1, X2-1, Y2-1, FillColor); } #ifdef GuiConst_BITMAP_SUPPORT_ON //------------------------------------------------------------------------------ static void ReadBitmapSizes( GuiConst_INT16U BitmapIndex) { #ifndef GuiConst_REMOTE_BITMAP_DATA GuiConst_INT8U PrefixRom * PixelDataPtr; #endif #ifdef GuiConst_REMOTE_BITMAP_DATA if (BitmapIndex != sgl.CurRemoteBitmap) { GuiLib_RemoteDataReadBlock( (GuiConst_INT32U PrefixRom)GuiStruct_BitmapPtrList[BitmapIndex], (GuiConst_INT32U PrefixRom)GuiStruct_BitmapPtrList[BitmapIndex + 1] - (GuiConst_INT32U PrefixRom)GuiStruct_BitmapPtrList[BitmapIndex], sgl.GuiLib_RemoteBitmapBuffer); sgl.CurRemoteBitmap = BitmapIndex; } sgl.BitmapSizeX = (GuiConst_INT16S)sgl.GuiLib_RemoteBitmapBuffer[0] + 256*(GuiConst_INT16S)sgl.GuiLib_RemoteBitmapBuffer[1]; sgl.BitmapSizeY = (GuiConst_INT16S)sgl.GuiLib_RemoteBitmapBuffer[2] + 256*(GuiConst_INT16S)sgl.GuiLib_RemoteBitmapBuffer[3]; #else PixelDataPtr = (GuiConst_INT8U PrefixRom *)ReadWord(GuiStruct_BitmapPtrList[BitmapIndex]); sgl.BitmapSizeX = (GuiConst_INT16S)*PixelDataPtr; PixelDataPtr++; sgl.BitmapSizeX += 256*(GuiConst_INT16S)*PixelDataPtr; PixelDataPtr++; sgl.BitmapSizeY = (GuiConst_INT16S)*PixelDataPtr; PixelDataPtr++; sgl.BitmapSizeY += 256*(GuiConst_INT16S)*PixelDataPtr; PixelDataPtr++; #endif } //------------------------------------------------------------------------------ void GuiLib_ShowBitmap( GuiConst_INT16U BitmapIndex, GuiConst_INT16S X, GuiConst_INT16S Y, GuiConst_INT32S TranspColor) { #ifdef GuiConst_REMOTE_BITMAP_DATA if (BitmapIndex != sgl.CurRemoteBitmap) { GuiLib_RemoteDataReadBlock( (GuiConst_INT32U PrefixRom)GuiStruct_BitmapPtrList[BitmapIndex], (GuiConst_INT32U PrefixRom)GuiStruct_BitmapPtrList[BitmapIndex + 1] - (GuiConst_INT32U PrefixRom)GuiStruct_BitmapPtrList[BitmapIndex], sgl.GuiLib_RemoteBitmapBuffer); sgl.CurRemoteBitmap = BitmapIndex; } ShowBitmapArea(&sgl.GuiLib_RemoteBitmapBuffer[0], X, Y, 0, 0, 0, 0, TranspColor, GuiLib_FULL_BITMAP); #else ShowBitmapArea( (GuiConst_INT8U PrefixRom *)ReadWord(GuiStruct_BitmapPtrList[BitmapIndex]), X, Y, 0, 0, 0, 0, TranspColor, GuiLib_FULL_BITMAP); #endif } //------------------------------------------------------------------------------ void GuiLib_ShowBitmapAt( GuiConst_INT8U * BitmapPtr, GuiConst_INT16S X, GuiConst_INT16S Y, GuiConst_INT32S TranspColor) { ShowBitmapArea( BitmapPtr, X, Y, 0, 0, 0, 0, TranspColor, GuiLib_FULL_BITMAP); } //------------------------------------------------------------------------------ void GuiLib_ShowBitmapArea( GuiConst_INT16U BitmapIndex, GuiConst_INT16S X, GuiConst_INT16S Y, GuiConst_INT16S AX1, GuiConst_INT16S AY1, GuiConst_INT16S AX2, GuiConst_INT16S AY2, GuiConst_INT32S TranspColor) { #ifdef GuiConst_REMOTE_BITMAP_DATA if (BitmapIndex != sgl.CurRemoteBitmap) { GuiLib_RemoteDataReadBlock( (GuiConst_INT32U PrefixRom)GuiStruct_BitmapPtrList[BitmapIndex], (GuiConst_INT32U PrefixRom)GuiStruct_BitmapPtrList[BitmapIndex + 1] - (GuiConst_INT32U PrefixRom)GuiStruct_BitmapPtrList[BitmapIndex], sgl.GuiLib_RemoteBitmapBuffer); sgl.CurRemoteBitmap = BitmapIndex; } ShowBitmapArea(&sgl.GuiLib_RemoteBitmapBuffer[0], X, Y, AX1, AY1, AX2, AY2, TranspColor, GuiLib_AREA_BITMAP); #else ShowBitmapArea( (GuiConst_INT8U PrefixRom *)ReadWord(GuiStruct_BitmapPtrList[BitmapIndex]), X, Y, AX1, AY1, AX2, AY2, TranspColor, GuiLib_AREA_BITMAP); #endif } //------------------------------------------------------------------------------ void GuiLib_ShowBitmapAreaAt( GuiConst_INT8U * BitmapPtr, GuiConst_INT16S X, GuiConst_INT16S Y, GuiConst_INT16S AX1, GuiConst_INT16S AY1, GuiConst_INT16S AX2, GuiConst_INT16S AY2, GuiConst_INT32S TranspColor) { ShowBitmapArea( BitmapPtr, X, Y, AX1, AY1, AX2, AY2, TranspColor, GuiLib_AREA_BITMAP); } #endif