Loads bitmaps into QSPI memory for GC500_2_5inch to use.

Dependencies:   DMBasicGUI DMSupport

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

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jmitc91516 0:a5c253316af6 1 /* ************************************************************************ */
jmitc91516 0:a5c253316af6 2 /* */
jmitc91516 0:a5c253316af6 3 /* (C)2004-2015 IBIS Solutions ApS */
jmitc91516 0:a5c253316af6 4 /* sales@easyGUI.com */
jmitc91516 0:a5c253316af6 5 /* www.easyGUI.com */
jmitc91516 0:a5c253316af6 6 /* */
jmitc91516 0:a5c253316af6 7 /* 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