diff --git a/src/main/java/org/saturnclient/ui/components/ThemePresetCard.java b/src/main/java/org/saturnclient/ui/components/ThemePresetCard.java index 0da52e6..f470abd 100644 --- a/src/main/java/org/saturnclient/ui/components/ThemePresetCard.java +++ b/src/main/java/org/saturnclient/ui/components/ThemePresetCard.java @@ -12,6 +12,8 @@ import org.saturnclient.ui.resources.Fonts; */ public class ThemePresetCard extends Element { public static final int HEIGHT = 92; + /** The narrowest card that still fits its preview's widgets */ + public static final int MIN_WIDTH = 100; private static final int PADDING = 10; private static final int PREVIEW_HEIGHT = 44; diff --git a/src/main/java/org/saturnclient/ui/screens/ClientSettings.java b/src/main/java/org/saturnclient/ui/screens/ClientSettings.java index e6cfbb3..bf763f8 100644 --- a/src/main/java/org/saturnclient/ui/screens/ClientSettings.java +++ b/src/main/java/org/saturnclient/ui/screens/ClientSettings.java @@ -102,15 +102,20 @@ public class ClientSettings extends PanelScreen { Map properties = Theme.config.getProperties(); int y = PropertyList.drawSection(scroll, "Presets", 0) + 10; - int cardWidth = (width - PRESET_GAP * (Theme.PRESETS.size() - 1)) / Theme.PRESETS.size(); + // One row when the cards fit, otherwise as many rows as they need + int columns = Math.max(1, Math.min(Theme.PRESETS.size(), + (width + PRESET_GAP) / (ThemePresetCard.MIN_WIDTH + PRESET_GAP))); + int rows = (Theme.PRESETS.size() + columns - 1) / columns; + int cardWidth = (width - PRESET_GAP * (columns - 1)) / columns; for (int i = 0; i < Theme.PRESETS.size(); i++) { // Rebuild so the color inputs show the preset's colors scroll.draw(new ThemePresetCard(Theme.PRESETS.get(i), cardWidth, this::init) - .position(i * (cardWidth + PRESET_GAP), y)); + .position(i % columns * (cardWidth + PRESET_GAP), + y + i / columns * (ThemePresetCard.HEIGHT + PRESET_GAP))); } - y += ThemePresetCard.HEIGHT + SECTION_GAP; + y += rows * ThemePresetCard.HEIGHT + (rows - 1) * PRESET_GAP + SECTION_GAP; y = PropertyList.drawSection(scroll, "Colors", y) + 10; y = ColorGrid.draw(scroll, properties, width, y) + SECTION_GAP;