File indexing completed on 2024-06-23 04:28:04

0001 /*
0002  *  SPDX-FileCopyrightText: 2012 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef __MOVE_SELECTION_STROKE_STRATEGY_H
0008 #define __MOVE_SELECTION_STROKE_STRATEGY_H
0009 
0010 #include "kis_stroke_strategy_undo_command_based.h"
0011 #include "kis_types.h"
0012 #include "kis_selection.h"
0013 #include "kis_paint_layer.h"
0014 
0015 class KisPostExecutionUndoAdapter;
0016 class KisUpdatesFacade;
0017 
0018 
0019 class MoveSelectionStrokeStrategy : public QObject, public KisStrokeStrategyUndoCommandBased
0020 {
0021     Q_OBJECT
0022 
0023 public:
0024     struct ShowSelectionData : public KisStrokeJobData
0025     {
0026         ShowSelectionData(bool _showSelection)
0027             : KisStrokeJobData(),
0028               showSelection(_showSelection)
0029         {}
0030 
0031         KisStrokeJobData* createLodClone(int levelOfDetail) override;
0032 
0033         bool showSelection = false;
0034 
0035     protected:
0036         ShowSelectionData(const ShowSelectionData &rhs, int levelOfDetail);
0037     };
0038 
0039 public:
0040     MoveSelectionStrokeStrategy(KisPaintLayerSP paintLayer,
0041                                 KisSelectionSP selection,
0042                                 KisUpdatesFacade *updatesFacade,
0043                                 KisStrokeUndoFacade *undoFacade);
0044 
0045     void initStrokeCallback() override;
0046     void finishStrokeCallback() override;
0047     void cancelStrokeCallback() override;
0048     void doStrokeCallback(KisStrokeJobData *data) override;
0049 
0050 Q_SIGNALS:
0051     void sigHandlesRectCalculated(const QRect &handlesRect);
0052     void sigStrokeStartedEmpty();
0053 
0054 private:
0055     MoveSelectionStrokeStrategy(const MoveSelectionStrokeStrategy &rhs);
0056 
0057     KisStrokeStrategy* createLodClone(int levelOfDetail) override;
0058 
0059 private:
0060     KisPaintLayerSP m_paintLayer;
0061     KisSelectionSP m_selection;
0062     KisUpdatesFacade *m_updatesFacade;
0063     QPoint m_finalOffset;
0064     QPoint m_initialDeviceOffset;
0065     QPoint m_initialSelectionOffset;
0066 };
0067 
0068 #endif /* __MOVE_SELECTION_STROKE_STRATEGY_H */