Krita Source Code Documentation
Loading...
Searching...
No Matches
KoUnit.h
Go to the documentation of this file.
1/* This file is part of the KDE project
2 SPDX-FileCopyrightText: 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
3 SPDX-FileCopyrightText: 1998, 1999 Torben Weis <weis@kde.org>
4 SPDX-FileCopyrightText: 2004 Nicolas GOUTTE <goutte@kde.org>
5 SPDX-FileCopyrightText: 2010 Thomas Zander <zander@kde.org>
6 SPDX-FileCopyrightText: 2012 Friedrich W. H. Kossebau <kossebau@kde.org>
7
8 SPDX-License-Identifier: LGPL-2.0-or-later
9*/
10
11#ifndef KOUNIT_H
12#define KOUNIT_H
13
14#include "kritaglobal_export.h"
15
16#include <QString>
17#include <QDebug>
18#include <QMetaType>
19#include <QStringList>
20#include <QLocale>
21
22#include <math.h> // for floor
23#include <boost/operators.hpp>
24
25// 1 inch ^= 72 pt
26// 1 inch ^= 25.399956 mm (-pedantic ;p)
27// 1 pt = 1/12 pi
28// 1 pt ^= 0.0077880997 cc
29// 1 cc = 12 dd
30
31constexpr qreal POINT_TO_MM(qreal px) {return (px)*0.352777167;}
32constexpr qreal MM_TO_POINT(qreal mm) {return mm*2.83465058;}
33constexpr qreal POINT_TO_CM(qreal px) {return (px)*0.0352777167;}
34constexpr qreal CM_TO_POINT(qreal cm) {return (cm)*28.3465058;}
35constexpr qreal POINT_TO_DM(qreal px) {return (px)*0.00352777167;}
36constexpr qreal DM_TO_POINT(qreal dm) {return (dm)*283.465058;}
37constexpr qreal POINT_TO_INCH(qreal px) {return (px)*0.01388888888889;}
38constexpr qreal INCH_TO_POINT(qreal inch) {return (inch)*72.0;}
39constexpr qreal MM_TO_INCH(qreal mm) {return (mm)*0.039370147;}
40constexpr qreal INCH_TO_MM(qreal inch) {return (inch)*25.399956;}
41constexpr qreal POINT_TO_PI(qreal px) {return (px)*0.083333333;}
42constexpr qreal POINT_TO_CC(qreal px) {return (px)*0.077880997;}
43constexpr qreal PI_TO_POINT(qreal pi) {return (pi)*12;}
44constexpr qreal CC_TO_POINT(qreal cc) {return (cc)*12.840103;}
45
46
47static const qreal PT_ROUNDING {1000.0};
48//static const qreal PX_ROUNDING {1000.0}; // pixel value is not to be rounded
49
50static const qreal CM_ROUNDING {10000.0};
51static const qreal DM_ROUNDING {10000.0};
52static const qreal MM_ROUNDING {10000.0};
53
54static const qreal IN_ROUNDING {100000.0};
55
56static const qreal PI_ROUNDING {100000.0}; // pico
57static const qreal CC_ROUNDING {100000.0}; // cicero
58
59
70class KRITAGLOBAL_EXPORT KoUnit : public boost::equality_comparable<KoUnit>
71{
72public:
74 enum Type {
75 Millimeter = 0,
83 TypeCount
84 };
85
88 ListAll = 0,
89 HidePixel = 1,
90 HideMask = HidePixel
91 };
92 Q_DECLARE_FLAGS(ListOptions, ListOption)
93
94
95 static KoUnit fromListForUi(int index, ListOptions listOptions = ListAll, qreal factor = 1.0);
96
100 static KoUnit fromSymbol(const QString &symbol, bool *ok = 0);
101
103 explicit KoUnit(Type unit = Point, qreal factor = 1.0) {
104 m_type = unit;
105 m_pixelConversion = factor;
106 }
107
109 m_type = unit; m_pixelConversion = 1.0; return *this;
110 }
111
112 bool operator==(const KoUnit &other) const {
113 return m_type == other.m_type &&
114 (m_type != Pixel ||
115 qFuzzyCompare(m_pixelConversion, other.m_pixelConversion));
116 }
117
119 return m_type;
120 }
121
122 void setFactor(qreal factor) {
123 m_pixelConversion = factor;
124 }
125
126
130 static qreal convertFromUnitToUnit(const qreal value, const KoUnit &fromUnit, const KoUnit &toUnit, qreal factor = 1.0);
131
138 qreal toUserValueRounded(const qreal value) const;
144 qreal toUserValuePrecise(const qreal ptValue) const;
145
151 qreal toUserValue(qreal ptValue, bool rounding = true) const;
152
153
154
157 QString toUserStringValue(qreal ptValue) const;
158
161 qreal fromUserValue(qreal value) const;
162
168 qreal fromUserValue(const QString &value, bool *ok = 0) const;
169
171 static QString unitDescription(KoUnit::Type type);
172
174 QString symbol() const;
175
177 static QStringList listOfUnitNameForUi(ListOptions listOptions = ListAll);
178
181 int indexInListForUi(ListOptions listOptions = ListAll) const;
182
184 static qreal parseValue(const QString &value, qreal defaultVal = 0.0);
185
187 static qreal parseAngle(const QString &value, qreal defaultVal = 0.0);
188
189 QString toString() const {
190 return symbol();
191 }
192
202 static qreal approxTransformScale(const QTransform &t);
203
209 void adjustByPixelTransform(const QTransform &t);
210
211private:
214};
215
216#ifndef QT_NO_DEBUG_STREAM
217KRITAGLOBAL_EXPORT QDebug operator<<(QDebug, const KoUnit &);
218#endif
219
221Q_DECLARE_OPERATORS_FOR_FLAGS(KoUnit::ListOptions)
222
223#endif
float value(const T *src, size_t ch)
Q_DECLARE_FLAGS(KisUpdaterContextSnapshotEx, KisUpdaterContextSnapshotExTag)
constexpr qreal POINT_TO_CM(qreal px)
Definition KoUnit.h:33
constexpr qreal POINT_TO_DM(qreal px)
Definition KoUnit.h:35
constexpr qreal CC_TO_POINT(qreal cc)
Definition KoUnit.h:44
constexpr qreal POINT_TO_MM(qreal px)
Definition KoUnit.h:31
constexpr qreal POINT_TO_INCH(qreal px)
Definition KoUnit.h:37
constexpr qreal CM_TO_POINT(qreal cm)
Definition KoUnit.h:34
KRITAGLOBAL_EXPORT QDebug operator<<(QDebug, const KoUnit &)
Definition KoUnit.cpp:398
static const qreal IN_ROUNDING
Definition KoUnit.h:54
static const qreal PT_ROUNDING
Definition KoUnit.h:47
constexpr qreal INCH_TO_POINT(qreal inch)
Definition KoUnit.h:38
static const qreal MM_ROUNDING
Definition KoUnit.h:52
constexpr qreal POINT_TO_PI(qreal px)
Definition KoUnit.h:41
static const qreal CM_ROUNDING
Definition KoUnit.h:50
static const qreal DM_ROUNDING
Definition KoUnit.h:51
constexpr qreal PI_TO_POINT(qreal pi)
Definition KoUnit.h:43
constexpr qreal INCH_TO_MM(qreal inch)
Definition KoUnit.h:40
constexpr qreal MM_TO_INCH(qreal mm)
Definition KoUnit.h:39
constexpr qreal POINT_TO_CC(qreal px)
Definition KoUnit.h:42
constexpr qreal MM_TO_POINT(qreal mm)
Definition KoUnit.h:32
static const qreal CC_ROUNDING
Definition KoUnit.h:57
static const qreal PI_ROUNDING
Definition KoUnit.h:56
constexpr qreal DM_TO_POINT(qreal dm)
Definition KoUnit.h:36
KoUnit & operator=(Type unit)
Definition KoUnit.h:108
qreal m_pixelConversion
Definition KoUnit.h:213
bool operator==(const KoUnit &other) const
Definition KoUnit.h:112
Type m_type
Definition KoUnit.h:212
QString toString() const
Definition KoUnit.h:189
ListOption
Used to control the scope of the unit types listed in the UI.
Definition KoUnit.h:87
KoUnit::Type type() const
Definition KoUnit.h:118
KoUnit(Type unit=Point, qreal factor=1.0)
Definition KoUnit.h:103
@ Point
Postscript point, 1/72th of an Inco.
Definition KoUnit.h:76
@ Centimeter
Definition KoUnit.h:78
@ Decimeter
Definition KoUnit.h:79
@ Pica
Definition KoUnit.h:80
@ Inch
Definition KoUnit.h:77
@ Pixel
Definition KoUnit.h:82
@ Cicero
Definition KoUnit.h:81
void setFactor(qreal factor)
Definition KoUnit.h:122
static bool qFuzzyCompare(half p1, half p2)
Q_DECLARE_OPERATORS_FOR_FLAGS(KisBaseRectsWalker::SubtreeVisitFlags)
Q_DECLARE_METATYPE(KisPaintopLodLimitations)