1 /*
2 SPDX-FileCopyrightText: 2018 Michail Vourlakos <mvourlakos@gmail.com>
3 SPDX-License-Identifier: GPL-2.0-or-later
4
5 */
6
7 #include "commontools.h"
8
9 // Qt
10 #include <QDir>
11 #include <QFileInfo>
12 #include <QStandardPaths>
13 #include <QStringList>
14 #include <QtMath>
15
16 namespace Latte {
17
colorBrightness(QColor color)18 float colorBrightness(QColor color)
19 {
20 return colorBrightness(color.red(), color.green(), color.blue());
21 }
22
colorBrightness(QRgb rgb)23 float colorBrightness(QRgb rgb)
24 {
25 return colorBrightness(qRed(rgb), qGreen(rgb), qBlue(rgb));
26 }
27
colorBrightness(float r,float g,float b)28 float colorBrightness(float r, float g, float b)
29 {
30 float brightness = (r * 299 + g * 587 + b * 114) / 1000;
31
32 return brightness;
33 }
34
35
colorLumina(QRgb rgb)36 float colorLumina(QRgb rgb)
37 {
38 float r = (float)(qRed(rgb)) / 255;
39 float g = (float)(qGreen(rgb)) / 255;
40 float b = (float)(qBlue(rgb)) / 255;
41
42 return colorLumina(r, g, b);
43 }
44
colorLumina(QColor color)45 float colorLumina(QColor color)
46 {
47 return colorLumina(color.redF(), color.greenF(), color.blueF());
48 }
49
colorLumina(float r,float g,float b)50 float colorLumina(float r, float g, float b)
51 {
52 // formula for luminance according to:
53 // https://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef
54
55 float rS = (r <= 0.03928 ? r / 12.92 : qPow(((r + 0.055) / 1.055), 2.4));
56 float gS = (g <= 0.03928 ? g / 12.92 : qPow(((g + 0.055) / 1.055), 2.4));
57 float bS = (b <= 0.03928 ? b / 12.92 : qPow(((b + 0.055) / 1.055), 2.4));
58
59 float luminosity = 0.2126 * rS + 0.7152 * gS + 0.0722 * bS;
60
61 return luminosity;
62 }
63
rectToString(const QRect & rect)64 QString rectToString(const QRect &rect)
65 {
66 QString result;
67 result += QString(QString::number(rect.x()) + "," + QString::number(rect.y()));
68 result += " ";
69 result += QString(QString::number(rect.width()) + "x" + QString::number(rect.height()));
70
71 return result;
72 }
73
stringToRect(const QString & str)74 QRect stringToRect(const QString &str)
75 {
76 QStringList parts = str.split(" ");
77 QStringList pos = parts[0].split(",");
78 QStringList size = parts[1].split("x");
79 return QRect(pos[0].toInt(), pos[1].toInt(), size[0].toInt(), size[1].toInt());
80 }
81
standardPath(QString subPath,bool localfirst)82 QString standardPath(QString subPath, bool localfirst)
83 {
84 QStringList paths = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation);
85
86 QString separator = subPath.startsWith("/") ? "" : "/";
87
88 if (localfirst) {
89 for (const auto &pt : paths) {
90 QString ptF = pt + separator +subPath;
91 if (QFileInfo(ptF).exists()) {
92 return ptF;
93 }
94 }
95 } else {
96 for (int i=paths.count()-1; i>=0; i--) {
97 QString ptF = paths[i] + separator +subPath;
98 if (QFileInfo(ptF).exists()) {
99 return ptF;
100 }
101 }
102 }
103
104 //! in any case that above fails
105 if (QFileInfo("/usr/share" + separator + subPath).exists()) {
106 return "/usr/share" + separator + subPath;
107 }
108
109 return "";
110 }
111
configPath()112 QString configPath()
113 {
114 QStringList configPaths = QStandardPaths::standardLocations(QStandardPaths::ConfigLocation);
115
116 if (configPaths.count() == 0) {
117 return QDir::homePath() + "/.config";
118 }
119
120 return configPaths[0];
121 }
122
123
124 }
125