diff --git a/apps/file_manager/ui.cpp b/apps/file_manager/ui.cpp index ff225af..39201db 100644 --- a/apps/file_manager/ui.cpp +++ b/apps/file_manager/ui.cpp @@ -690,7 +690,7 @@ int ListItemMessage(EsElement *element, EsMessage *message) { if (thumbnail && thumbnail->bits) { EsRectangle destination = EsPainterBoundsClient(message->painter); EsRectangle source = ES_RECT_2S(thumbnail->width, thumbnail->height); - destination = EsRectangleFit(destination, source, false); + destination = EsRectangleFit(destination, source, true /* allow scaling up */); // EsDrawBlock(message->painter, EsRectangleAdd(destination, ES_RECT_1(2)), 0x20000000); EsDrawBitmapScaled(message->painter, destination, source, thumbnail->bits, thumbnail->width * 4, 0xFF); return ES_HANDLED; diff --git a/desktop/text.cpp b/desktop/text.cpp index 5850151..ea2770c 100644 --- a/desktop/text.cpp +++ b/desktop/text.cpp @@ -1124,6 +1124,7 @@ IconPackImage *IconPackReadImage(uint32_t id, uint32_t size, int *type) { uint32_t variant = 0; while (true) { + // Look for a perfect match of size and direction. variant = EsBufferReadInt(&iconManagement.pack); if (!variant) break; if ((variant == size || variant == 1) && !rtl) { found = true; break; } @@ -1131,6 +1132,7 @@ IconPackImage *IconPackReadImage(uint32_t id, uint32_t size, int *type) { } if (!found) { + // Look for the smallest bigger size. iconManagement.pack.position = start; while (true) { @@ -1163,11 +1165,21 @@ IconPackImage *IconPackReadImage(uint32_t id, uint32_t size, int *type) { } } - // skipSizeSearch:; - if (!found) { + // Look for the biggest size. iconManagement.pack.position = start; - EsBufferReadInt(&iconManagement.pack); + uintptr_t previous = 0; + + while (true) { + if (!EsBufferReadInt(&iconManagement.pack) && previous) { + iconManagement.pack.position = previous; + found = true; + break; + } + + previous = iconManagement.pack.position; + iconManagement.pack.position = EsBufferReadInt(&iconManagement.pack); + } } EsBufferReadInt(&iconManagement.pack); diff --git a/desktop/theme.cpp b/desktop/theme.cpp index 75ab043..118413d 100644 --- a/desktop/theme.cpp +++ b/desktop/theme.cpp @@ -203,7 +203,8 @@ typedef struct ThemeMetrics { int16_t maximumWidth, maximumHeight; int16_t gapMajor, gapMinor, gapWrap; uint32_t textColor, selectedBackground, selectedText, iconColor; - int8_t textAlign, textSize, fontWeight, iconSize; + int8_t textAlign, fontWeight; + int16_t textSize, iconSize; bool isItalic, ellipsis, layoutVertical; } ThemeMetrics; @@ -1255,7 +1256,8 @@ struct UIStyle { // General information. - uint8_t textSize, textAlign; + uint8_t textAlign; + uint16_t textSize; uint32_t textColor; EsFont font; @@ -1874,14 +1876,6 @@ UIStyle *ThemeStyleInitialise(UIStyleKey key) { // Apply scaling to the metrics. - int8_t *scale8[] = { - &style->metrics->textSize, &style->metrics->iconSize, - }; - - for (uintptr_t i = 0; i < sizeof(scale8) / sizeof(scale8[0]); i++) { - *(scale8[i]) = *(scale8[i]) * key.scale; - } - int16_t *scale16[] = { &style->metrics->insets.l, &style->metrics->insets.r, &style->metrics->insets.t, &style->metrics->insets.b, &style->metrics->clipInsets.l, &style->metrics->clipInsets.r, &style->metrics->clipInsets.t, &style->metrics->clipInsets.b, @@ -1890,6 +1884,7 @@ UIStyle *ThemeStyleInitialise(UIStyleKey key) { &style->metrics->preferredWidth, &style->metrics->preferredHeight, &style->metrics->minimumWidth, &style->metrics->minimumHeight, &style->metrics->maximumWidth, &style->metrics->maximumHeight, + &style->metrics->textSize, &style->metrics->iconSize, }; for (uintptr_t i = 0; i < sizeof(scale16) / sizeof(scale16[0]); i++) { diff --git a/res/Themes/Theme.dat b/res/Themes/Theme.dat index 6e5fee0..707549d 100644 Binary files a/res/Themes/Theme.dat and b/res/Themes/Theme.dat differ