1 /*
2 For general Scribus (>=1.3.2) copyright and licensing information please refer
3 to the COPYING file provided with the program. Following this notice may exist
4 a copyright and/or license notice that predates the release of Scribus 1.3.2
5 for which a new license (GPL+exception) is in place.
6 */
7 
8 #ifndef SCE308TABLES_H
9 #define SCE308TABLES_H
10 
11 #include <QMap>
12 #include <QVector>
13 
14 #include "sccolormgmtstructs.h"
15 
16 class ScE308Table
17 {
18 public:
~ScE308Table()19 	virtual ~ScE308Table() {}
20 
21 	// Illuminant and observer for which this table is to be used
22 	virtual eIlluminant illuminant() const = 0;
23 	virtual eObserver   observer() const = 0;
24 
25 	virtual int wavelengthStart() const = 0;
26 	virtual int wavelengthIncrement() const = 0;
27 
28 	// Wavelengths represented in the data set
29 	QVector<int> wavelengths() const;
30 
wX(int waveLen)31 	double wX(int waveLen) const { return m_wx.value(waveLen, 0.0); }
wY(int waveLen)32 	double wY(int waveLen) const { return m_wy.value(waveLen, 0.0); }
wZ(int waveLen)33 	double wZ(int waveLen) const { return m_wz.value(waveLen, 0.0); }
34 
weightsX()35 	const QMap<int, double>& weightsX() const { return m_wx; }
weightsY()36 	const QMap<int, double>& weightsY() const { return m_wy; }
weightsZ()37 	const QMap<int, double>& weightsZ() const { return m_wz; }
38 
39 protected:
40 	// Weights for computing CIEXYZ X coordinate
41 	QMap<int, double> m_wx;
42 
43 	// Weights for computing CIEXYZ Y coordinate
44 	QMap<int, double> m_wy;
45 
46 	// Weights for computing CIEXYZ Z coordinate
47 	QMap<int, double> m_wz;
48 };
49 
50 class ScE308Table5_D50_2deg : public ScE308Table
51 {
52 public:
53 	ScE308Table5_D50_2deg();
54 
illuminant()55 	virtual eIlluminant illuminant() const { return Illuminant_D50; }
observer()56 	virtual eObserver   observer()   const { return Observer_2deg; }
57 
wavelengthStart()58 	virtual int wavelengthStart() const { return 360; }
wavelengthIncrement()59 	virtual int wavelengthIncrement() const { return 10; }
60 };
61 
62 class ScE308Table5_D50_10deg : public ScE308Table
63 {
64 public:
65 	ScE308Table5_D50_10deg();
66 
illuminant()67 	virtual eIlluminant illuminant() const { return Illuminant_D50; }
observer()68 	virtual eObserver   observer()   const { return Observer_10deg; }
69 
wavelengthStart()70 	virtual int wavelengthStart() const { return 360; }
wavelengthIncrement()71 	virtual int wavelengthIncrement() const { return 10; }
72 };
73 
74 class ScE308Table6_D50_2deg : public ScE308Table
75 {
76 public:
77 	ScE308Table6_D50_2deg();
78 
illuminant()79 	virtual eIlluminant illuminant() const { return Illuminant_D50; }
observer()80 	virtual eObserver   observer()   const { return Observer_2deg; }
81 
wavelengthStart()82 	virtual int wavelengthStart() const { return 360; }
wavelengthIncrement()83 	virtual int wavelengthIncrement() const { return 10; }
84 };
85 
86 class ScE308Table6_D50_10deg : public ScE308Table
87 {
88 public:
89 	ScE308Table6_D50_10deg();
90 
illuminant()91 	virtual eIlluminant illuminant() const { return Illuminant_D50; }
observer()92 	virtual eObserver   observer()   const { return Observer_10deg; }
93 
wavelengthStart()94 	virtual int wavelengthStart() const { return 360; }
wavelengthIncrement()95 	virtual int wavelengthIncrement() const { return 10; }
96 };
97 
98 #endif
99