[kde-doc-english] [trojita] src/Gui: GUI: add support for color tinting

Jan Kundrát jkt at flaska.net
Wed May 1 15:31:39 UTC 2013


Git commit a3c58a129192ee2f152f69548e824d8e83a691cd by Jan Kundrát.
Committed on 01/05/2013 at 17:21.
Pushed by jkt into branch 'master'.

GUI: add support for color tinting

The idea was suggested by Thomas Lübking, the implementation is shamelessly
stolen from Qt5's qtquick1 module (src/declarative/qml/qdeclarativeengine.cpp,
the usual Qt licensing).

M  +24   -0    src/Gui/Util.cpp
M  +3    -0    src/Gui/Util.h

http://commits.kde.org/trojita/a3c58a129192ee2f152f69548e824d8e83a691cd

diff --git a/src/Gui/Util.cpp b/src/Gui/Util.cpp
index dab9bac..a1ec6de 100644
--- a/src/Gui/Util.cpp
+++ b/src/Gui/Util.cpp
@@ -68,6 +68,30 @@ QString pkgDataDir()
 #endif
 }
 
+/** @short Return the source color tinted with the tintColor
+
+This is shamelessly stolen from Qt5's qtquick1 module.
+*/
+QColor tintColor(const QColor &color, const QColor &tintColor)
+{
+    QColor finalColor;
+    int a = tintColor.alpha();
+    if (a == 0xff) {
+        finalColor = tintColor;
+    } else if (a == 0x00) {
+        finalColor = color;
+    } else {
+        qreal a = tintColor.alphaF();
+        qreal inv_a = 1.0 - a;
+
+        finalColor.setRgbF(tintColor.redF() * a + color.redF() * inv_a,
+                           tintColor.greenF() * a + color.greenF() * inv_a,
+                           tintColor.blueF() * a + color.blueF() * inv_a,
+                           a + inv_a * color.alphaF());
+    }
+    return finalColor;
+}
+
 } // namespace Util
 
 } // namespace Gui
diff --git a/src/Gui/Util.h b/src/Gui/Util.h
index 56cd3a1..9e68c92 100644
--- a/src/Gui/Util.h
+++ b/src/Gui/Util.h
@@ -26,6 +26,7 @@
 
 #include <QString>
 
+class QColor;
 class QWidget;
 
 namespace Gui
@@ -39,6 +40,8 @@ void centerWidgetOnScreen(QWidget *widget, bool centerOnCursorScreen=true);
 
 QString pkgDataDir();
 
+QColor tintColor(const QColor &color, const QColor &tintColor);
+
 } // namespace Util
 
 } // namespace Gui



More information about the kde-doc-english mailing list