Releases: DoomSalat/Cursor-Palette
Release list
v2.2.0
Animated cursor editing in the Paint editor - a .cur can now be drawn into a full animated .ani cursor without leaving the editor:
- Frame timeline: add/remove frames, scrub between them, set a per-frame duration, and play/stop a live preview (up to 60 frames, 17ms minimum per frame per the .ani format's own limit)
- Drop a multi-frame GIF straight onto the timeline - every frame becomes a timeline frame, with disposal and per-frame delay handled automatically
- Export the finished animation as .gif or a real .ani, next to the existing .png export
- A "Use for all" checkbox applies one duration to every frame at once
- The background reference panel gained matching controls: multi-frame navigation tied to the timeline (or independent, with prev/next/reset), and a "hide main image" toggle to see the reference alone
- PresetEditor no longer blocks .ani from the Paint editor flow - opening one seeds the full timeline, saving writes back .ani when animated or .cur otherwise
Editor polish
- BgRef and Move tools can now be dragged directly on the canvas, not just via the arrow pad
- Bilinear filtering toggle for the BgRef reference image (off by default)
- A dedicated canvas drop zone in the Paint editor, and the import button renamed to "Load file"
- Preset editor now auto-converts dropped or browsed images straight into cursors
- Block empty/transparent cursors - saving or importing a fully transparent cursor (which would make the mouse pointer invisible) is now blocked with a clear warning; folder/archive imports skip empty files and report how many were skipped
Download system cursors - right-click the default (system) tile for a context menu to download the current Windows cursor set, either as PNG+GIF images or as the original .cur/.ani files (falls back to bundled Crosshair/IBeam cursors for roles Windows doesn't store separately)
Export for Linux - a new "▾" next to the ZIP archive button (in both the Export window and the preset editor's own download button) offers:
- Xcursor theme - a real conversion into the binary Xcursor format (index.theme + a cursors folder), with each Windows cursor role mapped to the matching Xcursor/CSS names (left_ptr, text, ns-resize, pointer, etc.) so it's ready to drop into ~/.icons
- Raw cursor files - the plain .cur/.ani files in folders, with no extra metadata
- Download README - saves just the README.txt on its own (app link and install instructions), without exporting any preset
- The Xcursor theme and raw cursor files - along with the existing ZIP archive, or either as an unzipped folder - can be dragged straight back into this app; the Import button also gained a folder picker for the same purpose
Unified export manifest - ZIP archives now carry a single cursor-palette.json manifest with full metadata (roles, locked roles, cursor size, groups) and a README.txt with install instructions, so a ZIP archive can be re-imported just like a .cursorpalette bundle
Quick single-preset download (gallery tile, preset editor's own download button) stays a plain folder as before, now paired with a lightweight cursor-palette-preset.json (name, cursor size, locked roles) and its own README.txt, so it can be dragged back into the app just like the other Linux formats
In-app help moved to Markdown files - the ⓘ help text for every window is now stored as Markdown instead of XAML string resources, fixing a language-switching bug and unifying InfoBox card styling
- Fix: downloading a single cursor from a preset slot now opens File Explorer with the new file selected, matching every other download/export action in the app
v2.1.0
Preset groups on the board - Ctrl+click multiple tiles, then pick a color and name at the bottom of the board to create a group:
- click a group tile to collapse/expand it (collapsed shows tiles stacked, expanded shows them side by side)
- right-click a group - edit, "consolidate members", ungroup, or delete
- right-click empty board space - "Create group"
- right-click a preset - "Add to group" submenu; dragging a tile onto a group attaches it
- board order is preserved and survives restarts
Groups in export/import - export window shows colored group tiles; a group is only included in the .cursorpalette file if all its presets are selected, and restored automatically on import
Painting in the Paint editor - Brush, Eraser and Fill tools instead of "coming soon" placeholders:
- Brush/Eraser paint pixels while dragging; Shift+click draws a straight line (Shift+Ctrl snaps to 45°); Fill flood-fills a same-colored area
- Color picker toggles between a wheel and a Photoshop-style square, brightness/alpha sliders, hex code copy/paste
- Eyedropper samples a color from anywhere on screen, not just the canvas
- Undo/Redo (Ctrl+Z / Ctrl+Y) covers painting, erasing, filling, moving the sprite, resizing the canvas, and importing an image
- The Hotspot tool inside the Paint editor is now fully functional instead of a placeholder
- Last tool, zoom, pan, color, and picker mode are remembered between sessions
- Hotkeys: V/H/B/E/G/C/O
Background reference (BgRef) - a semi-transparent tracing overlay behind the sprite, with opacity/margin/offset controls; never saved into the cursor
Import an image onto the canvas - "Load image" button or drag-and-drop .png/.jpg/.bmp/.gif/.cur/.ani, with Over (composite) or Replace (overwrite) mode
- The Paint editor button is now available on empty preset slots too
- Toast notifications for "Consolidate members", "Ungroup", and "Delete group"
- Fix: drag-reorder drop indicator Y-position and group hover outline positioning
- Fix: submenus weren't rendering in custom context menus (dark/light themes)
- Fix: drop-zone highlight not clearing when the cursor moved between the main window and a modal window on top of it
- Fix: canvas flicker while painting; fix for 45° line-angle snapping occasionally double-stepping a pixel
v2.0.2
- Infobox image icons: Replaced emoji icons (export, import, lock, link, brush, eraser, download) with actual PNG image resources via {img:ResourceName} tokens
- Inline icon support: Multiple icons in a single line (e.g. brush / eraser) now render correctly via InlineUIContainer
- Text color fix: Icon rows now match the surrounding text color — gray (BrushTextDim) in section cards, white (BrushText) in standalone lines and tips cards
- Open-folder toggle: Added a toggle button with folder icon in the bottom bar; blue = open Downloads folder after export/download, gray = disabled
- ExplorerService: New service that reuses existing Explorer windows and selects the exported file, instead of always opening a new window
- All Explorer-open calls (export, PNG save, update download) are now guarded by the OpenFolderAfterDownload setting
v2.0.1
Fixed
- Canvas tool resize (drag handles, and the "Canvas size" dialog's anchor picker): growing the canvas from the left/top edge visually always rendered as growth down-right, even though the underlying pixel data was already correct — the viewport wasn't panning to compensate. Now the canvas visually extends toward whichever edge/corner you actually drag or anchor toward. Cancelling an in-progress resize (switching tools without hitting Apply) also restores the prior view position instead of leaving it scrolled oddly.
- Resize corner handles rendered as blobby, inconsistent shapes at typical zoom levels — their border thickness wasn't scaling with zoom the way their size already did, so the border overwhelmed the handle. They're now clean, consistent white/accent squares at any zoom.
- Import picker: entries from a plain ZIP archive (which don't carry a stored cursor size) showed "0 px" on their tile — now shown as the actual size that gets applied on import.
- Cursor download naming was inconsistent across the app — single-slot download and whole-preset download (preset editor and main gallery context menu) only used the role name, while Paint/Hotspot PNG export already used preset + role. Unified everywhere.
- In-app help text: Paint editor's help still described the pre-rework single-tool editor; preset editor's help was missing the Paint-editor slot button and had a stale download-naming description. German/Japanese/Chinese preset-editor help text was missing the lock/download/link bullets that other languages already had.
Changed
- Resize edge handles are now draggable along their entire length instead of only a small handle centered on each edge.
- Hotspot editor now follows the main window's UI scale instead of having its own separate zoom controls; its "download as PNG" button was removed (redundant with the app-wide download).
- Import picker's "ignore individual sizes" checkbox renamed to "Uniform cursor size" (all 6 languages).
Added
- Import tiles now show each preset's cursor size below its role count, live-updating with the uniform-size toggle/slider.
v2.0.0
Added
- Paint editor — a new editor for a cursor's artwork, opened from a
slot in the preset editor:- Move tool — drag the sprite directly, or nudge it with an
arrow/snap-to-edge pad. - Hand tool — pan the canvas by holding the left mouse button.
The middle mouse button pans from any tool, at any time. - Canvas tool — resize the canvas by dragging handles on its
edges/corners, with a live preview; an Apply button confirms the new
size, and switching to another tool without clicking Apply reverts
it. - A "Canvas size" dialog for numeric width/height entry, size presets,
and a 3×3 anchor grid. - Zooming (mouse wheel + Ctrl, or +/- buttons) anchored to the
cursor/viewport center, a sprite-bounds toggle, independent editor UI
zoom, and a resizable editor window. - Export to PNG, named
<preset name> <cursor role> <width>x<height>.png
(e.g.My preset Arrow 32x32.png). - Brush and Eraser tools are present in the toolbar as placeholders for
upcoming pixel-editing features; they aren't functional yet.
- Move tool — drag the sprite directly, or nudge it with an
- Drag-and-drop preset reordering on the main gallery — drag a tile to
reorder presets, with a translucent ghost tile following the cursor and
a blue insertion indicator showing where it'll land. Order is saved and
persists across restarts. - The preset context menu gained inline rename, move left/right,
and download to the Downloads folder (previously it only offered
Edit and Delete). - Export presets as a full-fidelity
.cursorpalettebundle (roles,
locks, and cursor size preserved; roles borrowed from other presets are
copied in so the bundle is self-contained) or as a plain ZIP of the raw
cursor files, picked from a tile-grid selector. Both save to Downloads
and reveal themselves in Explorer. The export dialog also has an
optional custom file name field. - Import presets from a
.cursorpalettebundle or a.zip/.rar/
.7zarchive, via a file dialog or by dropping onto the main window,
with an optional "override size" toggle to apply one uniform cursor size
to everything being imported. Packages created by a newer, incompatible
app version are detected and rejected with a clear message.
Changed
- The update-check footer now shows a "checking version" state while it
runs, a checkmark on the up-to-date label, and lets you click that label
to re-check manually.
Fixed
- The toast notification's slide-in animation never played, because its
Storyboardtargeted aTranslateTransformthat was never attached to
the toast'sRenderTransform. - Long bullet lines in the in-app help (ⓘ) windows were clipped instead of
wrapping to a new line.
v1.2.1
Bug Fixes
- Fixed invisible hotspot arrows - arrow icons in the pivot point quick-set pad were white-on-white in light theme; now uses OpacityMask with theme-aware Brush.Text fill, visible in both light and dark themes
- Fixed clipped arrow icons - buttons in the 3×3 pad had default padding that cropped the 20px icons; added Padding="0" to all preset buttons
- Fixed app not closing - process lingered after closing the window; added ShutdownMode="OnMainWindowClose" to ensure clean exit
- Fixed update window height - increased to fit buttons properly
Improvements
- New center icon - the center button in the pivot point pad now uses a dedicated crosshair icon (CenterIcon26.png) instead of a text bullet character
- Updated help text - info box for pivot point editor updated in all 6 languages to reflect the new crosshair icon; added update indicator and info button descriptions to main help text; replaced 'Pick from existing' with puzzle icon in editor help; removed empty tiles line from role picker help
Update Flow
- Manual download improvements - window closes immediately after clicking download, download runs in background, toast notification appears on main window
- Download started toast - added notification when update download begins
v1.2.0
New
- Custom preset builder - mix and match cursor roles from different presets into a new one. A visual preset picker shows previews so you can borrow exactly the roles you want.
- Role locking in the preset editor - pin slots you don't want accidentally overwritten. Lock state persists across sessions.
- Download cursors and presets straight from the UI - grab an individual cursor file or export an entire preset's files to your Downloads folder.
- Update checker - on launch, the app quietly checks GitHub for a new release. A spinner shows it's looking, then a blue button appears if an update is available (or a subtle "Up to date" label if not). Click it to open the update dialog with two options:
- Auto update - downloads the new .exe, swaps it in via a temporary script, and relaunches the app. No manual steps.
- Manual download - saves the .exe to your Downloads folder and opens Explorer to show it.
- Toast notifications - a brief popup confirms when a new version is found and when a manual download finishes.
- Per-window text zoom in info/help windows - each window remembers its own zoom level independently.
Fixes
- GitHub icon recolored for better visibility in both themes.
v1.1.1
New
- Import presets straight from .zip/.rar/.7z archives - drop one onto the main window or onto the "Choose folder" area in the preset editor, exactly like a loose folder. The preset name is picked up automatically from the folder/archive name.
- A dashed outline now highlights exactly where the file, folder, or archive you're dragging can be dropped, as soon as you drag it in.
- A loading overlay appears while a cursor or preset is being applied, so the brief system-wide apply no longer looks like the app froze.
Fixes
- Fixed the mouse cursor getting stuck in a "still dragging" state after dropping files onto the main window.
- Fixed double-click (to edit a preset) breaking after the loading overlay was introduced.
- Cursor files named "Location Select" and "Diagonal Resize 1/2" are now auto-matched to their roles on import.
v1.1.0
Highlights
- Pivot point editor — drag a marker on an enlarged preview to set exactly where clicks register for any cursor, or snap it to a corner, edge, or center with the new 3×3 quick-set pad (it lights up when the current position matches a preset). Works for both .cur and every frame of a .ani.
- 6 languages — Russian, English, Simplified Chinese, Japanese, Spanish, German. Picks up your Windows display language automatically on first launch, remembers your choice after.
- Animated .ani previews — busy/working cursors now play their full animation in the gallery and editor instead of showing a static first frame.
- Smarter preset editor — empty role slots show the actual Windows default cursor (dimmed, with an "auto" badge) instead of a blank icon; drag a folder straight onto the editor to auto-import cursors by filename, no dialog needed.
New
- Pivot/hotspot editor (.cur and .ani, drag-to-set + 3×3 quick-set pad with live highlight)
- Blue dot on each slot's preview showing its current hotspot
- Folder drag-and-drop inside the preset editor (was file-dialog only)
- Light/dark theme toggle, follows system theme on first launch
- Interface zoom and gallery grid-size sliders, independent of each other
- Cursor size is now per-preset with a highlight on "Apply" whenever the slider drifts from what's actually applied
- Fixed
- Role names in the editor showed raw resource keys (S.Role.Role.Arrow) instead of translated text
- "Browse" button sat off-center in empty slots
- Bundled default cursors for roles Windows has no file for (Crosshair/IBeam) weren't included in the single-file publish output
Polish
- Custom-styled context menus and scrollbars (previously unreadable system defaults)
- "Remove role" button fills solid red on hover and sits with breathing room from the other buttons
- Sliders shrink with the window instead of getting clipped, down to a workable minimum