fix file manager thumbnail view with high dpi

This commit is contained in:
nakst 2021-09-05 21:27:29 +01:00
parent a9a5ecc272
commit e2130fb3ba
4 changed files with 21 additions and 14 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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++) {

Binary file not shown.