Loads bitmaps into QSPI memory for GC500_2_5inch to use.

Dependencies:   DMBasicGUI DMSupport

Committer:
jmitc91516
Date:
Mon Jul 31 15:44:39 2017 +0000
Revision:
0:a5c253316af6
Background and scroll arrow bitmaps added to QSPI memory.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jmitc91516 0:a5c253316af6 1 /* ************************************************************************ */
jmitc91516 0:a5c253316af6 2 /* */
jmitc91516 0:a5c253316af6 3 /* (C)2004-2015 IBIS Solutions ApS */
jmitc91516 0:a5c253316af6 4 /* sales@easyGUI.com */
jmitc91516 0:a5c253316af6 5 /* www.easyGUI.com */
jmitc91516 0:a5c253316af6 6 /* */
jmitc91516 0:a5c253316af6 7 /* Graphics include library */
jmitc91516 0:a5c253316af6 8 /* v6.0.9.005 */
jmitc91516 0:a5c253316af6 9 /* */
jmitc91516 0:a5c253316af6 10 /* GuiLib.c include file - do NOT reference it in your linker setup */
jmitc91516 0:a5c253316af6 11 /* */
jmitc91516 0:a5c253316af6 12 /* ************************************************************************ */
jmitc91516 0:a5c253316af6 13
jmitc91516 0:a5c253316af6 14 //==============================================================================
jmitc91516 0:a5c253316af6 15 #define GuiLib_DEG 10
jmitc91516 0:a5c253316af6 16 #define GuiLib_DEG360 360 * GuiLib_DEG
jmitc91516 0:a5c253316af6 17
jmitc91516 0:a5c253316af6 18 #define GuiLib_RAD 4096
jmitc91516 0:a5c253316af6 19 #define GuiLib_RAD_QUARTER_PI 3217
jmitc91516 0:a5c253316af6 20 #define GuiLib_RAD_HALF_PI 6434
jmitc91516 0:a5c253316af6 21 #define GuiLib_RAD_PI 12868
jmitc91516 0:a5c253316af6 22 #define GuiLib_RAD_2_PI 25736
jmitc91516 0:a5c253316af6 23 #define GuiLib_RAD_TO_DEG 573
jmitc91516 0:a5c253316af6 24
jmitc91516 0:a5c253316af6 25 //==============================================================================
jmitc91516 0:a5c253316af6 26
jmitc91516 0:a5c253316af6 27 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 28 GuiConst_INT32S GuiLib_DegToRad(
jmitc91516 0:a5c253316af6 29 GuiConst_INT32S Angle)
jmitc91516 0:a5c253316af6 30 {
jmitc91516 0:a5c253316af6 31 return ((GuiLib_RAD * Angle) / GuiLib_RAD_TO_DEG);
jmitc91516 0:a5c253316af6 32 }
jmitc91516 0:a5c253316af6 33
jmitc91516 0:a5c253316af6 34 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 35 GuiConst_INT32S GuiLib_RadToDeg(
jmitc91516 0:a5c253316af6 36 GuiConst_INT32S Angle)
jmitc91516 0:a5c253316af6 37 {
jmitc91516 0:a5c253316af6 38 return ((GuiLib_RAD_TO_DEG * Angle) / GuiLib_RAD);
jmitc91516 0:a5c253316af6 39 }
jmitc91516 0:a5c253316af6 40
jmitc91516 0:a5c253316af6 41 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 42 GuiConst_INT32S GuiLib_SinRad(
jmitc91516 0:a5c253316af6 43 GuiConst_INT32S Angle)
jmitc91516 0:a5c253316af6 44 {
jmitc91516 0:a5c253316af6 45 GuiConst_INT32S A, B, X2;
jmitc91516 0:a5c253316af6 46
jmitc91516 0:a5c253316af6 47 Angle %= GuiLib_RAD_2_PI;
jmitc91516 0:a5c253316af6 48
jmitc91516 0:a5c253316af6 49 if (Angle > GuiLib_RAD_PI)
jmitc91516 0:a5c253316af6 50 X2 = GuiLib_RAD_2_PI - Angle;
jmitc91516 0:a5c253316af6 51 else
jmitc91516 0:a5c253316af6 52 X2 = Angle;
jmitc91516 0:a5c253316af6 53 if (X2 > GuiLib_RAD_HALF_PI)
jmitc91516 0:a5c253316af6 54 X2 = GuiLib_RAD_PI - X2;
jmitc91516 0:a5c253316af6 55
jmitc91516 0:a5c253316af6 56 A = ((((X2 * X2) >> 12) * X2) / 6) >> 12;
jmitc91516 0:a5c253316af6 57 B = ((((A * X2) >> 12) * X2) / 20) >> 12;
jmitc91516 0:a5c253316af6 58 B = X2 - A + B - ((((B * X2) / 42) * X2) >> 24);
jmitc91516 0:a5c253316af6 59
jmitc91516 0:a5c253316af6 60 if (Angle > GuiLib_RAD_PI)
jmitc91516 0:a5c253316af6 61 return (-B);
jmitc91516 0:a5c253316af6 62 else
jmitc91516 0:a5c253316af6 63 return (B);
jmitc91516 0:a5c253316af6 64 }
jmitc91516 0:a5c253316af6 65
jmitc91516 0:a5c253316af6 66 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 67 GuiConst_INT32S GuiLib_SinDeg(
jmitc91516 0:a5c253316af6 68 GuiConst_INT32S Angle)
jmitc91516 0:a5c253316af6 69 {
jmitc91516 0:a5c253316af6 70 return (GuiLib_SinRad(GuiLib_DegToRad(Angle)));
jmitc91516 0:a5c253316af6 71 }
jmitc91516 0:a5c253316af6 72
jmitc91516 0:a5c253316af6 73 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 74 GuiConst_INT32S GuiLib_CosRad(
jmitc91516 0:a5c253316af6 75 GuiConst_INT32S Angle)
jmitc91516 0:a5c253316af6 76 {
jmitc91516 0:a5c253316af6 77 GuiConst_INT32S A, B, C, X2;
jmitc91516 0:a5c253316af6 78
jmitc91516 0:a5c253316af6 79 Angle %= GuiLib_RAD_2_PI;
jmitc91516 0:a5c253316af6 80
jmitc91516 0:a5c253316af6 81 if (Angle > GuiLib_RAD_PI)
jmitc91516 0:a5c253316af6 82 Angle = GuiLib_RAD_2_PI - Angle;
jmitc91516 0:a5c253316af6 83 if (Angle > GuiLib_RAD_HALF_PI)
jmitc91516 0:a5c253316af6 84 X2 = GuiLib_RAD_PI - Angle;
jmitc91516 0:a5c253316af6 85 else
jmitc91516 0:a5c253316af6 86 X2 = Angle;
jmitc91516 0:a5c253316af6 87
jmitc91516 0:a5c253316af6 88 A = (X2 * X2) >> 13;
jmitc91516 0:a5c253316af6 89 B = ((((A * X2) >> 12) * X2) / 12) >> 12;
jmitc91516 0:a5c253316af6 90 C = (((B * X2) / 30) * X2) >> 24;
jmitc91516 0:a5c253316af6 91 C = GuiLib_RAD - A + B - C + (((((C * X2) / 8) * X2) / 7) >> 24);
jmitc91516 0:a5c253316af6 92 if (Angle > GuiLib_RAD_HALF_PI)
jmitc91516 0:a5c253316af6 93 return (-C);
jmitc91516 0:a5c253316af6 94 else
jmitc91516 0:a5c253316af6 95 return (C);
jmitc91516 0:a5c253316af6 96 }
jmitc91516 0:a5c253316af6 97
jmitc91516 0:a5c253316af6 98 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 99 GuiConst_INT32S GuiLib_CosDeg(
jmitc91516 0:a5c253316af6 100 GuiConst_INT32S Angle)
jmitc91516 0:a5c253316af6 101 {
jmitc91516 0:a5c253316af6 102 return (GuiLib_CosRad(GuiLib_DegToRad(Angle)));
jmitc91516 0:a5c253316af6 103 }
jmitc91516 0:a5c253316af6 104
jmitc91516 0:a5c253316af6 105 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 106 GuiConst_INT32U GuiLib_Sqrt(
jmitc91516 0:a5c253316af6 107 GuiConst_INT32U X)
jmitc91516 0:a5c253316af6 108 {
jmitc91516 0:a5c253316af6 109 GuiConst_INT32U X1, X2;
jmitc91516 0:a5c253316af6 110
jmitc91516 0:a5c253316af6 111 if (X == 0)
jmitc91516 0:a5c253316af6 112 return (0);
jmitc91516 0:a5c253316af6 113
jmitc91516 0:a5c253316af6 114 X1 = (X / 2) + 1;
jmitc91516 0:a5c253316af6 115 X2 = (X1 + (X / X1)) / 2;
jmitc91516 0:a5c253316af6 116 while (X2 < X1)
jmitc91516 0:a5c253316af6 117 {
jmitc91516 0:a5c253316af6 118 X1 = X2;
jmitc91516 0:a5c253316af6 119 X2 = (X1 + (X / X1)) / 2;
jmitc91516 0:a5c253316af6 120 }
jmitc91516 0:a5c253316af6 121 return (X1);
jmitc91516 0:a5c253316af6 122 }
jmitc91516 0:a5c253316af6 123
jmitc91516 0:a5c253316af6 124 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 125 GuiConst_INT8U GuiLib_GetRedRgbColor(
jmitc91516 0:a5c253316af6 126 GuiConst_INT32U RgbColor)
jmitc91516 0:a5c253316af6 127 {
jmitc91516 0:a5c253316af6 128 return (RgbColor & 0x000000FF);
jmitc91516 0:a5c253316af6 129 }
jmitc91516 0:a5c253316af6 130
jmitc91516 0:a5c253316af6 131 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 132 GuiConst_INT32U GuiLib_SetRedRgbColor(
jmitc91516 0:a5c253316af6 133 GuiConst_INT32U RgbColor,
jmitc91516 0:a5c253316af6 134 GuiConst_INT8U RedColor)
jmitc91516 0:a5c253316af6 135 {
jmitc91516 0:a5c253316af6 136 return ((RgbColor & 0x00FFFF00) | RedColor);
jmitc91516 0:a5c253316af6 137 }
jmitc91516 0:a5c253316af6 138
jmitc91516 0:a5c253316af6 139 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 140 GuiConst_INT8U GuiLib_GetGreenRgbColor(
jmitc91516 0:a5c253316af6 141 GuiConst_INT32U RgbColor)
jmitc91516 0:a5c253316af6 142 {
jmitc91516 0:a5c253316af6 143 return (GuiConst_INT8U)((RgbColor & 0x0000FF00) >> 8);
jmitc91516 0:a5c253316af6 144 }
jmitc91516 0:a5c253316af6 145
jmitc91516 0:a5c253316af6 146 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 147 GuiConst_INT32U GuiLib_SetGreenRgbColor(
jmitc91516 0:a5c253316af6 148 GuiConst_INT32U RgbColor,
jmitc91516 0:a5c253316af6 149 GuiConst_INT8U GreenColor)
jmitc91516 0:a5c253316af6 150 {
jmitc91516 0:a5c253316af6 151 return ((RgbColor & 0x00FF00FF) | ((GuiConst_INT32U)GreenColor << 8));
jmitc91516 0:a5c253316af6 152 }
jmitc91516 0:a5c253316af6 153
jmitc91516 0:a5c253316af6 154 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 155 GuiConst_INT8U GuiLib_GetBlueRgbColor(
jmitc91516 0:a5c253316af6 156 GuiConst_INT32U RgbColor)
jmitc91516 0:a5c253316af6 157 {
jmitc91516 0:a5c253316af6 158 return (GuiConst_INT8U)((RgbColor & 0x00FF0000) >> 16);
jmitc91516 0:a5c253316af6 159 }
jmitc91516 0:a5c253316af6 160
jmitc91516 0:a5c253316af6 161 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 162 GuiConst_INT32U GuiLib_SetBlueRgbColor(
jmitc91516 0:a5c253316af6 163 GuiConst_INT32U RgbColor,
jmitc91516 0:a5c253316af6 164 GuiConst_INT8U BlueColor)
jmitc91516 0:a5c253316af6 165 {
jmitc91516 0:a5c253316af6 166 return ((RgbColor & 0xFF00FFFF) | ((GuiConst_INT32U)BlueColor << 16));
jmitc91516 0:a5c253316af6 167 }
jmitc91516 0:a5c253316af6 168
jmitc91516 0:a5c253316af6 169 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 170 GuiConst_INTCOLOR GuiLib_RgbToPixelColor(
jmitc91516 0:a5c253316af6 171 GuiConst_INT32U RgbColor)
jmitc91516 0:a5c253316af6 172 {
jmitc91516 0:a5c253316af6 173 #ifdef GuiConst_COLOR_MODE_GRAY
jmitc91516 0:a5c253316af6 174 return ((GuiConst_COLOR_MAX *
jmitc91516 0:a5c253316af6 175 (GuiConst_INT16U)GuiLib_RgbColorToGrayScale(RgbColor)) / 255);
jmitc91516 0:a5c253316af6 176 #else
jmitc91516 0:a5c253316af6 177 #ifdef GuiConst_COLOR_MODE_PALETTE
jmitc91516 0:a5c253316af6 178 GuiConst_INT16U ColorR, ColorG, ColorB;
jmitc91516 0:a5c253316af6 179 GuiConst_INT16U I, I2, byte, shift;
jmitc91516 0:a5c253316af6 180 GuiConst_INT16U Rating, NewRating;
jmitc91516 0:a5c253316af6 181 GuiConst_INT32U PColor;
jmitc91516 0:a5c253316af6 182
jmitc91516 0:a5c253316af6 183 ColorR = RgbColor & 0x000000FF;
jmitc91516 0:a5c253316af6 184 ColorG = (RgbColor & 0x0000FF00) >> 8;
jmitc91516 0:a5c253316af6 185 ColorB = (RgbColor & 0x00FF0000) >> 16;
jmitc91516 0:a5c253316af6 186 #ifndef GuiConst_COLOR_RGB_STANDARD
jmitc91516 0:a5c253316af6 187 ColorR = (GuiConst_COLORCODING_R_MAX * ColorR) / 255;
jmitc91516 0:a5c253316af6 188 ColorG = (GuiConst_COLORCODING_G_MAX * ColorG) / 255;
jmitc91516 0:a5c253316af6 189 ColorB = (GuiConst_COLORCODING_B_MAX * ColorB) / 255;
jmitc91516 0:a5c253316af6 190 #endif
jmitc91516 0:a5c253316af6 191 Rating = 0xFFFF;
jmitc91516 0:a5c253316af6 192 for (I = 0; I < GuiConst_PALETTE_SIZE; I++)
jmitc91516 0:a5c253316af6 193 {
jmitc91516 0:a5c253316af6 194 PColor = 0;
jmitc91516 0:a5c253316af6 195 for (byte=0,shift=0;byte < GuiConst_COLOR_BYTE_SIZE; byte++, shift +=8)
jmitc91516 0:a5c253316af6 196 PColor |= ((GuiConst_INT32U)GuiStruct_Palette[I][byte] << shift);
jmitc91516 0:a5c253316af6 197
jmitc91516 0:a5c253316af6 198 NewRating =
jmitc91516 0:a5c253316af6 199 abs(ColorR - ((PColor & GuiConst_COLORCODING_R_MASK) >>
jmitc91516 0:a5c253316af6 200 GuiConst_COLORCODING_R_START)) +
jmitc91516 0:a5c253316af6 201 abs(ColorG - ((PColor & GuiConst_COLORCODING_G_MASK) >>
jmitc91516 0:a5c253316af6 202 GuiConst_COLORCODING_G_START)) +
jmitc91516 0:a5c253316af6 203 abs(ColorB - ((PColor & GuiConst_COLORCODING_B_MASK) >>
jmitc91516 0:a5c253316af6 204 GuiConst_COLORCODING_B_START));
jmitc91516 0:a5c253316af6 205 if (NewRating < Rating)
jmitc91516 0:a5c253316af6 206 {
jmitc91516 0:a5c253316af6 207 Rating = NewRating;
jmitc91516 0:a5c253316af6 208 I2 = I;
jmitc91516 0:a5c253316af6 209 }
jmitc91516 0:a5c253316af6 210 }
jmitc91516 0:a5c253316af6 211 return (I2);
jmitc91516 0:a5c253316af6 212 #else
jmitc91516 0:a5c253316af6 213 #ifdef GuiConst_COLOR_RGB_STANDARD
jmitc91516 0:a5c253316af6 214 return (RgbColor);
jmitc91516 0:a5c253316af6 215 #else
jmitc91516 0:a5c253316af6 216 return ((((GuiConst_COLORCODING_R_MAX *
jmitc91516 0:a5c253316af6 217 (RgbColor & 0x000000FF)) / 255) << GuiConst_COLORCODING_R_START) |
jmitc91516 0:a5c253316af6 218 (((GuiConst_COLORCODING_G_MAX *
jmitc91516 0:a5c253316af6 219 ((RgbColor & 0x0000FF00) >> 8)) / 255) << GuiConst_COLORCODING_G_START) |
jmitc91516 0:a5c253316af6 220 (((GuiConst_COLORCODING_B_MAX *
jmitc91516 0:a5c253316af6 221 ((RgbColor & 0x00FF0000) >> 16)) / 255) << GuiConst_COLORCODING_B_START));
jmitc91516 0:a5c253316af6 222 #endif
jmitc91516 0:a5c253316af6 223 #endif
jmitc91516 0:a5c253316af6 224 #endif
jmitc91516 0:a5c253316af6 225 }
jmitc91516 0:a5c253316af6 226 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 227 GuiConst_INTCOLOR GuiLib_Rgb888ToPixelColor(
jmitc91516 0:a5c253316af6 228 GuiConst_INT8U Red, GuiConst_INT8U Green, GuiConst_INT8U Blue)
jmitc91516 0:a5c253316af6 229 {
jmitc91516 0:a5c253316af6 230 #ifdef GuiConst_COLOR_MODE_GRAY
jmitc91516 0:a5c253316af6 231 return ((GuiConst_COLOR_MAX *
jmitc91516 0:a5c253316af6 232 (GuiConst_INT16U)GuiLib_Rgb888ColorToGrayScale(Red, Green, Blue)) / 255);
jmitc91516 0:a5c253316af6 233 #else
jmitc91516 0:a5c253316af6 234 #ifdef GuiConst_COLOR_MODE_PALETTE
jmitc91516 0:a5c253316af6 235 GuiConst_INT16U ColorR, ColorG, ColorB;
jmitc91516 0:a5c253316af6 236 GuiConst_INT16U I, I2, byte, shift;
jmitc91516 0:a5c253316af6 237 GuiConst_INT16U Rating, NewRating;
jmitc91516 0:a5c253316af6 238 GuiConst_INT32U PColor;
jmitc91516 0:a5c253316af6 239
jmitc91516 0:a5c253316af6 240 ColorR = Red;
jmitc91516 0:a5c253316af6 241 ColorG = Green;
jmitc91516 0:a5c253316af6 242 ColorB = Blue;
jmitc91516 0:a5c253316af6 243 #ifndef GuiConst_COLOR_RGB_STANDARD
jmitc91516 0:a5c253316af6 244 ColorR = (GuiConst_COLORCODING_R_MAX * ColorR) / 255;
jmitc91516 0:a5c253316af6 245 ColorG = (GuiConst_COLORCODING_G_MAX * ColorG) / 255;
jmitc91516 0:a5c253316af6 246 ColorB = (GuiConst_COLORCODING_B_MAX * ColorB) / 255;
jmitc91516 0:a5c253316af6 247 #endif
jmitc91516 0:a5c253316af6 248 Rating = 0xFFFF;
jmitc91516 0:a5c253316af6 249 for (I = 0; I < GuiConst_PALETTE_SIZE; I++)
jmitc91516 0:a5c253316af6 250 {
jmitc91516 0:a5c253316af6 251 PColor = 0;
jmitc91516 0:a5c253316af6 252 for (byte=0,shift=0;byte < GuiConst_COLOR_BYTE_SIZE; byte++, shift +=8)
jmitc91516 0:a5c253316af6 253 PColor |= ((GuiConst_INT32U)GuiStruct_Palette[I][byte] << shift);
jmitc91516 0:a5c253316af6 254
jmitc91516 0:a5c253316af6 255 NewRating =
jmitc91516 0:a5c253316af6 256 abs(ColorR - ((PColor & GuiConst_COLORCODING_R_MASK) >>
jmitc91516 0:a5c253316af6 257 GuiConst_COLORCODING_R_START)) +
jmitc91516 0:a5c253316af6 258 abs(ColorG - ((PColor & GuiConst_COLORCODING_G_MASK) >>
jmitc91516 0:a5c253316af6 259 GuiConst_COLORCODING_G_START)) +
jmitc91516 0:a5c253316af6 260 abs(ColorB - ((PColor & GuiConst_COLORCODING_B_MASK) >>
jmitc91516 0:a5c253316af6 261 GuiConst_COLORCODING_B_START));
jmitc91516 0:a5c253316af6 262 if (NewRating < Rating)
jmitc91516 0:a5c253316af6 263 {
jmitc91516 0:a5c253316af6 264 Rating = NewRating;
jmitc91516 0:a5c253316af6 265 I2 = I;
jmitc91516 0:a5c253316af6 266 }
jmitc91516 0:a5c253316af6 267 }
jmitc91516 0:a5c253316af6 268 return (I2);
jmitc91516 0:a5c253316af6 269 #else
jmitc91516 0:a5c253316af6 270 #ifdef GuiConst_COLOR_RGB_STANDARD
jmitc91516 0:a5c253316af6 271 return (Red | (Green << 8) | (Blue << 16));
jmitc91516 0:a5c253316af6 272 #else
jmitc91516 0:a5c253316af6 273 return ((((GuiConst_COLORCODING_R_MAX * Red) / 255)
jmitc91516 0:a5c253316af6 274 << GuiConst_COLORCODING_R_START) |
jmitc91516 0:a5c253316af6 275 (((GuiConst_COLORCODING_G_MAX * Green) / 255)
jmitc91516 0:a5c253316af6 276 << GuiConst_COLORCODING_G_START) |
jmitc91516 0:a5c253316af6 277 (((GuiConst_COLORCODING_B_MAX * Blue) / 255)
jmitc91516 0:a5c253316af6 278 << GuiConst_COLORCODING_B_START));
jmitc91516 0:a5c253316af6 279 #endif
jmitc91516 0:a5c253316af6 280 #endif
jmitc91516 0:a5c253316af6 281 #endif
jmitc91516 0:a5c253316af6 282 }
jmitc91516 0:a5c253316af6 283 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 284 GuiConst_INT32U GuiLib_PixelToRgbColor(
jmitc91516 0:a5c253316af6 285 GuiConst_INTCOLOR PixelColor)
jmitc91516 0:a5c253316af6 286 {
jmitc91516 0:a5c253316af6 287 #ifdef GuiConst_COLOR_MODE_GRAY
jmitc91516 0:a5c253316af6 288 GuiConst_INT16U GrayValue;
jmitc91516 0:a5c253316af6 289
jmitc91516 0:a5c253316af6 290 GrayValue = (255 * PixelColor) / GuiConst_COLOR_MAX;
jmitc91516 0:a5c253316af6 291 return (GuiLib_GrayScaleToRgbColor((GuiConst_INT8U)GrayValue));
jmitc91516 0:a5c253316af6 292 #else
jmitc91516 0:a5c253316af6 293 GuiConst_INT32U PColor;
jmitc91516 0:a5c253316af6 294 #ifdef GuiConst_COLOR_MODE_PALETTE
jmitc91516 0:a5c253316af6 295 GuiConst_INT16U byte, shift;
jmitc91516 0:a5c253316af6 296 #endif
jmitc91516 0:a5c253316af6 297 #ifndef GuiConst_COLOR_RGB_STANDARD
jmitc91516 0:a5c253316af6 298 GuiConst_INT32U ColorR, ColorG, ColorB;
jmitc91516 0:a5c253316af6 299 #endif
jmitc91516 0:a5c253316af6 300
jmitc91516 0:a5c253316af6 301 #ifdef GuiConst_COLOR_MODE_PALETTE
jmitc91516 0:a5c253316af6 302 PColor = 0;
jmitc91516 0:a5c253316af6 303 for (byte=0,shift=0;byte < GuiConst_COLOR_BYTE_SIZE; byte++, shift +=8)
jmitc91516 0:a5c253316af6 304 PColor |= ((GuiConst_INT32U)GuiStruct_Palette[PixelColor][byte] << shift);
jmitc91516 0:a5c253316af6 305 #else
jmitc91516 0:a5c253316af6 306 PColor = PixelColor;
jmitc91516 0:a5c253316af6 307 #endif
jmitc91516 0:a5c253316af6 308
jmitc91516 0:a5c253316af6 309 #ifdef GuiConst_COLOR_RGB_STANDARD
jmitc91516 0:a5c253316af6 310 return (PColor);
jmitc91516 0:a5c253316af6 311 #else
jmitc91516 0:a5c253316af6 312 ColorR =
jmitc91516 0:a5c253316af6 313 (PColor & GuiConst_COLORCODING_R_MASK) >> GuiConst_COLORCODING_R_START;
jmitc91516 0:a5c253316af6 314 ColorG =
jmitc91516 0:a5c253316af6 315 (PColor & GuiConst_COLORCODING_G_MASK) >> GuiConst_COLORCODING_G_START;
jmitc91516 0:a5c253316af6 316 ColorB =
jmitc91516 0:a5c253316af6 317 (PColor & GuiConst_COLORCODING_B_MASK) >> GuiConst_COLORCODING_B_START;
jmitc91516 0:a5c253316af6 318 ColorR = (255 * ColorR) / GuiConst_COLORCODING_R_MAX;
jmitc91516 0:a5c253316af6 319 ColorG = (255 * ColorG) / GuiConst_COLORCODING_G_MAX;
jmitc91516 0:a5c253316af6 320 ColorB = (255 * ColorB) / GuiConst_COLORCODING_B_MAX;
jmitc91516 0:a5c253316af6 321 return (ColorR | (ColorG << 8) | (ColorB << 16));
jmitc91516 0:a5c253316af6 322 #endif
jmitc91516 0:a5c253316af6 323 #endif
jmitc91516 0:a5c253316af6 324 }
jmitc91516 0:a5c253316af6 325
jmitc91516 0:a5c253316af6 326 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 327 GuiConst_INT8U GuiLib_RgbColorToGrayScale(
jmitc91516 0:a5c253316af6 328 GuiConst_INT32U RgbColor)
jmitc91516 0:a5c253316af6 329 {
jmitc91516 0:a5c253316af6 330 return (((RgbColor & 0x000000FF) +
jmitc91516 0:a5c253316af6 331 ((RgbColor & 0x0000FF00) >> 8) +
jmitc91516 0:a5c253316af6 332 ((RgbColor & 0x00FF0000) >> 16)) / 3);
jmitc91516 0:a5c253316af6 333 }
jmitc91516 0:a5c253316af6 334
jmitc91516 0:a5c253316af6 335 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 336 GuiConst_INT8U GuiLib_Rgb888ColorToGrayScale(
jmitc91516 0:a5c253316af6 337 GuiConst_INT8U Red, GuiConst_INT8U Green, GuiConst_INT8U Blue)
jmitc91516 0:a5c253316af6 338 {
jmitc91516 0:a5c253316af6 339 return ((Red + Green + Blue) / 3);
jmitc91516 0:a5c253316af6 340 }
jmitc91516 0:a5c253316af6 341
jmitc91516 0:a5c253316af6 342 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 343 GuiConst_INT32U GuiLib_GrayScaleToRgbColor(
jmitc91516 0:a5c253316af6 344 GuiConst_INT8U GrayValue)
jmitc91516 0:a5c253316af6 345 {
jmitc91516 0:a5c253316af6 346 return ((GuiConst_INT32U)GrayValue |
jmitc91516 0:a5c253316af6 347 ((GuiConst_INT32U)GrayValue << 8) |
jmitc91516 0:a5c253316af6 348 ((GuiConst_INT32U)GrayValue << 16));
jmitc91516 0:a5c253316af6 349 }
jmitc91516 0:a5c253316af6 350
jmitc91516 0:a5c253316af6 351 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 352 GuiConst_INT8U GuiLib_PixelColorToGrayScale(
jmitc91516 0:a5c253316af6 353 GuiConst_INTCOLOR PixelColor)
jmitc91516 0:a5c253316af6 354 {
jmitc91516 0:a5c253316af6 355 return (GuiLib_RgbColorToGrayScale(GuiLib_PixelToRgbColor(PixelColor)));
jmitc91516 0:a5c253316af6 356 }
jmitc91516 0:a5c253316af6 357
jmitc91516 0:a5c253316af6 358 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 359 GuiConst_INTCOLOR GuiLib_GrayScaleToPixelColor(
jmitc91516 0:a5c253316af6 360 GuiConst_INT8U GrayValue)
jmitc91516 0:a5c253316af6 361 {
jmitc91516 0:a5c253316af6 362 return (GuiLib_RgbToPixelColor(GuiLib_GrayScaleToRgbColor(GrayValue)));
jmitc91516 0:a5c253316af6 363 }
jmitc91516 0:a5c253316af6 364
jmitc91516 0:a5c253316af6 365 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 366 GuiConst_INT32U GuiLib_BrightenRgbColor(
jmitc91516 0:a5c253316af6 367 GuiConst_INT32U RgbColor,
jmitc91516 0:a5c253316af6 368 GuiConst_INT16U Amount)
jmitc91516 0:a5c253316af6 369 {
jmitc91516 0:a5c253316af6 370 GuiConst_INT32U ColorR, ColorG, ColorB;
jmitc91516 0:a5c253316af6 371
jmitc91516 0:a5c253316af6 372 if (Amount == 0)
jmitc91516 0:a5c253316af6 373 return (RgbColor);
jmitc91516 0:a5c253316af6 374 else
jmitc91516 0:a5c253316af6 375 {
jmitc91516 0:a5c253316af6 376 ColorR = 255 - ((GuiConst_INT32U)(255 - GuiLib_GetRedRgbColor(RgbColor)) *
jmitc91516 0:a5c253316af6 377 (1000 - Amount) / 1000);
jmitc91516 0:a5c253316af6 378 ColorG = 255 - ((GuiConst_INT32U)(255 - GuiLib_GetGreenRgbColor(RgbColor)) *
jmitc91516 0:a5c253316af6 379 (1000 - Amount) / 1000);
jmitc91516 0:a5c253316af6 380 ColorB = 255 - ((GuiConst_INT32U)(255 - GuiLib_GetBlueRgbColor(RgbColor)) *
jmitc91516 0:a5c253316af6 381 (1000 - Amount) / 1000);
jmitc91516 0:a5c253316af6 382 return (ColorR | (ColorG << 8) | (ColorB << 16));
jmitc91516 0:a5c253316af6 383 }
jmitc91516 0:a5c253316af6 384 }
jmitc91516 0:a5c253316af6 385
jmitc91516 0:a5c253316af6 386 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 387 GuiConst_INTCOLOR GuiLib_BrightenPixelColor(
jmitc91516 0:a5c253316af6 388 GuiConst_INTCOLOR PixelColor,
jmitc91516 0:a5c253316af6 389 GuiConst_INT16U Amount)
jmitc91516 0:a5c253316af6 390 {
jmitc91516 0:a5c253316af6 391 return (GuiLib_RgbToPixelColor(
jmitc91516 0:a5c253316af6 392 GuiLib_BrightenRgbColor(GuiLib_PixelToRgbColor(PixelColor), Amount)));
jmitc91516 0:a5c253316af6 393 }
jmitc91516 0:a5c253316af6 394
jmitc91516 0:a5c253316af6 395 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 396 GuiConst_INT32U GuiLib_DarkenRgbColor(
jmitc91516 0:a5c253316af6 397 GuiConst_INT32U RgbColor,
jmitc91516 0:a5c253316af6 398 GuiConst_INT16U Amount)
jmitc91516 0:a5c253316af6 399 {
jmitc91516 0:a5c253316af6 400 GuiConst_INT32U ColorR, ColorG, ColorB;
jmitc91516 0:a5c253316af6 401
jmitc91516 0:a5c253316af6 402 if (Amount == 0)
jmitc91516 0:a5c253316af6 403 return (RgbColor);
jmitc91516 0:a5c253316af6 404 else
jmitc91516 0:a5c253316af6 405 {
jmitc91516 0:a5c253316af6 406 ColorR = (GuiConst_INT32U)GuiLib_GetRedRgbColor(RgbColor) *
jmitc91516 0:a5c253316af6 407 (1000 - Amount) / 1000;
jmitc91516 0:a5c253316af6 408 ColorG = (GuiConst_INT32U)GuiLib_GetGreenRgbColor(RgbColor) *
jmitc91516 0:a5c253316af6 409 (1000 - Amount) / 1000;
jmitc91516 0:a5c253316af6 410 ColorB = (GuiConst_INT32U)GuiLib_GetBlueRgbColor(RgbColor) *
jmitc91516 0:a5c253316af6 411 (1000 - Amount) / 1000;
jmitc91516 0:a5c253316af6 412 return (ColorR | (ColorG << 8) | (ColorB << 16));
jmitc91516 0:a5c253316af6 413 }
jmitc91516 0:a5c253316af6 414 }
jmitc91516 0:a5c253316af6 415
jmitc91516 0:a5c253316af6 416 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 417 GuiConst_INTCOLOR GuiLib_DarkenPixelColor(
jmitc91516 0:a5c253316af6 418 GuiConst_INTCOLOR PixelColor,
jmitc91516 0:a5c253316af6 419 GuiConst_INT16U Amount)
jmitc91516 0:a5c253316af6 420 {
jmitc91516 0:a5c253316af6 421 return (GuiLib_RgbToPixelColor(
jmitc91516 0:a5c253316af6 422 GuiLib_DarkenRgbColor(GuiLib_PixelToRgbColor(PixelColor), Amount)));
jmitc91516 0:a5c253316af6 423 }
jmitc91516 0:a5c253316af6 424
jmitc91516 0:a5c253316af6 425 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 426 GuiConst_INT32U GuiLib_MiddleRgbColor(
jmitc91516 0:a5c253316af6 427 GuiConst_INT32U RgbColor1,
jmitc91516 0:a5c253316af6 428 GuiConst_INT32U RgbColor2,
jmitc91516 0:a5c253316af6 429 GuiConst_INT16U Amount)
jmitc91516 0:a5c253316af6 430 {
jmitc91516 0:a5c253316af6 431 GuiConst_INT32S ColorR, ColorG, ColorB;
jmitc91516 0:a5c253316af6 432
jmitc91516 0:a5c253316af6 433 if (Amount == 0)
jmitc91516 0:a5c253316af6 434 return (RgbColor1);
jmitc91516 0:a5c253316af6 435 else if (Amount >= 1000)
jmitc91516 0:a5c253316af6 436 return (RgbColor2);
jmitc91516 0:a5c253316af6 437 else
jmitc91516 0:a5c253316af6 438 {
jmitc91516 0:a5c253316af6 439 ColorR = (GuiConst_INT32U)GuiLib_GetRedRgbColor(RgbColor1);
jmitc91516 0:a5c253316af6 440 ColorR = ColorR + (((GuiConst_INT32S)Amount *
jmitc91516 0:a5c253316af6 441 ((GuiConst_INT32S)GuiLib_GetRedRgbColor(RgbColor2) - ColorR)) / 1000);
jmitc91516 0:a5c253316af6 442 ColorG = (GuiConst_INT32U)GuiLib_GetGreenRgbColor(RgbColor1);
jmitc91516 0:a5c253316af6 443 ColorG = ColorG + (((GuiConst_INT32S)Amount *
jmitc91516 0:a5c253316af6 444 ((GuiConst_INT32S)GuiLib_GetGreenRgbColor(RgbColor2) - ColorG)) / 1000);
jmitc91516 0:a5c253316af6 445 ColorB = (GuiConst_INT32U)GuiLib_GetBlueRgbColor(RgbColor1);
jmitc91516 0:a5c253316af6 446 ColorB = ColorB + (((GuiConst_INT32S)Amount *
jmitc91516 0:a5c253316af6 447 ((GuiConst_INT32S)GuiLib_GetBlueRgbColor(RgbColor2) - ColorB)) / 1000);
jmitc91516 0:a5c253316af6 448 return (ColorR | (ColorG << 8) | (ColorB << 16));
jmitc91516 0:a5c253316af6 449 }
jmitc91516 0:a5c253316af6 450 }
jmitc91516 0:a5c253316af6 451
jmitc91516 0:a5c253316af6 452 // -----------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 453 GuiConst_INTCOLOR GuiLib_MiddlePixelColor(
jmitc91516 0:a5c253316af6 454 GuiConst_INTCOLOR PixelColor1,
jmitc91516 0:a5c253316af6 455 GuiConst_INTCOLOR PixelColor2,
jmitc91516 0:a5c253316af6 456 GuiConst_INT16U Amount)
jmitc91516 0:a5c253316af6 457 {
jmitc91516 0:a5c253316af6 458 return (GuiLib_RgbToPixelColor(
jmitc91516 0:a5c253316af6 459 GuiLib_MiddleRgbColor(GuiLib_PixelToRgbColor(PixelColor1),
jmitc91516 0:a5c253316af6 460 GuiLib_PixelToRgbColor(PixelColor2),
jmitc91516 0:a5c253316af6 461 Amount)));
jmitc91516 0:a5c253316af6 462 }
jmitc91516 0:a5c253316af6 463
jmitc91516 0:a5c253316af6 464 // -----------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 465 GuiConst_INT32U GuiLib_DesaturateRgbColor(
jmitc91516 0:a5c253316af6 466 GuiConst_INT32U RgbColor,
jmitc91516 0:a5c253316af6 467 GuiConst_INT16U Amount)
jmitc91516 0:a5c253316af6 468 {
jmitc91516 0:a5c253316af6 469 GuiConst_INT32U GrayValue;
jmitc91516 0:a5c253316af6 470 GuiConst_INT32U ColorDesat;
jmitc91516 0:a5c253316af6 471
jmitc91516 0:a5c253316af6 472 GrayValue = (GuiConst_INT32U)GuiLib_RgbColorToGrayScale(RgbColor);
jmitc91516 0:a5c253316af6 473 ColorDesat = GrayValue | (GrayValue << 8) | (GrayValue << 16);
jmitc91516 0:a5c253316af6 474 return (GuiLib_MiddleRgbColor(RgbColor, ColorDesat, Amount));
jmitc91516 0:a5c253316af6 475 }
jmitc91516 0:a5c253316af6 476
jmitc91516 0:a5c253316af6 477 // -----------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 478 GuiConst_INTCOLOR GuiLib_DesaturatePixelColor(
jmitc91516 0:a5c253316af6 479 GuiConst_INTCOLOR PixelColor,
jmitc91516 0:a5c253316af6 480 GuiConst_INT16U Amount)
jmitc91516 0:a5c253316af6 481 {
jmitc91516 0:a5c253316af6 482 return (GuiLib_RgbToPixelColor(
jmitc91516 0:a5c253316af6 483 GuiLib_DesaturateRgbColor(GuiLib_PixelToRgbColor(PixelColor), Amount)));
jmitc91516 0:a5c253316af6 484 }
jmitc91516 0:a5c253316af6 485
jmitc91516 0:a5c253316af6 486 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 487 GuiConst_INT32U GuiLib_AccentuateRgbColor(
jmitc91516 0:a5c253316af6 488 GuiConst_INT32U RgbColor,
jmitc91516 0:a5c253316af6 489 GuiConst_INT16U Amount)
jmitc91516 0:a5c253316af6 490 {
jmitc91516 0:a5c253316af6 491 if (Amount == 0)
jmitc91516 0:a5c253316af6 492 return (RgbColor);
jmitc91516 0:a5c253316af6 493 else if (GuiLib_RgbColorToGrayScale(RgbColor) <= 127)
jmitc91516 0:a5c253316af6 494 return (GuiLib_BrightenRgbColor(RgbColor, Amount));
jmitc91516 0:a5c253316af6 495 else
jmitc91516 0:a5c253316af6 496 return (GuiLib_DarkenRgbColor(RgbColor, Amount));
jmitc91516 0:a5c253316af6 497 }
jmitc91516 0:a5c253316af6 498
jmitc91516 0:a5c253316af6 499 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 500 GuiConst_INTCOLOR GuiLib_AccentuatePixelColor(
jmitc91516 0:a5c253316af6 501 GuiConst_INTCOLOR PixelColor,
jmitc91516 0:a5c253316af6 502 GuiConst_INT16U Amount)
jmitc91516 0:a5c253316af6 503 {
jmitc91516 0:a5c253316af6 504 return (GuiLib_RgbToPixelColor(
jmitc91516 0:a5c253316af6 505 GuiLib_AccentuateRgbColor(GuiLib_PixelToRgbColor(PixelColor), Amount)));
jmitc91516 0:a5c253316af6 506 }
jmitc91516 0:a5c253316af6 507
jmitc91516 0:a5c253316af6 508 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 509 void Ellipse(
jmitc91516 0:a5c253316af6 510 GuiConst_INT16S X,
jmitc91516 0:a5c253316af6 511 GuiConst_INT16S Y,
jmitc91516 0:a5c253316af6 512 GuiConst_INT16U Radius1,
jmitc91516 0:a5c253316af6 513 GuiConst_INT16U Radius2,
jmitc91516 0:a5c253316af6 514 GuiConst_INT32S BorderColor,
jmitc91516 0:a5c253316af6 515 GuiConst_INT32S FillColor,
jmitc91516 0:a5c253316af6 516 GuiConst_INT8U Q1,
jmitc91516 0:a5c253316af6 517 GuiConst_INT8U Q2,
jmitc91516 0:a5c253316af6 518 GuiConst_INT8U Q3,
jmitc91516 0:a5c253316af6 519 GuiConst_INT8U Q4)
jmitc91516 0:a5c253316af6 520 {
jmitc91516 0:a5c253316af6 521 GuiConst_INT16S PX, PY;
jmitc91516 0:a5c253316af6 522 GuiConst_INT16S L1, L2, LP1, LP2, LX, LY;
jmitc91516 0:a5c253316af6 523 GuiConst_INT16S PX2, PY2;
jmitc91516 0:a5c253316af6 524 GuiConst_INTCOLOR BColor;
jmitc91516 0:a5c253316af6 525 GuiConst_INT8U Filling, LFilling, First;
jmitc91516 0:a5c253316af6 526 GuiConst_INT16S R1, R2;
jmitc91516 0:a5c253316af6 527 GuiConst_INT32S R22;
jmitc91516 0:a5c253316af6 528 GuiConst_INT8U Q12, Q34, Q14, Q23, Qfull;
jmitc91516 0:a5c253316af6 529
jmitc91516 0:a5c253316af6 530 Filling = (FillColor != GuiLib_NO_COLOR);
jmitc91516 0:a5c253316af6 531 if (BorderColor == GuiLib_NO_COLOR)
jmitc91516 0:a5c253316af6 532 {
jmitc91516 0:a5c253316af6 533 if (!Filling)
jmitc91516 0:a5c253316af6 534 return;
jmitc91516 0:a5c253316af6 535 else
jmitc91516 0:a5c253316af6 536 BColor = (GuiConst_INTCOLOR)FillColor;
jmitc91516 0:a5c253316af6 537 }
jmitc91516 0:a5c253316af6 538 else
jmitc91516 0:a5c253316af6 539 BColor = (GuiConst_INTCOLOR)BorderColor;
jmitc91516 0:a5c253316af6 540
jmitc91516 0:a5c253316af6 541 Q12 = (Q1 || Q2);
jmitc91516 0:a5c253316af6 542 Q34 = (Q3 || Q4);
jmitc91516 0:a5c253316af6 543 Q14 = (Q1 || Q4);
jmitc91516 0:a5c253316af6 544 Q23 = (Q2 || Q3);
jmitc91516 0:a5c253316af6 545 Qfull = Q1 & Q2 & Q3 & Q4;
jmitc91516 0:a5c253316af6 546 if (!(Q12 || Q34))
jmitc91516 0:a5c253316af6 547 return;
jmitc91516 0:a5c253316af6 548
jmitc91516 0:a5c253316af6 549 if (Radius1 == 0)
jmitc91516 0:a5c253316af6 550 {
jmitc91516 0:a5c253316af6 551 if (Qfull)
jmitc91516 0:a5c253316af6 552 GuiLib_VLine(X, Y - Radius2, Y + Radius2, BColor);
jmitc91516 0:a5c253316af6 553 else if (Q12)
jmitc91516 0:a5c253316af6 554 GuiLib_VLine(X, Y, Y + Radius2, BColor);
jmitc91516 0:a5c253316af6 555 else
jmitc91516 0:a5c253316af6 556 GuiLib_VLine(X, Y - Radius2, Y, BColor);
jmitc91516 0:a5c253316af6 557 }
jmitc91516 0:a5c253316af6 558 else if (Radius2 == 0)
jmitc91516 0:a5c253316af6 559 {
jmitc91516 0:a5c253316af6 560 if (Qfull)
jmitc91516 0:a5c253316af6 561 GuiLib_HLine(X - Radius1, X + Radius1, Y, BColor);
jmitc91516 0:a5c253316af6 562 else if (Q14)
jmitc91516 0:a5c253316af6 563 GuiLib_HLine(X, X + Radius1, Y, BColor);
jmitc91516 0:a5c253316af6 564 else
jmitc91516 0:a5c253316af6 565 GuiLib_HLine(X - Radius1, X, Y, BColor);
jmitc91516 0:a5c253316af6 566 }
jmitc91516 0:a5c253316af6 567 else if (Radius1 == 1)
jmitc91516 0:a5c253316af6 568 {
jmitc91516 0:a5c253316af6 569 PY = Radius2 / 2;
jmitc91516 0:a5c253316af6 570 if (Q23)
jmitc91516 0:a5c253316af6 571 {
jmitc91516 0:a5c253316af6 572 if (Q2 && Q3)
jmitc91516 0:a5c253316af6 573 GuiLib_VLine(X - 1, Y - PY, Y + PY, BColor);
jmitc91516 0:a5c253316af6 574 else if (Q2)
jmitc91516 0:a5c253316af6 575 GuiLib_VLine(X - 1, Y, Y + PY, BColor);
jmitc91516 0:a5c253316af6 576 else
jmitc91516 0:a5c253316af6 577 GuiLib_VLine(X - 1, Y - PY, Y, BColor);
jmitc91516 0:a5c253316af6 578 }
jmitc91516 0:a5c253316af6 579 if (Q34)
jmitc91516 0:a5c253316af6 580 GuiLib_VLine(X, Y - Radius2, Y - PY - 1, BColor);
jmitc91516 0:a5c253316af6 581 if (Filling)
jmitc91516 0:a5c253316af6 582 {
jmitc91516 0:a5c253316af6 583 if (Q12 && Q34)
jmitc91516 0:a5c253316af6 584 GuiLib_VLine(X, Y - PY, Y + PY, (GuiConst_INTCOLOR)FillColor);
jmitc91516 0:a5c253316af6 585 else if (Q12)
jmitc91516 0:a5c253316af6 586 GuiLib_VLine(X, Y, Y + PY, (GuiConst_INTCOLOR)FillColor);
jmitc91516 0:a5c253316af6 587 else
jmitc91516 0:a5c253316af6 588 GuiLib_VLine(X, Y - PY, Y, (GuiConst_INTCOLOR)FillColor);
jmitc91516 0:a5c253316af6 589 }
jmitc91516 0:a5c253316af6 590 if (Q12)
jmitc91516 0:a5c253316af6 591 GuiLib_VLine(X, Y + PY + 1, Y + Radius2, BColor);
jmitc91516 0:a5c253316af6 592 if (Q14)
jmitc91516 0:a5c253316af6 593 {
jmitc91516 0:a5c253316af6 594 if (Q1 && Q4)
jmitc91516 0:a5c253316af6 595 GuiLib_VLine(X + 1, Y - PY, Y + PY, BColor);
jmitc91516 0:a5c253316af6 596 else if (Q1)
jmitc91516 0:a5c253316af6 597 GuiLib_VLine(X + 1, Y, Y + PY, BColor);
jmitc91516 0:a5c253316af6 598 else
jmitc91516 0:a5c253316af6 599 GuiLib_VLine(X + 1, Y - PY, Y, BColor);
jmitc91516 0:a5c253316af6 600 }
jmitc91516 0:a5c253316af6 601 }
jmitc91516 0:a5c253316af6 602 else if (Radius2 == 1)
jmitc91516 0:a5c253316af6 603 {
jmitc91516 0:a5c253316af6 604 PX = Radius1 / 2;
jmitc91516 0:a5c253316af6 605 if (Q34)
jmitc91516 0:a5c253316af6 606 {
jmitc91516 0:a5c253316af6 607 if (Q3 && Q4)
jmitc91516 0:a5c253316af6 608 GuiLib_HLine(X - PX, X + PX, Y - 1, BColor);
jmitc91516 0:a5c253316af6 609 else if (Q4)
jmitc91516 0:a5c253316af6 610 GuiLib_HLine(X, X + PX, Y - 1, BColor);
jmitc91516 0:a5c253316af6 611 else
jmitc91516 0:a5c253316af6 612 GuiLib_HLine(X - PX, X, Y - 1, BColor);
jmitc91516 0:a5c253316af6 613 }
jmitc91516 0:a5c253316af6 614 if (Q23)
jmitc91516 0:a5c253316af6 615 GuiLib_HLine(X - Radius1, X - PX - 1, Y, BColor);
jmitc91516 0:a5c253316af6 616 if (Filling)
jmitc91516 0:a5c253316af6 617 {
jmitc91516 0:a5c253316af6 618 if (Q14 && Q23)
jmitc91516 0:a5c253316af6 619 GuiLib_HLine(X - PX, X + PX, Y, (GuiConst_INTCOLOR)FillColor);
jmitc91516 0:a5c253316af6 620 else if (Q14)
jmitc91516 0:a5c253316af6 621 GuiLib_HLine(X, X + PX, Y, (GuiConst_INTCOLOR)FillColor);
jmitc91516 0:a5c253316af6 622 else
jmitc91516 0:a5c253316af6 623 GuiLib_HLine(X - PX, X, Y, (GuiConst_INTCOLOR)FillColor);
jmitc91516 0:a5c253316af6 624 }
jmitc91516 0:a5c253316af6 625 if (Q14)
jmitc91516 0:a5c253316af6 626 GuiLib_HLine(X + PX + 1, X + Radius1, Y, BColor);
jmitc91516 0:a5c253316af6 627 if (Q12)
jmitc91516 0:a5c253316af6 628 {
jmitc91516 0:a5c253316af6 629 if (Q1 && Q2)
jmitc91516 0:a5c253316af6 630 GuiLib_HLine(X - PX, X + PX, Y + 1, BColor);
jmitc91516 0:a5c253316af6 631 else if (Q1)
jmitc91516 0:a5c253316af6 632 GuiLib_HLine(X, X + PX, Y + 1, BColor);
jmitc91516 0:a5c253316af6 633 else
jmitc91516 0:a5c253316af6 634 GuiLib_HLine(X - PX, X, Y + 1, BColor);
jmitc91516 0:a5c253316af6 635 }
jmitc91516 0:a5c253316af6 636 }
jmitc91516 0:a5c253316af6 637 else
jmitc91516 0:a5c253316af6 638 {
jmitc91516 0:a5c253316af6 639 R1 = Radius1 << 3;
jmitc91516 0:a5c253316af6 640 R2 = Radius2 << 3;
jmitc91516 0:a5c253316af6 641
jmitc91516 0:a5c253316af6 642 if (Radius1 >= Radius2)
jmitc91516 0:a5c253316af6 643 {
jmitc91516 0:a5c253316af6 644 R22 = (GuiConst_INT32S)R2 * R2;
jmitc91516 0:a5c253316af6 645
jmitc91516 0:a5c253316af6 646 PX = 0;
jmitc91516 0:a5c253316af6 647 First = 1;
jmitc91516 0:a5c253316af6 648 for (PY = R2 - 4; PY >= 4; PY -= 8)
jmitc91516 0:a5c253316af6 649 {
jmitc91516 0:a5c253316af6 650 PX2 = PX + 8;
jmitc91516 0:a5c253316af6 651 PX = (GuiConst_INT16S)((R1 * GuiLib_Sqrt((0x00000400 -
jmitc91516 0:a5c253316af6 652 ((((GuiConst_INT32S)PY * (PY + 3)) << 10) / R22)) << 8)) >> 9) + 1;
jmitc91516 0:a5c253316af6 653 LY = (PY + 4) >> 3;
jmitc91516 0:a5c253316af6 654 if (First)
jmitc91516 0:a5c253316af6 655 {
jmitc91516 0:a5c253316af6 656 L1 = X - (PX >> 3);
jmitc91516 0:a5c253316af6 657 L2 = X + (PX >> 3);
jmitc91516 0:a5c253316af6 658 if (Q12)
jmitc91516 0:a5c253316af6 659 {
jmitc91516 0:a5c253316af6 660 if (Q1 && Q2)
jmitc91516 0:a5c253316af6 661 GuiLib_HLine(L1, L2, Y + LY, BColor);
jmitc91516 0:a5c253316af6 662 else if (Q1)
jmitc91516 0:a5c253316af6 663 GuiLib_HLine(X, L2, Y + LY, BColor);
jmitc91516 0:a5c253316af6 664 else
jmitc91516 0:a5c253316af6 665 GuiLib_HLine(L1, X, Y + LY, BColor);
jmitc91516 0:a5c253316af6 666 }
jmitc91516 0:a5c253316af6 667 if (Q34)
jmitc91516 0:a5c253316af6 668 {
jmitc91516 0:a5c253316af6 669 if (Q3 && Q4)
jmitc91516 0:a5c253316af6 670 GuiLib_HLine(L1, L2, Y - LY, BColor);
jmitc91516 0:a5c253316af6 671 else if (Q4)
jmitc91516 0:a5c253316af6 672 GuiLib_HLine(X, L2, Y - LY, BColor);
jmitc91516 0:a5c253316af6 673 else
jmitc91516 0:a5c253316af6 674 GuiLib_HLine(L1, X, Y - LY, BColor);
jmitc91516 0:a5c253316af6 675 }
jmitc91516 0:a5c253316af6 676 First = 0;
jmitc91516 0:a5c253316af6 677 }
jmitc91516 0:a5c253316af6 678 else
jmitc91516 0:a5c253316af6 679 {
jmitc91516 0:a5c253316af6 680 LP1 = X - (PX2 >> 3);
jmitc91516 0:a5c253316af6 681 LP2 = X + (PX2 >> 3);
jmitc91516 0:a5c253316af6 682 L1 = X - (PX >> 3);
jmitc91516 0:a5c253316af6 683 L2 = X + (PX >> 3);
jmitc91516 0:a5c253316af6 684 if (LP1 < L1)
jmitc91516 0:a5c253316af6 685 {
jmitc91516 0:a5c253316af6 686 LP1 = L1;
jmitc91516 0:a5c253316af6 687 LP2 = L2;
jmitc91516 0:a5c253316af6 688 }
jmitc91516 0:a5c253316af6 689 LFilling = Filling & (LP2 - LP1 >= 2);
jmitc91516 0:a5c253316af6 690
jmitc91516 0:a5c253316af6 691 if (Q12)
jmitc91516 0:a5c253316af6 692 {
jmitc91516 0:a5c253316af6 693 if (Q2)
jmitc91516 0:a5c253316af6 694 GuiLib_HLine(L1, LP1, Y + LY, BColor);
jmitc91516 0:a5c253316af6 695 if (LFilling)
jmitc91516 0:a5c253316af6 696 {
jmitc91516 0:a5c253316af6 697 if (Q1 && Q2)
jmitc91516 0:a5c253316af6 698 GuiLib_HLine(LP1 + 1, LP2 - 1, Y + LY,
jmitc91516 0:a5c253316af6 699 (GuiConst_INTCOLOR)FillColor);
jmitc91516 0:a5c253316af6 700 else if (Q1)
jmitc91516 0:a5c253316af6 701 GuiLib_HLine(X, LP2 - 1, Y + LY, (GuiConst_INTCOLOR)FillColor);
jmitc91516 0:a5c253316af6 702 else
jmitc91516 0:a5c253316af6 703 GuiLib_HLine(LP1 + 1, X, Y + LY, (GuiConst_INTCOLOR)FillColor);
jmitc91516 0:a5c253316af6 704 }
jmitc91516 0:a5c253316af6 705 if (Q1)
jmitc91516 0:a5c253316af6 706 GuiLib_HLine(LP2, L2, Y + LY, BColor);
jmitc91516 0:a5c253316af6 707 }
jmitc91516 0:a5c253316af6 708 if (Q34)
jmitc91516 0:a5c253316af6 709 {
jmitc91516 0:a5c253316af6 710 if (Q3)
jmitc91516 0:a5c253316af6 711 GuiLib_HLine(L1, LP1, Y - LY, BColor);
jmitc91516 0:a5c253316af6 712 if (LFilling)
jmitc91516 0:a5c253316af6 713 {
jmitc91516 0:a5c253316af6 714 if (Q3 && Q4)
jmitc91516 0:a5c253316af6 715 GuiLib_HLine(LP1 + 1, LP2 - 1, Y - LY,
jmitc91516 0:a5c253316af6 716 (GuiConst_INTCOLOR)FillColor);
jmitc91516 0:a5c253316af6 717 else if (Q4)
jmitc91516 0:a5c253316af6 718 GuiLib_HLine(X, LP2 - 1, Y - LY, (GuiConst_INTCOLOR)FillColor);
jmitc91516 0:a5c253316af6 719 else
jmitc91516 0:a5c253316af6 720 GuiLib_HLine(LP1 + 1, X, Y - LY, (GuiConst_INTCOLOR)FillColor);
jmitc91516 0:a5c253316af6 721 }
jmitc91516 0:a5c253316af6 722 if (Q4)
jmitc91516 0:a5c253316af6 723 GuiLib_HLine(LP2, L2, Y - LY, BColor);
jmitc91516 0:a5c253316af6 724 }
jmitc91516 0:a5c253316af6 725 }
jmitc91516 0:a5c253316af6 726 }
jmitc91516 0:a5c253316af6 727 L1 = (PX + 8) >> 3;
jmitc91516 0:a5c253316af6 728 if (L1 > Radius1)
jmitc91516 0:a5c253316af6 729 L1 = Radius1;
jmitc91516 0:a5c253316af6 730
jmitc91516 0:a5c253316af6 731 if (Q23)
jmitc91516 0:a5c253316af6 732 GuiLib_HLine(X - Radius1, X - L1, Y, BColor);
jmitc91516 0:a5c253316af6 733 if (Filling & (L1 >= 1))
jmitc91516 0:a5c253316af6 734 {
jmitc91516 0:a5c253316af6 735 if (Q14 && Q23)
jmitc91516 0:a5c253316af6 736 GuiLib_HLine(X - L1 + 1, X + L1 - 1, Y, (GuiConst_INTCOLOR)FillColor);
jmitc91516 0:a5c253316af6 737 else if (Q14)
jmitc91516 0:a5c253316af6 738 GuiLib_HLine(X, X + L1 - 1, Y, (GuiConst_INTCOLOR)FillColor);
jmitc91516 0:a5c253316af6 739 else
jmitc91516 0:a5c253316af6 740 GuiLib_HLine(X - L1 + 1, X, Y, (GuiConst_INTCOLOR)FillColor);
jmitc91516 0:a5c253316af6 741 }
jmitc91516 0:a5c253316af6 742 if (Q14)
jmitc91516 0:a5c253316af6 743 GuiLib_HLine(X + L1, X + Radius1, Y, BColor);
jmitc91516 0:a5c253316af6 744 }
jmitc91516 0:a5c253316af6 745 else
jmitc91516 0:a5c253316af6 746 {
jmitc91516 0:a5c253316af6 747 R22 = (GuiConst_INT32S)R1 * R1;
jmitc91516 0:a5c253316af6 748
jmitc91516 0:a5c253316af6 749 PY = 0;
jmitc91516 0:a5c253316af6 750 First = 1;
jmitc91516 0:a5c253316af6 751 for (PX = R1 - 4; PX >= 4; PX -= 8)
jmitc91516 0:a5c253316af6 752 {
jmitc91516 0:a5c253316af6 753 PY2 = PY + 8;
jmitc91516 0:a5c253316af6 754 PY = (GuiConst_INT16S)((R2 * GuiLib_Sqrt((0x00000400 -
jmitc91516 0:a5c253316af6 755 ((((GuiConst_INT32S)PX * (PX + 3)) << 10) / R22)) << 8)) >> 9) + 1;
jmitc91516 0:a5c253316af6 756 LX = (PX + 4) >> 3;
jmitc91516 0:a5c253316af6 757 if (First)
jmitc91516 0:a5c253316af6 758 {
jmitc91516 0:a5c253316af6 759 L1 = Y - (PY >> 3);
jmitc91516 0:a5c253316af6 760 L2 = Y + (PY >> 3);
jmitc91516 0:a5c253316af6 761 if (Q14)
jmitc91516 0:a5c253316af6 762 {
jmitc91516 0:a5c253316af6 763 if (Q1 && Q4)
jmitc91516 0:a5c253316af6 764 GuiLib_VLine(X + LX, L1, L2, BColor);
jmitc91516 0:a5c253316af6 765 else if (Q1)
jmitc91516 0:a5c253316af6 766 GuiLib_VLine(X + LX, Y, L2, BColor);
jmitc91516 0:a5c253316af6 767 else
jmitc91516 0:a5c253316af6 768 GuiLib_VLine(X + LX, L1, Y, BColor);
jmitc91516 0:a5c253316af6 769 }
jmitc91516 0:a5c253316af6 770 if (Q23)
jmitc91516 0:a5c253316af6 771 {
jmitc91516 0:a5c253316af6 772 if (Q2 && Q3)
jmitc91516 0:a5c253316af6 773 GuiLib_VLine(X - LX, L1, L2, BColor);
jmitc91516 0:a5c253316af6 774 else if (Q2)
jmitc91516 0:a5c253316af6 775 GuiLib_VLine(X - LX, Y, L2, BColor);
jmitc91516 0:a5c253316af6 776 else
jmitc91516 0:a5c253316af6 777 GuiLib_VLine(X - LX, L1, Y, BColor);
jmitc91516 0:a5c253316af6 778 }
jmitc91516 0:a5c253316af6 779 First = 0;
jmitc91516 0:a5c253316af6 780 }
jmitc91516 0:a5c253316af6 781 else
jmitc91516 0:a5c253316af6 782 {
jmitc91516 0:a5c253316af6 783 LP1 = Y - (PY2 >> 3);
jmitc91516 0:a5c253316af6 784 LP2 = Y + (PY2 >> 3);
jmitc91516 0:a5c253316af6 785 L1 = Y - (PY >> 3);
jmitc91516 0:a5c253316af6 786 L2 = Y + (PY >> 3);
jmitc91516 0:a5c253316af6 787 if (LP1 < L1)
jmitc91516 0:a5c253316af6 788 {
jmitc91516 0:a5c253316af6 789 LP1 = L1;
jmitc91516 0:a5c253316af6 790 LP2 = L2;
jmitc91516 0:a5c253316af6 791 }
jmitc91516 0:a5c253316af6 792 LFilling = Filling & (LP2 - LP1 >= 2);
jmitc91516 0:a5c253316af6 793
jmitc91516 0:a5c253316af6 794 if (Q14)
jmitc91516 0:a5c253316af6 795 {
jmitc91516 0:a5c253316af6 796 if (Q4)
jmitc91516 0:a5c253316af6 797 GuiLib_VLine(X + LX, L1, LP1, BColor);
jmitc91516 0:a5c253316af6 798 if (LFilling)
jmitc91516 0:a5c253316af6 799 {
jmitc91516 0:a5c253316af6 800 if (Q1 && Q4)
jmitc91516 0:a5c253316af6 801 GuiLib_VLine(X + LX, LP1 + 1, LP2 - 1,
jmitc91516 0:a5c253316af6 802 (GuiConst_INTCOLOR)FillColor);
jmitc91516 0:a5c253316af6 803 else if (Q1)
jmitc91516 0:a5c253316af6 804 GuiLib_VLine(X + LX, Y, LP2 - 1, (GuiConst_INTCOLOR)FillColor);
jmitc91516 0:a5c253316af6 805 else
jmitc91516 0:a5c253316af6 806 GuiLib_VLine(X + LX, LP1 + 1, Y, (GuiConst_INTCOLOR)FillColor);
jmitc91516 0:a5c253316af6 807 }
jmitc91516 0:a5c253316af6 808 if (Q1)
jmitc91516 0:a5c253316af6 809 GuiLib_VLine(X + LX, LP2, L2, BColor);
jmitc91516 0:a5c253316af6 810 }
jmitc91516 0:a5c253316af6 811 if (Q23)
jmitc91516 0:a5c253316af6 812 {
jmitc91516 0:a5c253316af6 813 if (Q3)
jmitc91516 0:a5c253316af6 814 GuiLib_VLine(X - LX, L1, LP1, BColor);
jmitc91516 0:a5c253316af6 815 if (LFilling)
jmitc91516 0:a5c253316af6 816 {
jmitc91516 0:a5c253316af6 817 if (Q2 && Q3)
jmitc91516 0:a5c253316af6 818 GuiLib_VLine(X - LX, LP1 + 1, LP2 - 1,
jmitc91516 0:a5c253316af6 819 (GuiConst_INTCOLOR)FillColor);
jmitc91516 0:a5c253316af6 820 else if (Q2)
jmitc91516 0:a5c253316af6 821 GuiLib_VLine(X - LX, Y, LP2 - 1, (GuiConst_INTCOLOR)FillColor);
jmitc91516 0:a5c253316af6 822 else
jmitc91516 0:a5c253316af6 823 GuiLib_VLine(X - LX, LP1 + 1, Y, (GuiConst_INTCOLOR)FillColor);
jmitc91516 0:a5c253316af6 824 }
jmitc91516 0:a5c253316af6 825 if (Q2)
jmitc91516 0:a5c253316af6 826 GuiLib_VLine(X - LX, LP2, L2, BColor);
jmitc91516 0:a5c253316af6 827 }
jmitc91516 0:a5c253316af6 828 }
jmitc91516 0:a5c253316af6 829 }
jmitc91516 0:a5c253316af6 830 L1 = (PY + 8) >> 3;
jmitc91516 0:a5c253316af6 831 if (L1 > Radius2)
jmitc91516 0:a5c253316af6 832 L1 = Radius2;
jmitc91516 0:a5c253316af6 833
jmitc91516 0:a5c253316af6 834 if (Q34)
jmitc91516 0:a5c253316af6 835 GuiLib_VLine(X, Y - Radius2, Y - L1, BColor);
jmitc91516 0:a5c253316af6 836 if (Filling & (L1 >= 1))
jmitc91516 0:a5c253316af6 837 {
jmitc91516 0:a5c253316af6 838 if (Q12 && Q34)
jmitc91516 0:a5c253316af6 839 GuiLib_VLine(X, Y - L1 + 1, Y + L1 - 1, (GuiConst_INTCOLOR)FillColor);
jmitc91516 0:a5c253316af6 840 else if (Q12)
jmitc91516 0:a5c253316af6 841 GuiLib_VLine(X, Y, Y + L1 - 1, (GuiConst_INTCOLOR)FillColor);
jmitc91516 0:a5c253316af6 842 else
jmitc91516 0:a5c253316af6 843 GuiLib_VLine(X, Y - L1 + 1, Y, (GuiConst_INTCOLOR)FillColor);
jmitc91516 0:a5c253316af6 844 }
jmitc91516 0:a5c253316af6 845 if (Q12)
jmitc91516 0:a5c253316af6 846 GuiLib_VLine(X, Y + L1, Y + Radius2, BColor);
jmitc91516 0:a5c253316af6 847 }
jmitc91516 0:a5c253316af6 848 }
jmitc91516 0:a5c253316af6 849 }
jmitc91516 0:a5c253316af6 850
jmitc91516 0:a5c253316af6 851 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 852 void Circle(
jmitc91516 0:a5c253316af6 853 GuiConst_INT16S X,
jmitc91516 0:a5c253316af6 854 GuiConst_INT16S Y,
jmitc91516 0:a5c253316af6 855 GuiConst_INT16U Radius,
jmitc91516 0:a5c253316af6 856 GuiConst_INTCOLOR Color,
jmitc91516 0:a5c253316af6 857 GuiConst_INT8U S0,
jmitc91516 0:a5c253316af6 858 GuiConst_INT8U S1,
jmitc91516 0:a5c253316af6 859 GuiConst_INT8U S2,
jmitc91516 0:a5c253316af6 860 GuiConst_INT8U S3,
jmitc91516 0:a5c253316af6 861 GuiConst_INT8U S4,
jmitc91516 0:a5c253316af6 862 GuiConst_INT8U S5,
jmitc91516 0:a5c253316af6 863 GuiConst_INT8U S6,
jmitc91516 0:a5c253316af6 864 GuiConst_INT8U S7,
jmitc91516 0:a5c253316af6 865 GuiConst_INT8U IF)
jmitc91516 0:a5c253316af6 866 {
jmitc91516 0:a5c253316af6 867 GuiConst_INT16S PX, PY, PX2;
jmitc91516 0:a5c253316af6 868 GuiConst_INT16S L1, L2, LP1, LP2, LX, LY, LX2;
jmitc91516 0:a5c253316af6 869 GuiConst_INT8U First;
jmitc91516 0:a5c253316af6 870 GuiConst_INT16S R;
jmitc91516 0:a5c253316af6 871 GuiConst_INT32S R2;
jmitc91516 0:a5c253316af6 872
jmitc91516 0:a5c253316af6 873 if (!(S0 || S1 || S2 || S3 || S4 || S5 || S6 || S7))
jmitc91516 0:a5c253316af6 874 return;
jmitc91516 0:a5c253316af6 875 if (Radius == 0)
jmitc91516 0:a5c253316af6 876 return;
jmitc91516 0:a5c253316af6 877
jmitc91516 0:a5c253316af6 878 if (Radius == 1)
jmitc91516 0:a5c253316af6 879 {
jmitc91516 0:a5c253316af6 880 if (S7 || S0)
jmitc91516 0:a5c253316af6 881 GuiLib_Dot(X + 1, Y, Color);
jmitc91516 0:a5c253316af6 882 if (S1 || S2)
jmitc91516 0:a5c253316af6 883 GuiLib_Dot(X, Y + 1, Color);
jmitc91516 0:a5c253316af6 884 if (S3 || S4)
jmitc91516 0:a5c253316af6 885 GuiLib_Dot(X - 1, Y, Color);
jmitc91516 0:a5c253316af6 886 if (S5 || S6)
jmitc91516 0:a5c253316af6 887 GuiLib_Dot(X, Y - 1, Color);
jmitc91516 0:a5c253316af6 888 }
jmitc91516 0:a5c253316af6 889 else
jmitc91516 0:a5c253316af6 890 {
jmitc91516 0:a5c253316af6 891 R = Radius << 3;
jmitc91516 0:a5c253316af6 892 R2 = (GuiConst_INT32S)R * R;
jmitc91516 0:a5c253316af6 893 First = 1;
jmitc91516 0:a5c253316af6 894 PX = 0;
jmitc91516 0:a5c253316af6 895
jmitc91516 0:a5c253316af6 896 for (PY = R - 4; PY >= R / 2; PY -= 8)
jmitc91516 0:a5c253316af6 897 {
jmitc91516 0:a5c253316af6 898 PX2 = PX + 8;
jmitc91516 0:a5c253316af6 899 PX = (GuiConst_INT16S)((R * GuiLib_Sqrt((0x00000400 -
jmitc91516 0:a5c253316af6 900 ((((GuiConst_INT32S)PY * (PY + 3)) << 10) / R2)) << 8)) >> 9) + 1;
jmitc91516 0:a5c253316af6 901 LX2 = (PX2 + 4) >> 3;
jmitc91516 0:a5c253316af6 902 LX = (PX + 4) >> 3;
jmitc91516 0:a5c253316af6 903 LY = (PY + 4) >> 3;
jmitc91516 0:a5c253316af6 904 if (First)
jmitc91516 0:a5c253316af6 905 {
jmitc91516 0:a5c253316af6 906 if (S1 || S2)
jmitc91516 0:a5c253316af6 907 {
jmitc91516 0:a5c253316af6 908 if (S1)
jmitc91516 0:a5c253316af6 909 L2 = X + LX;
jmitc91516 0:a5c253316af6 910 else
jmitc91516 0:a5c253316af6 911 L2 = X;
jmitc91516 0:a5c253316af6 912 if (S2)
jmitc91516 0:a5c253316af6 913 L1 = X - LX;
jmitc91516 0:a5c253316af6 914 else
jmitc91516 0:a5c253316af6 915 L1 = X;
jmitc91516 0:a5c253316af6 916 GuiLib_HLine(L1, L2, Y + LY, Color);
jmitc91516 0:a5c253316af6 917 if (IF)
jmitc91516 0:a5c253316af6 918 GuiLib_HLine(L1, L2, Y + LY - 1, Color);
jmitc91516 0:a5c253316af6 919 }
jmitc91516 0:a5c253316af6 920 if (S5 || S6)
jmitc91516 0:a5c253316af6 921 {
jmitc91516 0:a5c253316af6 922 if (S5)
jmitc91516 0:a5c253316af6 923 L1 = X - LX;
jmitc91516 0:a5c253316af6 924 else
jmitc91516 0:a5c253316af6 925 L1 = X;
jmitc91516 0:a5c253316af6 926 if (S6)
jmitc91516 0:a5c253316af6 927 L2 = X + LX;
jmitc91516 0:a5c253316af6 928 else
jmitc91516 0:a5c253316af6 929 L2 = X;
jmitc91516 0:a5c253316af6 930 GuiLib_HLine(L1, L2, Y - LY, Color);
jmitc91516 0:a5c253316af6 931 if (IF)
jmitc91516 0:a5c253316af6 932 GuiLib_HLine(L1, L2, Y - LY +1, Color);
jmitc91516 0:a5c253316af6 933 }
jmitc91516 0:a5c253316af6 934
jmitc91516 0:a5c253316af6 935 if (S3 || S4)
jmitc91516 0:a5c253316af6 936 {
jmitc91516 0:a5c253316af6 937 if (S3)
jmitc91516 0:a5c253316af6 938 L2 = Y + LX;
jmitc91516 0:a5c253316af6 939 else
jmitc91516 0:a5c253316af6 940 L2 = Y;
jmitc91516 0:a5c253316af6 941 if (S4)
jmitc91516 0:a5c253316af6 942 L1 = Y - LX;
jmitc91516 0:a5c253316af6 943 else
jmitc91516 0:a5c253316af6 944 L1 = Y;
jmitc91516 0:a5c253316af6 945 GuiLib_VLine(X - LY, L1, L2, Color);
jmitc91516 0:a5c253316af6 946 if (IF)
jmitc91516 0:a5c253316af6 947 GuiLib_VLine(X - LY + 1, L1, L2, Color);
jmitc91516 0:a5c253316af6 948 }
jmitc91516 0:a5c253316af6 949 if (S7 || S0)
jmitc91516 0:a5c253316af6 950 {
jmitc91516 0:a5c253316af6 951 if (S7)
jmitc91516 0:a5c253316af6 952 L1 = Y - LX;
jmitc91516 0:a5c253316af6 953 else
jmitc91516 0:a5c253316af6 954 L1 = Y;
jmitc91516 0:a5c253316af6 955 if (S0)
jmitc91516 0:a5c253316af6 956 L2 = Y + LX;
jmitc91516 0:a5c253316af6 957 else
jmitc91516 0:a5c253316af6 958 L2 = Y;
jmitc91516 0:a5c253316af6 959 GuiLib_VLine(X + LY, L1, L2, Color);
jmitc91516 0:a5c253316af6 960 if (IF)
jmitc91516 0:a5c253316af6 961 GuiLib_VLine(X + LY - 1, L1, L2, Color);
jmitc91516 0:a5c253316af6 962 }
jmitc91516 0:a5c253316af6 963
jmitc91516 0:a5c253316af6 964 First = 0;
jmitc91516 0:a5c253316af6 965 }
jmitc91516 0:a5c253316af6 966 else if (LX < LY)
jmitc91516 0:a5c253316af6 967 {
jmitc91516 0:a5c253316af6 968 LP1 = X - LX2;
jmitc91516 0:a5c253316af6 969 LP2 = X + LX2;
jmitc91516 0:a5c253316af6 970 L1 = X - LX;
jmitc91516 0:a5c253316af6 971 L2 = X + LX;
jmitc91516 0:a5c253316af6 972
jmitc91516 0:a5c253316af6 973 if (S1)
jmitc91516 0:a5c253316af6 974 {
jmitc91516 0:a5c253316af6 975 GuiLib_HLine(LP2, L2, Y + LY, Color);
jmitc91516 0:a5c253316af6 976 if (IF)
jmitc91516 0:a5c253316af6 977 GuiLib_HLine(LP2, L2, Y + LY - 1, Color);
jmitc91516 0:a5c253316af6 978 }
jmitc91516 0:a5c253316af6 979 if (S2)
jmitc91516 0:a5c253316af6 980 {
jmitc91516 0:a5c253316af6 981 GuiLib_HLine(L1, LP1, Y + LY, Color);
jmitc91516 0:a5c253316af6 982 if (IF)
jmitc91516 0:a5c253316af6 983 GuiLib_HLine(L1, LP1, Y + LY - 1, Color);
jmitc91516 0:a5c253316af6 984 }
jmitc91516 0:a5c253316af6 985
jmitc91516 0:a5c253316af6 986 if (S5)
jmitc91516 0:a5c253316af6 987 {
jmitc91516 0:a5c253316af6 988 GuiLib_HLine(L1, LP1, Y - LY, Color);
jmitc91516 0:a5c253316af6 989 if (IF)
jmitc91516 0:a5c253316af6 990 GuiLib_HLine(L1, LP1, Y - LY + 1, Color);
jmitc91516 0:a5c253316af6 991 }
jmitc91516 0:a5c253316af6 992 if (S6)
jmitc91516 0:a5c253316af6 993 {
jmitc91516 0:a5c253316af6 994 GuiLib_HLine(LP2, L2, Y - LY, Color);
jmitc91516 0:a5c253316af6 995 if (IF)
jmitc91516 0:a5c253316af6 996 GuiLib_HLine(LP2, L2, Y - LY + 1, Color);
jmitc91516 0:a5c253316af6 997 }
jmitc91516 0:a5c253316af6 998
jmitc91516 0:a5c253316af6 999 LP1 = Y - LX2;
jmitc91516 0:a5c253316af6 1000 LP2 = Y + LX2;
jmitc91516 0:a5c253316af6 1001 L1 = Y - LX;
jmitc91516 0:a5c253316af6 1002 L2 = Y + LX;
jmitc91516 0:a5c253316af6 1003
jmitc91516 0:a5c253316af6 1004 if (S7)
jmitc91516 0:a5c253316af6 1005 {
jmitc91516 0:a5c253316af6 1006 GuiLib_VLine(X + LY, L1, LP1, Color);
jmitc91516 0:a5c253316af6 1007 if (IF)
jmitc91516 0:a5c253316af6 1008 GuiLib_VLine(X + LY - 1, L1, LP1, Color);
jmitc91516 0:a5c253316af6 1009 }
jmitc91516 0:a5c253316af6 1010 if (S0)
jmitc91516 0:a5c253316af6 1011 {
jmitc91516 0:a5c253316af6 1012 GuiLib_VLine(X + LY, LP2, L2, Color);
jmitc91516 0:a5c253316af6 1013 if (IF)
jmitc91516 0:a5c253316af6 1014 GuiLib_VLine(X + LY - 1, LP2, L2, Color);
jmitc91516 0:a5c253316af6 1015 }
jmitc91516 0:a5c253316af6 1016
jmitc91516 0:a5c253316af6 1017 if (S3)
jmitc91516 0:a5c253316af6 1018 {
jmitc91516 0:a5c253316af6 1019 GuiLib_VLine(X - LY, LP2, L2, Color);
jmitc91516 0:a5c253316af6 1020 if (IF)
jmitc91516 0:a5c253316af6 1021 GuiLib_VLine(X - LY + 1, LP2, L2, Color);
jmitc91516 0:a5c253316af6 1022 }
jmitc91516 0:a5c253316af6 1023 if (S4)
jmitc91516 0:a5c253316af6 1024 {
jmitc91516 0:a5c253316af6 1025 GuiLib_VLine(X - LY, L1, LP1, Color);
jmitc91516 0:a5c253316af6 1026 if (IF)
jmitc91516 0:a5c253316af6 1027 GuiLib_VLine(X - LY + 1, L1, LP1, Color);
jmitc91516 0:a5c253316af6 1028 }
jmitc91516 0:a5c253316af6 1029 }
jmitc91516 0:a5c253316af6 1030 else
jmitc91516 0:a5c253316af6 1031 {
jmitc91516 0:a5c253316af6 1032 if (S0)
jmitc91516 0:a5c253316af6 1033 {
jmitc91516 0:a5c253316af6 1034 GuiLib_Dot(X + LY, Y + LX2, Color);
jmitc91516 0:a5c253316af6 1035 if (IF)
jmitc91516 0:a5c253316af6 1036 GuiLib_Dot(X + LY - 1, Y + LX2, Color);
jmitc91516 0:a5c253316af6 1037 }
jmitc91516 0:a5c253316af6 1038 if (S1)
jmitc91516 0:a5c253316af6 1039 {
jmitc91516 0:a5c253316af6 1040 GuiLib_Dot(X + LX2, Y + LY, Color);
jmitc91516 0:a5c253316af6 1041 if (IF)
jmitc91516 0:a5c253316af6 1042 GuiLib_Dot(X + LX2, Y + LY - 1, Color);
jmitc91516 0:a5c253316af6 1043 }
jmitc91516 0:a5c253316af6 1044 if (S2)
jmitc91516 0:a5c253316af6 1045 {
jmitc91516 0:a5c253316af6 1046 GuiLib_Dot(X - LX2, Y + LY, Color);
jmitc91516 0:a5c253316af6 1047 if (IF)
jmitc91516 0:a5c253316af6 1048 GuiLib_Dot(X - LX2, Y + LY - 1, Color);
jmitc91516 0:a5c253316af6 1049 }
jmitc91516 0:a5c253316af6 1050 if (S3)
jmitc91516 0:a5c253316af6 1051 {
jmitc91516 0:a5c253316af6 1052 GuiLib_Dot(X - LY, Y + LX2, Color);
jmitc91516 0:a5c253316af6 1053 if (IF)
jmitc91516 0:a5c253316af6 1054 GuiLib_Dot(X - LY + 1, Y + LX2, Color);
jmitc91516 0:a5c253316af6 1055 }
jmitc91516 0:a5c253316af6 1056 if (S4)
jmitc91516 0:a5c253316af6 1057 {
jmitc91516 0:a5c253316af6 1058 GuiLib_Dot(X - LY, Y - LX2, Color);
jmitc91516 0:a5c253316af6 1059 if (IF)
jmitc91516 0:a5c253316af6 1060 GuiLib_Dot(X - LY + 1, Y - LX2, Color);
jmitc91516 0:a5c253316af6 1061 }
jmitc91516 0:a5c253316af6 1062 if (S5)
jmitc91516 0:a5c253316af6 1063 {
jmitc91516 0:a5c253316af6 1064 GuiLib_Dot(X - LX2, Y - LY, Color);
jmitc91516 0:a5c253316af6 1065 if (IF)
jmitc91516 0:a5c253316af6 1066 GuiLib_Dot(X - LX2, Y - LY + 1, Color);
jmitc91516 0:a5c253316af6 1067 }
jmitc91516 0:a5c253316af6 1068 if (S6)
jmitc91516 0:a5c253316af6 1069 {
jmitc91516 0:a5c253316af6 1070 GuiLib_Dot(X + LX2, Y - LY, Color);
jmitc91516 0:a5c253316af6 1071 if (IF)
jmitc91516 0:a5c253316af6 1072 GuiLib_Dot(X + LX2, Y - LY + 1, Color);
jmitc91516 0:a5c253316af6 1073 }
jmitc91516 0:a5c253316af6 1074 if (S7)
jmitc91516 0:a5c253316af6 1075 {
jmitc91516 0:a5c253316af6 1076 GuiLib_Dot(X + LY, Y - LX2, Color);
jmitc91516 0:a5c253316af6 1077 if (IF)
jmitc91516 0:a5c253316af6 1078 GuiLib_Dot(X + LY - 1, Y - LX2, Color);
jmitc91516 0:a5c253316af6 1079 }
jmitc91516 0:a5c253316af6 1080
jmitc91516 0:a5c253316af6 1081 break;
jmitc91516 0:a5c253316af6 1082 }
jmitc91516 0:a5c253316af6 1083 }
jmitc91516 0:a5c253316af6 1084
jmitc91516 0:a5c253316af6 1085 if (S7 || S0)
jmitc91516 0:a5c253316af6 1086 GuiLib_Dot(X + Radius, Y, Color);
jmitc91516 0:a5c253316af6 1087 if (S3 || S4)
jmitc91516 0:a5c253316af6 1088 GuiLib_Dot(X - Radius, Y, Color);
jmitc91516 0:a5c253316af6 1089 }
jmitc91516 0:a5c253316af6 1090 }
jmitc91516 0:a5c253316af6 1091
jmitc91516 0:a5c253316af6 1092 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 1093 void FilledCircle(
jmitc91516 0:a5c253316af6 1094 GuiConst_INT16S X,
jmitc91516 0:a5c253316af6 1095 GuiConst_INT16S Y,
jmitc91516 0:a5c253316af6 1096 GuiConst_INT16U Radius,
jmitc91516 0:a5c253316af6 1097 GuiConst_INTCOLOR Color)
jmitc91516 0:a5c253316af6 1098 {
jmitc91516 0:a5c253316af6 1099 GuiConst_INT16S PX, PY, PX2;
jmitc91516 0:a5c253316af6 1100 GuiConst_INT16S LX, LY, LXY, LX2;
jmitc91516 0:a5c253316af6 1101 GuiConst_INT16S R;
jmitc91516 0:a5c253316af6 1102 GuiConst_INT32S R2;
jmitc91516 0:a5c253316af6 1103
jmitc91516 0:a5c253316af6 1104 if (Radius == 0)
jmitc91516 0:a5c253316af6 1105 return;
jmitc91516 0:a5c253316af6 1106
jmitc91516 0:a5c253316af6 1107 if (Radius == 1)
jmitc91516 0:a5c253316af6 1108 {
jmitc91516 0:a5c253316af6 1109 GuiLib_Dot(X, Y - 1, Color);
jmitc91516 0:a5c253316af6 1110 GuiLib_HLine(X - 1, X + 1, Y, Color);
jmitc91516 0:a5c253316af6 1111 GuiLib_Dot(X, Y + 1, Color);
jmitc91516 0:a5c253316af6 1112 }
jmitc91516 0:a5c253316af6 1113 else
jmitc91516 0:a5c253316af6 1114 {
jmitc91516 0:a5c253316af6 1115 R = Radius << 3;
jmitc91516 0:a5c253316af6 1116 R2 = (GuiConst_INT32S)R * R;
jmitc91516 0:a5c253316af6 1117 LXY = (707 * (GuiConst_INT32S)Radius) / 1000;
jmitc91516 0:a5c253316af6 1118 PX = 0;
jmitc91516 0:a5c253316af6 1119 LY = 0;
jmitc91516 0:a5c253316af6 1120
jmitc91516 0:a5c253316af6 1121 for (PY = R - 4; PY >= R / 2; PY -= 8)
jmitc91516 0:a5c253316af6 1122 {
jmitc91516 0:a5c253316af6 1123 PX2 = PX + 8;
jmitc91516 0:a5c253316af6 1124 PX = (GuiConst_INT16S)((R * GuiLib_Sqrt((0x00000400 -
jmitc91516 0:a5c253316af6 1125 ((((GuiConst_INT32S)PY * (PY + 3)) << 10) / R2)) << 8)) >> 9) + 1;
jmitc91516 0:a5c253316af6 1126 LX2 = (PX2 + 4) >> 3;
jmitc91516 0:a5c253316af6 1127 LX = (PX + 4) >> 3;
jmitc91516 0:a5c253316af6 1128 LY = (PY + 4) >> 3;
jmitc91516 0:a5c253316af6 1129
jmitc91516 0:a5c253316af6 1130 if (LX < LY)
jmitc91516 0:a5c253316af6 1131 {
jmitc91516 0:a5c253316af6 1132 GuiLib_HLine(X - LX, X + LX, Y + LY, Color);
jmitc91516 0:a5c253316af6 1133 GuiLib_HLine(X - LX, X + LX, Y - LY, Color);
jmitc91516 0:a5c253316af6 1134
jmitc91516 0:a5c253316af6 1135 if (LX > LXY)
jmitc91516 0:a5c253316af6 1136 LX = LXY;
jmitc91516 0:a5c253316af6 1137 GuiLib_VLine(X - LY, Y - LX, Y + LX, Color);
jmitc91516 0:a5c253316af6 1138 GuiLib_VLine(X + LY, Y - LX, Y + LX, Color);
jmitc91516 0:a5c253316af6 1139 }
jmitc91516 0:a5c253316af6 1140 else
jmitc91516 0:a5c253316af6 1141 {
jmitc91516 0:a5c253316af6 1142 GuiLib_HLine(X - LX2, X + LX2, Y - LY, Color);
jmitc91516 0:a5c253316af6 1143 GuiLib_HLine(X - LX2, X + LX2, Y + LY, Color);
jmitc91516 0:a5c253316af6 1144 GuiLib_VLine(X - LY, Y - LX2, Y + LX2, Color);
jmitc91516 0:a5c253316af6 1145 GuiLib_VLine(X + LY, Y - LX2, Y + LX2, Color);
jmitc91516 0:a5c253316af6 1146
jmitc91516 0:a5c253316af6 1147 break;
jmitc91516 0:a5c253316af6 1148 }
jmitc91516 0:a5c253316af6 1149 }
jmitc91516 0:a5c253316af6 1150 GuiLib_FillBox(X - LY + 1, Y - LY + 1, X + LY - 1, Y + LY - 1, Color);
jmitc91516 0:a5c253316af6 1151 }
jmitc91516 0:a5c253316af6 1152 }
jmitc91516 0:a5c253316af6 1153
jmitc91516 0:a5c253316af6 1154 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 1155 void GuiLib_Circle(
jmitc91516 0:a5c253316af6 1156 GuiConst_INT16S X,
jmitc91516 0:a5c253316af6 1157 GuiConst_INT16S Y,
jmitc91516 0:a5c253316af6 1158 GuiConst_INT16U Radius,
jmitc91516 0:a5c253316af6 1159 GuiConst_INT32S BorderColor,
jmitc91516 0:a5c253316af6 1160 GuiConst_INT32S FillColor)
jmitc91516 0:a5c253316af6 1161 {
jmitc91516 0:a5c253316af6 1162 Ellipse(X, Y, Radius, Radius, BorderColor, FillColor, 1, 1, 1, 1);
jmitc91516 0:a5c253316af6 1163 }
jmitc91516 0:a5c253316af6 1164
jmitc91516 0:a5c253316af6 1165 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 1166 void GuiLib_Ellipse(
jmitc91516 0:a5c253316af6 1167 GuiConst_INT16S X,
jmitc91516 0:a5c253316af6 1168 GuiConst_INT16S Y,
jmitc91516 0:a5c253316af6 1169 GuiConst_INT16U Radius1,
jmitc91516 0:a5c253316af6 1170 GuiConst_INT16U Radius2,
jmitc91516 0:a5c253316af6 1171 GuiConst_INT32S BorderColor,
jmitc91516 0:a5c253316af6 1172 GuiConst_INT32S FillColor)
jmitc91516 0:a5c253316af6 1173 {
jmitc91516 0:a5c253316af6 1174 Ellipse(X, Y, Radius1, Radius2, BorderColor, FillColor, 1, 1, 1, 1);
jmitc91516 0:a5c253316af6 1175 }
jmitc91516 0:a5c253316af6 1176
jmitc91516 0:a5c253316af6 1177 //==============================================================================
jmitc91516 0:a5c253316af6 1178
jmitc91516 0:a5c253316af6 1179 #ifdef GuiConst_CLIPPING_SUPPORT_ON
jmitc91516 0:a5c253316af6 1180 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 1181 void GuiLib_ResetClipping(void)
jmitc91516 0:a5c253316af6 1182 {
jmitc91516 0:a5c253316af6 1183 sgl.ClippingTotal = 0;
jmitc91516 0:a5c253316af6 1184 SetClipping(
jmitc91516 0:a5c253316af6 1185 0, 0, GuiConst_DISPLAY_WIDTH_HW - 1, GuiConst_DISPLAY_HEIGHT_HW - 1);
jmitc91516 0:a5c253316af6 1186 }
jmitc91516 0:a5c253316af6 1187
jmitc91516 0:a5c253316af6 1188 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 1189 void GuiLib_SetClipping(
jmitc91516 0:a5c253316af6 1190 GuiConst_INT16S X1,
jmitc91516 0:a5c253316af6 1191 GuiConst_INT16S Y1,
jmitc91516 0:a5c253316af6 1192 GuiConst_INT16S X2,
jmitc91516 0:a5c253316af6 1193 GuiConst_INT16S Y2)
jmitc91516 0:a5c253316af6 1194 {
jmitc91516 0:a5c253316af6 1195 sgl.ClippingTotal = ((X1 > X2) || (Y1 > Y2));
jmitc91516 0:a5c253316af6 1196
jmitc91516 0:a5c253316af6 1197 GuiLib_COORD_ADJUST(X1, Y1);
jmitc91516 0:a5c253316af6 1198 GuiLib_COORD_ADJUST(X2, Y2);
jmitc91516 0:a5c253316af6 1199 OrderCoord(&X1, &X2);
jmitc91516 0:a5c253316af6 1200 OrderCoord(&Y1, &Y2);
jmitc91516 0:a5c253316af6 1201
jmitc91516 0:a5c253316af6 1202 SetClipping(X1, Y1, X2, Y2);
jmitc91516 0:a5c253316af6 1203 }
jmitc91516 0:a5c253316af6 1204 #endif
jmitc91516 0:a5c253316af6 1205
jmitc91516 0:a5c253316af6 1206 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 1207 void GuiLib_ResetDisplayRepaint(void)
jmitc91516 0:a5c253316af6 1208 {
jmitc91516 0:a5c253316af6 1209 GuiConst_INT16S LineNo;
jmitc91516 0:a5c253316af6 1210
jmitc91516 0:a5c253316af6 1211 if (!sgl.BaseLayerDrawing)
jmitc91516 0:a5c253316af6 1212 return;
jmitc91516 0:a5c253316af6 1213
jmitc91516 0:a5c253316af6 1214 for (LineNo = 0; LineNo < GuiConst_BYTE_LINES; LineNo++)
jmitc91516 0:a5c253316af6 1215 {
jmitc91516 0:a5c253316af6 1216 GuiLib_DisplayRepaint[LineNo].ByteEnd = -1;
jmitc91516 0:a5c253316af6 1217 #ifdef GuiConst_VNC_REMOTE_SUPPORT_ON
jmitc91516 0:a5c253316af6 1218 GuiLib_VncRepaint[LineNo].ByteEnd = -1;
jmitc91516 0:a5c253316af6 1219 #endif
jmitc91516 0:a5c253316af6 1220 }
jmitc91516 0:a5c253316af6 1221 }
jmitc91516 0:a5c253316af6 1222
jmitc91516 0:a5c253316af6 1223 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 1224 void GuiLib_MarkDisplayBoxRepaint(
jmitc91516 0:a5c253316af6 1225 GuiConst_INT16S X1,
jmitc91516 0:a5c253316af6 1226 GuiConst_INT16S Y1,
jmitc91516 0:a5c253316af6 1227 GuiConst_INT16S X2,
jmitc91516 0:a5c253316af6 1228 GuiConst_INT16S Y2)
jmitc91516 0:a5c253316af6 1229 {
jmitc91516 0:a5c253316af6 1230 if (!sgl.BaseLayerDrawing)
jmitc91516 0:a5c253316af6 1231 return;
jmitc91516 0:a5c253316af6 1232
jmitc91516 0:a5c253316af6 1233 GuiLib_COORD_ADJUST(X1, Y1);
jmitc91516 0:a5c253316af6 1234 GuiLib_COORD_ADJUST(X2, Y2);
jmitc91516 0:a5c253316af6 1235 OrderCoord(&X1, &X2);
jmitc91516 0:a5c253316af6 1236 OrderCoord(&Y1, &Y2);
jmitc91516 0:a5c253316af6 1237 #ifdef GuiConst_CLIPPING_SUPPORT_ON
jmitc91516 0:a5c253316af6 1238 if (CheckRect (&X1, &Y1, &X2, &Y2))
jmitc91516 0:a5c253316af6 1239 #endif
jmitc91516 0:a5c253316af6 1240 MarkDisplayBoxRepaint(X1, Y1, X2, Y2);
jmitc91516 0:a5c253316af6 1241 }
jmitc91516 0:a5c253316af6 1242
jmitc91516 0:a5c253316af6 1243 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 1244 void GuiLib_ClearDisplay(void)
jmitc91516 0:a5c253316af6 1245 {
jmitc91516 0:a5c253316af6 1246 ClearDisplay();
jmitc91516 0:a5c253316af6 1247 MarkDisplayBoxRepaint(
jmitc91516 0:a5c253316af6 1248 0, 0, GuiConst_DISPLAY_WIDTH_HW - 1, GuiConst_DISPLAY_HEIGHT_HW - 1);
jmitc91516 0:a5c253316af6 1249 }
jmitc91516 0:a5c253316af6 1250
jmitc91516 0:a5c253316af6 1251 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 1252 void GuiLib_Dot(
jmitc91516 0:a5c253316af6 1253 GuiConst_INT16S X,
jmitc91516 0:a5c253316af6 1254 GuiConst_INT16S Y,
jmitc91516 0:a5c253316af6 1255 GuiConst_INTCOLOR Color)
jmitc91516 0:a5c253316af6 1256 {
jmitc91516 0:a5c253316af6 1257 GuiLib_COORD_ADJUST(X, Y);
jmitc91516 0:a5c253316af6 1258 GuiLib_COLOR_ADJUST(Color);
jmitc91516 0:a5c253316af6 1259
jmitc91516 0:a5c253316af6 1260 MakeDot(X, Y, Color);
jmitc91516 0:a5c253316af6 1261 }
jmitc91516 0:a5c253316af6 1262
jmitc91516 0:a5c253316af6 1263 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 1264 GuiConst_INTCOLOR GuiLib_GetDot(
jmitc91516 0:a5c253316af6 1265 GuiConst_INT16S X,
jmitc91516 0:a5c253316af6 1266 GuiConst_INT16S Y)
jmitc91516 0:a5c253316af6 1267 {
jmitc91516 0:a5c253316af6 1268 GuiLib_COORD_ADJUST(X, Y);
jmitc91516 0:a5c253316af6 1269
jmitc91516 0:a5c253316af6 1270 return (ReadDot(X, Y));
jmitc91516 0:a5c253316af6 1271 }
jmitc91516 0:a5c253316af6 1272
jmitc91516 0:a5c253316af6 1273 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 1274 void GuiLib_Line(
jmitc91516 0:a5c253316af6 1275 GuiConst_INT16S X1,
jmitc91516 0:a5c253316af6 1276 GuiConst_INT16S Y1,
jmitc91516 0:a5c253316af6 1277 GuiConst_INT16S X2,
jmitc91516 0:a5c253316af6 1278 GuiConst_INT16S Y2,
jmitc91516 0:a5c253316af6 1279 GuiConst_INTCOLOR Color)
jmitc91516 0:a5c253316af6 1280 {
jmitc91516 0:a5c253316af6 1281 GuiConst_INT16S X, Y;
jmitc91516 0:a5c253316af6 1282 GuiConst_INT16S PX1, PY1, PX2, PY2;
jmitc91516 0:a5c253316af6 1283 GuiConst_INT16S RemCoord;
jmitc91516 0:a5c253316af6 1284 GuiConst_INT32S Slope;
jmitc91516 0:a5c253316af6 1285 GuiConst_INT16S Offset, NewOffset;
jmitc91516 0:a5c253316af6 1286 GuiConst_INT16U OffsetCnt;
jmitc91516 0:a5c253316af6 1287 GuiConst_INT16S OffsetDir;
jmitc91516 0:a5c253316af6 1288
jmitc91516 0:a5c253316af6 1289 GuiLib_COORD_ADJUST(X1, Y1);
jmitc91516 0:a5c253316af6 1290 GuiLib_COORD_ADJUST(X2, Y2);
jmitc91516 0:a5c253316af6 1291 GuiLib_COLOR_ADJUST(Color);
jmitc91516 0:a5c253316af6 1292
jmitc91516 0:a5c253316af6 1293 if (X1 == X2)
jmitc91516 0:a5c253316af6 1294 {
jmitc91516 0:a5c253316af6 1295 OrderCoord(&Y1, &Y2);
jmitc91516 0:a5c253316af6 1296 #ifdef GuiConst_CLIPPING_SUPPORT_ON
jmitc91516 0:a5c253316af6 1297 if (CheckRect (&X1, &Y1, &X2, &Y2))
jmitc91516 0:a5c253316af6 1298 #endif
jmitc91516 0:a5c253316af6 1299 {
jmitc91516 0:a5c253316af6 1300 VertLine(X1, Y1, Y2, Color);
jmitc91516 0:a5c253316af6 1301 MarkDisplayBoxRepaint(X1, Y1, X1, Y2);
jmitc91516 0:a5c253316af6 1302 }
jmitc91516 0:a5c253316af6 1303 }
jmitc91516 0:a5c253316af6 1304 else if (Y1 == Y2)
jmitc91516 0:a5c253316af6 1305 {
jmitc91516 0:a5c253316af6 1306 OrderCoord(&X1, &X2);
jmitc91516 0:a5c253316af6 1307 #ifdef GuiConst_CLIPPING_SUPPORT_ON
jmitc91516 0:a5c253316af6 1308 if (CheckRect (&X1, &Y1, &X2, &Y2))
jmitc91516 0:a5c253316af6 1309 #endif
jmitc91516 0:a5c253316af6 1310 {
jmitc91516 0:a5c253316af6 1311 HorzLine(X1, X2, Y1, Color);
jmitc91516 0:a5c253316af6 1312 MarkDisplayBoxRepaint(X1, Y1, X2, Y1);
jmitc91516 0:a5c253316af6 1313 }
jmitc91516 0:a5c253316af6 1314 }
jmitc91516 0:a5c253316af6 1315 else
jmitc91516 0:a5c253316af6 1316 {
jmitc91516 0:a5c253316af6 1317 Slope = labs ((10000 * (GuiConst_INT32S) (Y2 - Y1))) /
jmitc91516 0:a5c253316af6 1318 labs ((GuiConst_INT32S) (X2 - X1));
jmitc91516 0:a5c253316af6 1319
jmitc91516 0:a5c253316af6 1320 if (Slope <= 10000)
jmitc91516 0:a5c253316af6 1321 {
jmitc91516 0:a5c253316af6 1322 if (OrderCoord(&X1, &X2))
jmitc91516 0:a5c253316af6 1323 SwapCoord(&Y1, &Y2);
jmitc91516 0:a5c253316af6 1324
jmitc91516 0:a5c253316af6 1325 X = 0;
jmitc91516 0:a5c253316af6 1326 Offset = 0;
jmitc91516 0:a5c253316af6 1327 RemCoord = 0;
jmitc91516 0:a5c253316af6 1328 OffsetCnt = 0;
jmitc91516 0:a5c253316af6 1329 if (Y1 < Y2)
jmitc91516 0:a5c253316af6 1330 OffsetDir = 1;
jmitc91516 0:a5c253316af6 1331 else
jmitc91516 0:a5c253316af6 1332 OffsetDir = -1;
jmitc91516 0:a5c253316af6 1333 do
jmitc91516 0:a5c253316af6 1334 {
jmitc91516 0:a5c253316af6 1335 NewOffset = (((GuiConst_INT32S) X * Slope) + 5000) / 10000;
jmitc91516 0:a5c253316af6 1336 if (((X > 0) && (NewOffset != Offset)) || (X > X2 - X1))
jmitc91516 0:a5c253316af6 1337 {
jmitc91516 0:a5c253316af6 1338 PX1 = X1 + RemCoord;
jmitc91516 0:a5c253316af6 1339 PY1 = Y1 + OffsetDir * Offset;
jmitc91516 0:a5c253316af6 1340 PX2 = PX1 + OffsetCnt - 1;
jmitc91516 0:a5c253316af6 1341 if (OffsetCnt == 1)
jmitc91516 0:a5c253316af6 1342 MakeDot(PX1, PY1, Color);
jmitc91516 0:a5c253316af6 1343 else
jmitc91516 0:a5c253316af6 1344 #ifdef GuiConst_CLIPPING_SUPPORT_ON
jmitc91516 0:a5c253316af6 1345 if (CheckRect (&PX1, &PY1, &PX2, &PY1))
jmitc91516 0:a5c253316af6 1346 #endif
jmitc91516 0:a5c253316af6 1347 {
jmitc91516 0:a5c253316af6 1348 HorzLine(PX1, PX2, PY1, Color);
jmitc91516 0:a5c253316af6 1349 MarkDisplayBoxRepaint(PX1, PY1, PX2, PY1);
jmitc91516 0:a5c253316af6 1350 }
jmitc91516 0:a5c253316af6 1351 OffsetCnt = 1;
jmitc91516 0:a5c253316af6 1352 RemCoord = X;
jmitc91516 0:a5c253316af6 1353
jmitc91516 0:a5c253316af6 1354 if (X > X2 - X1)
jmitc91516 0:a5c253316af6 1355 return;
jmitc91516 0:a5c253316af6 1356 }
jmitc91516 0:a5c253316af6 1357 else
jmitc91516 0:a5c253316af6 1358 OffsetCnt++;
jmitc91516 0:a5c253316af6 1359
jmitc91516 0:a5c253316af6 1360 Offset = NewOffset;
jmitc91516 0:a5c253316af6 1361 X++;
jmitc91516 0:a5c253316af6 1362 }
jmitc91516 0:a5c253316af6 1363 while (1);
jmitc91516 0:a5c253316af6 1364 }
jmitc91516 0:a5c253316af6 1365 else
jmitc91516 0:a5c253316af6 1366 {
jmitc91516 0:a5c253316af6 1367 if (OrderCoord(&Y1, &Y2))
jmitc91516 0:a5c253316af6 1368 SwapCoord(&X1, &X2);
jmitc91516 0:a5c253316af6 1369
jmitc91516 0:a5c253316af6 1370 Y = 0;
jmitc91516 0:a5c253316af6 1371 Offset = 0;
jmitc91516 0:a5c253316af6 1372 RemCoord = 0;
jmitc91516 0:a5c253316af6 1373 OffsetCnt = 0;
jmitc91516 0:a5c253316af6 1374 if (X1 < X2)
jmitc91516 0:a5c253316af6 1375 OffsetDir = 1;
jmitc91516 0:a5c253316af6 1376 else
jmitc91516 0:a5c253316af6 1377 OffsetDir = -1;
jmitc91516 0:a5c253316af6 1378 do
jmitc91516 0:a5c253316af6 1379 {
jmitc91516 0:a5c253316af6 1380 NewOffset = (((GuiConst_INT32S) Y * 10000) + (Slope / 2)) / Slope;
jmitc91516 0:a5c253316af6 1381 if (((Y > 0) && (NewOffset != Offset)) || (Y > Y2 - Y1))
jmitc91516 0:a5c253316af6 1382 {
jmitc91516 0:a5c253316af6 1383 PX1 = X1 + OffsetDir * Offset;
jmitc91516 0:a5c253316af6 1384 PY1 = Y1 + RemCoord;
jmitc91516 0:a5c253316af6 1385 PY2 = PY1 + OffsetCnt - 1;
jmitc91516 0:a5c253316af6 1386 if (OffsetCnt == 1)
jmitc91516 0:a5c253316af6 1387 MakeDot(PX1, PY1, Color);
jmitc91516 0:a5c253316af6 1388 else
jmitc91516 0:a5c253316af6 1389 #ifdef GuiConst_CLIPPING_SUPPORT_ON
jmitc91516 0:a5c253316af6 1390 if (CheckRect (&PX1, &PY1, &PX1, &PY2))
jmitc91516 0:a5c253316af6 1391 #endif
jmitc91516 0:a5c253316af6 1392 {
jmitc91516 0:a5c253316af6 1393 VertLine(PX1, PY1, PY2, Color);
jmitc91516 0:a5c253316af6 1394 MarkDisplayBoxRepaint(PX1, PY1, PX1, PY2);
jmitc91516 0:a5c253316af6 1395 }
jmitc91516 0:a5c253316af6 1396 OffsetCnt = 1;
jmitc91516 0:a5c253316af6 1397 RemCoord = Y;
jmitc91516 0:a5c253316af6 1398
jmitc91516 0:a5c253316af6 1399 if (Y > Y2 - Y1)
jmitc91516 0:a5c253316af6 1400 return;
jmitc91516 0:a5c253316af6 1401 }
jmitc91516 0:a5c253316af6 1402 else
jmitc91516 0:a5c253316af6 1403 OffsetCnt++;
jmitc91516 0:a5c253316af6 1404
jmitc91516 0:a5c253316af6 1405 Offset = NewOffset;
jmitc91516 0:a5c253316af6 1406 Y++;
jmitc91516 0:a5c253316af6 1407 }
jmitc91516 0:a5c253316af6 1408 while (1);
jmitc91516 0:a5c253316af6 1409 }
jmitc91516 0:a5c253316af6 1410 }
jmitc91516 0:a5c253316af6 1411 }
jmitc91516 0:a5c253316af6 1412
jmitc91516 0:a5c253316af6 1413 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 1414 void GuiLib_LinePattern(
jmitc91516 0:a5c253316af6 1415 GuiConst_INT16S X1,
jmitc91516 0:a5c253316af6 1416 GuiConst_INT16S Y1,
jmitc91516 0:a5c253316af6 1417 GuiConst_INT16S X2,
jmitc91516 0:a5c253316af6 1418 GuiConst_INT16S Y2,
jmitc91516 0:a5c253316af6 1419 GuiConst_INT8U LinePattern,
jmitc91516 0:a5c253316af6 1420 GuiConst_INTCOLOR Color)
jmitc91516 0:a5c253316af6 1421 {
jmitc91516 0:a5c253316af6 1422 GuiConst_INT16S X,Y;
jmitc91516 0:a5c253316af6 1423 GuiConst_INT32S Slope;
jmitc91516 0:a5c253316af6 1424 GuiConst_INT16S Offset;
jmitc91516 0:a5c253316af6 1425 GuiConst_INT8U MaskTemp;
jmitc91516 0:a5c253316af6 1426 GuiConst_INT8U MaskCtr = 0;
jmitc91516 0:a5c253316af6 1427 GuiConst_INT8U Vertical;
jmitc91516 0:a5c253316af6 1428
jmitc91516 0:a5c253316af6 1429 GuiLib_COORD_ADJUST(X1, Y1);
jmitc91516 0:a5c253316af6 1430 GuiLib_COORD_ADJUST(X2, Y2);
jmitc91516 0:a5c253316af6 1431 GuiLib_COLOR_ADJUST(Color);
jmitc91516 0:a5c253316af6 1432
jmitc91516 0:a5c253316af6 1433 Vertical = (X1 == X2);
jmitc91516 0:a5c253316af6 1434 if (Vertical)
jmitc91516 0:a5c253316af6 1435 Offset = 0;
jmitc91516 0:a5c253316af6 1436 else
jmitc91516 0:a5c253316af6 1437 Slope = labs ((10000 * (GuiConst_INT32S)(Y2 - Y1))) /
jmitc91516 0:a5c253316af6 1438 labs ((GuiConst_INT32S)(X2 - X1));
jmitc91516 0:a5c253316af6 1439
jmitc91516 0:a5c253316af6 1440 if (Vertical || (Slope > 10000))
jmitc91516 0:a5c253316af6 1441 {
jmitc91516 0:a5c253316af6 1442 if (OrderCoord(&Y1, &Y2))
jmitc91516 0:a5c253316af6 1443 SwapCoord(&X1, &X2);
jmitc91516 0:a5c253316af6 1444
jmitc91516 0:a5c253316af6 1445 for (Y = 0; Y <= Y2 - Y1; Y++)
jmitc91516 0:a5c253316af6 1446 {
jmitc91516 0:a5c253316af6 1447 if (MaskCtr == 0 )
jmitc91516 0:a5c253316af6 1448 {
jmitc91516 0:a5c253316af6 1449 MaskCtr = 8;
jmitc91516 0:a5c253316af6 1450 MaskTemp = LinePattern;
jmitc91516 0:a5c253316af6 1451 }
jmitc91516 0:a5c253316af6 1452 if (MaskTemp & 0x01)
jmitc91516 0:a5c253316af6 1453 {
jmitc91516 0:a5c253316af6 1454 if (!Vertical)
jmitc91516 0:a5c253316af6 1455 Offset = (((GuiConst_INT32S) Y * 10000) + (Slope / 2)) / Slope;
jmitc91516 0:a5c253316af6 1456 if (X1 < X2)
jmitc91516 0:a5c253316af6 1457 MakeDot(X1 + Offset, Y1 + Y, Color);
jmitc91516 0:a5c253316af6 1458 else
jmitc91516 0:a5c253316af6 1459 MakeDot(X1 - Offset, Y1 + Y, Color);
jmitc91516 0:a5c253316af6 1460 }
jmitc91516 0:a5c253316af6 1461 MaskTemp >>= 1;
jmitc91516 0:a5c253316af6 1462 MaskCtr--;
jmitc91516 0:a5c253316af6 1463 }
jmitc91516 0:a5c253316af6 1464 }
jmitc91516 0:a5c253316af6 1465 else
jmitc91516 0:a5c253316af6 1466 {
jmitc91516 0:a5c253316af6 1467 if (OrderCoord(&X1, &X2))
jmitc91516 0:a5c253316af6 1468 SwapCoord(&Y1, &Y2);
jmitc91516 0:a5c253316af6 1469
jmitc91516 0:a5c253316af6 1470 for (X = 0; X <= X2 - X1; X++)
jmitc91516 0:a5c253316af6 1471 {
jmitc91516 0:a5c253316af6 1472 if (MaskCtr == 0 )
jmitc91516 0:a5c253316af6 1473 {
jmitc91516 0:a5c253316af6 1474 MaskCtr = 8;
jmitc91516 0:a5c253316af6 1475 MaskTemp = LinePattern;
jmitc91516 0:a5c253316af6 1476 }
jmitc91516 0:a5c253316af6 1477
jmitc91516 0:a5c253316af6 1478 if (MaskTemp & 0x01)
jmitc91516 0:a5c253316af6 1479 {
jmitc91516 0:a5c253316af6 1480 Offset = (((GuiConst_INT32S) X * Slope) + 5000) / 10000;
jmitc91516 0:a5c253316af6 1481 if (Y1 < Y2)
jmitc91516 0:a5c253316af6 1482 MakeDot(X1 + X, Y1 + Offset, Color);
jmitc91516 0:a5c253316af6 1483 else
jmitc91516 0:a5c253316af6 1484 MakeDot(X1 + X, Y1 - Offset, Color);
jmitc91516 0:a5c253316af6 1485 }
jmitc91516 0:a5c253316af6 1486 MaskTemp >>= 1;
jmitc91516 0:a5c253316af6 1487 MaskCtr--;
jmitc91516 0:a5c253316af6 1488 }
jmitc91516 0:a5c253316af6 1489 }
jmitc91516 0:a5c253316af6 1490 }
jmitc91516 0:a5c253316af6 1491
jmitc91516 0:a5c253316af6 1492 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 1493 void GuiLib_HLine(
jmitc91516 0:a5c253316af6 1494 GuiConst_INT16S X1,
jmitc91516 0:a5c253316af6 1495 GuiConst_INT16S X2,
jmitc91516 0:a5c253316af6 1496 GuiConst_INT16S Y,
jmitc91516 0:a5c253316af6 1497 GuiConst_INTCOLOR Color)
jmitc91516 0:a5c253316af6 1498 {
jmitc91516 0:a5c253316af6 1499 GuiLib_Line(X1, Y, X2, Y, Color);
jmitc91516 0:a5c253316af6 1500 }
jmitc91516 0:a5c253316af6 1501
jmitc91516 0:a5c253316af6 1502 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 1503 void GuiLib_VLine(
jmitc91516 0:a5c253316af6 1504 GuiConst_INT16S X,
jmitc91516 0:a5c253316af6 1505 GuiConst_INT16S Y1,
jmitc91516 0:a5c253316af6 1506 GuiConst_INT16S Y2,
jmitc91516 0:a5c253316af6 1507 GuiConst_INTCOLOR Color)
jmitc91516 0:a5c253316af6 1508 {
jmitc91516 0:a5c253316af6 1509 GuiLib_Line(X, Y1, X, Y2, Color);
jmitc91516 0:a5c253316af6 1510 }
jmitc91516 0:a5c253316af6 1511
jmitc91516 0:a5c253316af6 1512 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 1513 void GuiLib_Box(
jmitc91516 0:a5c253316af6 1514 GuiConst_INT16S X1,
jmitc91516 0:a5c253316af6 1515 GuiConst_INT16S Y1,
jmitc91516 0:a5c253316af6 1516 GuiConst_INT16S X2,
jmitc91516 0:a5c253316af6 1517 GuiConst_INT16S Y2,
jmitc91516 0:a5c253316af6 1518 GuiConst_INTCOLOR Color)
jmitc91516 0:a5c253316af6 1519 {
jmitc91516 0:a5c253316af6 1520 GuiConst_INT16S X1C;
jmitc91516 0:a5c253316af6 1521 GuiConst_INT16S Y1C;
jmitc91516 0:a5c253316af6 1522 GuiConst_INT16S X2C;
jmitc91516 0:a5c253316af6 1523 GuiConst_INT16S Y2C;
jmitc91516 0:a5c253316af6 1524
jmitc91516 0:a5c253316af6 1525 GuiLib_COORD_ADJUST(X1, Y1);
jmitc91516 0:a5c253316af6 1526 GuiLib_COORD_ADJUST(X2, Y2);
jmitc91516 0:a5c253316af6 1527 GuiLib_COLOR_ADJUST(Color);
jmitc91516 0:a5c253316af6 1528
jmitc91516 0:a5c253316af6 1529 OrderCoord(&X1, &X2);
jmitc91516 0:a5c253316af6 1530 OrderCoord(&Y1, &Y2);
jmitc91516 0:a5c253316af6 1531
jmitc91516 0:a5c253316af6 1532 X1C = X1;
jmitc91516 0:a5c253316af6 1533 Y1C = Y1;
jmitc91516 0:a5c253316af6 1534 X2C = X2;
jmitc91516 0:a5c253316af6 1535 Y2C = Y2;
jmitc91516 0:a5c253316af6 1536 #ifdef GuiConst_CLIPPING_SUPPORT_ON
jmitc91516 0:a5c253316af6 1537 if (CheckRect(&X1C, &Y1C, &X2C, &Y2C))
jmitc91516 0:a5c253316af6 1538 #endif
jmitc91516 0:a5c253316af6 1539 {
jmitc91516 0:a5c253316af6 1540 MarkDisplayBoxRepaint(X1C, Y1C, X2C, Y2C);
jmitc91516 0:a5c253316af6 1541 X1C = X1;
jmitc91516 0:a5c253316af6 1542 Y1C = Y1;
jmitc91516 0:a5c253316af6 1543 X2C = X1;
jmitc91516 0:a5c253316af6 1544 Y2C = Y2;
jmitc91516 0:a5c253316af6 1545 #ifdef GuiConst_CLIPPING_SUPPORT_ON
jmitc91516 0:a5c253316af6 1546 if (CheckRect(&X1C, &Y1C, &X1C, &Y2C))
jmitc91516 0:a5c253316af6 1547 #endif
jmitc91516 0:a5c253316af6 1548 VertLine(X1C, Y1C, Y2C, Color);
jmitc91516 0:a5c253316af6 1549 X1C = X2;
jmitc91516 0:a5c253316af6 1550 Y1C = Y1;
jmitc91516 0:a5c253316af6 1551 X2C = X2;
jmitc91516 0:a5c253316af6 1552 Y2C = Y2;
jmitc91516 0:a5c253316af6 1553 #ifdef GuiConst_CLIPPING_SUPPORT_ON
jmitc91516 0:a5c253316af6 1554 if (CheckRect(&X2C, &Y1C, &X2C, &Y2C))
jmitc91516 0:a5c253316af6 1555 #endif
jmitc91516 0:a5c253316af6 1556 VertLine(X2C, Y1C, Y2C, Color);
jmitc91516 0:a5c253316af6 1557 if (X2 - X1 > 1)
jmitc91516 0:a5c253316af6 1558 {
jmitc91516 0:a5c253316af6 1559 X1C = X1 + 1;
jmitc91516 0:a5c253316af6 1560 Y1C = Y1;
jmitc91516 0:a5c253316af6 1561 X2C = X2 - 1;
jmitc91516 0:a5c253316af6 1562 #ifdef GuiConst_CLIPPING_SUPPORT_ON
jmitc91516 0:a5c253316af6 1563 if (CheckRect(&X1C, &Y1C, &X2C, &Y1C))
jmitc91516 0:a5c253316af6 1564 #endif
jmitc91516 0:a5c253316af6 1565 HorzLine(X1C, X2C, Y1C, Color);
jmitc91516 0:a5c253316af6 1566 X1C = X1 + 1;
jmitc91516 0:a5c253316af6 1567 Y1C = Y2;
jmitc91516 0:a5c253316af6 1568 X2C = X2 - 1;
jmitc91516 0:a5c253316af6 1569 Y2C = Y2;
jmitc91516 0:a5c253316af6 1570 #ifdef GuiConst_CLIPPING_SUPPORT_ON
jmitc91516 0:a5c253316af6 1571 if (CheckRect(&X1C, &Y2C, &X2C, &Y2C))
jmitc91516 0:a5c253316af6 1572 #endif
jmitc91516 0:a5c253316af6 1573 HorzLine(X1C, X2C, Y2C, Color);
jmitc91516 0:a5c253316af6 1574 }
jmitc91516 0:a5c253316af6 1575 }
jmitc91516 0:a5c253316af6 1576 }
jmitc91516 0:a5c253316af6 1577
jmitc91516 0:a5c253316af6 1578 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 1579 void GuiLib_FillBox(
jmitc91516 0:a5c253316af6 1580 GuiConst_INT16S X1,
jmitc91516 0:a5c253316af6 1581 GuiConst_INT16S Y1,
jmitc91516 0:a5c253316af6 1582 GuiConst_INT16S X2,
jmitc91516 0:a5c253316af6 1583 GuiConst_INT16S Y2,
jmitc91516 0:a5c253316af6 1584 GuiConst_INTCOLOR Color)
jmitc91516 0:a5c253316af6 1585 {
jmitc91516 0:a5c253316af6 1586 GuiLib_COORD_ADJUST(X1, Y1);
jmitc91516 0:a5c253316af6 1587 GuiLib_COORD_ADJUST(X2, Y2);
jmitc91516 0:a5c253316af6 1588 GuiLib_COLOR_ADJUST(Color);
jmitc91516 0:a5c253316af6 1589
jmitc91516 0:a5c253316af6 1590 OrderCoord(&X1, &X2);
jmitc91516 0:a5c253316af6 1591 OrderCoord(&Y1, &Y2);
jmitc91516 0:a5c253316af6 1592
jmitc91516 0:a5c253316af6 1593 #ifdef GuiConst_CLIPPING_SUPPORT_ON
jmitc91516 0:a5c253316af6 1594 if (CheckRect (&X1, &Y1, &X2, &Y2))
jmitc91516 0:a5c253316af6 1595 #endif
jmitc91516 0:a5c253316af6 1596 {
jmitc91516 0:a5c253316af6 1597 MarkDisplayBoxRepaint(X1, Y1, X2, Y2);
jmitc91516 0:a5c253316af6 1598 #ifdef GuiConst_BYTE_HORIZONTAL
jmitc91516 0:a5c253316af6 1599 while (Y1 <= Y2)
jmitc91516 0:a5c253316af6 1600 {
jmitc91516 0:a5c253316af6 1601 HorzLine(X1, X2, Y1, Color);
jmitc91516 0:a5c253316af6 1602 Y1++;
jmitc91516 0:a5c253316af6 1603 }
jmitc91516 0:a5c253316af6 1604 #else
jmitc91516 0:a5c253316af6 1605 while (X1 <= X2)
jmitc91516 0:a5c253316af6 1606 {
jmitc91516 0:a5c253316af6 1607 VertLine(X1, Y1, Y2, Color);
jmitc91516 0:a5c253316af6 1608 X1++;
jmitc91516 0:a5c253316af6 1609 }
jmitc91516 0:a5c253316af6 1610 #endif
jmitc91516 0:a5c253316af6 1611 }
jmitc91516 0:a5c253316af6 1612 }
jmitc91516 0:a5c253316af6 1613
jmitc91516 0:a5c253316af6 1614 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 1615 void GuiLib_BorderBox(
jmitc91516 0:a5c253316af6 1616 GuiConst_INT16S X1,
jmitc91516 0:a5c253316af6 1617 GuiConst_INT16S Y1,
jmitc91516 0:a5c253316af6 1618 GuiConst_INT16S X2,
jmitc91516 0:a5c253316af6 1619 GuiConst_INT16S Y2,
jmitc91516 0:a5c253316af6 1620 GuiConst_INTCOLOR BorderColor,
jmitc91516 0:a5c253316af6 1621 GuiConst_INTCOLOR FillColor)
jmitc91516 0:a5c253316af6 1622 {
jmitc91516 0:a5c253316af6 1623 GuiLib_Box(X1, Y1, X2, Y2, BorderColor);
jmitc91516 0:a5c253316af6 1624 OrderCoord(&X1, &X2);
jmitc91516 0:a5c253316af6 1625 OrderCoord(&Y1, &Y2);
jmitc91516 0:a5c253316af6 1626 if (((X2 - X1) >= 2) && ((Y2 - Y1) >= 2))
jmitc91516 0:a5c253316af6 1627 GuiLib_FillBox(X1+1, Y1+1, X2-1, Y2-1, FillColor);
jmitc91516 0:a5c253316af6 1628 }
jmitc91516 0:a5c253316af6 1629
jmitc91516 0:a5c253316af6 1630 #ifdef GuiConst_BITMAP_SUPPORT_ON
jmitc91516 0:a5c253316af6 1631 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 1632 static void ReadBitmapSizes(
jmitc91516 0:a5c253316af6 1633 GuiConst_INT16U BitmapIndex)
jmitc91516 0:a5c253316af6 1634 {
jmitc91516 0:a5c253316af6 1635 #ifndef GuiConst_REMOTE_BITMAP_DATA
jmitc91516 0:a5c253316af6 1636 GuiConst_INT8U PrefixRom * PixelDataPtr;
jmitc91516 0:a5c253316af6 1637 #endif
jmitc91516 0:a5c253316af6 1638
jmitc91516 0:a5c253316af6 1639 #ifdef GuiConst_REMOTE_BITMAP_DATA
jmitc91516 0:a5c253316af6 1640 if (BitmapIndex != sgl.CurRemoteBitmap)
jmitc91516 0:a5c253316af6 1641 {
jmitc91516 0:a5c253316af6 1642 GuiLib_RemoteDataReadBlock(
jmitc91516 0:a5c253316af6 1643 (GuiConst_INT32U PrefixRom)GuiStruct_BitmapPtrList[BitmapIndex],
jmitc91516 0:a5c253316af6 1644 (GuiConst_INT32U PrefixRom)GuiStruct_BitmapPtrList[BitmapIndex + 1] -
jmitc91516 0:a5c253316af6 1645 (GuiConst_INT32U PrefixRom)GuiStruct_BitmapPtrList[BitmapIndex],
jmitc91516 0:a5c253316af6 1646 sgl.GuiLib_RemoteBitmapBuffer);
jmitc91516 0:a5c253316af6 1647 sgl.CurRemoteBitmap = BitmapIndex;
jmitc91516 0:a5c253316af6 1648 }
jmitc91516 0:a5c253316af6 1649 sgl.BitmapSizeX = (GuiConst_INT16S)sgl.GuiLib_RemoteBitmapBuffer[0] +
jmitc91516 0:a5c253316af6 1650 256*(GuiConst_INT16S)sgl.GuiLib_RemoteBitmapBuffer[1];
jmitc91516 0:a5c253316af6 1651 sgl.BitmapSizeY = (GuiConst_INT16S)sgl.GuiLib_RemoteBitmapBuffer[2] +
jmitc91516 0:a5c253316af6 1652 256*(GuiConst_INT16S)sgl.GuiLib_RemoteBitmapBuffer[3];
jmitc91516 0:a5c253316af6 1653 #else
jmitc91516 0:a5c253316af6 1654 PixelDataPtr =
jmitc91516 0:a5c253316af6 1655 (GuiConst_INT8U PrefixRom *)ReadWord(GuiStruct_BitmapPtrList[BitmapIndex]);
jmitc91516 0:a5c253316af6 1656
jmitc91516 0:a5c253316af6 1657 sgl.BitmapSizeX = (GuiConst_INT16S)*PixelDataPtr;
jmitc91516 0:a5c253316af6 1658 PixelDataPtr++;
jmitc91516 0:a5c253316af6 1659 sgl.BitmapSizeX += 256*(GuiConst_INT16S)*PixelDataPtr;
jmitc91516 0:a5c253316af6 1660 PixelDataPtr++;
jmitc91516 0:a5c253316af6 1661 sgl.BitmapSizeY = (GuiConst_INT16S)*PixelDataPtr;
jmitc91516 0:a5c253316af6 1662 PixelDataPtr++;
jmitc91516 0:a5c253316af6 1663 sgl.BitmapSizeY += 256*(GuiConst_INT16S)*PixelDataPtr;
jmitc91516 0:a5c253316af6 1664 PixelDataPtr++;
jmitc91516 0:a5c253316af6 1665 #endif
jmitc91516 0:a5c253316af6 1666 }
jmitc91516 0:a5c253316af6 1667
jmitc91516 0:a5c253316af6 1668 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 1669 void GuiLib_ShowBitmap(
jmitc91516 0:a5c253316af6 1670 GuiConst_INT16U BitmapIndex,
jmitc91516 0:a5c253316af6 1671 GuiConst_INT16S X,
jmitc91516 0:a5c253316af6 1672 GuiConst_INT16S Y,
jmitc91516 0:a5c253316af6 1673 GuiConst_INT32S TranspColor)
jmitc91516 0:a5c253316af6 1674 {
jmitc91516 0:a5c253316af6 1675 #ifdef GuiConst_REMOTE_BITMAP_DATA
jmitc91516 0:a5c253316af6 1676 if (BitmapIndex != sgl.CurRemoteBitmap)
jmitc91516 0:a5c253316af6 1677 {
jmitc91516 0:a5c253316af6 1678 GuiLib_RemoteDataReadBlock(
jmitc91516 0:a5c253316af6 1679 (GuiConst_INT32U PrefixRom)GuiStruct_BitmapPtrList[BitmapIndex],
jmitc91516 0:a5c253316af6 1680 (GuiConst_INT32U PrefixRom)GuiStruct_BitmapPtrList[BitmapIndex + 1] -
jmitc91516 0:a5c253316af6 1681 (GuiConst_INT32U PrefixRom)GuiStruct_BitmapPtrList[BitmapIndex],
jmitc91516 0:a5c253316af6 1682 sgl.GuiLib_RemoteBitmapBuffer);
jmitc91516 0:a5c253316af6 1683 sgl.CurRemoteBitmap = BitmapIndex;
jmitc91516 0:a5c253316af6 1684 }
jmitc91516 0:a5c253316af6 1685 ShowBitmapArea(&sgl.GuiLib_RemoteBitmapBuffer[0],
jmitc91516 0:a5c253316af6 1686 X, Y, 0, 0, 0, 0, TranspColor, GuiLib_FULL_BITMAP);
jmitc91516 0:a5c253316af6 1687 #else
jmitc91516 0:a5c253316af6 1688 ShowBitmapArea(
jmitc91516 0:a5c253316af6 1689 (GuiConst_INT8U PrefixRom *)ReadWord(GuiStruct_BitmapPtrList[BitmapIndex]),
jmitc91516 0:a5c253316af6 1690 X, Y, 0, 0, 0, 0, TranspColor, GuiLib_FULL_BITMAP);
jmitc91516 0:a5c253316af6 1691 #endif
jmitc91516 0:a5c253316af6 1692 }
jmitc91516 0:a5c253316af6 1693
jmitc91516 0:a5c253316af6 1694 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 1695 void GuiLib_ShowBitmapAt(
jmitc91516 0:a5c253316af6 1696 GuiConst_INT8U * BitmapPtr,
jmitc91516 0:a5c253316af6 1697 GuiConst_INT16S X,
jmitc91516 0:a5c253316af6 1698 GuiConst_INT16S Y,
jmitc91516 0:a5c253316af6 1699 GuiConst_INT32S TranspColor)
jmitc91516 0:a5c253316af6 1700 {
jmitc91516 0:a5c253316af6 1701 ShowBitmapArea(
jmitc91516 0:a5c253316af6 1702 BitmapPtr, X, Y, 0, 0, 0, 0, TranspColor, GuiLib_FULL_BITMAP);
jmitc91516 0:a5c253316af6 1703 }
jmitc91516 0:a5c253316af6 1704
jmitc91516 0:a5c253316af6 1705 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 1706 void GuiLib_ShowBitmapArea(
jmitc91516 0:a5c253316af6 1707 GuiConst_INT16U BitmapIndex,
jmitc91516 0:a5c253316af6 1708 GuiConst_INT16S X,
jmitc91516 0:a5c253316af6 1709 GuiConst_INT16S Y,
jmitc91516 0:a5c253316af6 1710 GuiConst_INT16S AX1,
jmitc91516 0:a5c253316af6 1711 GuiConst_INT16S AY1,
jmitc91516 0:a5c253316af6 1712 GuiConst_INT16S AX2,
jmitc91516 0:a5c253316af6 1713 GuiConst_INT16S AY2,
jmitc91516 0:a5c253316af6 1714 GuiConst_INT32S TranspColor)
jmitc91516 0:a5c253316af6 1715 {
jmitc91516 0:a5c253316af6 1716 #ifdef GuiConst_REMOTE_BITMAP_DATA
jmitc91516 0:a5c253316af6 1717 if (BitmapIndex != sgl.CurRemoteBitmap)
jmitc91516 0:a5c253316af6 1718 {
jmitc91516 0:a5c253316af6 1719 GuiLib_RemoteDataReadBlock(
jmitc91516 0:a5c253316af6 1720 (GuiConst_INT32U PrefixRom)GuiStruct_BitmapPtrList[BitmapIndex],
jmitc91516 0:a5c253316af6 1721 (GuiConst_INT32U PrefixRom)GuiStruct_BitmapPtrList[BitmapIndex + 1] -
jmitc91516 0:a5c253316af6 1722 (GuiConst_INT32U PrefixRom)GuiStruct_BitmapPtrList[BitmapIndex],
jmitc91516 0:a5c253316af6 1723 sgl.GuiLib_RemoteBitmapBuffer);
jmitc91516 0:a5c253316af6 1724 sgl.CurRemoteBitmap = BitmapIndex;
jmitc91516 0:a5c253316af6 1725 }
jmitc91516 0:a5c253316af6 1726 ShowBitmapArea(&sgl.GuiLib_RemoteBitmapBuffer[0],
jmitc91516 0:a5c253316af6 1727 X, Y, AX1, AY1, AX2, AY2, TranspColor, GuiLib_AREA_BITMAP);
jmitc91516 0:a5c253316af6 1728 #else
jmitc91516 0:a5c253316af6 1729 ShowBitmapArea(
jmitc91516 0:a5c253316af6 1730 (GuiConst_INT8U PrefixRom *)ReadWord(GuiStruct_BitmapPtrList[BitmapIndex]),
jmitc91516 0:a5c253316af6 1731 X, Y, AX1, AY1, AX2, AY2, TranspColor, GuiLib_AREA_BITMAP);
jmitc91516 0:a5c253316af6 1732 #endif
jmitc91516 0:a5c253316af6 1733 }
jmitc91516 0:a5c253316af6 1734
jmitc91516 0:a5c253316af6 1735 //------------------------------------------------------------------------------
jmitc91516 0:a5c253316af6 1736 void GuiLib_ShowBitmapAreaAt(
jmitc91516 0:a5c253316af6 1737 GuiConst_INT8U * BitmapPtr,
jmitc91516 0:a5c253316af6 1738 GuiConst_INT16S X,
jmitc91516 0:a5c253316af6 1739 GuiConst_INT16S Y,
jmitc91516 0:a5c253316af6 1740 GuiConst_INT16S AX1,
jmitc91516 0:a5c253316af6 1741 GuiConst_INT16S AY1,
jmitc91516 0:a5c253316af6 1742 GuiConst_INT16S AX2,
jmitc91516 0:a5c253316af6 1743 GuiConst_INT16S AY2,
jmitc91516 0:a5c253316af6 1744 GuiConst_INT32S TranspColor)
jmitc91516 0:a5c253316af6 1745 {
jmitc91516 0:a5c253316af6 1746 ShowBitmapArea(
jmitc91516 0:a5c253316af6 1747 BitmapPtr, X, Y, AX1, AY1, AX2, AY2, TranspColor, GuiLib_AREA_BITMAP);
jmitc91516 0:a5c253316af6 1748 }
jmitc91516 0:a5c253316af6 1749 #endif
jmitc91516 0:a5c253316af6 1750