File indexing completed on 2025-04-27 03:58:26
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2006-01-10 0007 * Description : a widget to display CIE tongue from an ICC profile. 0008 * 0009 * SPDX-FileCopyrightText: 2006-2024 by Gilles Caulier <caulier dot gilles at gmail dot com> 0010 * 0011 * SPDX-License-Identifier: GPL-2.0-or-later 0012 * 0013 * ============================================================ */ 0014 0015 #ifndef DIGIKAM_CIE_TONGUE_WIDGET_H 0016 #define DIGIKAM_CIE_TONGUE_WIDGET_H 0017 0018 // Qt includes 0019 0020 #include <QWidget> 0021 #include <QColor> 0022 #include <QPaintEvent> 0023 #include <QUrl> 0024 0025 // Local includes 0026 0027 #include "digikam-lcms.h" 0028 #include "digikam_export.h" 0029 0030 namespace Digikam 0031 { 0032 0033 class DIGIKAM_EXPORT CIETongueWidget : public QWidget 0034 { 0035 Q_OBJECT 0036 0037 public: 0038 0039 explicit CIETongueWidget(int w, int h, 0040 QWidget* const parent = nullptr, 0041 cmsHPROFILE hMonitor = nullptr); 0042 ~CIETongueWidget() override; 0043 0044 bool setProfileData(const QByteArray& profileData = QByteArray()); 0045 bool setProfileFromFile(const QUrl& file = QUrl()); 0046 0047 void loadingStarted(); 0048 void loadingFailed(); 0049 void uncalibratedColor(); 0050 0051 protected: 0052 0053 int grids(double val) const; 0054 0055 void outlineTongue(); 0056 void fillTongue(); 0057 void drawTongueAxis(); 0058 void drawTongueGrid(); 0059 void drawLabels(); 0060 0061 QRgb colorByCoord(double x, double y); 0062 void drawSmallElipse(LPcmsCIExyY xyY, BYTE r, BYTE g, BYTE b, int sz); 0063 0064 void resizeEvent(QResizeEvent* event) override; 0065 void paintEvent(QPaintEvent*) override; 0066 0067 private: 0068 0069 void drawColorantTriangle(); 0070 void drawWhitePoint(); 0071 void drawPatches(); 0072 void updatePixmap(); 0073 0074 void mapPoint(int& icx, int& icy, LPcmsCIExyY xyY); 0075 void biasedLine(int x1, int y1, int x2, int y2); 0076 void biasedText(int x, int y, const QString& txt); 0077 0078 void setProfile(cmsHPROFILE hProfile); 0079 0080 private Q_SLOTS: 0081 0082 void slotProgressTimerDone(); 0083 0084 private: 0085 0086 class Private; 0087 Private* const d; 0088 }; 0089 0090 } // namespace Digikam 0091 0092 #endif // DIGIKAM_CIE_TONGUE_WIDGET_H