Loading...
Searching...
No Matches
CurvePaletteBaseEvents.hpp
1#pragma once
2#include "CurvePaletteBaseStates.hpp"
3#include "CurvePoint.hpp"
4
5#include <Curve/Point/CurvePointModel.hpp>
6#include <Curve/Point/CurvePointView.hpp>
7#include <Curve/Segment/CurveSegmentModel.hpp>
8#include <Curve/Segment/CurveSegmentView.hpp>
9
10#include <score/statemachine/StateMachineUtils.hpp>
11#include <score/tools/Clamp.hpp>
12#include <score/tools/SafeCast.hpp>
13
14class QGraphicsItem;
15namespace Curve
16{
17class SegmentModel;
18namespace Element
19{
21{
22 static constexpr const int value = 0;
23};
25{
26 static constexpr const int value = 1;
27};
29{
30 static constexpr const int value = 2;
31};
32}
33
34template <typename Element_T, typename Modifier_T>
35struct CurveEvent : public score::PositionedEvent<Curve::Point>
36{
37 static constexpr const int user_type = Element_T::value + Modifier_T::value;
40 CurveEvent(const Curve::Point& pt, const QGraphicsItem* item)
41 : score::PositionedEvent<Curve::Point>{pt, QEvent::Type(QEvent::User + user_type)}
42 {
43 if constexpr(std::is_same_v<Element_T, Element::Point_tag>)
44 {
45 auto& m = safe_cast<const PointView*>(item)->model();
46 pointId = {m.previous(), m.following()};
47 }
48 else if constexpr(std::is_same_v<Element_T, Element::Segment_tag>)
49 {
50 segmentId = safe_cast<const SegmentView*>(item)->model().id();
51 }
52 }
53
54 PointId pointId;
55 Id<SegmentModel> segmentId;
56};
57
58using ClickOnNothing_Event
59 = CurveEvent<Element::Nothing_tag, score::Modifier::Click_tag>;
60using ClickOnPoint_Event = CurveEvent<Element::Point_tag, score::Modifier::Click_tag>;
61using ClickOnSegment_Event
62 = CurveEvent<Element::Segment_tag, score::Modifier::Click_tag>;
63
64using MoveOnNothing_Event = CurveEvent<Element::Nothing_tag, score::Modifier::Move_tag>;
65using MoveOnPoint_Event = CurveEvent<Element::Point_tag, score::Modifier::Move_tag>;
66using MoveOnSegment_Event = CurveEvent<Element::Segment_tag, score::Modifier::Move_tag>;
67
68using ReleaseOnNothing_Event
69 = CurveEvent<Element::Nothing_tag, score::Modifier::Release_tag>;
70using ReleaseOnPoint_Event
71 = CurveEvent<Element::Point_tag, score::Modifier::Release_tag>;
72using ReleaseOnSegment_Event
73 = CurveEvent<Element::Segment_tag, score::Modifier::Release_tag>;
74}
The id_base_t class.
Definition Identifier.hpp:59
Utilities and base classes for 1D curves.
Definition FocusDispatcher.hpp:12
Base toolkit upon which the software is built.
Definition Application.cpp:83
Definition CurvePaletteBaseEvents.hpp:36
CurveEvent(const Curve::Point &pt, const QGraphicsItem *item)
Definition CurvePaletteBaseEvents.hpp:40
Definition CurvePaletteBaseEvents.hpp:21
Definition CurvePaletteBaseEvents.hpp:25
Definition CurvePaletteBaseEvents.hpp:29
Definition StateMachineUtils.hpp:46