1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152 | /* ============================================================
*
* This file is a part of digiKam project
* https://www.digikam.org
*
* Date : 2023-05-15
* Description : geolocation engine based on Marble.
* (c) 2007-2022 Marble Team
* https://invent.kde.org/education/marble/-/raw/master/data/credits_authors.html
*
* SPDX-FileCopyrightText: 2023-2026 by Gilles Caulier <caulier dot gilles at gmail dot com>
*
* SPDX-License-Identifier: LGPL-2.1-or-later
*
* ============================================================ */
#include "GeoDataColorStyle.h"
// C++ includes
#include <cstdlib>
// Qt includes
#include <QDataStream>
#include <QColor>
#include <QRandomGenerator>
// Local includes
#include "GeoDataTypes.h"
namespace Marble
{
class Q_DECL_HIDDEN GeoDataColorStylePrivate
{
public:
GeoDataColorStylePrivate()
: m_color(Qt::white),
m_colorMode(GeoDataColorStyle::Normal)
{
}
/// stores the current color
QColor m_color;
/// stores random color
QColor m_randomColor;
/// stores the current color mode
GeoDataColorStyle::ColorMode m_colorMode;
};
GeoDataColorStyle::GeoDataColorStyle()
: d(new GeoDataColorStylePrivate)
{
}
GeoDataColorStyle::GeoDataColorStyle(const GeoDataColorStyle& other)
: GeoDataObject(other),
d(new GeoDataColorStylePrivate(*other.d))
{
}
GeoDataColorStyle::~GeoDataColorStyle()
{
delete d;
}
GeoDataColorStyle& GeoDataColorStyle::operator=(const GeoDataColorStyle& other)
{
GeoDataObject::operator=(other);
*d = *other.d;
return *this;
}
bool GeoDataColorStyle::operator==(const GeoDataColorStyle& other) const
{
return equals(other) && d->m_color == other.d->m_color &&
d->m_colorMode == other.d->m_colorMode;
}
bool GeoDataColorStyle::operator!=(const GeoDataColorStyle& other) const
{
return !this->operator==(other);
}
const char* GeoDataColorStyle::nodeType() const
{
return GeoDataTypes::GeoDataColorStyleType;
}
void GeoDataColorStyle::setColor(const QColor& value)
{
d->m_color = value;
qreal red = d->m_color.redF();
qreal green = d->m_color.greenF();
qreal blue = d->m_color.blueF();
d->m_randomColor = d->m_color;
qreal const randMax = RAND_MAX;
d->m_randomColor.setRedF(red * (QRandomGenerator::global()->generate() / randMax));
d->m_randomColor.setGreenF(green * (QRandomGenerator::global()->generate() / randMax));
d->m_randomColor.setBlueF(blue * (QRandomGenerator::global()->generate() / randMax));
}
QColor GeoDataColorStyle::color() const
{
return d->m_color;
}
QColor GeoDataColorStyle::paintedColor() const
{
return d->m_colorMode == Normal ? d->m_color : d->m_randomColor;
}
void GeoDataColorStyle::setColorMode(ColorMode colorMode)<--- Shadow argument
{
d->m_colorMode = colorMode;
}
GeoDataColorStyle::ColorMode GeoDataColorStyle::colorMode() const
{
return d->m_colorMode;
}
void GeoDataColorStyle::pack(QDataStream& stream) const
{
GeoDataObject::pack(stream);
stream << d->m_color;
// FIXME: Why is not colorMode saved?
// stream << m_colorMode;
}
void GeoDataColorStyle::unpack(QDataStream& stream)
{
GeoDataObject::unpack(stream);
stream >> d->m_color;
// FIXME: Why is not colorMode saved?
// stream >> m_colorMode;
}
QString Marble::GeoDataColorStyle::contrastColor(const QColor& color)
{
return color.valueF() > 0.85 ? QStringLiteral("black") : QStringLiteral("white");
}
} // namespace Marble
|