Changeset 19657 in josm for trunk/src


Ignore:
Timestamp:
2026-10-23T16:00:18+02:00 (2 weeks ago)
Author:
gaben
Message:

fix #21208, fix #21207 - center icons and align text in preference and preset lists

Use padded icons for tagging preset icons and for list entry/label icons in the preset dialog, so non-square icons are centered and the texts line up. List entries without an icon get a blank one if other entries of the list have an icon.

Location:
trunk/src/org/openstreetmap/josm
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java

    r19629 r19657  
    13371337                }
    13381338                final ImageSizes size = ImageSizes.TABLE;
    1339                 setIcon(value.icon == null ? ImageProvider.getEmpty(size) : value.icon.getImageIconBounded(size.getImageDimension()));
     1339                setIcon(value.icon == null ? ImageProvider.getEmpty(size) : value.icon.getPaddedIcon(size.getImageDimension()));
    13401340            }
    13411341            return this;
  • trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java

    r19553 r19657  
    291291                if (result != null) {
    292292                    // Pre-render off EDT to avoid flooding the event queue with expensive SVG rendering
    293                     ImageIcon small = result.getImageIcon(ImageProvider.ImageSizes.SMALLICON.getImageDimension());
    294                     ImageIcon large = result.getImageIcon(ImageProvider.ImageSizes.LARGEICON.getImageDimension());
     293                    ImageIcon small = result.getPaddedIcon(ImageProvider.ImageSizes.SMALLICON.getImageDimension());
     294                    ImageIcon large = result.getPaddedIcon(ImageProvider.ImageSizes.LARGEICON.getImageDimension());
    295295                    GuiHelper.runInEDT(() -> {
    296296                        try {
  • trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetItem.java

    r19286 r19657  
    55import static org.openstreetmap.josm.tools.I18n.trc;
    66
     7import java.awt.Dimension;
    78import java.io.File;
    89import java.util.Arrays;
    … …  
    2930import org.openstreetmap.josm.gui.util.LruCache;
    3031import org.openstreetmap.josm.tools.ImageProvider;
     32import org.openstreetmap.josm.tools.ImageProvider.ImageSizes;
     33import org.openstreetmap.josm.tools.ImageResource;
    3134import org.openstreetmap.josm.tools.Logging;
    3235import org.openstreetmap.josm.tools.Utils;
    … …  
    151154     * @param iconName the icon name
    152155     * @param zipIcons zip file where the image is located
    153      * @param maxSize maximum image size (or null)
    154      * @return the requested image or null if the request failed
     156     * @param maxSize maximum image size (or null for the default small icon size)
     157     * @return the requested image, centered in a square of {@code maxSize}, or null if the request failed
    155158     */
    156159    public static ImageIcon loadImageIcon(String iconName, File zipIcons, Integer maxSize) {
    157160        final Collection<String> s = TaggingPresets.ICON_SOURCES.get();
    158         ImageProvider imgProv = new ImageProvider(iconName).setDirs(s).setId("presets").setArchive(zipIcons).setOptional(true);
    159         if (maxSize != null && maxSize > 0) {
    160             imgProv.setMaxSize(maxSize);
    161         }
    162         return imgProv.get();
     161        final int size = (maxSize != null && maxSize > 0) ? maxSize : ImageSizes.SMALLICON.getVirtualWidth();
     162        ImageResource resource = new ImageProvider(iconName).setDirs(s).setId("presets").setArchive(zipIcons).setOptional(true)
     163                .getResource();
     164        return resource == null ? null : resource.getPaddedIcon(new Dimension(size, size));
    163165    }
    164166
  • trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java

    r19597 r19657  
    66import java.awt.Component;
    77import java.awt.Font;
     8import java.awt.image.BufferedImage;
    89import java.lang.reflect.Method;
    910import java.lang.reflect.Modifier;
    … …  
    1415import java.util.List;
    1516import java.util.Map;
     17import java.util.Objects;
    1618import java.util.TreeMap;
    1719import java.util.stream.Collectors;
    1820
     21import javax.swing.Icon;
     22import javax.swing.ImageIcon;
    1923import javax.swing.JLabel;
    2024import javax.swing.JList;
    … …  
    143147                l.setFont(l.getFont().deriveFont(Font.ITALIC + Font.BOLD));
    144148            }
    145             l.setIcon(value.getIcon());
     149            Icon icon = value.getIcon();
     150            if (icon == null && value.cms != null) {
     151                // use a blank icon if other entries have one, so that all texts line up
     152                icon = value.cms.presetListEntries.stream().map(PresetListEntry::getIcon).filter(Objects::nonNull).findFirst()
     153                        .map(i -> new ImageIcon(new BufferedImage(i.getIconWidth(), i.getIconHeight(), BufferedImage.TYPE_INT_ARGB)))
     154                        .orElse(null);
     155            }
     156            l.setIcon(icon);
    146157            l.setToolTipText(value.getToolTipText(key));
    147158            return l;
  • trunk/src/org/openstreetmap/josm/tools/ImageResizeMode.java

    r19519 r19657  
    9595            renderer.accept(g);
    9696        } else if (sourceIcon != null) {
    97             sourceIcon = sourceIcon.getScaledInstance(real.width, real.height, Image.SCALE_SMOOTH);
    98             g.drawImage(sourceIcon, 0, 0, null);
     97            final Dimension scaled = (this == PADDED) ? AUTO.computeDimension(real, icon) : real;
     98            sourceIcon = sourceIcon.getScaledInstance(scaled.width, scaled.height, Image.SCALE_SMOOTH);
     99            g.drawImage(sourceIcon, (real.width - scaled.width) / 2, (real.height - scaled.height) / 2, null);
    99100        } else {
    100101            throw new IllegalArgumentException("renderer or sourceIcon");
Note: See TracChangeset for help on using the changeset viewer.