📄 lcdwin.c
字号:
goto WriteTBit0;}#endif/* ********************************************* * * * Draw Bitmap 4 BPP * * * **********************************************/#if (LCD_MAX_LOG_COLORS > 4)static void DrawBitLine4BPP(int x, int y, U8 const*p, int Diff, int xsize, const LCD_PIXELINDEX*pTrans) { U8 pixels;/*// Jump to right entry point*/ pixels = *p; if (GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) { if ((Diff&1) ==0) goto WriteTBit0; goto WriteTBit1; } else { if ((Diff&1) ==0) goto WriteBit0; goto WriteBit1; }/* Write without transparency*/WriteBit0: SETPIXEL(x+0, y, *(pTrans+(pixels>>4))); if (!--xsize) return;WriteBit1: SETPIXEL(x+1, y, *(pTrans+(pixels&0xf))); if (!--xsize) return; x+=2; pixels = *(++p); goto WriteBit0;/* Write with transparency*/WriteTBit0: if (pixels>>4) SETPIXEL(x+0, y, *(pTrans+(pixels>>4))); if (!--xsize) return;WriteTBit1: if (pixels&0xf) SETPIXEL(x+1, y, *(pTrans+(pixels&0xf))); if (!--xsize) return; x+=2; pixels = *(++p); goto WriteTBit0;}#endif/* ********************************************* * * * Draw Bitmap 8 BPP (256 colors) * * * **********************************************/#if (LCD_MAX_LOG_COLORS > 16)static void DrawBitLine8BPP(int x, int y, U8 const*p, int xsize, const LCD_PIXELINDEX*pTrans) { LCD_PIXELINDEX pixel; if ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS)==0) { if (pTrans) { for (;xsize > 0; xsize--,x++,p++) { pixel = *p; SETPIXEL(x, y, *(pTrans+pixel)); } } else { for (;xsize > 0; xsize--,x++,p++) { SETPIXEL(x, y, *p); } } } else { /* Handle transparent bitmap */ if (pTrans) { for (; xsize > 0; xsize--, x++, p++) { pixel = *p; if (pixel) { SETPIXEL(x+0, y, *(pTrans+pixel)); } } } else { for (; xsize > 0; xsize--, x++, p++) { pixel = *p; if (pixel) { SETPIXEL(x+0, y, pixel); } } } }}#endif/* ********************************************* * * * Draw Bitmap 16 BPP (65536 colors) * * * **********************************************/#if (LCD_BITSPERPIXEL > 8)static void DrawBitLine16BPP(int x, int y, U16 const*p, int xsize, const LCD_PIXELINDEX*pTrans) { LCD_PIXELINDEX pixel; if ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS)==0) { if (pTrans) { for (;xsize > 0; xsize--,x++,p++) { pixel = *p; SETPIXEL(x, y, *(pTrans+pixel)); } } else { for (;xsize > 0; xsize--,x++,p++) { SETPIXEL(x, y, *p); } } } else { /* Handle transparent bitmap */ if (pTrans) { for (; xsize > 0; xsize--, x++, p++) { pixel = *p; if (pixel) { SETPIXEL(x+0, y, *(pTrans+pixel)); } } } else { for (; xsize > 0; xsize--, x++, p++) { pixel = *p; if (pixel) { SETPIXEL(x+0, y, pixel); } } } }}#endif/* ********************************************************* * * * Universal draw Bitmap routine * * * **********************************************************/void LCD_L0_DrawBitmap (int x0, int y0, int xsize, int ysize, int BitsPerPixel, int BytesPerLine, const U8* pData, int Diff, const LCD_PIXELINDEX* pTrans){ int i; /* Use DrawBitLineXBPP */ for (i=0; i<ysize; i++) { switch (BitsPerPixel) { case 1: DrawBitLine1BPP(x0, i+y0, pData, Diff, xsize, pTrans); break; #if (LCD_MAX_LOG_COLORS > 2) case 2: DrawBitLine2BPP(x0, i+y0, pData, Diff, xsize, pTrans); break; #endif #if (LCD_MAX_LOG_COLORS > 4) case 4: DrawBitLine4BPP(x0, i+y0, pData, Diff, xsize, pTrans); break; #endif #if (LCD_MAX_LOG_COLORS > 16) case 8: DrawBitLine8BPP(x0, i+y0, pData, xsize, pTrans); break; #endif #if (LCD_BITSPERPIXEL > 8) case 16: DrawBitLine16BPP(x0, i+y0, (const U16 *)pData, xsize, pTrans); break; #endif } pData += BytesPerLine; }}/********************************************************** LCD_L0_SetOrg**********************************************************Purpose: Sets the original position of the virtual display. Has no function at this point with the PC-driver.*/int OrgX, OrgY;void LCD_L0_SetOrg(int x, int y) { OrgX = x; OrgY = y;}/* ********************************************************* * * * Support for verification * * * *********************************************************The following routines are implemented, but have no functionilityat this point. The reason is that these functions are supposedto supervise the hardware, which for obvious reasons can not bedone in a simulation.*/#if LCD_VERIFYint LCD_GetErrStat(void) { return 0;}void LCD_ClrErrStat(void) {}int LCD_GetErrCnt (void) { return 0;}#endif /* ********************************************************* * * * LCD_On * * LCD_Off * * * *********************************************************(Not supported in Simulation)*/void LCD_Off (void) {}void LCD_On (void) {}/* ********************************************************* * * * LUT routines (lookup tables) * * * **********************************************************/void LCD_L0_SetLUTEntry(U8 Pos, LCD_COLOR color) { LCDSIM_SetLUTEntry(Pos, color);}/* ********************************************************* * * * LCD_Init : Init the display * * * **********************************************************/int LCD_L0_Init(void) { int x,y; // Create Bitmaps to simulate LCD (pages) for (x=0; x< LCD_XSIZE; x++) for (y=0; y< LCD_YSIZE; y++) SETPIXEL( x, y, BKCOLORINDEX); return 0;}int LCD_L0_CheckInit(void) { return 0;} /* ****************************************** * * * Re-initialize LCD * * * ******************************************This routine is supplied for compatibility and interchangability of"C"-sources with embedded versions of the driver. It has no realeffect in the PC-version as there is simply no need to re-initializethe LCD since it is just simulated anyhow.*/void LCD_L0_ReInit (void) {}unsigned LCD_L0_GetPixelIndex(int x, int y) { return LCDSIM_GetPixelIndex(x,y);}/* ********************************************************* * * * LCD_L0_XorPixel * * * *********************************************************Purpose: This routine is called by emWin. It writes 1 pixel into the display.*/void LCD_L0_XorPixel(int x, int y) { XORPIXEL(x, y);}/* ********************************************************* * * * LCD_L0_SetPixelIndex * * * *********************************************************Purpose: This routine is called by emWin. It writes 1 pixel into the display.*/void LCD_L0_SetPixelIndex(int x, int y, int ColorIndex) { SETPIXEL(x, y, ColorIndex);}#else void LCDWin(void) { } /* avoid empty object files */#endif /* defined(WIN32) && defined(LCD_USE_WINSIM) */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -