feat(render): logical style metrics with a UI scale, so chrome has a consistent physical size
This commit is contained in:
1 parent
1f03631e98
commit
7500fc90d2
21 files changed
+708
-82
No files matched your search
@@ -50,6 +50,23 @@ enum class DragMode {
|
||||
///
|
||||
/// A drag that changes no range is harmless: a box-zoom selection under 4 px on
|
||||
/// either side is a click, and leaves the ranges alone.
|
||||
///
|
||||
/// ## Tolerances are logical, the coordinates they are compared against are not
|
||||
///
|
||||
/// The plot geometry the controller hit-tests in is device pixels (see
|
||||
/// `PlotLayout`), and each adapter converts its pointer coordinates into the same
|
||||
/// space before forwarding them. A tolerance written as a device constant would
|
||||
/// therefore change its *physical* size with the display: a 5 px grab radius is
|
||||
/// half the hand movement on a 2x panel, so the same cursor becomes harder to
|
||||
/// catch there. Both tolerances -- the cursor grab radius and the box-zoom click
|
||||
/// threshold -- are therefore logical constants multiplied by `Plot::ui_scale()`,
|
||||
/// which is also why the controller reads the scale off the plot it already holds
|
||||
/// instead of keeping a copy a host would have to keep in step.
|
||||
///
|
||||
/// The middle-drag axis zoom's per-pixel gain is deliberately *not* in that group:
|
||||
/// it is a data-navigation sensitivity rather than a size (the wheel and `+`/`-`
|
||||
/// are scale-free already, being counted in notches), and spec §12 reworks the
|
||||
/// zoom and pan gestures that own it.
|
||||
class Controller {
|
||||
public:
|
||||
explicit Controller(Plot& plot) noexcept : plot_(&plot) {}
|
||||
|
||||
Reference in new issue
Block a user