#ifndef MOUSEBUTTONS_H #define MOUSEBUTTONS_H #include #include class MouseButtons final { public: class MouseButton final { public: friend class MouseButtons; bool isDown() const; bool isReleased() const; int getDownTime() const; private: MouseButton(); MouseButton(const MouseButton&) = delete; MouseButton(MouseButton&&) = delete; MouseButton& operator=(const MouseButton&) = delete; MouseButton& operator=(MouseButton&&) = delete; int glfwButton; bool down; bool shouldRelease; int downTime; }; private: MouseButton buttons[3]; public: MouseButtons(); double getLastX() const; double getLastY() const; double getX() const; double getY() const; const MouseButton& primary; const MouseButton& secondary; const MouseButton& middle; void release(int button); void press(int button); void move(double x, double y); void tick(); private: MouseButtons(const MouseButtons&) = delete; MouseButtons& operator=(const MouseButtons&) = delete; MouseButtons(MouseButtons&&) = delete; MouseButtons& operator=(MouseButtons&&) = delete; double lastX; double lastY; double x; double y; bool updateLast; }; std::ostream& operator<<(std::ostream& os, const MouseButtons::MouseButton& m); #endif