File indexing completed on 2025-02-23 04:08:57

0001 /*
0002  * SPDX-FileCopyrightText: 2007 Boudewijn Rempt <boud@valdyas.org>, (C)
0003  * SPDX-FileCopyrightText: 2015 Michael Abrahams <miabraha@gmail.com>
0004  *
0005  *  SPDX-License-Identifier: GPL-2.0-or-later
0006  */
0007 #ifndef _KIS_ABSTRACT_CANVAS_WIDGET_
0008 #define _KIS_ABSTRACT_CANVAS_WIDGET_
0009 
0010 class QWidget;
0011 class QRect;
0012 class QPainter;
0013 class QRect;
0014 
0015 class KoToolProxy;
0016 
0017 #include <kis_canvas_decoration.h>
0018 
0019 class KisDisplayFilter;
0020 class KisDisplayColorConverter;
0021 class QBitArray;
0022 class KoColorSpace;
0023 
0024 #include "kis_types.h"
0025 #include "kis_ui_types.h"
0026 #include "KisWraparoundAxis.h"
0027 
0028 class KisAbstractCanvasWidget
0029 {
0030 
0031 public:
0032 
0033     KisAbstractCanvasWidget() {}
0034 
0035     virtual ~KisAbstractCanvasWidget() {}
0036 
0037     virtual QWidget * widget() = 0;
0038 
0039     virtual KoToolProxy * toolProxy() const = 0;
0040 
0041     /// Draw the specified decorations on the view.
0042     virtual void drawDecorations(QPainter & gc, const QRect &updateWidgetRect) const = 0;
0043 
0044     virtual void addDecoration(KisCanvasDecorationSP deco) = 0;
0045     virtual void removeDecoration(const QString& id) = 0;
0046 
0047     virtual KisCanvasDecorationSP decoration(const QString& id) const = 0;
0048 
0049     virtual void setDecorations(const QList<KisCanvasDecorationSP> &) = 0;
0050 
0051     virtual QList<KisCanvasDecorationSP> decorations() const = 0;
0052 
0053     /// set the specified display filter on the canvas
0054     virtual void setDisplayFilter(QSharedPointer<KisDisplayFilter> displayFilter) = 0;
0055 
0056     /// set/update the color space of the attached image
0057     virtual void notifyImageColorSpaceChanged(const KoColorSpace *cs) = 0;
0058 
0059     virtual void setWrapAroundViewingMode(bool value) = 0;
0060     virtual bool wrapAroundViewingMode() const = 0;
0061 
0062     virtual void setWrapAroundViewingModeAxis(WrapAroundAxis value) = 0;
0063     virtual WrapAroundAxis wrapAroundViewingModeAxis() const = 0;
0064 
0065     // Called from KisCanvas2::channelSelectionChanged
0066     virtual void channelSelectionChanged(const QBitArray &channelFlags) = 0;
0067 
0068     // Called from KisCanvas2::slotSetDisplayProfile
0069     virtual void setDisplayColorConverter(KisDisplayColorConverter *colorConverter) = 0;
0070 
0071     // Called from KisCanvas2::finishResizingImage
0072     virtual void finishResizingImage(qint32 w, qint32 h) = 0;
0073 
0074     // Called from KisCanvas2::startUpdateProjection
0075     virtual KisUpdateInfoSP startUpdateCanvasProjection(const QRect & rc) = 0;
0076 
0077     // Called from KisCanvas2::updateCanvasProjection
0078     virtual QRect updateCanvasProjection(KisUpdateInfoSP info) = 0;
0079     virtual QVector<QRect> updateCanvasProjection(const QVector<KisUpdateInfoSP> &infoObjects) = 0;
0080 
0081     virtual void updateCanvasImage(const QRect &imageUpdateRect) = 0;
0082     virtual void updateCanvasDecorations(const QRect &decoUpdateRect) = 0;
0083 
0084     /**
0085      * Returns true if the asynchronous engine of the canvas
0086      * (e.g. openGL pipeline) is busy with processing of the previous
0087      * update events. This will make KisCanvas2 to postpone and
0088      * compress update events.
0089      */
0090     virtual bool isBusy() const = 0;
0091 
0092     virtual void setLodResetInProgress(bool value) = 0;
0093 };
0094 
0095 #endif // _KIS_ABSTRACT_CANVAS_WIDGET_