[package]
name = "epiphany-editor-gui"
version = "0.0.0"
edition.workspace = true
authors.workspace = true
repository.workspace = true
description = "A thin native (egui) GUI shell over epiphany-editor-core: renders the score with epiphany-render-svg (rasterized by resvg), click to select, a pencil mode that clicks notes onto the staff, undo/redo, and a toolbar/keys for the note-editing intents and a duration palette. A vertical slice proving the editor seam."

# A demo binary, not a library other crates build on, so it carries the heavy GUI
# dependency tree (eframe/winit/wgpu, resvg/usvg/tiny-skia) the rest of the
# workspace deliberately avoids. It opts out of the workspace MSRV claim because
# those crates require a newer toolchain than the core crates pin.

[dependencies]
# The headless editor this GUI drives.
epiphany-editor-core.workspace = true
# Musical-duration / note-value types, for the duration palette.
epiphany-core.workspace = true
# The real constraint solver (so the GUI shows a genuinely engraved score).
epiphany-engrave.workspace = true
# SVG rendering of the resolved layout, and the layout/hit-test geometry types.
epiphany-render-svg.workspace = true
epiphany-layout-ir.workspace = true
# Operation payload types, to label the last applied op in the debug panel.
epiphany-ops.workspace = true
# A clean score fixture to open.
epiphany-testkit.workspace = true

# Native GUI shell (window, event loop, immediate-mode UI). Pinned to the classic
# `App::update(ctx, frame)` + panel API (egui 0.35 redesigned `App` around `ui()`).
eframe = "0.29"
# Rasterizes the rendered SVG to a pixmap for display (bundles usvg + tiny-skia).
resvg = "0.45"

[dev-dependencies]
# Used only by `goldens.rs`'s own comparator unit tests, to produce two
# byte-different PNG encodings of identical pixels (different filter/compression
# settings) and prove the golden comparator's decoded-pixel contract ignores
# that difference. A caret requirement on the version `tiny-skia` already
# resolves (Cargo.lock), so this is a dev-only edge that unifies with the
# existing dependency-tree node — today and after any future `tiny-skia` bump
# (an exact `=` pin would fork a duplicate node the day `tiny-skia` moves).
# The comparator's own encode/decode path uses
# `resvg::tiny_skia::Pixmap::{encode_png,decode_png}` exclusively; `png` is
# never used at runtime.
png = "0.17.16"
