Repository for import to local machine

Dependencies:   DMBasicGUI DMSupport

Committer:
jmitc91516
Date:
Mon Jul 31 15:37:57 2017 +0000
Revision:
8:26e49e6955bd
Parent:
1:a5258871b33d
Method ramp scrolling improved, and more bitmaps moved to QSPI memory

Who changed what in which revision?

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