Repository for import to local machine
Dependencies: DMBasicGUI DMSupport
easyGUIFixed/GuiGraph16.h@8:26e49e6955bd, 2017-07-31 (annotated)
- Committer:
- jmitc91516
- Date:
- Mon Jul 31 15:37:57 2017 +0000
- Revision:
- 8:26e49e6955bd
- Parent:
- 1:a5258871b33d
Method ramp scrolling improved, and more bitmaps moved to QSPI memory
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jmitc91516 | 0:47c880c1463d | 1 | /* ************************************************************************ */ |
jmitc91516 | 0:47c880c1463d | 2 | /* */ |
jmitc91516 | 0:47c880c1463d | 3 | /* (C)2004-2015 IBIS Solutions ApS */ |
jmitc91516 | 0:47c880c1463d | 4 | /* sales@easyGUI.com */ |
jmitc91516 | 0:47c880c1463d | 5 | /* www.easyGUI.com */ |
jmitc91516 | 0:47c880c1463d | 6 | /* */ |
jmitc91516 | 0:47c880c1463d | 7 | /* 12/15/16 bit (4096/32K/64K color) graphics primitives library */ |
jmitc91516 | 0:47c880c1463d | 8 | /* v6.0.9.005 */ |
jmitc91516 | 0:47c880c1463d | 9 | /* */ |
jmitc91516 | 0:47c880c1463d | 10 | /* GuiLib.c include file - do NOT reference it in your linker setup */ |
jmitc91516 | 0:47c880c1463d | 11 | /* */ |
jmitc91516 | 0:47c880c1463d | 12 | /* ************************************************************************ */ |
jmitc91516 | 0:47c880c1463d | 13 | |
jmitc91516 | 0:47c880c1463d | 14 | //------------------------------------------------------------------------------ |
jmitc91516 | 1:a5258871b33d | 15 | #define WANT_DOUBLE_BUFFERING // Also in GuiDisplay.c, GuiLib.c - *** all three must match *** |
jmitc91516 | 1:a5258871b33d | 16 | #ifdef WANT_DOUBLE_BUFFERING |
jmitc91516 | 1:a5258871b33d | 17 | //DisplayBufUnion GuiLib_DisplayBuf; |
jmitc91516 | 1:a5258871b33d | 18 | // Experiment - what if we put GuiLib_DisplayBuf at a specific location - but not the display? |
jmitc91516 | 1:a5258871b33d | 19 | //DisplayBufUnion GuiLib_DisplayBuf __attribute__((at(0xA00BB810))); // Result of second DMBoard->display->allocateFramebuffer() call |
jmitc91516 | 1:a5258871b33d | 20 | DisplayBufUnion GuiLib_DisplayBuf __attribute__((at(0xA00BCFE0))); // Result of second DMBoard->display->allocateFramebuffer() call (as of 26 Oct 2016) |
jmitc91516 | 1:a5258871b33d | 21 | #else // Want to write direct to the display |
jmitc91516 | 1:a5258871b33d | 22 | //DisplayBufUnion GuiLib_DisplayBuf __attribute__((at(0xA0000008))); // Result of first DMBoard->display->allocateFramebuffer() call |
jmitc91516 | 1:a5258871b33d | 23 | DisplayBufUnion GuiLib_DisplayBuf __attribute__((at(0xA00017D8))); // Result of first DMBoard->display->allocateFramebuffer() call (as of 26 Oct 2016) |
jmitc91516 | 1:a5258871b33d | 24 | // Must be same as FRAME_ADDRESS in GuiDisplay.h |
jmitc91516 | 1:a5258871b33d | 25 | #endif |
jmitc91516 | 0:47c880c1463d | 26 | |
jmitc91516 | 0:47c880c1463d | 27 | //============================================================================== |
jmitc91516 | 0:47c880c1463d | 28 | |
jmitc91516 | 0:47c880c1463d | 29 | #ifdef GuiConst_CLIPPING_SUPPORT_ON |
jmitc91516 | 0:47c880c1463d | 30 | //------------------------------------------------------------------------------ |
jmitc91516 | 0:47c880c1463d | 31 | static void SetClipping( |
jmitc91516 | 0:47c880c1463d | 32 | GuiConst_INT16S X1, |
jmitc91516 | 0:47c880c1463d | 33 | GuiConst_INT16S Y1, |
jmitc91516 | 0:47c880c1463d | 34 | GuiConst_INT16S X2, |
jmitc91516 | 0:47c880c1463d | 35 | GuiConst_INT16S Y2) |
jmitc91516 | 0:47c880c1463d | 36 | { |
jmitc91516 | 0:47c880c1463d | 37 | if (X1 < 0) |
jmitc91516 | 0:47c880c1463d | 38 | X1 = 0; |
jmitc91516 | 0:47c880c1463d | 39 | if (Y1 < 0) |
jmitc91516 | 0:47c880c1463d | 40 | Y1 = 0; |
jmitc91516 | 0:47c880c1463d | 41 | if (X2 > (GuiConst_INT16S)sgl.CurLayerWidth - 1) |
jmitc91516 | 0:47c880c1463d | 42 | X2 = (GuiConst_INT16S)sgl.CurLayerWidth - 1; |
jmitc91516 | 0:47c880c1463d | 43 | if (Y2 > (GuiConst_INT16S)sgl.CurLayerHeight - 1) |
jmitc91516 | 0:47c880c1463d | 44 | Y2 = (GuiConst_INT16S)sgl.CurLayerHeight - 1; |
jmitc91516 | 0:47c880c1463d | 45 | |
jmitc91516 | 0:47c880c1463d | 46 | sgl.ClippingX1 = X1; |
jmitc91516 | 0:47c880c1463d | 47 | sgl.ClippingY1 = Y1; |
jmitc91516 | 0:47c880c1463d | 48 | sgl.ClippingX2 = X2; |
jmitc91516 | 0:47c880c1463d | 49 | sgl.ClippingY2 = Y2; |
jmitc91516 | 0:47c880c1463d | 50 | } |
jmitc91516 | 0:47c880c1463d | 51 | #endif |
jmitc91516 | 0:47c880c1463d | 52 | |
jmitc91516 | 0:47c880c1463d | 53 | //------------------------------------------------------------------------------ |
jmitc91516 | 0:47c880c1463d | 54 | static void MarkDisplayBoxRepaint( |
jmitc91516 | 0:47c880c1463d | 55 | GuiConst_INT16S X1, |
jmitc91516 | 0:47c880c1463d | 56 | GuiConst_INT16S Y1, |
jmitc91516 | 0:47c880c1463d | 57 | GuiConst_INT16S X2, |
jmitc91516 | 0:47c880c1463d | 58 | GuiConst_INT16S Y2) |
jmitc91516 | 0:47c880c1463d | 59 | { |
jmitc91516 | 0:47c880c1463d | 60 | if (!sgl.BaseLayerDrawing) |
jmitc91516 | 0:47c880c1463d | 61 | return; |
jmitc91516 | 0:47c880c1463d | 62 | |
jmitc91516 | 0:47c880c1463d | 63 | while (Y1 <= Y2) |
jmitc91516 | 0:47c880c1463d | 64 | { |
jmitc91516 | 0:47c880c1463d | 65 | if ((GuiLib_DisplayRepaint[Y1].ByteEnd == -1) || |
jmitc91516 | 0:47c880c1463d | 66 | (X1 < GuiLib_DisplayRepaint[Y1].ByteBegin)) |
jmitc91516 | 0:47c880c1463d | 67 | GuiLib_DisplayRepaint[Y1].ByteBegin = X1; |
jmitc91516 | 0:47c880c1463d | 68 | if (X2 > GuiLib_DisplayRepaint[Y1].ByteEnd) |
jmitc91516 | 0:47c880c1463d | 69 | GuiLib_DisplayRepaint[Y1].ByteEnd = X2; |
jmitc91516 | 0:47c880c1463d | 70 | #ifdef GuiConst_VNC_REMOTE_SUPPORT_ON |
jmitc91516 | 0:47c880c1463d | 71 | if ((GuiLib_VncRepaint[Y1].ByteEnd == -1) || |
jmitc91516 | 0:47c880c1463d | 72 | (X1 < GuiLib_VncRepaint[Y1].ByteBegin)) |
jmitc91516 | 0:47c880c1463d | 73 | GuiLib_VncRepaint[Y1].ByteBegin = X1; |
jmitc91516 | 0:47c880c1463d | 74 | if (X2 > GuiLib_VncRepaint[Y1].ByteEnd) |
jmitc91516 | 0:47c880c1463d | 75 | GuiLib_VncRepaint[Y1].ByteEnd = X2; |
jmitc91516 | 0:47c880c1463d | 76 | #endif |
jmitc91516 | 0:47c880c1463d | 77 | |
jmitc91516 | 0:47c880c1463d | 78 | Y1++; |
jmitc91516 | 0:47c880c1463d | 79 | } |
jmitc91516 | 0:47c880c1463d | 80 | } |
jmitc91516 | 0:47c880c1463d | 81 | |
jmitc91516 | 0:47c880c1463d | 82 | //------------------------------------------------------------------------------ |
jmitc91516 | 0:47c880c1463d | 83 | static void ClearDisplay(void) |
jmitc91516 | 0:47c880c1463d | 84 | { |
jmitc91516 | 0:47c880c1463d | 85 | int X,Y; |
jmitc91516 | 0:47c880c1463d | 86 | GuiConst_INT16U *PixelPtr; |
jmitc91516 | 0:47c880c1463d | 87 | |
jmitc91516 | 0:47c880c1463d | 88 | PixelPtr = (GuiConst_INT16U*)sgl.CurLayerBufPtr; |
jmitc91516 | 0:47c880c1463d | 89 | for (Y = 0; Y < (GuiConst_INT16S)sgl.CurLayerHeight; Y++) |
jmitc91516 | 0:47c880c1463d | 90 | for (X = 0; X < (GuiConst_INT16S)sgl.CurLayerWidth; X++) |
jmitc91516 | 0:47c880c1463d | 91 | { |
jmitc91516 | 0:47c880c1463d | 92 | *PixelPtr = GuiConst_PIXEL_OFF; |
jmitc91516 | 0:47c880c1463d | 93 | PixelPtr++; |
jmitc91516 | 0:47c880c1463d | 94 | } |
jmitc91516 | 0:47c880c1463d | 95 | } |
jmitc91516 | 0:47c880c1463d | 96 | |
jmitc91516 | 0:47c880c1463d | 97 | //------------------------------------------------------------------------------ |
jmitc91516 | 0:47c880c1463d | 98 | static void MakeDot( |
jmitc91516 | 0:47c880c1463d | 99 | GuiConst_INT16S X, |
jmitc91516 | 0:47c880c1463d | 100 | GuiConst_INT16S Y, |
jmitc91516 | 0:47c880c1463d | 101 | GuiConst_INTCOLOR Color) |
jmitc91516 | 0:47c880c1463d | 102 | { |
jmitc91516 | 0:47c880c1463d | 103 | #ifdef GuiConst_CLIPPING_SUPPORT_ON |
jmitc91516 | 0:47c880c1463d | 104 | if (CheckRect (&X, &Y, &X, &Y)) |
jmitc91516 | 0:47c880c1463d | 105 | #endif |
jmitc91516 | 0:47c880c1463d | 106 | { |
jmitc91516 | 0:47c880c1463d | 107 | #ifdef GuiConst_DISPLAY_BIG_ENDIAN |
jmitc91516 | 0:47c880c1463d | 108 | *((GuiConst_INT16U*)sgl.CurLayerBufPtr + |
jmitc91516 | 0:47c880c1463d | 109 | (GuiConst_INT32U)Y * sgl.CurLayerWidth + (GuiConst_INT32U)X) = |
jmitc91516 | 0:47c880c1463d | 110 | (Color << 8 ) | (Color >> 8); |
jmitc91516 | 0:47c880c1463d | 111 | #else |
jmitc91516 | 0:47c880c1463d | 112 | *((GuiConst_INT16U*)sgl.CurLayerBufPtr + |
jmitc91516 | 0:47c880c1463d | 113 | (GuiConst_INT32U)Y * sgl.CurLayerWidth + (GuiConst_INT32U)X) = Color; |
jmitc91516 | 0:47c880c1463d | 114 | #endif |
jmitc91516 | 0:47c880c1463d | 115 | MarkDisplayBoxRepaint(X, Y, X, Y); |
jmitc91516 | 0:47c880c1463d | 116 | } |
jmitc91516 | 0:47c880c1463d | 117 | } |
jmitc91516 | 0:47c880c1463d | 118 | |
jmitc91516 | 0:47c880c1463d | 119 | //------------------------------------------------------------------------------ |
jmitc91516 | 0:47c880c1463d | 120 | static GuiConst_INTCOLOR ReadDot( |
jmitc91516 | 0:47c880c1463d | 121 | GuiConst_INT16S X, |
jmitc91516 | 0:47c880c1463d | 122 | GuiConst_INT16S Y) |
jmitc91516 | 0:47c880c1463d | 123 | { |
jmitc91516 | 0:47c880c1463d | 124 | GuiConst_INT16U *PixelPtr; |
jmitc91516 | 0:47c880c1463d | 125 | |
jmitc91516 | 0:47c880c1463d | 126 | if ((X < 0) || (X >= (GuiConst_INT16S)sgl.CurLayerWidth) || |
jmitc91516 | 0:47c880c1463d | 127 | (Y < 0) || (Y >= (GuiConst_INT16S)sgl.CurLayerHeight)) |
jmitc91516 | 0:47c880c1463d | 128 | return (0); |
jmitc91516 | 0:47c880c1463d | 129 | else |
jmitc91516 | 0:47c880c1463d | 130 | { |
jmitc91516 | 0:47c880c1463d | 131 | PixelPtr = (GuiConst_INT16U*)sgl.CurLayerBufPtr + |
jmitc91516 | 0:47c880c1463d | 132 | (GuiConst_INT32U)Y * sgl.CurLayerWidth + (GuiConst_INT32U)X; |
jmitc91516 | 0:47c880c1463d | 133 | #ifdef GuiConst_DISPLAY_BIG_ENDIAN |
jmitc91516 | 0:47c880c1463d | 134 | return ((*PixelPtr << 8) | (*PixelPtr >> 8)); |
jmitc91516 | 0:47c880c1463d | 135 | #else |
jmitc91516 | 0:47c880c1463d | 136 | return (*PixelPtr); |
jmitc91516 | 0:47c880c1463d | 137 | #endif |
jmitc91516 | 0:47c880c1463d | 138 | } |
jmitc91516 | 0:47c880c1463d | 139 | } |
jmitc91516 | 0:47c880c1463d | 140 | |
jmitc91516 | 0:47c880c1463d | 141 | //------------------------------------------------------------------------------ |
jmitc91516 | 0:47c880c1463d | 142 | static void HorzLine( |
jmitc91516 | 0:47c880c1463d | 143 | GuiConst_INT16S X1, |
jmitc91516 | 0:47c880c1463d | 144 | GuiConst_INT16S X2, |
jmitc91516 | 0:47c880c1463d | 145 | GuiConst_INT16S Y, |
jmitc91516 | 0:47c880c1463d | 146 | GuiConst_INTCOLOR Color) |
jmitc91516 | 0:47c880c1463d | 147 | { |
jmitc91516 | 0:47c880c1463d | 148 | GuiConst_INT16U *PixelPtr; |
jmitc91516 | 0:47c880c1463d | 149 | |
jmitc91516 | 0:47c880c1463d | 150 | PixelPtr = (GuiConst_INT16U*)sgl.CurLayerBufPtr + |
jmitc91516 | 0:47c880c1463d | 151 | (GuiConst_INT32U)Y * sgl.CurLayerWidth + (GuiConst_INT32U)X1; |
jmitc91516 | 0:47c880c1463d | 152 | while (X1 <= X2) |
jmitc91516 | 0:47c880c1463d | 153 | { |
jmitc91516 | 0:47c880c1463d | 154 | #ifdef GuiConst_DISPLAY_BIG_ENDIAN |
jmitc91516 | 0:47c880c1463d | 155 | *PixelPtr = (Color << 8) | (Color >> 8); |
jmitc91516 | 0:47c880c1463d | 156 | #else |
jmitc91516 | 0:47c880c1463d | 157 | *PixelPtr = Color; |
jmitc91516 | 0:47c880c1463d | 158 | #endif |
jmitc91516 | 0:47c880c1463d | 159 | PixelPtr++; |
jmitc91516 | 0:47c880c1463d | 160 | X1++; |
jmitc91516 | 0:47c880c1463d | 161 | } |
jmitc91516 | 0:47c880c1463d | 162 | } |
jmitc91516 | 0:47c880c1463d | 163 | |
jmitc91516 | 0:47c880c1463d | 164 | //------------------------------------------------------------------------------ |
jmitc91516 | 0:47c880c1463d | 165 | static void VertLine( |
jmitc91516 | 0:47c880c1463d | 166 | GuiConst_INT16S X, |
jmitc91516 | 0:47c880c1463d | 167 | GuiConst_INT16S Y1, |
jmitc91516 | 0:47c880c1463d | 168 | GuiConst_INT16S Y2, |
jmitc91516 | 0:47c880c1463d | 169 | GuiConst_INTCOLOR Color) |
jmitc91516 | 0:47c880c1463d | 170 | { |
jmitc91516 | 0:47c880c1463d | 171 | GuiConst_INT16U *PixelPtr; |
jmitc91516 | 0:47c880c1463d | 172 | |
jmitc91516 | 0:47c880c1463d | 173 | PixelPtr = (GuiConst_INT16U*)sgl.CurLayerBufPtr + |
jmitc91516 | 0:47c880c1463d | 174 | (GuiConst_INT32U)Y1 * sgl.CurLayerWidth + (GuiConst_INT32U)X; |
jmitc91516 | 0:47c880c1463d | 175 | while (Y1 <= Y2) |
jmitc91516 | 0:47c880c1463d | 176 | { |
jmitc91516 | 0:47c880c1463d | 177 | #ifdef GuiConst_DISPLAY_BIG_ENDIAN |
jmitc91516 | 0:47c880c1463d | 178 | *PixelPtr = (Color << 8) | (Color >> 8); |
jmitc91516 | 0:47c880c1463d | 179 | #else |
jmitc91516 | 0:47c880c1463d | 180 | *PixelPtr = Color; |
jmitc91516 | 0:47c880c1463d | 181 | #endif |
jmitc91516 | 0:47c880c1463d | 182 | Y1++; |
jmitc91516 | 0:47c880c1463d | 183 | PixelPtr += sgl.CurLayerWidth; |
jmitc91516 | 0:47c880c1463d | 184 | } |
jmitc91516 | 0:47c880c1463d | 185 | } |
jmitc91516 | 0:47c880c1463d | 186 | |
jmitc91516 | 0:47c880c1463d | 187 | //------------------------------------------------------------------------------ |
jmitc91516 | 0:47c880c1463d | 188 | static void DrawChar( |
jmitc91516 | 0:47c880c1463d | 189 | GuiConst_INT16S X, |
jmitc91516 | 0:47c880c1463d | 190 | GuiConst_INT16S Y, |
jmitc91516 | 0:47c880c1463d | 191 | GuiLib_FontRecPtr Font, |
jmitc91516 | 0:47c880c1463d | 192 | #ifdef GuiConst_REMOTE_FONT_DATA |
jmitc91516 | 0:47c880c1463d | 193 | GuiConst_INT32S CharNdx, |
jmitc91516 | 0:47c880c1463d | 194 | #else |
jmitc91516 | 0:47c880c1463d | 195 | GuiConst_INT8U PrefixRom * CharPtr, |
jmitc91516 | 0:47c880c1463d | 196 | #endif |
jmitc91516 | 0:47c880c1463d | 197 | GuiConst_INTCOLOR Color, |
jmitc91516 | 0:47c880c1463d | 198 | GuiConst_INT8U FullPixelFill) |
jmitc91516 | 0:47c880c1463d | 199 | { |
jmitc91516 | 0:47c880c1463d | 200 | #ifdef GuiConst_REMOTE_FONT_DATA |
jmitc91516 | 0:47c880c1463d | 201 | GuiConst_INT8U *PixelData; |
jmitc91516 | 0:47c880c1463d | 202 | GuiConst_INT8U * CharPtr; |
jmitc91516 | 0:47c880c1463d | 203 | #else |
jmitc91516 | 0:47c880c1463d | 204 | GuiConst_INT8U PrefixRom *PixelData; |
jmitc91516 | 0:47c880c1463d | 205 | #endif |
jmitc91516 | 0:47c880c1463d | 206 | GuiConst_INT8U PixelPattern; |
jmitc91516 | 0:47c880c1463d | 207 | GuiConst_INT16S N; |
jmitc91516 | 0:47c880c1463d | 208 | GuiConst_INT8U YHeight; |
jmitc91516 | 0:47c880c1463d | 209 | GuiConst_INT8U PixN; |
jmitc91516 | 0:47c880c1463d | 210 | GuiConst_INT16S Bx; |
jmitc91516 | 0:47c880c1463d | 211 | GuiConst_INT16S PY, Y2; |
jmitc91516 | 0:47c880c1463d | 212 | GuiConst_INT8U PixelLineSize; |
jmitc91516 | 0:47c880c1463d | 213 | #ifndef GuiConst_FONT_UNCOMPRESSED |
jmitc91516 | 0:47c880c1463d | 214 | #ifdef GuiConst_REMOTE_FONT_DATA |
jmitc91516 | 0:47c880c1463d | 215 | GuiConst_INT8U *LineCtrl; |
jmitc91516 | 0:47c880c1463d | 216 | #else |
jmitc91516 | 0:47c880c1463d | 217 | GuiConst_INT8U PrefixRom *LineCtrl; |
jmitc91516 | 0:47c880c1463d | 218 | #endif |
jmitc91516 | 0:47c880c1463d | 219 | GuiConst_INT8U LineCtrlByte; |
jmitc91516 | 0:47c880c1463d | 220 | GuiConst_INT16S LineRepeat; |
jmitc91516 | 0:47c880c1463d | 221 | GuiConst_INT16S M; |
jmitc91516 | 0:47c880c1463d | 222 | GuiConst_INT8U Finished; |
jmitc91516 | 0:47c880c1463d | 223 | GuiConst_INT16U *PixelPtr; |
jmitc91516 | 0:47c880c1463d | 224 | #endif |
jmitc91516 | 0:47c880c1463d | 225 | #ifdef GuiConst_ADV_FONTS_ON |
jmitc91516 | 0:47c880c1463d | 226 | GuiConst_INT8U PixelShade, PixelShadeInv; |
jmitc91516 | 0:47c880c1463d | 227 | GuiConst_INTCOLOR PixelColor; |
jmitc91516 | 0:47c880c1463d | 228 | GuiConst_INT8U PixelR, PixelG, PixelB; |
jmitc91516 | 0:47c880c1463d | 229 | GuiConst_INT8U ColorR, ColorG, ColorB; |
jmitc91516 | 0:47c880c1463d | 230 | #endif |
jmitc91516 | 0:47c880c1463d | 231 | |
jmitc91516 | 0:47c880c1463d | 232 | #ifdef GuiConst_CLIPPING_SUPPORT_ON |
jmitc91516 | 0:47c880c1463d | 233 | if (sgl.ClippingTotal) |
jmitc91516 | 0:47c880c1463d | 234 | return; |
jmitc91516 | 0:47c880c1463d | 235 | #endif |
jmitc91516 | 0:47c880c1463d | 236 | |
jmitc91516 | 0:47c880c1463d | 237 | #ifdef GuiConst_REMOTE_FONT_DATA |
jmitc91516 | 0:47c880c1463d | 238 | if (CharNdx != sgl.CurRemoteFont) |
jmitc91516 | 0:47c880c1463d | 239 | { |
jmitc91516 | 0:47c880c1463d | 240 | GuiLib_RemoteDataReadBlock( |
jmitc91516 | 0:47c880c1463d | 241 | (GuiConst_INT32U PrefixRom)GuiFont_ChPtrList[CharNdx], |
jmitc91516 | 0:47c880c1463d | 242 | (GuiConst_INT32U PrefixRom)GuiFont_ChPtrList[CharNdx + 1] - |
jmitc91516 | 0:47c880c1463d | 243 | (GuiConst_INT32U PrefixRom)GuiFont_ChPtrList[CharNdx], |
jmitc91516 | 0:47c880c1463d | 244 | sgl.GuiLib_RemoteFontBuffer); |
jmitc91516 | 0:47c880c1463d | 245 | sgl.CurRemoteFont = CharNdx; |
jmitc91516 | 0:47c880c1463d | 246 | } |
jmitc91516 | 0:47c880c1463d | 247 | CharPtr = &sgl.GuiLib_RemoteFontBuffer[0]; |
jmitc91516 | 0:47c880c1463d | 248 | #endif |
jmitc91516 | 0:47c880c1463d | 249 | |
jmitc91516 | 0:47c880c1463d | 250 | if ((*(CharPtr + GuiLib_CHR_XWIDTH_OFS) == 0) || |
jmitc91516 | 0:47c880c1463d | 251 | (*(CharPtr + GuiLib_CHR_YHEIGHT_OFS) == 0)) |
jmitc91516 | 0:47c880c1463d | 252 | return; |
jmitc91516 | 0:47c880c1463d | 253 | |
jmitc91516 | 0:47c880c1463d | 254 | GuiLib_COORD_ADJUST(X, Y); |
jmitc91516 | 0:47c880c1463d | 255 | GuiLib_COLOR_ADJUST(Color); |
jmitc91516 | 0:47c880c1463d | 256 | |
jmitc91516 | 0:47c880c1463d | 257 | gl.Dummy1_8U = Font->LineSize; // To avoid compiler warning |
jmitc91516 | 0:47c880c1463d | 258 | #ifdef GuiConst_FONT_UNCOMPRESSED |
jmitc91516 | 0:47c880c1463d | 259 | PixelLineSize = Font->LineSize; |
jmitc91516 | 0:47c880c1463d | 260 | #ifdef GuiConst_ROTATED_90DEGREE |
jmitc91516 | 0:47c880c1463d | 261 | YHeight = Font->XSize; |
jmitc91516 | 0:47c880c1463d | 262 | #else |
jmitc91516 | 0:47c880c1463d | 263 | YHeight = Font->YSize; |
jmitc91516 | 0:47c880c1463d | 264 | #endif |
jmitc91516 | 0:47c880c1463d | 265 | PixelData = CharPtr + GuiLib_CHR_LINECTRL_OFS + 1; |
jmitc91516 | 0:47c880c1463d | 266 | #else |
jmitc91516 | 0:47c880c1463d | 267 | #ifdef GuiConst_ROTATED_90DEGREE |
jmitc91516 | 0:47c880c1463d | 268 | PixelLineSize = *(CharPtr + GuiLib_CHR_YHEIGHT_OFS); |
jmitc91516 | 0:47c880c1463d | 269 | YHeight = *(CharPtr + GuiLib_CHR_XWIDTH_OFS); |
jmitc91516 | 0:47c880c1463d | 270 | #else |
jmitc91516 | 0:47c880c1463d | 271 | PixelLineSize = *(CharPtr + GuiLib_CHR_XWIDTH_OFS); |
jmitc91516 | 0:47c880c1463d | 272 | YHeight = *(CharPtr + GuiLib_CHR_YHEIGHT_OFS); |
jmitc91516 | 0:47c880c1463d | 273 | #endif |
jmitc91516 | 0:47c880c1463d | 274 | LineCtrl = CharPtr + GuiLib_CHR_LINECTRL_OFS; |
jmitc91516 | 0:47c880c1463d | 275 | N = (YHeight + 7) / 8; |
jmitc91516 | 0:47c880c1463d | 276 | if (N == 0) |
jmitc91516 | 0:47c880c1463d | 277 | N++; |
jmitc91516 | 0:47c880c1463d | 278 | PixelData = LineCtrl + N; |
jmitc91516 | 0:47c880c1463d | 279 | #ifdef GuiConst_ADV_FONTS_ON |
jmitc91516 | 0:47c880c1463d | 280 | if (Font->ColorDepth == 4) |
jmitc91516 | 0:47c880c1463d | 281 | PixelLineSize = (PixelLineSize + 1) / 2; |
jmitc91516 | 0:47c880c1463d | 282 | else |
jmitc91516 | 0:47c880c1463d | 283 | #endif |
jmitc91516 | 0:47c880c1463d | 284 | PixelLineSize = (PixelLineSize + 7) / 8; |
jmitc91516 | 0:47c880c1463d | 285 | #endif |
jmitc91516 | 0:47c880c1463d | 286 | |
jmitc91516 | 0:47c880c1463d | 287 | #ifdef GuiConst_FONT_UNCOMPRESSED |
jmitc91516 | 0:47c880c1463d | 288 | |
jmitc91516 | 0:47c880c1463d | 289 | #ifdef GuiConst_ROTATED_OFF |
jmitc91516 | 0:47c880c1463d | 290 | #ifdef GuiConst_MIRRORED_HORIZONTALLY |
jmitc91516 | 0:47c880c1463d | 291 | #ifdef GuiConst_MIRRORED_VERTICALLY |
jmitc91516 | 0:47c880c1463d | 292 | X -= Font->XSize - 1; |
jmitc91516 | 0:47c880c1463d | 293 | Y -= Font->YSize - 1; |
jmitc91516 | 0:47c880c1463d | 294 | #else |
jmitc91516 | 0:47c880c1463d | 295 | X -= Font->XSize - 1; |
jmitc91516 | 0:47c880c1463d | 296 | #endif |
jmitc91516 | 0:47c880c1463d | 297 | #else |
jmitc91516 | 0:47c880c1463d | 298 | #ifdef GuiConst_MIRRORED_VERTICALLY |
jmitc91516 | 0:47c880c1463d | 299 | Y -= Font->YSize - 1; |
jmitc91516 | 0:47c880c1463d | 300 | #endif |
jmitc91516 | 0:47c880c1463d | 301 | #endif |
jmitc91516 | 0:47c880c1463d | 302 | #endif |
jmitc91516 | 0:47c880c1463d | 303 | #ifdef GuiConst_ROTATED_90DEGREE_RIGHT |
jmitc91516 | 0:47c880c1463d | 304 | #ifdef GuiConst_MIRRORED_HORIZONTALLY |
jmitc91516 | 0:47c880c1463d | 305 | #ifdef GuiConst_MIRRORED_VERTICALLY |
jmitc91516 | 0:47c880c1463d | 306 | X -= Font->YSize - 1; |
jmitc91516 | 0:47c880c1463d | 307 | #endif |
jmitc91516 | 0:47c880c1463d | 308 | #else |
jmitc91516 | 0:47c880c1463d | 309 | #ifdef GuiConst_MIRRORED_VERTICALLY |
jmitc91516 | 0:47c880c1463d | 310 | X -= Font->YSize - 1; |
jmitc91516 | 0:47c880c1463d | 311 | Y -= Font->XSize - 1; |
jmitc91516 | 0:47c880c1463d | 312 | #else |
jmitc91516 | 0:47c880c1463d | 313 | Y -= Font->XSize - 1; |
jmitc91516 | 0:47c880c1463d | 314 | #endif |
jmitc91516 | 0:47c880c1463d | 315 | #endif |
jmitc91516 | 0:47c880c1463d | 316 | #endif |
jmitc91516 | 0:47c880c1463d | 317 | #ifdef GuiConst_ROTATED_UPSIDEDOWN |
jmitc91516 | 0:47c880c1463d | 318 | #ifdef GuiConst_MIRRORED_HORIZONTALLY |
jmitc91516 | 0:47c880c1463d | 319 | #ifndef GuiConst_MIRRORED_VERTICALLY |
jmitc91516 | 0:47c880c1463d | 320 | Y -= Font->YSize - 1; |
jmitc91516 | 0:47c880c1463d | 321 | #endif |
jmitc91516 | 0:47c880c1463d | 322 | #else |
jmitc91516 | 0:47c880c1463d | 323 | #ifdef GuiConst_MIRRORED_VERTICALLY |
jmitc91516 | 0:47c880c1463d | 324 | X -= Font->XSize - 1; |
jmitc91516 | 0:47c880c1463d | 325 | #else |
jmitc91516 | 0:47c880c1463d | 326 | X -= Font->XSize - 1; |
jmitc91516 | 0:47c880c1463d | 327 | Y -= Font->YSize - 1; |
jmitc91516 | 0:47c880c1463d | 328 | #endif |
jmitc91516 | 0:47c880c1463d | 329 | #endif |
jmitc91516 | 0:47c880c1463d | 330 | #endif |
jmitc91516 | 0:47c880c1463d | 331 | #ifdef GuiConst_ROTATED_90DEGREE_LEFT |
jmitc91516 | 0:47c880c1463d | 332 | #ifdef GuiConst_MIRRORED_HORIZONTALLY |
jmitc91516 | 0:47c880c1463d | 333 | #ifdef GuiConst_MIRRORED_VERTICALLY |
jmitc91516 | 0:47c880c1463d | 334 | Y -= Font->XSize - 1; |
jmitc91516 | 0:47c880c1463d | 335 | #else |
jmitc91516 | 0:47c880c1463d | 336 | X -= Font->YSize - 1; |
jmitc91516 | 0:47c880c1463d | 337 | Y -= Font->XSize - 1; |
jmitc91516 | 0:47c880c1463d | 338 | #endif |
jmitc91516 | 0:47c880c1463d | 339 | #else |
jmitc91516 | 0:47c880c1463d | 340 | #ifndef GuiConst_MIRRORED_VERTICALLY |
jmitc91516 | 0:47c880c1463d | 341 | X -= Font->YSize - 1; |
jmitc91516 | 0:47c880c1463d | 342 | #endif |
jmitc91516 | 0:47c880c1463d | 343 | #endif |
jmitc91516 | 0:47c880c1463d | 344 | #endif |
jmitc91516 | 0:47c880c1463d | 345 | |
jmitc91516 | 0:47c880c1463d | 346 | #else |
jmitc91516 | 0:47c880c1463d | 347 | |
jmitc91516 | 0:47c880c1463d | 348 | #ifdef GuiConst_ROTATED_OFF |
jmitc91516 | 0:47c880c1463d | 349 | #ifdef GuiConst_MIRRORED_HORIZONTALLY |
jmitc91516 | 0:47c880c1463d | 350 | #ifdef GuiConst_MIRRORED_VERTICALLY |
jmitc91516 | 0:47c880c1463d | 351 | X -= (*(CharPtr + GuiLib_CHR_XWIDTH_OFS) + |
jmitc91516 | 0:47c880c1463d | 352 | *(CharPtr + GuiLib_CHR_XLEFT_OFS) - 1); |
jmitc91516 | 0:47c880c1463d | 353 | Y -= (*(CharPtr + GuiLib_CHR_YHEIGHT_OFS) + |
jmitc91516 | 0:47c880c1463d | 354 | *(CharPtr + GuiLib_CHR_YTOP_OFS) - 1); |
jmitc91516 | 0:47c880c1463d | 355 | #else |
jmitc91516 | 0:47c880c1463d | 356 | X -= (*(CharPtr + GuiLib_CHR_XWIDTH_OFS) + |
jmitc91516 | 0:47c880c1463d | 357 | *(CharPtr + GuiLib_CHR_XLEFT_OFS) - 1); |
jmitc91516 | 0:47c880c1463d | 358 | Y += *(CharPtr + GuiLib_CHR_YTOP_OFS); |
jmitc91516 | 0:47c880c1463d | 359 | #endif |
jmitc91516 | 0:47c880c1463d | 360 | #else |
jmitc91516 | 0:47c880c1463d | 361 | #ifdef GuiConst_MIRRORED_VERTICALLY |
jmitc91516 | 0:47c880c1463d | 362 | X += *(CharPtr + GuiLib_CHR_XLEFT_OFS); |
jmitc91516 | 0:47c880c1463d | 363 | Y -= (*(CharPtr + GuiLib_CHR_YHEIGHT_OFS) + |
jmitc91516 | 0:47c880c1463d | 364 | *(CharPtr + GuiLib_CHR_YTOP_OFS) - 1); |
jmitc91516 | 0:47c880c1463d | 365 | #else |
jmitc91516 | 0:47c880c1463d | 366 | X += *(CharPtr + GuiLib_CHR_XLEFT_OFS); |
jmitc91516 | 0:47c880c1463d | 367 | Y += *(CharPtr + GuiLib_CHR_YTOP_OFS); |
jmitc91516 | 0:47c880c1463d | 368 | #endif |
jmitc91516 | 0:47c880c1463d | 369 | #endif |
jmitc91516 | 0:47c880c1463d | 370 | #endif |
jmitc91516 | 0:47c880c1463d | 371 | #ifdef GuiConst_ROTATED_90DEGREE_RIGHT |
jmitc91516 | 0:47c880c1463d | 372 | #ifdef GuiConst_MIRRORED_HORIZONTALLY |
jmitc91516 | 0:47c880c1463d | 373 | #ifdef GuiConst_MIRRORED_VERTICALLY |
jmitc91516 | 0:47c880c1463d | 374 | X -= (*(CharPtr + GuiLib_CHR_YHEIGHT_OFS) + |
jmitc91516 | 0:47c880c1463d | 375 | *(CharPtr + GuiLib_CHR_YTOP_OFS) - 1); |
jmitc91516 | 0:47c880c1463d | 376 | Y += *(CharPtr + GuiLib_CHR_XLEFT_OFS); |
jmitc91516 | 0:47c880c1463d | 377 | #else |
jmitc91516 | 0:47c880c1463d | 378 | X += *(CharPtr + GuiLib_CHR_YTOP_OFS); |
jmitc91516 | 0:47c880c1463d | 379 | Y += *(CharPtr + GuiLib_CHR_XLEFT_OFS); |
jmitc91516 | 0:47c880c1463d | 380 | #endif |
jmitc91516 | 0:47c880c1463d | 381 | #else |
jmitc91516 | 0:47c880c1463d | 382 | #ifdef GuiConst_MIRRORED_VERTICALLY |
jmitc91516 | 0:47c880c1463d | 383 | X -= (*(CharPtr + GuiLib_CHR_YHEIGHT_OFS) + |
jmitc91516 | 0:47c880c1463d | 384 | *(CharPtr + GuiLib_CHR_YTOP_OFS) - 1); |
jmitc91516 | 0:47c880c1463d | 385 | Y -= (*(CharPtr + GuiLib_CHR_XWIDTH_OFS) + |
jmitc91516 | 0:47c880c1463d | 386 | *(CharPtr + GuiLib_CHR_XLEFT_OFS) - 1); |
jmitc91516 | 0:47c880c1463d | 387 | #else |
jmitc91516 | 0:47c880c1463d | 388 | X += *(CharPtr + GuiLib_CHR_YTOP_OFS); |
jmitc91516 | 0:47c880c1463d | 389 | Y -= (*(CharPtr + GuiLib_CHR_XWIDTH_OFS) + |
jmitc91516 | 0:47c880c1463d | 390 | *(CharPtr + GuiLib_CHR_XLEFT_OFS) - 1); |
jmitc91516 | 0:47c880c1463d | 391 | #endif |
jmitc91516 | 0:47c880c1463d | 392 | #endif |
jmitc91516 | 0:47c880c1463d | 393 | #endif |
jmitc91516 | 0:47c880c1463d | 394 | #ifdef GuiConst_ROTATED_UPSIDEDOWN |
jmitc91516 | 0:47c880c1463d | 395 | #ifdef GuiConst_MIRRORED_HORIZONTALLY |
jmitc91516 | 0:47c880c1463d | 396 | #ifdef GuiConst_MIRRORED_VERTICALLY |
jmitc91516 | 0:47c880c1463d | 397 | X += *(CharPtr + GuiLib_CHR_XLEFT_OFS); |
jmitc91516 | 0:47c880c1463d | 398 | Y += *(CharPtr + GuiLib_CHR_YTOP_OFS); |
jmitc91516 | 0:47c880c1463d | 399 | #else |
jmitc91516 | 0:47c880c1463d | 400 | X += *(CharPtr + GuiLib_CHR_XLEFT_OFS); |
jmitc91516 | 0:47c880c1463d | 401 | Y -= (*(CharPtr + GuiLib_CHR_YHEIGHT_OFS) + |
jmitc91516 | 0:47c880c1463d | 402 | *(CharPtr + GuiLib_CHR_YTOP_OFS) - 1); |
jmitc91516 | 0:47c880c1463d | 403 | #endif |
jmitc91516 | 0:47c880c1463d | 404 | #else |
jmitc91516 | 0:47c880c1463d | 405 | #ifdef GuiConst_MIRRORED_VERTICALLY |
jmitc91516 | 0:47c880c1463d | 406 | X -= (*(CharPtr + GuiLib_CHR_XWIDTH_OFS) + |
jmitc91516 | 0:47c880c1463d | 407 | *(CharPtr + GuiLib_CHR_XLEFT_OFS) - 1); |
jmitc91516 | 0:47c880c1463d | 408 | Y += *(CharPtr + GuiLib_CHR_YTOP_OFS); |
jmitc91516 | 0:47c880c1463d | 409 | #else |
jmitc91516 | 0:47c880c1463d | 410 | X -= (*(CharPtr + GuiLib_CHR_XWIDTH_OFS) + |
jmitc91516 | 0:47c880c1463d | 411 | *(CharPtr + GuiLib_CHR_XLEFT_OFS) - 1); |
jmitc91516 | 0:47c880c1463d | 412 | Y -= (*(CharPtr + GuiLib_CHR_YHEIGHT_OFS) + |
jmitc91516 | 0:47c880c1463d | 413 | *(CharPtr + GuiLib_CHR_YTOP_OFS) - 1); |
jmitc91516 | 0:47c880c1463d | 414 | #endif |
jmitc91516 | 0:47c880c1463d | 415 | #endif |
jmitc91516 | 0:47c880c1463d | 416 | #endif |
jmitc91516 | 0:47c880c1463d | 417 | #ifdef GuiConst_ROTATED_90DEGREE_LEFT |
jmitc91516 | 0:47c880c1463d | 418 | #ifdef GuiConst_MIRRORED_HORIZONTALLY |
jmitc91516 | 0:47c880c1463d | 419 | #ifdef GuiConst_MIRRORED_VERTICALLY |
jmitc91516 | 0:47c880c1463d | 420 | X += *(CharPtr + GuiLib_CHR_YTOP_OFS); |
jmitc91516 | 0:47c880c1463d | 421 | Y -= (*(CharPtr + GuiLib_CHR_XWIDTH_OFS) + |
jmitc91516 | 0:47c880c1463d | 422 | *(CharPtr + GuiLib_CHR_XLEFT_OFS) - 1); |
jmitc91516 | 0:47c880c1463d | 423 | #else |
jmitc91516 | 0:47c880c1463d | 424 | X -= (*(CharPtr + GuiLib_CHR_YHEIGHT_OFS) + |
jmitc91516 | 0:47c880c1463d | 425 | *(CharPtr + GuiLib_CHR_YTOP_OFS) - 1); |
jmitc91516 | 0:47c880c1463d | 426 | Y -= (*(CharPtr + GuiLib_CHR_XWIDTH_OFS) + |
jmitc91516 | 0:47c880c1463d | 427 | *(CharPtr + GuiLib_CHR_XLEFT_OFS) - 1); |
jmitc91516 | 0:47c880c1463d | 428 | #endif |
jmitc91516 | 0:47c880c1463d | 429 | #else |
jmitc91516 | 0:47c880c1463d | 430 | #ifdef GuiConst_MIRRORED_VERTICALLY |
jmitc91516 | 0:47c880c1463d | 431 | X += *(CharPtr + GuiLib_CHR_YTOP_OFS); |
jmitc91516 | 0:47c880c1463d | 432 | Y += *(CharPtr + GuiLib_CHR_XLEFT_OFS); |
jmitc91516 | 0:47c880c1463d | 433 | #else |
jmitc91516 | 0:47c880c1463d | 434 | X -= (*(CharPtr + GuiLib_CHR_YHEIGHT_OFS) + |
jmitc91516 | 0:47c880c1463d | 435 | *(CharPtr + GuiLib_CHR_YTOP_OFS) - 1); |
jmitc91516 | 0:47c880c1463d | 436 | Y += *(CharPtr + GuiLib_CHR_XLEFT_OFS); |
jmitc91516 | 0:47c880c1463d | 437 | #endif |
jmitc91516 | 0:47c880c1463d | 438 | #endif |
jmitc91516 | 0:47c880c1463d | 439 | #endif |
jmitc91516 | 0:47c880c1463d | 440 | |
jmitc91516 | 0:47c880c1463d | 441 | #endif |
jmitc91516 | 0:47c880c1463d | 442 | |
jmitc91516 | 0:47c880c1463d | 443 | #ifdef GuiConst_ADV_FONTS_ON |
jmitc91516 | 0:47c880c1463d | 444 | ColorR = (Color & GuiConst_COLORCODING_R_MASK) >> |
jmitc91516 | 0:47c880c1463d | 445 | GuiConst_COLORCODING_R_START; |
jmitc91516 | 0:47c880c1463d | 446 | ColorG = (Color & GuiConst_COLORCODING_G_MASK) >> |
jmitc91516 | 0:47c880c1463d | 447 | GuiConst_COLORCODING_G_START; |
jmitc91516 | 0:47c880c1463d | 448 | ColorB = (Color & GuiConst_COLORCODING_B_MASK) >> |
jmitc91516 | 0:47c880c1463d | 449 | GuiConst_COLORCODING_B_START; |
jmitc91516 | 0:47c880c1463d | 450 | #endif |
jmitc91516 | 0:47c880c1463d | 451 | |
jmitc91516 | 0:47c880c1463d | 452 | PY = 0; |
jmitc91516 | 0:47c880c1463d | 453 | #ifndef GuiConst_FONT_UNCOMPRESSED |
jmitc91516 | 0:47c880c1463d | 454 | LineCtrlByte = *LineCtrl; |
jmitc91516 | 0:47c880c1463d | 455 | LineCtrlByte >>= 1; |
jmitc91516 | 0:47c880c1463d | 456 | LineCtrl++; |
jmitc91516 | 0:47c880c1463d | 457 | #endif |
jmitc91516 | 0:47c880c1463d | 458 | while (PY < YHeight) |
jmitc91516 | 0:47c880c1463d | 459 | { |
jmitc91516 | 0:47c880c1463d | 460 | #ifndef GuiConst_FONT_UNCOMPRESSED |
jmitc91516 | 0:47c880c1463d | 461 | LineRepeat = 0; |
jmitc91516 | 0:47c880c1463d | 462 | do |
jmitc91516 | 0:47c880c1463d | 463 | { |
jmitc91516 | 0:47c880c1463d | 464 | LineRepeat++; |
jmitc91516 | 0:47c880c1463d | 465 | Finished = (((LineCtrlByte & 0x01) == 0) || (PY >= YHeight - 1)); |
jmitc91516 | 0:47c880c1463d | 466 | |
jmitc91516 | 0:47c880c1463d | 467 | PY++; |
jmitc91516 | 0:47c880c1463d | 468 | if (PY % 8 == 7) |
jmitc91516 | 0:47c880c1463d | 469 | { |
jmitc91516 | 0:47c880c1463d | 470 | LineCtrlByte = *LineCtrl; |
jmitc91516 | 0:47c880c1463d | 471 | LineCtrl++; |
jmitc91516 | 0:47c880c1463d | 472 | } |
jmitc91516 | 0:47c880c1463d | 473 | else |
jmitc91516 | 0:47c880c1463d | 474 | LineCtrlByte >>= 1; |
jmitc91516 | 0:47c880c1463d | 475 | } |
jmitc91516 | 0:47c880c1463d | 476 | while (!Finished); |
jmitc91516 | 0:47c880c1463d | 477 | #endif |
jmitc91516 | 0:47c880c1463d | 478 | |
jmitc91516 | 0:47c880c1463d | 479 | #ifdef GuiConst_ADV_FONTS_ON |
jmitc91516 | 0:47c880c1463d | 480 | if (Font->ColorDepth == 4) |
jmitc91516 | 0:47c880c1463d | 481 | Bx = X; |
jmitc91516 | 0:47c880c1463d | 482 | else |
jmitc91516 | 0:47c880c1463d | 483 | #endif |
jmitc91516 | 0:47c880c1463d | 484 | Bx = X; |
jmitc91516 | 0:47c880c1463d | 485 | |
jmitc91516 | 0:47c880c1463d | 486 | for (N = 0; N < PixelLineSize; N++) |
jmitc91516 | 0:47c880c1463d | 487 | { |
jmitc91516 | 0:47c880c1463d | 488 | PixelPattern = *PixelData; |
jmitc91516 | 0:47c880c1463d | 489 | |
jmitc91516 | 0:47c880c1463d | 490 | if (PixelPattern != 0) |
jmitc91516 | 0:47c880c1463d | 491 | { |
jmitc91516 | 0:47c880c1463d | 492 | #ifdef GuiConst_ADV_FONTS_ON |
jmitc91516 | 0:47c880c1463d | 493 | if (Font->ColorDepth == 4) |
jmitc91516 | 0:47c880c1463d | 494 | { |
jmitc91516 | 0:47c880c1463d | 495 | for (PixN = 0; PixN < 2; PixN++) |
jmitc91516 | 0:47c880c1463d | 496 | { |
jmitc91516 | 0:47c880c1463d | 497 | if (PixN == 0) |
jmitc91516 | 0:47c880c1463d | 498 | PixelShade = PixelPattern & 0x0F; |
jmitc91516 | 0:47c880c1463d | 499 | else |
jmitc91516 | 0:47c880c1463d | 500 | PixelShade = (PixelPattern & 0xF0) >> 4; |
jmitc91516 | 0:47c880c1463d | 501 | if (FullPixelFill && (PixelShade > 0)) |
jmitc91516 | 0:47c880c1463d | 502 | PixelShade = 0x0F; |
jmitc91516 | 0:47c880c1463d | 503 | if ( |
jmitc91516 | 0:47c880c1463d | 504 | #ifdef GuiConst_CLIPPING_SUPPORT_ON |
jmitc91516 | 0:47c880c1463d | 505 | (Bx + PixN >= sgl.ClippingX1) && (Bx + PixN <= sgl.ClippingX2) && |
jmitc91516 | 0:47c880c1463d | 506 | #endif |
jmitc91516 | 0:47c880c1463d | 507 | (PixelShade > 0)) |
jmitc91516 | 0:47c880c1463d | 508 | { |
jmitc91516 | 0:47c880c1463d | 509 | PixelShadeInv = 15 - PixelShade; |
jmitc91516 | 0:47c880c1463d | 510 | Y2 = Y; |
jmitc91516 | 0:47c880c1463d | 511 | PixelPtr = (GuiConst_INT16U*)sgl.CurLayerBufPtr + |
jmitc91516 | 0:47c880c1463d | 512 | (GuiConst_INT32U)Y2 * sgl.CurLayerWidth + |
jmitc91516 | 0:47c880c1463d | 513 | (GuiConst_INT32U)(Bx + PixN); |
jmitc91516 | 0:47c880c1463d | 514 | #ifndef GuiConst_FONT_UNCOMPRESSED |
jmitc91516 | 0:47c880c1463d | 515 | for (M = 0; M < LineRepeat; M++) |
jmitc91516 | 0:47c880c1463d | 516 | #endif |
jmitc91516 | 0:47c880c1463d | 517 | { |
jmitc91516 | 0:47c880c1463d | 518 | #ifdef GuiConst_CLIPPING_SUPPORT_ON |
jmitc91516 | 0:47c880c1463d | 519 | if ((Y2 >= sgl.ClippingY1) && (Y2 <= sgl.ClippingY2)) |
jmitc91516 | 0:47c880c1463d | 520 | #endif |
jmitc91516 | 0:47c880c1463d | 521 | { |
jmitc91516 | 0:47c880c1463d | 522 | if (PixelShade == 0x0F) |
jmitc91516 | 0:47c880c1463d | 523 | { |
jmitc91516 | 0:47c880c1463d | 524 | #ifdef GuiConst_DISPLAY_BIG_ENDIAN |
jmitc91516 | 0:47c880c1463d | 525 | *PixelPtr = (Color << 8) | (Color >> 8); |
jmitc91516 | 0:47c880c1463d | 526 | #else |
jmitc91516 | 0:47c880c1463d | 527 | *PixelPtr = Color; |
jmitc91516 | 0:47c880c1463d | 528 | #endif |
jmitc91516 | 0:47c880c1463d | 529 | } |
jmitc91516 | 0:47c880c1463d | 530 | else |
jmitc91516 | 0:47c880c1463d | 531 | { |
jmitc91516 | 0:47c880c1463d | 532 | PixelColor = *PixelPtr; |
jmitc91516 | 0:47c880c1463d | 533 | PixelR = (PixelColor & GuiConst_COLORCODING_R_MASK) >> |
jmitc91516 | 0:47c880c1463d | 534 | GuiConst_COLORCODING_R_START; |
jmitc91516 | 0:47c880c1463d | 535 | PixelG = (PixelColor & GuiConst_COLORCODING_G_MASK) >> |
jmitc91516 | 0:47c880c1463d | 536 | GuiConst_COLORCODING_G_START; |
jmitc91516 | 0:47c880c1463d | 537 | PixelB = (PixelColor & GuiConst_COLORCODING_B_MASK) >> |
jmitc91516 | 0:47c880c1463d | 538 | GuiConst_COLORCODING_B_START; |
jmitc91516 | 0:47c880c1463d | 539 | PixelR = (PixelShade * ColorR + PixelShadeInv * PixelR) / 15; |
jmitc91516 | 0:47c880c1463d | 540 | PixelG = (PixelShade * ColorG + PixelShadeInv * PixelG) / 15; |
jmitc91516 | 0:47c880c1463d | 541 | PixelB = (PixelShade * ColorB + PixelShadeInv * PixelB) / 15; |
jmitc91516 | 0:47c880c1463d | 542 | PixelColor = (PixelR << GuiConst_COLORCODING_R_START) | |
jmitc91516 | 0:47c880c1463d | 543 | (PixelG << GuiConst_COLORCODING_G_START) | |
jmitc91516 | 0:47c880c1463d | 544 | (PixelB << GuiConst_COLORCODING_B_START); |
jmitc91516 | 0:47c880c1463d | 545 | #ifdef GuiConst_DISPLAY_BIG_ENDIAN |
jmitc91516 | 0:47c880c1463d | 546 | *PixelPtr = ((PixelColor>>8)&0xFF) | ((PixelColor<<8)&0xFF00); |
jmitc91516 | 0:47c880c1463d | 547 | #else |
jmitc91516 | 0:47c880c1463d | 548 | *PixelPtr = PixelColor; |
jmitc91516 | 0:47c880c1463d | 549 | #endif |
jmitc91516 | 0:47c880c1463d | 550 | } |
jmitc91516 | 0:47c880c1463d | 551 | } |
jmitc91516 | 0:47c880c1463d | 552 | Y2++; |
jmitc91516 | 0:47c880c1463d | 553 | PixelPtr += sgl.CurLayerWidth; |
jmitc91516 | 0:47c880c1463d | 554 | } |
jmitc91516 | 0:47c880c1463d | 555 | } |
jmitc91516 | 0:47c880c1463d | 556 | } |
jmitc91516 | 0:47c880c1463d | 557 | } |
jmitc91516 | 0:47c880c1463d | 558 | else |
jmitc91516 | 0:47c880c1463d | 559 | #endif |
jmitc91516 | 0:47c880c1463d | 560 | { |
jmitc91516 | 0:47c880c1463d | 561 | for (PixN = 0; PixN < 8; PixN++) |
jmitc91516 | 0:47c880c1463d | 562 | { |
jmitc91516 | 0:47c880c1463d | 563 | if ( |
jmitc91516 | 0:47c880c1463d | 564 | #ifdef GuiConst_CLIPPING_SUPPORT_ON |
jmitc91516 | 0:47c880c1463d | 565 | (Bx + PixN >= sgl.ClippingX1) && (Bx + PixN <= sgl.ClippingX2) && |
jmitc91516 | 0:47c880c1463d | 566 | #endif |
jmitc91516 | 0:47c880c1463d | 567 | ((PixelPattern >> (7-PixN)) & 0x01)) |
jmitc91516 | 0:47c880c1463d | 568 | { |
jmitc91516 | 0:47c880c1463d | 569 | Y2 = Y; |
jmitc91516 | 0:47c880c1463d | 570 | PixelPtr = (GuiConst_INT16U*)sgl.CurLayerBufPtr + |
jmitc91516 | 0:47c880c1463d | 571 | (GuiConst_INT32U)Y2 * sgl.CurLayerWidth + |
jmitc91516 | 0:47c880c1463d | 572 | (GuiConst_INT32U)(Bx + PixN); |
jmitc91516 | 0:47c880c1463d | 573 | #ifndef GuiConst_FONT_UNCOMPRESSED |
jmitc91516 | 0:47c880c1463d | 574 | for (M = 0; M < LineRepeat; M++) |
jmitc91516 | 0:47c880c1463d | 575 | #endif |
jmitc91516 | 0:47c880c1463d | 576 | { |
jmitc91516 | 0:47c880c1463d | 577 | #ifdef GuiConst_CLIPPING_SUPPORT_ON |
jmitc91516 | 0:47c880c1463d | 578 | if ((Y2 >= sgl.ClippingY1) && (Y2 <= sgl.ClippingY2)) |
jmitc91516 | 0:47c880c1463d | 579 | #endif |
jmitc91516 | 0:47c880c1463d | 580 | { |
jmitc91516 | 0:47c880c1463d | 581 | #ifdef GuiConst_DISPLAY_BIG_ENDIAN |
jmitc91516 | 0:47c880c1463d | 582 | *PixelPtr = (Color << 8) | (Color >> 8); |
jmitc91516 | 0:47c880c1463d | 583 | #else |
jmitc91516 | 0:47c880c1463d | 584 | *PixelPtr = Color; |
jmitc91516 | 0:47c880c1463d | 585 | #endif |
jmitc91516 | 0:47c880c1463d | 586 | } |
jmitc91516 | 0:47c880c1463d | 587 | Y2++; |
jmitc91516 | 0:47c880c1463d | 588 | PixelPtr += sgl.CurLayerWidth; |
jmitc91516 | 0:47c880c1463d | 589 | } |
jmitc91516 | 0:47c880c1463d | 590 | } |
jmitc91516 | 0:47c880c1463d | 591 | } |
jmitc91516 | 0:47c880c1463d | 592 | } |
jmitc91516 | 0:47c880c1463d | 593 | } |
jmitc91516 | 0:47c880c1463d | 594 | |
jmitc91516 | 0:47c880c1463d | 595 | PixelData++; |
jmitc91516 | 0:47c880c1463d | 596 | #ifdef GuiConst_ADV_FONTS_ON |
jmitc91516 | 0:47c880c1463d | 597 | if (Font->ColorDepth == 4) |
jmitc91516 | 0:47c880c1463d | 598 | Bx+=2; |
jmitc91516 | 0:47c880c1463d | 599 | else |
jmitc91516 | 0:47c880c1463d | 600 | #endif |
jmitc91516 | 0:47c880c1463d | 601 | Bx+=8; |
jmitc91516 | 0:47c880c1463d | 602 | } |
jmitc91516 | 0:47c880c1463d | 603 | |
jmitc91516 | 0:47c880c1463d | 604 | #ifdef GuiConst_FONT_UNCOMPRESSED |
jmitc91516 | 0:47c880c1463d | 605 | PY++; |
jmitc91516 | 0:47c880c1463d | 606 | Y++; |
jmitc91516 | 0:47c880c1463d | 607 | #else |
jmitc91516 | 0:47c880c1463d | 608 | Y += LineRepeat; |
jmitc91516 | 0:47c880c1463d | 609 | #endif |
jmitc91516 | 0:47c880c1463d | 610 | } |
jmitc91516 | 0:47c880c1463d | 611 | } |
jmitc91516 | 0:47c880c1463d | 612 | |
jmitc91516 | 0:47c880c1463d | 613 | #ifdef GuiConst_BITMAP_SUPPORT_ON |
jmitc91516 | 0:47c880c1463d | 614 | |
jmitc91516 | 0:47c880c1463d | 615 | #define RenderPix \ |
jmitc91516 | 0:47c880c1463d | 616 | { \ |
jmitc91516 | 0:47c880c1463d | 617 | *PixelPtr2 = *PixelDataPtr2; \ |
jmitc91516 | 0:47c880c1463d | 618 | PixelPtr2++; \ |
jmitc91516 | 0:47c880c1463d | 619 | *PixelPtr2 = *(PixelDataPtr2 + 1); \ |
jmitc91516 | 0:47c880c1463d | 620 | PixelPtr2++; \ |
jmitc91516 | 0:47c880c1463d | 621 | } |
jmitc91516 | 0:47c880c1463d | 622 | |
jmitc91516 | 0:47c880c1463d | 623 | //------------------------------------------------------------------------------ |
jmitc91516 | 0:47c880c1463d | 624 | static void ShowBitmapArea( |
jmitc91516 | 0:47c880c1463d | 625 | #ifdef GuiConst_REMOTE_BITMAP_DATA |
jmitc91516 | 0:47c880c1463d | 626 | GuiConst_INT8U * PixelDataPtr, |
jmitc91516 | 0:47c880c1463d | 627 | #else |
jmitc91516 | 0:47c880c1463d | 628 | GuiConst_INT8U PrefixRom * PixelDataPtr, |
jmitc91516 | 0:47c880c1463d | 629 | #endif |
jmitc91516 | 0:47c880c1463d | 630 | GuiConst_INT16S X, |
jmitc91516 | 0:47c880c1463d | 631 | GuiConst_INT16S Y, |
jmitc91516 | 0:47c880c1463d | 632 | GuiConst_INT16S X1, |
jmitc91516 | 0:47c880c1463d | 633 | GuiConst_INT16S Y1, |
jmitc91516 | 0:47c880c1463d | 634 | GuiConst_INT16S X2, |
jmitc91516 | 0:47c880c1463d | 635 | GuiConst_INT16S Y2, |
jmitc91516 | 0:47c880c1463d | 636 | GuiConst_INT32S TranspColor, |
jmitc91516 | 0:47c880c1463d | 637 | GuiConst_INT8U BitmapType) |
jmitc91516 | 0:47c880c1463d | 638 | { |
jmitc91516 | 0:47c880c1463d | 639 | #ifdef GuiConst_REMOTE_BITMAP_DATA |
jmitc91516 | 0:47c880c1463d | 640 | GuiConst_INT8U * PixelDataPtr2; |
jmitc91516 | 0:47c880c1463d | 641 | #else |
jmitc91516 | 0:47c880c1463d | 642 | GuiConst_INT8U PrefixRom * PixelDataPtr2; |
jmitc91516 | 0:47c880c1463d | 643 | #endif |
jmitc91516 | 0:47c880c1463d | 644 | GuiConst_INT16S SizeX; |
jmitc91516 | 0:47c880c1463d | 645 | GuiConst_INT16S SizeY; |
jmitc91516 | 0:47c880c1463d | 646 | GuiConst_INT8U *PixelPtr1, *PixelPtr2; |
jmitc91516 | 0:47c880c1463d | 647 | GuiConst_INT16S I; |
jmitc91516 | 0:47c880c1463d | 648 | GuiConst_INT16U Cnt, CntPix; |
jmitc91516 | 0:47c880c1463d | 649 | GuiConst_INT8U Diff; |
jmitc91516 | 0:47c880c1463d | 650 | #ifdef GuiConst_BITMAP_COMPRESSED |
jmitc91516 | 0:47c880c1463d | 651 | GuiConst_INT16U Offset; |
jmitc91516 | 0:47c880c1463d | 652 | GuiConst_INT16S DX; |
jmitc91516 | 0:47c880c1463d | 653 | #ifdef GuiConst_REMOTE_BITMAP_DATA |
jmitc91516 | 0:47c880c1463d | 654 | GuiConst_INT8U * RemPixelDataPtr; |
jmitc91516 | 0:47c880c1463d | 655 | GuiConst_INT8U * LinePixelDataPtr; |
jmitc91516 | 0:47c880c1463d | 656 | #else |
jmitc91516 | 0:47c880c1463d | 657 | GuiConst_INT8U PrefixRom * RemPixelDataPtr; |
jmitc91516 | 0:47c880c1463d | 658 | GuiConst_INT8U PrefixRom * LinePixelDataPtr; |
jmitc91516 | 0:47c880c1463d | 659 | #endif |
jmitc91516 | 0:47c880c1463d | 660 | #endif |
jmitc91516 | 0:47c880c1463d | 661 | |
jmitc91516 | 0:47c880c1463d | 662 | #ifdef GuiConst_DISPLAY_BIG_ENDIAN |
jmitc91516 | 0:47c880c1463d | 663 | TranspColor = ((TranspColor&0xFF)<<8)|((TranspColor&0xFF00)>>8); |
jmitc91516 | 0:47c880c1463d | 664 | #endif |
jmitc91516 | 0:47c880c1463d | 665 | |
jmitc91516 | 0:47c880c1463d | 666 | SizeX = (GuiConst_INT16S)*PixelDataPtr; |
jmitc91516 | 0:47c880c1463d | 667 | PixelDataPtr++; |
jmitc91516 | 0:47c880c1463d | 668 | SizeX += 256*(GuiConst_INT16S)*PixelDataPtr; |
jmitc91516 | 0:47c880c1463d | 669 | PixelDataPtr++; |
jmitc91516 | 0:47c880c1463d | 670 | SizeY = (GuiConst_INT16S)*PixelDataPtr; |
jmitc91516 | 0:47c880c1463d | 671 | PixelDataPtr++; |
jmitc91516 | 0:47c880c1463d | 672 | SizeY += 256*(GuiConst_INT16S)*PixelDataPtr; |
jmitc91516 | 0:47c880c1463d | 673 | PixelDataPtr++; |
jmitc91516 | 0:47c880c1463d | 674 | |
jmitc91516 | 0:47c880c1463d | 675 | #ifdef GuiConst_ROTATED_90DEGREE |
jmitc91516 | 0:47c880c1463d | 676 | sgl.BitmapWriteX2 = X + SizeY - 1; |
jmitc91516 | 0:47c880c1463d | 677 | sgl.BitmapWriteY2 = Y + SizeX - 1; |
jmitc91516 | 0:47c880c1463d | 678 | #else |
jmitc91516 | 0:47c880c1463d | 679 | sgl.BitmapWriteX2 = X + SizeX - 1; |
jmitc91516 | 0:47c880c1463d | 680 | sgl.BitmapWriteY2 = Y + SizeY - 1; |
jmitc91516 | 0:47c880c1463d | 681 | #endif |
jmitc91516 | 0:47c880c1463d | 682 | |
jmitc91516 | 0:47c880c1463d | 683 | GuiLib_COORD_ADJUST(X, Y); |
jmitc91516 | 0:47c880c1463d | 684 | GuiLib_COLOR_ADJUST_TRANSP(TranspColor); |
jmitc91516 | 0:47c880c1463d | 685 | |
jmitc91516 | 0:47c880c1463d | 686 | if (BitmapType == GuiLib_AREA_BITMAP) |
jmitc91516 | 0:47c880c1463d | 687 | { |
jmitc91516 | 0:47c880c1463d | 688 | GuiLib_COORD_ADJUST(X1, Y1); |
jmitc91516 | 0:47c880c1463d | 689 | GuiLib_COORD_ADJUST(X2, Y2); |
jmitc91516 | 0:47c880c1463d | 690 | OrderCoord(&X1, &X2); |
jmitc91516 | 0:47c880c1463d | 691 | OrderCoord(&Y1, &Y2); |
jmitc91516 | 0:47c880c1463d | 692 | } |
jmitc91516 | 0:47c880c1463d | 693 | |
jmitc91516 | 0:47c880c1463d | 694 | #ifdef GuiConst_ROTATED_OFF |
jmitc91516 | 0:47c880c1463d | 695 | #ifdef GuiConst_MIRRORED_HORIZONTALLY |
jmitc91516 | 0:47c880c1463d | 696 | #ifdef GuiConst_MIRRORED_VERTICALLY |
jmitc91516 | 0:47c880c1463d | 697 | X -= SizeX - 1; |
jmitc91516 | 0:47c880c1463d | 698 | Y -= SizeY - 1; |
jmitc91516 | 0:47c880c1463d | 699 | #else |
jmitc91516 | 0:47c880c1463d | 700 | X -= SizeX - 1; |
jmitc91516 | 0:47c880c1463d | 701 | #endif |
jmitc91516 | 0:47c880c1463d | 702 | #else |
jmitc91516 | 0:47c880c1463d | 703 | #ifdef GuiConst_MIRRORED_VERTICALLY |
jmitc91516 | 0:47c880c1463d | 704 | Y -= SizeY - 1; |
jmitc91516 | 0:47c880c1463d | 705 | #endif |
jmitc91516 | 0:47c880c1463d | 706 | #endif |
jmitc91516 | 0:47c880c1463d | 707 | #endif |
jmitc91516 | 0:47c880c1463d | 708 | #ifdef GuiConst_ROTATED_90DEGREE_RIGHT |
jmitc91516 | 0:47c880c1463d | 709 | #ifdef GuiConst_MIRRORED_HORIZONTALLY |
jmitc91516 | 0:47c880c1463d | 710 | #ifdef GuiConst_MIRRORED_VERTICALLY |
jmitc91516 | 0:47c880c1463d | 711 | X -= SizeX - 1; |
jmitc91516 | 0:47c880c1463d | 712 | #endif |
jmitc91516 | 0:47c880c1463d | 713 | #else |
jmitc91516 | 0:47c880c1463d | 714 | #ifdef GuiConst_MIRRORED_VERTICALLY |
jmitc91516 | 0:47c880c1463d | 715 | X -= SizeX - 1; |
jmitc91516 | 0:47c880c1463d | 716 | Y -= SizeY - 1; |
jmitc91516 | 0:47c880c1463d | 717 | #else |
jmitc91516 | 0:47c880c1463d | 718 | Y -= SizeY - 1; |
jmitc91516 | 0:47c880c1463d | 719 | #endif |
jmitc91516 | 0:47c880c1463d | 720 | #endif |
jmitc91516 | 0:47c880c1463d | 721 | #endif |
jmitc91516 | 0:47c880c1463d | 722 | #ifdef GuiConst_ROTATED_UPSIDEDOWN |
jmitc91516 | 0:47c880c1463d | 723 | #ifdef GuiConst_MIRRORED_HORIZONTALLY |
jmitc91516 | 0:47c880c1463d | 724 | #ifndef GuiConst_MIRRORED_VERTICALLY |
jmitc91516 | 0:47c880c1463d | 725 | Y -= SizeY - 1; |
jmitc91516 | 0:47c880c1463d | 726 | #endif |
jmitc91516 | 0:47c880c1463d | 727 | #else |
jmitc91516 | 0:47c880c1463d | 728 | #ifdef GuiConst_MIRRORED_VERTICALLY |
jmitc91516 | 0:47c880c1463d | 729 | X -= SizeX - 1; |
jmitc91516 | 0:47c880c1463d | 730 | #else |
jmitc91516 | 0:47c880c1463d | 731 | X -= SizeX - 1; |
jmitc91516 | 0:47c880c1463d | 732 | Y -= SizeY - 1; |
jmitc91516 | 0:47c880c1463d | 733 | #endif |
jmitc91516 | 0:47c880c1463d | 734 | #endif |
jmitc91516 | 0:47c880c1463d | 735 | #endif |
jmitc91516 | 0:47c880c1463d | 736 | #ifdef GuiConst_ROTATED_90DEGREE_LEFT |
jmitc91516 | 0:47c880c1463d | 737 | #ifdef GuiConst_MIRRORED_HORIZONTALLY |
jmitc91516 | 0:47c880c1463d | 738 | #ifdef GuiConst_MIRRORED_VERTICALLY |
jmitc91516 | 0:47c880c1463d | 739 | Y -= SizeY - 1; |
jmitc91516 | 0:47c880c1463d | 740 | #else |
jmitc91516 | 0:47c880c1463d | 741 | X -= SizeX - 1; |
jmitc91516 | 0:47c880c1463d | 742 | Y -= SizeY - 1; |
jmitc91516 | 0:47c880c1463d | 743 | #endif |
jmitc91516 | 0:47c880c1463d | 744 | #else |
jmitc91516 | 0:47c880c1463d | 745 | #ifndef GuiConst_MIRRORED_VERTICALLY |
jmitc91516 | 0:47c880c1463d | 746 | X -= SizeX - 1; |
jmitc91516 | 0:47c880c1463d | 747 | #endif |
jmitc91516 | 0:47c880c1463d | 748 | #endif |
jmitc91516 | 0:47c880c1463d | 749 | #endif |
jmitc91516 | 0:47c880c1463d | 750 | |
jmitc91516 | 0:47c880c1463d | 751 | if (BitmapType == GuiLib_AREA_BITMAP) |
jmitc91516 | 0:47c880c1463d | 752 | { |
jmitc91516 | 0:47c880c1463d | 753 | if ((X1 > X + SizeX - 1) || (X2 < X) || (Y1 > Y + SizeY - 1) || (Y2 < Y)) |
jmitc91516 | 0:47c880c1463d | 754 | return; |
jmitc91516 | 0:47c880c1463d | 755 | if (X1 < X) |
jmitc91516 | 0:47c880c1463d | 756 | X1 = X; |
jmitc91516 | 0:47c880c1463d | 757 | if (X2 > X + SizeX - 1) |
jmitc91516 | 0:47c880c1463d | 758 | X2 = X + SizeX - 1; |
jmitc91516 | 0:47c880c1463d | 759 | if (Y1 < Y) |
jmitc91516 | 0:47c880c1463d | 760 | Y1 = Y; |
jmitc91516 | 0:47c880c1463d | 761 | if (Y2 > Y + SizeY - 1) |
jmitc91516 | 0:47c880c1463d | 762 | Y2 = Y + SizeY - 1; |
jmitc91516 | 0:47c880c1463d | 763 | } |
jmitc91516 | 0:47c880c1463d | 764 | else |
jmitc91516 | 0:47c880c1463d | 765 | { |
jmitc91516 | 0:47c880c1463d | 766 | X2 = X + SizeX - 1; |
jmitc91516 | 0:47c880c1463d | 767 | Y2 = Y + SizeY - 1; |
jmitc91516 | 0:47c880c1463d | 768 | |
jmitc91516 | 0:47c880c1463d | 769 | OrderCoord(&X, &X2); |
jmitc91516 | 0:47c880c1463d | 770 | OrderCoord(&Y, &Y2); |
jmitc91516 | 0:47c880c1463d | 771 | |
jmitc91516 | 0:47c880c1463d | 772 | X1 = X; |
jmitc91516 | 0:47c880c1463d | 773 | Y1 = Y; |
jmitc91516 | 0:47c880c1463d | 774 | } |
jmitc91516 | 0:47c880c1463d | 775 | |
jmitc91516 | 0:47c880c1463d | 776 | #ifdef GuiConst_CLIPPING_SUPPORT_ON |
jmitc91516 | 0:47c880c1463d | 777 | if (!CheckRect(&X1, &Y1, &X2, &Y2)) |
jmitc91516 | 0:47c880c1463d | 778 | return; |
jmitc91516 | 0:47c880c1463d | 779 | #endif |
jmitc91516 | 0:47c880c1463d | 780 | |
jmitc91516 | 0:47c880c1463d | 781 | MarkDisplayBoxRepaint(X1, Y1, X2, Y2); // Before changing Y1 |
jmitc91516 | 0:47c880c1463d | 782 | |
jmitc91516 | 0:47c880c1463d | 783 | #ifdef GuiConst_BITMAP_COMPRESSED |
jmitc91516 | 0:47c880c1463d | 784 | while (Y < Y1) |
jmitc91516 | 0:47c880c1463d | 785 | { |
jmitc91516 | 0:47c880c1463d | 786 | Offset = (GuiConst_INT16U)*PixelDataPtr; |
jmitc91516 | 0:47c880c1463d | 787 | PixelDataPtr++; |
jmitc91516 | 0:47c880c1463d | 788 | Offset += 256 * (GuiConst_INT16U)*PixelDataPtr; |
jmitc91516 | 0:47c880c1463d | 789 | PixelDataPtr++; |
jmitc91516 | 0:47c880c1463d | 790 | if (Offset != 0) |
jmitc91516 | 0:47c880c1463d | 791 | { |
jmitc91516 | 0:47c880c1463d | 792 | LinePixelDataPtr = PixelDataPtr; |
jmitc91516 | 0:47c880c1463d | 793 | PixelDataPtr += Offset - 2; |
jmitc91516 | 0:47c880c1463d | 794 | } |
jmitc91516 | 0:47c880c1463d | 795 | |
jmitc91516 | 0:47c880c1463d | 796 | Y++; |
jmitc91516 | 0:47c880c1463d | 797 | } |
jmitc91516 | 0:47c880c1463d | 798 | DX = X1 - X; |
jmitc91516 | 0:47c880c1463d | 799 | #else |
jmitc91516 | 0:47c880c1463d | 800 | PixelDataPtr += 2 * (SizeX * (Y1 - Y) + (X1 - X)); |
jmitc91516 | 0:47c880c1463d | 801 | Diff = 1; |
jmitc91516 | 0:47c880c1463d | 802 | #endif |
jmitc91516 | 0:47c880c1463d | 803 | PixelPtr1 = sgl.CurLayerBufPtr + |
jmitc91516 | 0:47c880c1463d | 804 | (GuiConst_INT32U)Y1 * sgl.CurLayerLineSize + (GuiConst_INT32U)(2 * X1); |
jmitc91516 | 0:47c880c1463d | 805 | while (Y1 <= Y2) |
jmitc91516 | 0:47c880c1463d | 806 | { |
jmitc91516 | 0:47c880c1463d | 807 | PixelPtr2 = PixelPtr1; |
jmitc91516 | 0:47c880c1463d | 808 | |
jmitc91516 | 0:47c880c1463d | 809 | #ifdef GuiConst_BITMAP_COMPRESSED |
jmitc91516 | 0:47c880c1463d | 810 | Offset = (GuiConst_INT16U)*PixelDataPtr; |
jmitc91516 | 0:47c880c1463d | 811 | PixelDataPtr++; |
jmitc91516 | 0:47c880c1463d | 812 | Offset += 256 * (GuiConst_INT16U)*PixelDataPtr; |
jmitc91516 | 0:47c880c1463d | 813 | PixelDataPtr++; |
jmitc91516 | 0:47c880c1463d | 814 | if (Offset == 0) |
jmitc91516 | 0:47c880c1463d | 815 | { |
jmitc91516 | 0:47c880c1463d | 816 | RemPixelDataPtr = PixelDataPtr; |
jmitc91516 | 0:47c880c1463d | 817 | PixelDataPtr = LinePixelDataPtr; |
jmitc91516 | 0:47c880c1463d | 818 | } |
jmitc91516 | 0:47c880c1463d | 819 | else |
jmitc91516 | 0:47c880c1463d | 820 | LinePixelDataPtr = PixelDataPtr; |
jmitc91516 | 0:47c880c1463d | 821 | |
jmitc91516 | 0:47c880c1463d | 822 | Cnt = 0; |
jmitc91516 | 0:47c880c1463d | 823 | X = DX; |
jmitc91516 | 0:47c880c1463d | 824 | while (X > 0) |
jmitc91516 | 0:47c880c1463d | 825 | { |
jmitc91516 | 0:47c880c1463d | 826 | Diff = *PixelDataPtr; |
jmitc91516 | 0:47c880c1463d | 827 | Cnt = Diff & 0x7F; |
jmitc91516 | 0:47c880c1463d | 828 | Diff >>= 7; |
jmitc91516 | 0:47c880c1463d | 829 | PixelDataPtr++; |
jmitc91516 | 0:47c880c1463d | 830 | |
jmitc91516 | 0:47c880c1463d | 831 | if (X >= Cnt) |
jmitc91516 | 0:47c880c1463d | 832 | { |
jmitc91516 | 0:47c880c1463d | 833 | if (Diff) |
jmitc91516 | 0:47c880c1463d | 834 | PixelDataPtr += 2 * Cnt; |
jmitc91516 | 0:47c880c1463d | 835 | else |
jmitc91516 | 0:47c880c1463d | 836 | PixelDataPtr += 2; |
jmitc91516 | 0:47c880c1463d | 837 | X -= Cnt; |
jmitc91516 | 0:47c880c1463d | 838 | Cnt = 0; |
jmitc91516 | 0:47c880c1463d | 839 | } |
jmitc91516 | 0:47c880c1463d | 840 | else |
jmitc91516 | 0:47c880c1463d | 841 | { |
jmitc91516 | 0:47c880c1463d | 842 | if (Diff) |
jmitc91516 | 0:47c880c1463d | 843 | PixelDataPtr += 2 * X; |
jmitc91516 | 0:47c880c1463d | 844 | Cnt -= X; |
jmitc91516 | 0:47c880c1463d | 845 | X = 0; |
jmitc91516 | 0:47c880c1463d | 846 | } |
jmitc91516 | 0:47c880c1463d | 847 | } |
jmitc91516 | 0:47c880c1463d | 848 | #endif |
jmitc91516 | 0:47c880c1463d | 849 | |
jmitc91516 | 0:47c880c1463d | 850 | PixelDataPtr2 = PixelDataPtr; |
jmitc91516 | 0:47c880c1463d | 851 | for (X = X1; X <= X2; X++) |
jmitc91516 | 0:47c880c1463d | 852 | { |
jmitc91516 | 0:47c880c1463d | 853 | #ifdef GuiConst_BITMAP_COMPRESSED |
jmitc91516 | 0:47c880c1463d | 854 | if (Cnt == 0) |
jmitc91516 | 0:47c880c1463d | 855 | { |
jmitc91516 | 0:47c880c1463d | 856 | Diff = *PixelDataPtr2; |
jmitc91516 | 0:47c880c1463d | 857 | Cnt = Diff & 0x7F; |
jmitc91516 | 0:47c880c1463d | 858 | Diff >>= 7; |
jmitc91516 | 0:47c880c1463d | 859 | PixelDataPtr2++; |
jmitc91516 | 0:47c880c1463d | 860 | } |
jmitc91516 | 0:47c880c1463d | 861 | CntPix = GuiLib_GET_MIN(Cnt, X2 - X + 1); |
jmitc91516 | 0:47c880c1463d | 862 | Cnt -= CntPix; |
jmitc91516 | 0:47c880c1463d | 863 | #else |
jmitc91516 | 0:47c880c1463d | 864 | CntPix = X2 - X + 1; |
jmitc91516 | 0:47c880c1463d | 865 | #endif |
jmitc91516 | 0:47c880c1463d | 866 | X += CntPix - 1; |
jmitc91516 | 0:47c880c1463d | 867 | |
jmitc91516 | 0:47c880c1463d | 868 | if (Diff) |
jmitc91516 | 0:47c880c1463d | 869 | { |
jmitc91516 | 0:47c880c1463d | 870 | if (TranspColor == -1) |
jmitc91516 | 0:47c880c1463d | 871 | { |
jmitc91516 | 0:47c880c1463d | 872 | CopyBytes(PixelPtr2, PixelDataPtr2, 2 * CntPix); |
jmitc91516 | 0:47c880c1463d | 873 | PixelPtr2 += 2 * CntPix; |
jmitc91516 | 0:47c880c1463d | 874 | PixelDataPtr2 += 2 * CntPix; |
jmitc91516 | 0:47c880c1463d | 875 | } |
jmitc91516 | 0:47c880c1463d | 876 | else |
jmitc91516 | 0:47c880c1463d | 877 | { |
jmitc91516 | 0:47c880c1463d | 878 | while (CntPix > 0) |
jmitc91516 | 0:47c880c1463d | 879 | { |
jmitc91516 | 0:47c880c1463d | 880 | if (*(GuiConst_INT16U*)PixelDataPtr2 == |
jmitc91516 | 0:47c880c1463d | 881 | (GuiConst_INT16U)TranspColor) |
jmitc91516 | 0:47c880c1463d | 882 | PixelPtr2 += 2; |
jmitc91516 | 0:47c880c1463d | 883 | else |
jmitc91516 | 0:47c880c1463d | 884 | { |
jmitc91516 | 0:47c880c1463d | 885 | RenderPix; |
jmitc91516 | 0:47c880c1463d | 886 | } |
jmitc91516 | 0:47c880c1463d | 887 | |
jmitc91516 | 0:47c880c1463d | 888 | CntPix--; |
jmitc91516 | 0:47c880c1463d | 889 | PixelDataPtr2 += 2; |
jmitc91516 | 0:47c880c1463d | 890 | } |
jmitc91516 | 0:47c880c1463d | 891 | } |
jmitc91516 | 0:47c880c1463d | 892 | } |
jmitc91516 | 0:47c880c1463d | 893 | #ifdef GuiConst_BITMAP_COMPRESSED |
jmitc91516 | 0:47c880c1463d | 894 | else |
jmitc91516 | 0:47c880c1463d | 895 | { |
jmitc91516 | 0:47c880c1463d | 896 | if ((TranspColor == -1) || |
jmitc91516 | 0:47c880c1463d | 897 | (*(GuiConst_INT16U*)PixelDataPtr2 != (GuiConst_INT16U)TranspColor)) |
jmitc91516 | 0:47c880c1463d | 898 | { |
jmitc91516 | 0:47c880c1463d | 899 | while (CntPix > 0) |
jmitc91516 | 0:47c880c1463d | 900 | { |
jmitc91516 | 0:47c880c1463d | 901 | RenderPix; |
jmitc91516 | 0:47c880c1463d | 902 | CntPix--; |
jmitc91516 | 0:47c880c1463d | 903 | } |
jmitc91516 | 0:47c880c1463d | 904 | } |
jmitc91516 | 0:47c880c1463d | 905 | else |
jmitc91516 | 0:47c880c1463d | 906 | PixelPtr2 += 2 * CntPix; |
jmitc91516 | 0:47c880c1463d | 907 | |
jmitc91516 | 0:47c880c1463d | 908 | PixelDataPtr2 += 2; |
jmitc91516 | 0:47c880c1463d | 909 | } |
jmitc91516 | 0:47c880c1463d | 910 | |
jmitc91516 | 0:47c880c1463d | 911 | if ((X > X2) && Diff) |
jmitc91516 | 0:47c880c1463d | 912 | PixelDataPtr2 += 2 * (X - X2); |
jmitc91516 | 0:47c880c1463d | 913 | Cnt = 0; |
jmitc91516 | 0:47c880c1463d | 914 | #endif |
jmitc91516 | 0:47c880c1463d | 915 | } |
jmitc91516 | 0:47c880c1463d | 916 | |
jmitc91516 | 0:47c880c1463d | 917 | #ifdef GuiConst_BITMAP_COMPRESSED |
jmitc91516 | 0:47c880c1463d | 918 | if (Offset == 0) |
jmitc91516 | 0:47c880c1463d | 919 | PixelDataPtr = RemPixelDataPtr; |
jmitc91516 | 0:47c880c1463d | 920 | else |
jmitc91516 | 0:47c880c1463d | 921 | PixelDataPtr = LinePixelDataPtr + Offset - 2; |
jmitc91516 | 0:47c880c1463d | 922 | #else |
jmitc91516 | 0:47c880c1463d | 923 | PixelDataPtr += 2 * SizeX; |
jmitc91516 | 0:47c880c1463d | 924 | #endif |
jmitc91516 | 0:47c880c1463d | 925 | |
jmitc91516 | 0:47c880c1463d | 926 | Y1++; |
jmitc91516 | 0:47c880c1463d | 927 | PixelPtr1 += sgl.CurLayerLineSize; |
jmitc91516 | 0:47c880c1463d | 928 | } |
jmitc91516 | 0:47c880c1463d | 929 | } |
jmitc91516 | 0:47c880c1463d | 930 | #endif |
jmitc91516 | 0:47c880c1463d | 931 | |
jmitc91516 | 0:47c880c1463d | 932 | //============================================================================== |
jmitc91516 | 0:47c880c1463d | 933 | |
jmitc91516 | 0:47c880c1463d | 934 | //------------------------------------------------------------------------------ |
jmitc91516 | 0:47c880c1463d | 935 | void GuiLib_InvertBox( |
jmitc91516 | 0:47c880c1463d | 936 | GuiConst_INT16S X1, |
jmitc91516 | 0:47c880c1463d | 937 | GuiConst_INT16S Y1, |
jmitc91516 | 0:47c880c1463d | 938 | GuiConst_INT16S X2, |
jmitc91516 | 0:47c880c1463d | 939 | GuiConst_INT16S Y2) |
jmitc91516 | 0:47c880c1463d | 940 | { |
jmitc91516 | 0:47c880c1463d | 941 | GuiConst_INT16S X; |
jmitc91516 | 0:47c880c1463d | 942 | GuiConst_INT16U *PixelPtr; |
jmitc91516 | 0:47c880c1463d | 943 | GuiConst_INT32U DeltaLineSize; |
jmitc91516 | 0:47c880c1463d | 944 | |
jmitc91516 | 0:47c880c1463d | 945 | GuiLib_COORD_ADJUST(X1, Y1); |
jmitc91516 | 0:47c880c1463d | 946 | GuiLib_COORD_ADJUST(X2, Y2); |
jmitc91516 | 0:47c880c1463d | 947 | |
jmitc91516 | 0:47c880c1463d | 948 | OrderCoord(&X1, &X2); |
jmitc91516 | 0:47c880c1463d | 949 | OrderCoord(&Y1, &Y2); |
jmitc91516 | 0:47c880c1463d | 950 | |
jmitc91516 | 0:47c880c1463d | 951 | #ifdef GuiConst_CLIPPING_SUPPORT_ON |
jmitc91516 | 0:47c880c1463d | 952 | if (CheckRect (&X1, &Y1, &X2, &Y2)) |
jmitc91516 | 0:47c880c1463d | 953 | #endif |
jmitc91516 | 0:47c880c1463d | 954 | { |
jmitc91516 | 0:47c880c1463d | 955 | MarkDisplayBoxRepaint(X1, Y1, X2, Y2); |
jmitc91516 | 0:47c880c1463d | 956 | |
jmitc91516 | 0:47c880c1463d | 957 | PixelPtr = (GuiConst_INT16U*)sgl.CurLayerBufPtr + |
jmitc91516 | 0:47c880c1463d | 958 | (GuiConst_INT32U)Y1 * sgl.CurLayerWidth + (GuiConst_INT32U)X1; |
jmitc91516 | 0:47c880c1463d | 959 | DeltaLineSize = sgl.CurLayerWidth - (GuiConst_INT32U)(X2 - X1 + 1); |
jmitc91516 | 0:47c880c1463d | 960 | while (Y1 <= Y2) |
jmitc91516 | 0:47c880c1463d | 961 | { |
jmitc91516 | 0:47c880c1463d | 962 | for (X = X1; X <= X2; X++) |
jmitc91516 | 0:47c880c1463d | 963 | { |
jmitc91516 | 0:47c880c1463d | 964 | *PixelPtr = ~*PixelPtr; |
jmitc91516 | 0:47c880c1463d | 965 | PixelPtr++; |
jmitc91516 | 0:47c880c1463d | 966 | } |
jmitc91516 | 0:47c880c1463d | 967 | Y1++; |
jmitc91516 | 0:47c880c1463d | 968 | PixelPtr += DeltaLineSize; |
jmitc91516 | 0:47c880c1463d | 969 | } |
jmitc91516 | 0:47c880c1463d | 970 | } |
jmitc91516 | 0:47c880c1463d | 971 | } |
jmitc91516 | 0:47c880c1463d | 972 |