Improve icon cache handling of blank images

This commit is contained in:
crschnick
2025-03-03 12:45:56 +00:00
parent bbca5bafb3
commit a01dac767a
3 changed files with 34 additions and 10 deletions

View File

@@ -6,6 +6,7 @@ import io.xpipe.app.core.AppI18n;
import io.xpipe.app.icon.SystemIcon;
import io.xpipe.app.icon.SystemIconCache;
import io.xpipe.app.icon.SystemIconManager;
import io.xpipe.app.resources.AppImages;
import io.xpipe.app.util.BooleanScope;
import io.xpipe.app.util.LabelGraphic;
import io.xpipe.app.util.ThreadHelper;
@@ -106,14 +107,13 @@ public class StoreIconChoiceComp extends SimpleComp {
}
private void updateData(TableView<List<SystemIcon>> table, String filterString) {
var displayedIcons = filterString == null || filterString.isBlank() || filterString.length() < 2
? icons.stream()
.sorted(Comparator.comparing(systemIcon -> systemIcon.getId()))
.toList()
: icons.stream()
.filter(icon -> containsString(icon.getId(), filterString))
.toList();
var stream = icons.stream()
.filter(systemIcon -> AppImages.hasNormalImage("icons/" + systemIcon.getSource().getId() + "/" + systemIcon.getId() + "-40.png"))
.sorted(Comparator.comparing(systemIcon -> systemIcon.getId()));
if (filterString != null && !filterString.isBlank() && filterString.length() >= 2) {
stream = stream.filter(icon -> containsString(icon.getId(), filterString));
}
var displayedIcons = stream.toList();
var data = partitionList(displayedIcons, columns);
table.getItems().setAll(data);
}

View File

@@ -23,6 +23,7 @@ public class SystemIconCache {
private static enum ImageColorScheme {
TRANSPARENT,
MIXED,
LIGHT,
DARK
@@ -63,6 +64,10 @@ public class SystemIconCache {
}
var scheme = rasterizeSizes(icon.getFile(), target, icon.getName(), dark);
if (scheme == ImageColorScheme.TRANSPARENT) {
continue;
}
if (scheme != ImageColorScheme.DARK || icon.getColorSchemeData() != SystemIconSourceFile.ColorSchemeData.DEFAULT) {
continue;
}
@@ -106,10 +111,13 @@ public class SystemIconCache {
if (image == null) {
continue;
}
write(dir, name, dark, size, image);
if (c == null) {
c = determineColorScheme(image);
if (c == ImageColorScheme.TRANSPARENT) {
return ImageColorScheme.TRANSPARENT;
}
}
write(dir, name, dark, size, image);
}
return c;
} catch (Exception ex) {
@@ -205,6 +213,11 @@ public class SystemIconCache {
counter++;
}
}
if (counter == 0) {
return ImageColorScheme.TRANSPARENT;
}
mean /= counter * 3;
if (mean < 50) {
return ImageColorScheme.DARK;

View File

@@ -80,7 +80,18 @@ public class SystemIconManager {
});
}
public static void reloadImages() {
private static void reloadImages() {
AppImages.remove(s -> s.startsWith("icons/"));
try {
for (var source : getEffectiveSources()) {
AppImages.loadRasterImages(SystemIconCache.getDirectory(source), "icons/" + source.getId());
}
} catch (Exception e) {
ErrorEvent.fromThrowable(e).handle();
}
}
private static void clearInvalidImages() {
AppImages.remove(s -> s.startsWith("icons/"));
try {
for (var source : getEffectiveSources()) {