8#include "colordialog.h"
10#include "constpropagatingrawpointer.h"
11#include "genericcolor.h"
13#include "helperconversion.h"
14#include "helperqttypes.h"
15#include "languagechangeeventfilter.h"
16#include "perceptualsettings.h"
20#include <qbytearray.h>
26#include <qsharedpointer.h>
28#include <qstringliteral.h>
44#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
45#include <qtmetamacros.h>
47#include <qobjectdefs.h>
64class ColorDialogPrivate final :
public QObject
68 explicit ColorDialogPrivate(ColorDialog *backLink);
73 virtual ~ColorDialogPrivate() noexcept override = default;
76 static constexpr QListSizeType historyHSwatchCount = 10;
78 static constexpr QListSizeType historyVSwatchCount = 4;
80 static constexpr QListSizeType historySwatchCount =
81 historyHSwatchCount * historyVSwatchCount;
84 static constexpr QListSizeType customColorsHSwatchCount = 9;
86 static constexpr QListSizeType customColorsVSwatchCount = 4;
88 static constexpr QListSizeType customColorsSwatchCount =
89 historyHSwatchCount * historyVSwatchCount;
92 QPointer<GradientSlider> m_alphaGradientSlider;
96 QPointer<QLabel> m_alphaLabel;
103 QPointer<QDoubleSpinBox> m_alphaSpinBox;
108 QPointer<QDialogButtonBox> m_buttonBox;
110 QPointer<QPushButton> m_buttonCancel;
112 QPointer<QPushButton> m_buttonOK;
114 QPointer<ChromaHueDiagram> m_chromaHueDiagram;
116 QPointer<MultiSpinBox> m_cielchD50SpinBox;
118 QPointer<QAction> m_cielchD50SpinBoxGamutAction;
120 QPointer<QLabel> m_cielchD50SpinBoxLabel;
122 QPointer<ColorPatch> m_colorPatch;
137 QHash<
ColorModel, GenericColor> m_currentOpaqueColorAbs;
146 RgbColor m_currentOpaqueColorRgb;
148 bool everShown = false;
150 QPointer<MultiSpinBox> m_hslSpinBox;
152 QPointer<QLabel> m_hslSpinBoxLabel;
154 QPointer<MultiSpinBox> m_hsvSpinBox;
156 QPointer<QLabel> m_hsvSpinBoxLabel;
158 QPointer<MultiSpinBox> m_hwbSpinBox;
160 QPointer<QLabel> m_hwbSpinBoxLabel;
162 QPointer<QShortcut> m_hueFirstTabShortcut;
165 QPointer<QWidget> m_hueFirstWrapperWidget;
171 bool m_isColorChangeInProgress = false;
176 bool m_isDirtyRgbLineEdit = false;
178 LanguageChangeEventFilter m_languageChangeEventFilter;
181 PerceptualColor::ColorDialog::DialogLayoutDimensions m_layoutDimensions =
183 ColorDialog::DialogLayoutDimensions::Collapsed
194 PerceptualColor::ColorDialog::DialogLayoutDimensions m_layoutDimensionsEffective = m_layoutDimensions;
196 QPointer<QShortcut> m_lightnessFirstTabShortcut;
199 QPointer<QWidget> m_lightnessFirstWrapperWidget;
201 QPointer<GradientSlider> m_lchLightnessSelector;
209 QByteArray m_memberToBeDisconnected;
215 static inline const QString m_multispinboxSectionSeparator = QStringLiteral(u
" ");
217 QPointer<QShortcut> m_numericalTabShortcut;
220 QPointer<QWidget> m_numericalWidget;
222 QPointer<MultiSpinBox> m_oklchSpinBox;
224 QPointer<QAction> m_oklchSpinBoxGamutAction;
226 QPointer<QLabel> m_oklchSpinBoxLabel;
228 QPointer<PerceptualColor::SwatchBook> m_swatchBookBasicColors;
230 QPointer<PerceptualColor::SwatchBook> m_swatchBookCustomColors;
232 QPointer<PerceptualColor::SwatchBook> m_swatchBookHistory;
236 QPointer<QComboBox> m_swatchBookSelector;
240 QPointer<QStackedLayout> m_swatchBookStack;
242 QPointer<QShortcut> m_swatchBookTabShortcut;
245 QPointer<QWidget> m_swatchBookWrapperWidget;
251 QPointer<
QObject> m_receiverToBeDisconnected;
253 ColorDialog::ColorDialogOptions m_options;
255 QSharedPointer<RgbColorSpace> m_rgbColorSpace;
258 QPointer<QGroupBox> m_rgbGroupBox;
261 QPointer<QLineEdit> m_rgbLineEdit;
263 QPointer<QLabel> m_rgbLineEditLabel;
265 QPointer<MultiSpinBox> m_rgbSpinBox;
267 QPointer<QLabel> m_rgbSpinBoxLabel;
269 QColor m_selectedColor;
271 QPointer<QHBoxLayout> m_selectorLayout;
273 PerceptualSettings &m_settings = PerceptualSettings::instance();
276 QPointer<QToolButton> m_screenColorPickerButton;
282 const QString tableRow = QStringLiteral(u
"<tr><td>%1</td><td>%2</td></tr>");
287 QHash<QPointer<QWidget> *, QString> m_tabTable;
289 QPointer<QTabWidget> m_tabWidget;
302 QColor m_wcsBasicDefaultColor;
304 QPointer<WheelColorPicker> m_wheelColorPicker;
309 static constexpr quint8 decimals = 0;
314 static constexpr quint8 okdecimals = decimals + 2;
316 void applyLayoutDimensions();
317 [[nodiscard]] QColor defaultColor() const;
318 void initialize(const QSharedPointer<PerceptualColor::RgbColorSpace> &colorSpace);
319 [[nodiscard]] QWidget *initializeNumericPage();
320 void initializeScreenColorPicker();
321 void loadCustomColorsFromSettingsToSwatchBook();
322 void loadHistoryFromSettingsToSwatchBook();
323 [[nodiscard]] QString translateColorModel(cmsColorSpaceSignature model);
326 void readChromaHueDiagramValue();
327 void readColorPatchValue();
328 void readHslNumericValues();
329 void readHsvNumericValues();
330 void readHwbNumericValues();
331 void readLchNumericValues();
332 void readLightnessValue();
333 void readOklchNumericValues();
334 void readRgbHexValues();
335 void readRgbNumericValues();
336 void readSwatchBookBasicColorsValue();
337 void readSwatchBookCustomColorsValue();
338 void readSwatchBookHistoryValue();
339 void readWheelColorPickerValues();
341 void retranslateUi();
342 void saveCurrentTab();
343 void setCurrentOpaqueColor(const QHash<PerceptualColor::
ColorModel, PerceptualColor::GenericColor> &abs, QWidget *const ignoreWidget);
344 void setCurrentOpaqueColor(const PerceptualColor::RgbColor &rgb, QWidget *const ignoreWidget);
345 void setCurrentOpaqueColor(const QHash<PerceptualColor::
ColorModel, PerceptualColor::GenericColor> &abs,
346 const PerceptualColor::RgbColor &rgb,
347 QWidget *const ignoreWidget);
348 void updateColorPatch();
349 void updateLchButBlockSignals();
350 void updateOklchButBlockSignals();
351 void updateRgbHexButBlockSignals();
354 Q_DISABLE_COPY(ColorDialogPrivate)
358 ConstPropagatingRawPointer<ColorDialog> q_pointer;
A widget for selecting chroma and hue in LCH color space.
A slider who’s groove displays an LCH color gradient.
A spin box that can hold multiple sections (each with its own value) at the same time.
Complete wheel-based color picker widget.
The namespace of this library.
Array2D< QColor > Swatches
Swatches organized in a grid.
ColorSchemeType
Represents the appearance of a theme.
ColorModel
Identifiers for color models.