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