summaryrefslogtreecommitdiff
path: root/src/managers/input/trackpad/gestures/ITrackpadGesture.hpp
blob: a5108a2c17109f46222cf645aedd01bc177ad067 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#pragma once

#include "../../../../devices/IPointer.hpp"
#include "../GestureTypes.hpp"

class ITrackpadGesture {
  public:
    virtual ~ITrackpadGesture() = default;

    struct STrackpadGestureBegin {
        // this has update because we wait for the delta
        const IPointer::SSwipeUpdateEvent* swipe     = nullptr;
        const IPointer::SPinchUpdateEvent* pinch     = nullptr;
        eTrackpadGestureDirection          direction = TRACKPAD_GESTURE_DIR_NONE;
        float                              scale     = 1.F;
    };

    struct STrackpadGestureUpdate {
        const IPointer::SSwipeUpdateEvent* swipe     = nullptr;
        const IPointer::SPinchUpdateEvent* pinch     = nullptr;
        eTrackpadGestureDirection          direction = TRACKPAD_GESTURE_DIR_NONE;
        float                              scale     = 1.F;
    };

    struct STrackpadGestureEnd {
        const IPointer::SSwipeEndEvent* swipe     = nullptr;
        const IPointer::SPinchEndEvent* pinch     = nullptr;
        eTrackpadGestureDirection       direction = TRACKPAD_GESTURE_DIR_NONE;
        float                           scale     = 1.F;
    };

    virtual void  begin(const STrackpadGestureBegin& e);
    virtual void  update(const STrackpadGestureUpdate& e) = 0;
    virtual void  end(const STrackpadGestureEnd& e)       = 0;

    virtual float distance(const STrackpadGestureBegin& e);
    virtual float distance(const STrackpadGestureUpdate& e);

    virtual bool  isDirectionSensitive();

  protected:
    float m_lastPinchScale = 1.F, m_scale = 1.F;
};