Single Photo displayed on LPC4088

Dependencies:   DMBasicGUI DMSupport

Committer:
jmitc91516
Date:
Fri Jul 28 14:19:12 2017 +0000
Revision:
0:9140ec6aa604
Simple application that displays a single photograph on the LPC4088 display.

Who changed what in which revision?

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