Single Photo displayed on LPC4088
Dependencies: DMBasicGUI DMSupport
easyGUIFixed/GuiGraph.h@0:9140ec6aa604, 2017-07-28 (annotated)
- 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?
User | Revision | Line number | New 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 |