[Epic] New icon set: vector icons rendered crisp at any UI scale / hi-DPI #1056

Open
opened 2026-10-25 07:40:35 +00:00 by sky_line · 0 comments
Owner

Goal: every icon and UI image is crisp at any UI scale and on hi-DPI screens, in one consistent, modern style.

Today (skins/default/textures):

  • 735 PNGs, 766 texture entries. About 480 are tiny fixed-size bitmaps: 163 at 16 px, 151 at 18 px, most of the rest 14–24 px.
  • No hi-DPI support: no scaled variants, and the loader has no notion of scale. Every image is a 1× bitmap stretched with bilinear filtering by display scale × UIScaleFactor. At 1.25 / 1.5 / 2× everything is resampled to non-integer sizes and looks soft.
  • Widget backgrounds (buttons, tabs, panels) are 9-slice images, so their edges and corners blur the same way.
  • The art is largely the original Linden set, with dated and inconsistent styles.

Plan:

  1. Vector sources (SVG) for every icon. Our own consistent icon set, not copied art; a permissive licence for the sources.
  2. Rasterize at the exact on-screen pixel size, not by stretching. Preferred: at runtime with a tiny SVG rasterizer (e.g. nanosvg, zlib licence), cached per icon and size, so even odd scales like 1.25 are crisp. Fallback: build-time 1× / 1.5× / 2× / 3× variants, nearest one picked.
  3. Scale-aware 9-slice images, so borders stay exactly one physical pixel wide and sharp.
  4. Loader / texture registry: textures.xml entries can point to an SVG; the existing PNG stays as the fallback until each image is replaced, so the change ships gradually.
  5. Rollout by priority:
    • toolbar and top bar;
    • inventory item and folder type icons, including a proper icon for the pinned #RLV folder (#1055);
    • buttons, checkboxes, radios, scroll bars, tabs;
    • floater chrome;
    • everything else.

Done when: at UI scales 1.0, 1.25, 1.5 and 2.0 (and OS scaling) the UI's icons and widget images render sharp, with no visible resampling blur, in a consistent style. The old PNG set remains only as a fallback.

**Goal:** every icon and UI image is crisp at any UI scale and on hi-DPI screens, in one consistent, modern style. **Today** (skins/default/textures): - 735 PNGs, 766 texture entries. About 480 are tiny fixed-size bitmaps: 163 at 16 px, 151 at 18 px, most of the rest 14–24 px. - **No hi-DPI support:** no scaled variants, and the loader has no notion of scale. Every image is a 1× bitmap stretched with bilinear filtering by display scale × UIScaleFactor. At 1.25 / 1.5 / 2× everything is resampled to non-integer sizes and looks soft. - Widget backgrounds (buttons, tabs, panels) are 9-slice images, so their edges and corners blur the same way. - The art is largely the original Linden set, with dated and inconsistent styles. **Plan:** 1. **Vector sources (SVG)** for every icon. Our own consistent icon set, not copied art; a permissive licence for the sources. 2. **Rasterize at the exact on-screen pixel size**, not by stretching. Preferred: at runtime with a tiny SVG rasterizer (e.g. nanosvg, zlib licence), cached per icon and size, so even odd scales like 1.25 are crisp. Fallback: build-time 1× / 1.5× / 2× / 3× variants, nearest one picked. 3. **Scale-aware 9-slice images**, so borders stay exactly one physical pixel wide and sharp. 4. **Loader / texture registry:** textures.xml entries can point to an SVG; the existing PNG stays as the fallback until each image is replaced, so the change ships gradually. 5. **Rollout by priority:** - toolbar and top bar; - inventory item and folder type icons, including a proper icon for the pinned #RLV folder (#1055); - buttons, checkboxes, radios, scroll bars, tabs; - floater chrome; - everything else. **Done when:** at UI scales 1.0, 1.25, 1.5 and 2.0 (and OS scaling) the UI's icons and widget images render sharp, with no visible resampling blur, in a consistent style. The old PNG set remains only as a fallback.
sky_line added this to the Slipstream project 2026-10-25 07:40:35 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sky_line/Slipstream#1056
No description provided.