File indexing completed on 2024-05-26 04:32:50

0001 /*
0002  * SPDX-FileCopyrightText: 2021 Mathias Wein <lynx.mw+kde@gmail.com>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #ifndef WGSELECTORWIDGETBASE_H
0008 #define WGSELECTORWIDGETBASE_H
0009 
0010 #include <kis_display_color_converter.h>
0011 #include <KisVisualColorModel.h>
0012 #include <QPointer>
0013 #include <QSharedPointer>
0014 #include <QWidget>
0015 
0016 class WGSelectorDisplayConfig : public QObject
0017 {
0018     Q_OBJECT
0019 public:
0020     WGSelectorDisplayConfig() = default;
0021     ~WGSelectorDisplayConfig() = default;
0022     const KisDisplayColorConverter *displayConverter() const;
0023     void setDisplayConverter(const KisDisplayColorConverter *converter);
0024 
0025     bool previewInPaintingCS() const { return m_previewInPaintingCS; }
0026     void setPreviewInPaintingCS(bool enabled);
0027 Q_SIGNALS:
0028     void sigDisplayConfigurationChanged();
0029 private:
0030     QPointer<const KisDisplayColorConverter> m_displayConverter;
0031     bool m_previewInPaintingCS {false};
0032 };
0033 
0034 typedef QSharedPointer<WGSelectorDisplayConfig> WGSelectorDisplayConfigSP;
0035 
0036 class WGSelectorWidgetBase : public QWidget
0037 {
0038     Q_OBJECT
0039 public:
0040     enum UiMode {
0041         DockerMode,
0042         PopupMode
0043     };
0044 
0045     explicit WGSelectorWidgetBase(WGSelectorDisplayConfigSP displayConfig, QWidget *parent = nullptr, UiMode uiMode = UiMode::DockerMode);
0046     UiMode uiMode() const;
0047     void setUiMode(UiMode mode);
0048     WGSelectorDisplayConfigSP displayConfiguration() const;
0049     const KisDisplayColorConverter *displayConverter() const;
0050     /*!
0051      * \brief The position, relative to the top left corner, where the cursor
0052      *        of the cursor shall be when showing the popup.
0053      *
0054      * The default implementation returns the widget center.
0055      * \return desired cursor position relative to the top left corner
0056      */
0057     virtual QPoint popupOffset() const;
0058     virtual void setModel(KisVisualColorModelSP model);
0059     virtual void updateSettings();
0060 
0061 Q_SIGNALS:
0062     void sigColorInteraction(bool active);
0063     void sigChannelValuesChanged(const QVector4D &values);
0064 private:
0065     QPointer<const KisDisplayColorConverter> m_converter;
0066     WGSelectorDisplayConfigSP m_displayConfig;
0067     UiMode m_uiMode {DockerMode};
0068 };
0069 
0070 #endif // WGSELECTORWIDGETBASE_H