Donner 0.8.0-pre
Embeddable browser-grade SVG2 engine
Loading...
Searching...
No Matches
SelectTool.h File Reference

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"
Include dependency graph for SelectTool.h:
This graph shows which files directly or indirectly include this file:

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...

Namespaces

namespace  donner
 Top-level Donner namespace, which is split into different sub-namespaces such as donner::svg and donner::css.

Detailed Description

SelectTool is the editor's first and (in this milestone) only tool. It dispatches three different gestures off onMouseDown:

  • Click on an element → replace the selection with that element and start a drag (move on subsequent onMouseMove).
  • Shift+click on an element → toggle that element in the current selection (no drag).
  • Click on empty space → start a marquee drag. Subsequent onMouseMove events grow the marquee rect; onMouseUp resolves the rect to every geometry element it intersects and replaces (or appends-to, if Shift was held) the selection.

All DOM mutations flow through EditorApp::applyMutation() as EditorCommand::SetTransform — never directly.


Class Documentation

◆ donner::editor::SelectTool::ActiveDragPreview

struct donner::editor::SelectTool::ActiveDragPreview

Preview state for an in-progress drag, consumed by the async renderer.

Collaboration diagram for donner::editor::SelectTool::ActiveDragPreview:
[legend]
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.

◆ donner::editor::SelectTool::ActiveTransformBoundsPreview

struct donner::editor::SelectTool::ActiveTransformBoundsPreview

Active transform chrome state for selection bounds presentation.

Collaboration diagram for donner::editor::SelectTool::ActiveTransformBoundsPreview:
[legend]
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.

◆ donner::editor::SelectTool::ActiveGesturePreview

struct donner::editor::SelectTool::ActiveGesturePreview

Active selection gesture state for editor UI chrome.

Collaboration diagram for donner::editor::SelectTool::ActiveGesturePreview:
[legend]
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.

◆ donner::editor::SelectTool::CompletedDragWriteback

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.

Collaboration diagram for donner::editor::SelectTool::CompletedDragWriteback:
[legend]
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.
AttributeWritebackTarget target
Transform2d transform