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