|
|
Donner SVG Editor & Engine
SVG-native editor and embeddable SVG2 + CSS3 engine in C++20, with GPU (WebGPU) and compact CPU renderers, built for correctness, security, and performance.
|
SelectTool is the editor's first and (in this milestone) only tool. It dispatches three different gestures off onMouseDown: More...
#include <cstdint>#include <optional>#include <span>#include <vector>#include "donner/base/Box.h"#include "donner/base/EcsRegistry.h"#include "donner/base/Transform.h"#include "donner/base/Vector2.h"#include "donner/editor/AttributeWriteback.h"#include "donner/editor/SelectionTransformHandles.h"#include "donner/editor/Tool.h"#include "donner/svg/SVGElement.h"Classes | |
| class | donner::editor::SelectTool |
| struct | donner::editor::SelectTool::ActiveDragPreview |
| Preview state for an in-progress drag, consumed by the async renderer. More... | |
| struct | donner::editor::SelectTool::ActiveTransformBoundsPreview |
| Active transform chrome state for selection bounds presentation. More... | |
| struct | donner::editor::SelectTool::ActiveGesturePreview |
| Active selection gesture state for editor UI chrome. More... | |
| struct | donner::editor::SelectTool::CompletedDragWriteback |
| Payload needed to write a completed drag back into the source pane. For multi-element drags this is the primary; additional writeback entries are latched in extras. More... | |
| struct | donner::editor::SelectTool::LockedRejectionFlash |
| A transient "this element is locked, you can't select it" flash on the rejected element's outline. intensity fades from 1 → 0 over the flash duration. More... | |
Namespaces | |
| namespace | donner |
| Top-level Donner namespace, which is split into different sub-namespaces such as donner::svg and donner::css. | |
SelectTool is the editor's first and (in this milestone) only tool. It dispatches three different gestures off onMouseDown:
All DOM mutations flow through EditorApp::applyMutation() as EditorCommand::SetTransform - never directly.
| struct donner::editor::SelectTool::ActiveDragPreview |
Preview state for an in-progress drag, consumed by the async renderer.
| Class Members | ||
|---|---|---|
| Transform2d | documentFromCachedDocument = Transform2d() | Current affine transform from the cached document placement to the active preview placement. |
| uint64_t | dragGeneration = 0 | Monotonic id for one mouse-down/move/up drag gesture. |
| Entity | entity = entt::null | Entity being dragged. |
| vector< Entity > | extraEntities | Additional selected entities moving with entity in the same gesture. |
| Vector2d | translation = Vector2d::Zero() | Current drag translation in document coordinates. |
| struct donner::editor::SelectTool::ActiveTransformBoundsPreview |
Active transform chrome state for selection bounds presentation.
| Class Members | ||
|---|---|---|
| Transform2d | documentFromStartDocument = Transform2d() | Current transform from gesture-start document space to active document space. |
| Box2d | startBoundsDoc | Selection AABB captured when the transform gesture started. |
| struct donner::editor::SelectTool::ActiveGesturePreview |
Active selection gesture state for editor UI chrome.
| Class Members | ||
|---|---|---|
| SelectionTransformCorner | corner = SelectionTransformCorner::TopLeft | Transform handle corner that started the gesture. |
| Vector2d | currentDocumentDelta = Vector2d::Zero() | Current drag delta in document coordinates. |
| Transform2d | documentFromStartDocument = Transform2d() | Current transform from gesture-start document space to active document space. |
| bool | hasMoved = false | Whether the gesture has moved past the drag threshold. |
| ActiveGestureKind | kind = ActiveGestureKind::Move | Gesture kind currently being performed. |
| Box2d | startBoundsDoc | Selection bounds captured at gesture start. |
| struct donner::editor::SelectTool::CompletedDragWriteback |
Payload needed to write a completed drag back into the source pane. For multi-element drags this is the primary; additional writeback entries are latched in extras.
| Class Members | ||
|---|---|---|
| vector< CompletedDragWriteback > | extras | Additional writeback entries for extra elements in a multi-element drag. One per non-primary element that had a capturable writeback target. Empty for single-element drags. |
| optional< RcString > | sourceTransformAttributeValue | The element's transform= bytes as authored at drag start, used by the source writeback to preserve the author's function syntax instead of canonicalizing to matrix(). std::nullopt when the element had no transform attribute before the drag. |
| AttributeWritebackTarget | target | |
| Transform2d | transform | |
| struct donner::editor::SelectTool::LockedRejectionFlash |
A transient "this element is locked, you can't select it" flash on the rejected element's outline. intensity fades from 1 → 0 over the flash duration.
| Class Members | ||
|---|---|---|
| SVGElement | element | The element whose selection was rejected. |
| float | intensity = 0.0f | Fade intensity in (0, 1]. |