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