refactor(color): use LVGL styles and objects for UI, legacy cleanup (#4407)
This commit is contained in:
@@ -28,6 +28,8 @@
|
||||
|
||||
#if defined(COLORLCD)
|
||||
|
||||
#include "bitmaps.h"
|
||||
|
||||
#define STB_IMAGE_WRITE_IMPLEMENTATION
|
||||
#include "stb_image_write.h"
|
||||
|
||||
@@ -36,7 +38,7 @@ void convert_RGB565_to_RGB888(uint8_t* dst, const BitmapBuffer* src, coord_t w,
|
||||
{
|
||||
for (int y = 0; y < src->height(); y++) {
|
||||
for (int x = 0; x < src->width(); x++) {
|
||||
RGB_SPLIT(*src->getPixelPtr(x, y), r, g, b);
|
||||
RGB_SPLIT(*src->getPixelPtrAbs(x, y), r, g, b);
|
||||
*(dst++) = (uint8_t)(r << 3);
|
||||
*(dst++) = (uint8_t)(g << 2);
|
||||
*(dst++) = (uint8_t)(b << 3);
|
||||
@@ -81,7 +83,7 @@ bool checkScreenshot_colorlcd(const BitmapBuffer* dc, const char* test)
|
||||
|
||||
for (int y = 0; y < LCD_H; y++) {
|
||||
for (int x = 0; x < LCD_W; x++) {
|
||||
if (*testPict->getPixelPtr(x, y) != *dc->getPixelPtr(x, y)) {
|
||||
if (*testPict->getPixelPtrAbs(x, y) != *dc->getPixelPtrAbs(x, y)) {
|
||||
dumpImage(filename, dc);
|
||||
return false;
|
||||
}
|
||||
@@ -99,11 +101,11 @@ TEST(Lcd_colorlcd, lines)
|
||||
dc.setClippingRect(50, 400, 50, 230);
|
||||
|
||||
for (int x = 10; x <= 100; x += 10) {
|
||||
dc.drawLine(x, x, x + 200, x + 50, 0xF0, COLOR_THEME_SECONDARY1);
|
||||
dc.drawLine(x, x, x + 200, x + 50, DOTTED, COLOR_THEME_SECONDARY1);
|
||||
}
|
||||
|
||||
for (int x = 200; x >= 100; x -= 10) {
|
||||
dc.drawLine(x, x, x - 50, x + 100, 0xF0, COLOR_THEME_SECONDARY1);
|
||||
dc.drawLine(x, x, x - 50, x + 100, DOTTED, COLOR_THEME_SECONDARY1);
|
||||
}
|
||||
|
||||
dc.clearClippingRect();
|
||||
@@ -117,7 +119,7 @@ TEST(Lcd_colorlcd, vline)
|
||||
dc.clear(COLOR_THEME_SECONDARY3);
|
||||
|
||||
for (int x = 0; x < 100; x += 2) {
|
||||
dc.drawSolidVerticalLine(x, x / 2, 12, COLOR_THEME_SECONDARY1);
|
||||
dc.drawVerticalLine(x, x / 2, 12, SOLID, COLOR_THEME_SECONDARY1);
|
||||
}
|
||||
EXPECT_TRUE(checkScreenshot_colorlcd(&dc, "vline"));
|
||||
}
|
||||
@@ -187,7 +189,7 @@ TEST(Lcd_colorlcd, transparency)
|
||||
for (int n = 0; n < 10; n++) {
|
||||
int x = 120 + n * 20;
|
||||
int y = 80 + n * 10;
|
||||
int color = COLOR(n / 2 + 5);
|
||||
int color = COLOR((n / 2 + 4));
|
||||
int size = 100;
|
||||
dc.drawFilledRect(x, y, size, size, SOLID, color, OPACITY(8));
|
||||
}
|
||||
@@ -230,22 +232,27 @@ TEST(Lcd_colorlcd, clipping)
|
||||
|
||||
dc.clear(COLOR_THEME_SECONDARY3);
|
||||
|
||||
dc.drawSolidVerticalLine(100, 0, LCD_H, COLOR_THEME_SECONDARY1);
|
||||
dc.drawSolidVerticalLine(400, 0, LCD_H, COLOR_THEME_SECONDARY1);
|
||||
coord_t x1 = LCD_W / 4;
|
||||
coord_t x2 = x1 * 3;
|
||||
coord_t y1 = LCD_H / 4;
|
||||
coord_t y2 = y1 * 3;
|
||||
|
||||
dc.drawSolidHorizontalLine(0, 50, LCD_W, COLOR_THEME_SECONDARY1);
|
||||
dc.drawSolidHorizontalLine(0, 200, LCD_W, COLOR_THEME_SECONDARY1);
|
||||
dc.drawVerticalLine(x1, 0, LCD_H, SOLID, COLOR_THEME_SECONDARY1);
|
||||
dc.drawVerticalLine(x2, 0, LCD_H, SOLID, COLOR_THEME_SECONDARY1);
|
||||
|
||||
dc.setClippingRect(100, 400, 50, 200);
|
||||
dc.drawHorizontalLine(0, y1, LCD_W, SOLID, COLOR_THEME_SECONDARY1);
|
||||
dc.drawHorizontalLine(0, y2, LCD_W, SOLID, COLOR_THEME_SECONDARY1);
|
||||
|
||||
dc.drawSolidHorizontalLine(0, 80, LCD_W, COLOR_THEME_SECONDARY1);
|
||||
dc.drawHorizontalLine(0, 81, LCD_W, SOLID, COLOR_THEME_SECONDARY1);
|
||||
dc.setClippingRect(x1, x2, y1, y2);
|
||||
|
||||
dc.drawSolidVerticalLine(150, 0, LCD_H, COLOR_THEME_SECONDARY1);
|
||||
dc.drawVerticalLine(151, 0, LCD_H, SOLID, COLOR_THEME_SECONDARY1);
|
||||
dc.drawHorizontalLine(0, y1 + 30, LCD_W, SOLID, COLOR_THEME_SECONDARY1);
|
||||
dc.drawHorizontalLine(0, y1 + 31, LCD_W, SOLID, COLOR_THEME_SECONDARY1);
|
||||
|
||||
dc.drawSolidRect(70, 20, 50, 50, 2, COLOR_THEME_SECONDARY1);
|
||||
dc.drawRect(380, 20, 50, 50, 2, SOLID, COLOR_THEME_SECONDARY1);
|
||||
dc.drawVerticalLine(x1 + 50, 0, LCD_H, SOLID, COLOR_THEME_SECONDARY1);
|
||||
dc.drawVerticalLine(x1 + 51, 0, LCD_H, SOLID, COLOR_THEME_SECONDARY1);
|
||||
|
||||
dc.drawSolidRect(x1 - 30, y1 - 30, 50, 50, 2, COLOR_THEME_SECONDARY1);
|
||||
dc.drawRect(x2 - 20, y1 - 30, 50, 50, 2, SOLID, COLOR_THEME_SECONDARY1);
|
||||
|
||||
dc.clearClippingRect();
|
||||
EXPECT_TRUE(checkScreenshot_colorlcd(&dc, "clipping"));
|
||||
@@ -268,22 +275,28 @@ TEST(Lcd_colorlcd, bitmap)
|
||||
EXPECT_TRUE(checkScreenshot_colorlcd(&dc, "bitmap"));
|
||||
}
|
||||
|
||||
static const uint8_t mask_menu_radio[] = {
|
||||
#include "images/color/mask_menu_radio.lbm"
|
||||
};
|
||||
|
||||
extern MaskBitmap* _decompressed_mask(const uint8_t* lz4_compressed);
|
||||
|
||||
TEST(Lcd_colorlcd, masks)
|
||||
{
|
||||
BitmapBuffer dc(BMP_RGB565, LCD_W, LCD_H);
|
||||
|
||||
dc.clear(COLOR_THEME_SECONDARY3);
|
||||
|
||||
BitmapBuffer* mask =
|
||||
BitmapBuffer::loadMask(TESTS_PATH "/images/color/mask_menu_radio.png");
|
||||
for (int i = 0; i < LCD_W; i += mask->width()) {
|
||||
for (int j = 0; j < LCD_H; j += mask->height()) {
|
||||
dc.drawMask(i, j, mask, COLOR2FLAGS(BLACK));
|
||||
MaskBitmap* mask = _decompressed_mask(mask_menu_radio);
|
||||
|
||||
for (int i = 0; i < LCD_W; i += mask->width) {
|
||||
for (int j = 0; j < LCD_H; j += mask->height) {
|
||||
dc.drawBitmapPattern(i, j, mask, COLOR_BLACK);
|
||||
}
|
||||
}
|
||||
|
||||
EXPECT_TRUE(checkScreenshot_colorlcd(&dc, "masks"));
|
||||
delete mask;
|
||||
free(mask);
|
||||
}
|
||||
|
||||
#if 0
|
||||
@@ -345,9 +358,9 @@ TEST(Lcd_colorlcd, darkmode)
|
||||
{
|
||||
BitmapBuffer dc(BMP_RGB565, LCD_W, LCD_H);
|
||||
|
||||
dc.clear(COLOR2FLAGS(BLACK));
|
||||
dc.clear(COLOR_BLACK);
|
||||
|
||||
dc.drawText(20, 28, "The quick brown fox jumps over the lazy dog", COLOR2FLAGS(WHITE));
|
||||
dc.drawText(20, 28, "The quick brown fox jumps over the lazy dog", COLOR_WHITE);
|
||||
dc.drawSolidFilledRect(28, 56, 422, 2, COLOR2FLAGS(RGB(0xFF, 0, 0)));
|
||||
dc.drawBitmapPattern(LCD_W/2 - LBM_USB_PLUGGED_W/2,
|
||||
LCD_H/2 - LBM_USB_PLUGGED_H/2,
|
||||
|
||||
Reference in New Issue
Block a user