| 221 |
221 |
|
//! adjacent, and what is bought is that the unit is a value a consumer can read
|
| 222 |
222 |
|
//! back rather than a suffix on a label it would have to parse.
|
| 223 |
223 |
|
//!
|
| 224 |
|
- |
//! # 0.54.0: a curve this renderer can carry, and one it cannot
|
|
224 |
+ |
//! # 0.54.0: a curve this renderer can carry, and one it declines
|
| 225 |
225 |
|
//!
|
| 226 |
226 |
|
//! `makeover-layout` 0.32.0's `Curve`. A range takes its granularity from the
|
| 227 |
227 |
|
//! curve now (`Field::curve.step()`), every other kind keeps `Field::step`, and
|
| 228 |
228 |
|
//! `Curve::Linear` emits exactly what it emitted before.
|
| 229 |
229 |
|
//!
|
| 230 |
|
- |
//! **A constant-ratio curve still emits a linear track, and that is a
|
| 231 |
|
- |
//! shortfall rather than a decision.** HTML has no logarithmic range input, so
|
| 232 |
|
- |
//! honouring one here means either shipping JS that maps the thumb position to
|
| 233 |
|
- |
//! a value -- renderer-side app code, which is the thing this stack exists to
|
| 234 |
|
- |
//! delete -- or changing what the control submits from a value to a fraction,
|
| 235 |
|
- |
//! and then something has to map it on the way back in. That something is not
|
| 236 |
|
- |
//! this crate: the MNW server reads these forms with its own handlers, so a
|
| 237 |
|
- |
//! fraction arriving where a value is expected would be silent. Filed rather
|
| 238 |
|
- |
//! than guessed at.
|
|
230 |
+ |
//! **A constant-ratio curve emits a linear track, and that is the answer, not a
|
|
231 |
+ |
//! debt.** HTML has no logarithmic range input, so a described screen asking
|
|
232 |
+ |
//! for one is asking the browser for something it does not have, the same class
|
|
233 |
+ |
//! of request as [`makeover_layout::FieldKind::Date`] on a host with no
|
|
234 |
+ |
//! calendar. The renderer answers with the nearest control the host really
|
|
235 |
+ |
//! offers and keeps every fact that survives the translation: the extent, the
|
|
236 |
+ |
//! granularity, and the value's own units. What does not survive is resolution
|
|
237 |
+ |
//! at the small end. The value submitted is still a value in the field's own
|
|
238 |
+ |
//! units, which is what every handler on this path reads.
|
| 239 |
239 |
|
//!
|
| 240 |
|
- |
//! What is not lost: the extent, the granularity, and the value's own units.
|
| 241 |
|
- |
//! What is lost is resolution at the small end, which is exactly the reason an
|
| 242 |
|
- |
//! app asked for a ratio in the first place. No consumer is affected today --
|
| 243 |
|
- |
//! every described range on this path is linear.
|
|
240 |
+ |
//! The alternatives are worse in the specific way this stack exists to avoid.
|
|
241 |
+ |
//! Shipping JS that maps thumb position to value puts app code back in the
|
|
242 |
+ |
//! renderer. Changing what the control submits from a value to a fraction moves
|
|
243 |
+ |
//! the mapping to whoever reads the form, and the MNW server reads these forms
|
|
244 |
+ |
//! with its own handlers, so a fraction arriving where a value is expected
|
|
245 |
+ |
//! would be silent.
|
|
246 |
+ |
//!
|
|
247 |
+ |
//! When this reopens: the day a described screen on the webview path asks for a
|
|
248 |
+ |
//! non-linear range. The answer then is mapping in `quasi-router`, where one
|
|
249 |
+ |
//! implementation serves every host, not JS here. Nothing asks today. No
|
|
250 |
+ |
//! described screen in the tree uses a non-linear curve; the one real consumer
|
|
251 |
+ |
//! is audiofiles' ADSR (`instrument_panel.rs:643`), which is egui and stays
|
|
252 |
+ |
//! egui because audiofiles takes only `quasi-immediate` and
|
|
253 |
+ |
//! `makeover-immediate`; and the two webview-served consumers, goingson and the
|
|
254 |
+ |
//! MNW server, use no [`makeover_layout::FieldKind::Range`] at all.
|
| 244 |
255 |
|
//!
|
| 245 |
256 |
|
//! # 0.52.0: a markdown field gets the preview it was permitted
|
| 246 |
257 |
|
//!
|