EMSTATUS GLIB_drawRectFilled(const GLIB_Context *pContext, GLIB_Rectangle *pRect) { EMSTATUS status; GLIB_normalizeRect(pRect); GLIB_Rectangle tmpRectangle; tmpRectangle = *pRect; /* Clip rectangle if necessary */ if (tmpRectangle.xMin < pContext->clippingRegion.xMin) { tmpRectangle.xMin = pContext->clippingRegion.xMin; } if (tmpRectangle.xMax > pContext->clippingRegion.xMax) { tmpRectangle.xMax = pContext->clippingRegion.xMax; } if (tmpRectangle.yMin < pContext->clippingRegion.yMin) { tmpRectangle.yMin = pContext->clippingRegion.yMin; } if (tmpRectangle.yMax > pContext->clippingRegion.yMax) { tmpRectangle.yMax = pContext->clippingRegion.yMax; } /* Draw filled rectangle */ uint8_t red; uint8_t green; uint8_t blue; GLIB_colorTranslate24bpp(pContext->foregroundColor, &red, &green, &blue); uint16_t width; uint16_t height; width = tmpRectangle.xMax - tmpRectangle.xMin + 1; height = tmpRectangle.yMax - tmpRectangle.yMin + 1; status = DMD_setClippingArea(tmpRectangle.xMin, tmpRectangle.yMin, width, height); if (status != 0) return status; status = DMD_writeColor(0, 0, red, green, blue, width * height); if (status != 0) return status; status = GLIB_resetDisplayClippingArea(pContext); if (status != 0) return status; return GLIB_OK; }
/**************************************************************************//** * @brief Display framebuffer * @param[in] fullFrame * If true, draw entire screen, if false, draw incremental update (faster) *****************************************************************************/ void RETARGET_TFTUpdate(bool fullFrame) { int x, y; uint32_t pixelX, pixelY; uint8_t c, bitField; int i; /* Draw a full screen */ if (fullFrame) { for (y = 0; y < LINES; y++) { for (x = 0; x < CHARS; x++) { pixelX = x * 8; pixelY = y * 8; c = charBuffer[y][x]; for (i = 0; i < 8; i++) { bitField = fontBits[c + 100 * i]; if (bitField == 0) { DMD_writeData(pixelX, pixelY + i, (uint8_t *) "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 8); continue; } if (bitField & 0x01) { DMD_writeColor(pixelX + 0, pixelY + i, rgbColor[0], rgbColor[1], rgbColor[2], 1); } else { DMD_writeColor(pixelX + 0, pixelY + i, 0x00, 0x00, 0x00, 1); } if (bitField & 0x02) { DMD_writeColor(pixelX + 1, pixelY + i, rgbColor[0], rgbColor[1], rgbColor[2], 1); } else { DMD_writeColor(pixelX + 1, pixelY + i, 0x00, 0x00, 0x00, 1); } if (bitField & 0x04) { DMD_writeColor(pixelX + 2, pixelY + i, rgbColor[0], rgbColor[1], rgbColor[2], 1); } else { DMD_writeColor(pixelX + 2, pixelY + i, 0x00, 0x00, 0x00, 1); } if (bitField & 0x08) { DMD_writeColor(pixelX + 3, pixelY + i, rgbColor[0], rgbColor[1], rgbColor[2], 1); } else { DMD_writeColor(pixelX + 3, pixelY + i, 0x00, 0x00, 0x00, 1); } if (bitField & 0x10) { DMD_writeColor(pixelX + 4, pixelY + i, rgbColor[0], rgbColor[1], rgbColor[2], 1); } else { DMD_writeColor(pixelX + 4, pixelY + i, 0x00, 0x00, 0x00, 1); } if (bitField & 0x20) { DMD_writeColor(pixelX + 5, pixelY + i, rgbColor[0], rgbColor[1], rgbColor[2], 1); } else { DMD_writeColor(pixelX + 5, pixelY + i, 0x00, 0x00, 0x00, 1); } if (bitField & 0x40) { DMD_writeColor(pixelX + 6, pixelY + i, rgbColor[0], rgbColor[1], rgbColor[2], 1); } else { DMD_writeColor(pixelX + 6, pixelY + i, 0x00, 0x00, 0x00, 1); } if (bitField & 0x80) { DMD_writeColor(pixelX + 7, pixelY + i, rgbColor[0], rgbColor[1], rgbColor[2], 1); } else { DMD_writeColor(pixelX + 7, pixelY + i, 0x00, 0x00, 0x00, 1); } } } } } else { /* Draw xpos, ypos only */ c = charBuffer[ypos][xpos]; pixelX = xpos * 8; pixelY = ypos * 8; for (i = 0; i < 8; i++) { bitField = fontBits[c + 100 * i]; if (bitField == 0) { DMD_writeData(pixelX, pixelY + i, (uint8_t *) "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 8); continue; } if (bitField & 0x01) { DMD_writeColor(pixelX + 0, pixelY + i, rgbColor[0], rgbColor[1], rgbColor[2], 1); } else { DMD_writeColor(pixelX + 0, pixelY + i, 0x00, 0x00, 0x00, 1); } if (bitField & 0x02) { DMD_writeColor(pixelX + 1, pixelY + i, rgbColor[0], rgbColor[1], rgbColor[2], 1); } else { DMD_writeColor(pixelX + 1, pixelY + i, 0x00, 0x00, 0x00, 1); } if (bitField & 0x04) { DMD_writeColor(pixelX + 2, pixelY + i, rgbColor[0], rgbColor[1], rgbColor[2], 1); } else { DMD_writeColor(pixelX + 2, pixelY + i, 0x00, 0x00, 0x00, 1); } if (bitField & 0x08) { DMD_writeColor(pixelX + 3, pixelY + i, rgbColor[0], rgbColor[1], rgbColor[2], 1); } else { DMD_writeColor(pixelX + 3, pixelY + i, 0x00, 0x00, 0x00, 1); } if (bitField & 0x10) { DMD_writeColor(pixelX + 4, pixelY + i, rgbColor[0], rgbColor[1], rgbColor[2], 1); } else { DMD_writeColor(pixelX + 4, pixelY + i, 0x00, 0x00, 0x00, 1); } if (bitField & 0x20) { DMD_writeColor(pixelX + 5, pixelY + i, rgbColor[0], rgbColor[1], rgbColor[2], 1); } else { DMD_writeColor(pixelX + 5, pixelY + i, 0x00, 0x00, 0x00, 1); } if (bitField & 0x40) { DMD_writeColor(pixelX + 6, pixelY + i, rgbColor[0], rgbColor[1], rgbColor[2], 1); } else { DMD_writeColor(pixelX + 6, pixelY + i, 0x00, 0x00, 0x00, 1); } if (bitField & 0x80) { DMD_writeColor(pixelX + 7, pixelY + i, rgbColor[0], rgbColor[1], rgbColor[2], 1); } else { DMD_writeColor(pixelX + 7, pixelY + i, 0x00, 0x00, 0x00, 1); } } } }