Warning, file /graphics/glaxnimate/src/gui/tools/draw_tool_drag.hpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 * SPDX-FileCopyrightText: 2019-2023 Mattia Basaglia <dev@dragon.best> 0003 * 0004 * SPDX-License-Identifier: GPL-3.0-or-later 0005 */ 0006 0007 #include "draw_tool_base.hpp" 0008 0009 namespace glaxnimate::gui::tools { 0010 0011 /** 0012 * \brief Base class for drawing tools where you click and drag to draw the shape 0013 */ 0014 class DrawToolDrag : public DrawToolBase 0015 { 0016 protected: 0017 void mouse_press(const MouseEvent& event) override 0018 { 0019 if ( event.button() == Qt::LeftButton ) 0020 { 0021 dragging = false; 0022 p1 = p2 = event.scene_pos; 0023 on_drag_start(); 0024 } 0025 } 0026 0027 void mouse_move(const MouseEvent& event) override 0028 { 0029 if ( !dragging && event.press_button == Qt::LeftButton ) 0030 { 0031 dragging = true; 0032 } 0033 0034 if ( dragging ) 0035 { 0036 p2 = event.scene_pos; 0037 on_drag(event); 0038 event.repaint(); 0039 } 0040 } 0041 0042 void mouse_release(const MouseEvent& event) override 0043 { 0044 if ( event.button() == Qt::LeftButton ) 0045 { 0046 if ( dragging ) 0047 { 0048 dragging = false; 0049 on_drag_complete(event); 0050 event.repaint(); 0051 } 0052 else 0053 { 0054 edit_clicked(event); 0055 } 0056 } 0057 } 0058 0059 void mouse_double_click(const MouseEvent& event) override 0060 { 0061 edit_clicked(event); 0062 } 0063 void key_release(const KeyEvent& event) override { Q_UNUSED(event); } 0064 void disable_event(const Event& event) override { Q_UNUSED(event); } 0065 void enable_event(const Event& event) override { Q_UNUSED(event); } 0066 0067 virtual void on_drag_start() = 0; 0068 virtual void on_drag(const MouseEvent& event) = 0; 0069 virtual void on_drag_complete(const MouseEvent& event) = 0; 0070 0071 protected: 0072 bool dragging = false; 0073 QPointF p1; 0074 QPointF p2; 0075 0076 }; 0077 0078 0079 } // namespace glaxnimate::gui::tools