File indexing completed on 2024-05-19 04:29:07

0001 /*
0002  * SPDX-FileCopyrightText: 2008 Sven Langkamp <sven.langkamp@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 
0007 #ifndef _KIS_SELECTION_DECORATION_H_
0008 #define _KIS_SELECTION_DECORATION_H_
0009 
0010 #include <QPainterPath>
0011 #include <QTimer>
0012 #include <QPolygon>
0013 #include <QPen>
0014 
0015 #include <kis_signal_compressor.h>
0016 #include "canvas/kis_canvas_decoration.h"
0017 
0018 class KisView;
0019 class QWindow;
0020 class QScreen;
0021 class KisScreenMigrationTracker;
0022 
0023 class KRITAUI_EXPORT KisSelectionDecoration : public KisCanvasDecoration
0024 {
0025     Q_OBJECT
0026 public:
0027     KisSelectionDecoration(QPointer<KisView> view);
0028     ~KisSelectionDecoration() override;
0029 
0030     enum Mode {
0031         Ants,
0032         Mask
0033     };
0034 
0035     Mode mode() const;
0036     void setMode(Mode mode);
0037     void setVisible(bool v) override;
0038 
0039     void notifyWindowMinimized(bool minimized) override;
0040 
0041 protected:
0042     void drawDecoration(QPainter& gc, const QRectF& updateRect, const KisCoordinatesConverter *converter,KisCanvas2* canvas) override;
0043 
0044 private Q_SLOTS:
0045     void slotStartUpdateSelection();
0046     void slotConfigChanged();
0047     void slotCanvasResourcesChanged(int key, const QVariant &v);
0048     void initializePens();
0049 
0050 public Q_SLOTS:
0051     void selectionChanged();
0052     void antsAttackEvent();
0053 private:
0054     bool selectionIsActive();
0055 
0056 private:
0057 
0058     KisSignalCompressor m_signalCompressor;
0059     QPainterPath m_outlinePath;
0060     QImage m_thumbnailImage;
0061     QTransform m_thumbnailImageTransform;
0062     QTimer* m_antsTimer;
0063     int m_offset;
0064 
0065     QPen m_antsPen;
0066     QPen m_outlinePen;
0067     Mode m_mode;
0068 
0069     qreal m_opacity;
0070 
0071     QColor m_maskColor;
0072     bool m_antialiasSelectionOutline;
0073 };
0074 
0075 #endif