Released 2024-09-21
This release primarily focuses on a bunch of new whiskers
features–see below. Here are my favorites:
- You can now have
Vec<T>
sketch parameters. The corresponding UI will list items and let you add/remove elements. This works with arbitrary (supported) types, so you can haveVec
s of complexstruct
/enum
types, which can be really powerful! The newdashed_lines
example uses this feature to define arbitrary dashed patterns. - You can use
ctx.inspect()
to display anything (whichimpl Debug
) in a new "Inspect" section of the UI. Very convenient to visualize internal algorithm values!
- Add support for
Vec<T>
sketch parameters #141 - Improve
HexGrid
API to supportLength
parameters #134 - Add
ctx.rng_{weighted|ratio}_bool()
helper functions #124 - Add "Inspect" section to display debug values #132 (thanks @afternoon2!)
- Add basic support for file optimization before export #125
- Add example of making dashed lines with
kurbo::dash
#135 - Add
kurbo
to whiskers' prelude #133 - Improve whiskers
README.md
#131 (thanks @hapiel!) - Fix cloning the hex grid cell #139 (thanks @afternoon2!)
- Bump rust toolchain to 1.79.0 #138, #142
- Update egui to 0.27.2 #144
- Use external puffin viewer instead of integrating
puffin_egui
#143 - Clean
Cargo.toml
s and update dependencies #122
- Update
wasm-bindgen
and sync version with CI #137
Full Changelog: https://github.com/abey79/vsvg/compare/v0.4.0...HEAD
Released 2024-01-21
Sketch parameters are now persisted across sketch launches, which dramatically improves the QoL when iterating on sketch code. A new "Reset" button sets all parameters to the sketch defaults. This also lays the groundwork for a future configuration management feature.
Two breaking changes were introduced to accommodate for this.
- Use
MySketch::runner().run()
instead ofRunner::new(MySketch::default()).run()
in yourmain()
function. - Use the
#[sketch_app]
, resp.#[sketch_widget]
attributes instead of theSketch
, resp.Widget
derive macros. These new attributes take care of deriving the now-requiredserde::Serialize
andserde::Deserialize
using the correct,whiskers
-exported version of theserde
crate.
Example:
use whiskers::prelude::*;
#[sketch_app]
#[derive(Default)]
struct HelloWorldSketch {
width: f64,
height: f64,
}
impl App for HelloWorldSketch {
fn update(&mut self, sketch: &mut Sketch, _ctx: &mut Context) -> anyhow::Result<()> {
/* sketch code here */
Ok(())
}
}
fn main() -> Result {
HelloWorldSketch::runner()
.with_page_size_options(PageSize::A5H)
.run()
}
- It's now possible to override pen width and opacity in the viewer.
- The viewer now persists the antialiasing setting (note: persistence happens on a per-binary basis, so the AA setting must be set e.g. for each different sketch).
- You can use custom
enum
types as sketch parameter (use the new#[sketch_widget]
attribute as noted above). vsvg
introduces a newLength
type which combines a float and aUnit
.whiskers
supports them, and, when used as sketch parameter, provides a nice UI where both the value and the unit can be changed.msvg
now sorts files "correctly" when they are numbered, and has a much nicer CLI experience.- It's now possible to directly "draw" into a
vsvg::Layer
using the APIs from thevsvg::Draw
trait. - Both
vsvg
andvsvg-viewer
now cleanly re-export key dependencies.
- BREAKING: Persist sketch parameters across app relaunches #94
- BREAKING: Add a button to reset the sketch parameters to their defaults #91
- Add support for custom
enum
as sketch parameter #107 - Add support for
vsvg::Unit
andvsvg::Length
as sketch parameters #95 - Add
Context::rng_weighted_choice()
helper function #102 (thanks @afternoon2!) - Split whiskers widgets in their own
whiskers-widgets
crate #108 - Add
particle
example based ongeos
#105 - Make
Runner::new()
private and update docs accordingly #96 - Fix
README.md
code example to useSketchApp::runner()
instead of now privateRunner::new()
#103 (thanks @reidab!)
- Sort files in natural order rather than in lexicographical order #104 (thanks @danieledapo!)
- Use
clap
formsvg
for a nicer CLI experience #83
- BREAKING: Improve
Unit
and introduceLength
#88 - Implement the
Draw
trait forLayer
#111 - Re-export core
vsvg
dependencies #113 - Fix unescaped
<dc:source>
content in SVG output #116
- Add options to override pen width and opacity #89
- Persist antialias setting across app relaunches #90
- Add
on_exit()
hook to theViewerApp
trait #106 (thanks @danieledapo!) - Re-export core
vsvg-viewer
dependencies #115 (thanks @danieledapo!)
- Run documentation tests in CI #92
- Update rust toolchain to 1.75.0 #82
- Update egui to 0.25.0 #118
- Update
cargo dist
to 0.8.0 #117 - Fix web demo publishing action
5f42b4a
changelog.py
: highlight breaking changes and generate a list of contributors #93
Full Changelog: https://github.com/abey79/vsvg/compare/v0.3.0...v0.4.0
Released 2023-12-28
- Inspect SVG collections with the new, blazing fast
msvg
CLI (early alpha stage). whiskers
improvements:- New hexagonal grid helper.
- Support for nested
struct
in sketch param.
- Add support for custom
struct
as sketch parameter #66 - Add hexagonal grid helper #60 (thanks @afternoon2!)
- Change
HexGrid::spacing()
to accept a single scalar and maintain hexagonal grid #72 (thanks @karliss!) - Implement
step
UI parameter for numeric value in normal mode #58
- First prototype of
msvg
#68 - Improve
msvg
's file list side panel and add file name overlay #76 - Fix blank window on first start #81
- Add "merge layers" operation to
vsvg
andvsvg-cli
#61 - Add
--strokewidth <W>
command to override the stroke width of all paths #62 - Add
--flatten <TOL>
command to flatten all curves with the provided tolerance #63
- Improve
ViewerApp
hooks to give implementers more flexibility #71 - Add input handle hook to the
ViewerApp
trait #74 - Add
ListItem
UI widget #75
- Fit to view on double click #73
- Add binary publishing support with
cargo-dist
#78 - Update
CHANGELOG.md
for compatibility withcargo-dist
and add automation script #79 - Add plausible.io traffic monitoring to https://whisk.rs
1228521
- Update to egui 0.24 and wgpu 0.18 #64
Full Changelog: https://github.com/abey79/vsvg/compare/v0.2.0...v0.3.0
Released 2023-10-22
- Add support for Catmull-Rom splines by @abey79 in #36
- Add some
rng_XXX
convenience functions towhiskers::Context
and makerng_range
generic over type by @afternoon2 in #35 - Add
Grid
helper for grid-based layout by @afternoon2 in #43 - Add logarithmic slider support to numerical sketch parameter by @abey79 in #39
- Add support for
vsvg::Color
sketch parameters by @abey79 in #41 - Add an example to demo the use of the
noise-rs
crate by @abey79 in #42 - Add in-process profiling with
puffin
and parallelize some layer-level operations by @abey79 in #44 - Bump egui to 0.23 and wgpu to 0.17 by @abey79 in #54
- Improve performance of
noise
example by @abey79 in #45 - Refactor
vsvg-viewer
to defer all unneeded render data generation by @abey79 in #49 - Fix frame profiling order by @abey79 in #51
- Add tolerance control and vertex count display to
vsvg-viewer
by @abey79 in #50 - Parallelize native CI jobs by @abey79 in #37
- Fix README paths linked from main README by @reidab in #34
- Rename
whiskers::Runner::with_layout_options
for consistency by @abey79 in #38 - Fix spurious colon in
bool
UI widget label by @abey79 in #40
Full Changelog: https://github.com/abey79/vsvg/compare/v0.1.0...v0.2.0
Released 2023-10-01
-
Initial release, including:
- vsvg
- vsvg-viewer
- vsvg-cli
- whiskers
- whiskers-derive
Note: msvg is still WIP and not included in this release.