Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
pulp::timeline_editor::EditIntent Struct Reference

One editing step expressed without reference to the device that produced it. More...

#include <edit_intent.hpp>

Public Member Functions

bool operator== (const EditIntent &other) const noexcept

Public Attributes

EditIntentKind kind = EditIntentKind::Move
timeline::GesturePhase phase = timeline::GesturePhase::Single
timeline::ItemId sequence_id
timeline::ItemId track_id
timeline::ItemId clip_id
 Target for Erase / Move / Resize. Draw supplies clip instead.
std::optional< timeline::ClipTimeRange > expected_range
 Optimistic gate for Move / Resize: the range the front-end believes it edits.
std::optional< timeline::ClipTimeRange > replacement_range
 Requested range for Move / Resize.
std::optional< timeline::Clip > clip
 Payload for Draw.

Detailed Description

One editing step expressed without reference to the device that produced it.

Carries no coordinates, no button, no pointer id and no modifiers: a front-end resolves those against its hit metrics BEFORE building an intent, so mouse, touch and pen converge on identical values here.

Device neutrality is not what puts these verbs in this module. The editor rung and the document model are barred from view by the same MODULE_FLOORS closure, so "this header cannot name a pointer type" is true at either address and therefore selects neither. What selects is the opposite direction: core/timeline's floor excludes timeline_editor, so with the verbs declared HERE the floor gate rejects a reducer, a migration, or a serializer that reaches for one. Declared in the document model the same verbs sit in every consumer's include path with nothing able to object — a headless importer, a .pulpgraph loader, and a plugin that wants only commands would each carry a vocabulary whose Move/Resize split exists solely because a front-end distinguishes a clip body from its edge.

phase is pulp::timeline::GesturePhase, the same enum the transaction it lowers to carries, so a gesture keeps one phase vocabulary end to end. It stays in the document model on the same test: an undo group opens and closes on a bracket whether or not an editor is what produced it.

Member Function Documentation

◆ operator==()

bool pulp::timeline_editor::EditIntent::operator== ( const EditIntent & other) const
noexcept

Member Data Documentation

◆ clip

std::optional<timeline::Clip> pulp::timeline_editor::EditIntent::clip

Payload for Draw.

◆ clip_id

timeline::ItemId pulp::timeline_editor::EditIntent::clip_id

Target for Erase / Move / Resize. Draw supplies clip instead.

◆ expected_range

std::optional<timeline::ClipTimeRange> pulp::timeline_editor::EditIntent::expected_range

Optimistic gate for Move / Resize: the range the front-end believes it edits.

◆ kind

EditIntentKind pulp::timeline_editor::EditIntent::kind = EditIntentKind::Move

◆ phase

timeline::GesturePhase pulp::timeline_editor::EditIntent::phase = timeline::GesturePhase::Single

◆ replacement_range

std::optional<timeline::ClipTimeRange> pulp::timeline_editor::EditIntent::replacement_range

Requested range for Move / Resize.

◆ sequence_id

timeline::ItemId pulp::timeline_editor::EditIntent::sequence_id

◆ track_id

timeline::ItemId pulp::timeline_editor::EditIntent::track_id

The documentation for this struct was generated from the following file:
  • /home/runner/work/pulp/pulp/core/timeline_editor/include/pulp/timeline_editor/edit_intent.hpp