summaryrefslogtreecommitdiffstats
path: root/application/ColorCache.h
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2015-08-20 01:49:03 +0200
committerPetr Mrázek <peterix@gmail.com>2015-08-20 01:49:03 +0200
commitd0e88011dc025a1e68964a9363cece66c677969f (patch)
treec8f2701fb0c959ba4fc63c0e447ee71722002096 /application/ColorCache.h
parent6858f1dd6294a93c1e1ec8007cb0434b53646488 (diff)
downloadMultiMC-d0e88011dc025a1e68964a9363cece66c677969f.tar
MultiMC-d0e88011dc025a1e68964a9363cece66c677969f.tar.gz
MultiMC-d0e88011dc025a1e68964a9363cece66c677969f.tar.lz
MultiMC-d0e88011dc025a1e68964a9363cece66c677969f.tar.xz
MultiMC-d0e88011dc025a1e68964a9363cece66c677969f.zip
GH-1197 finish color stuff
Diffstat (limited to 'application/ColorCache.h')
-rw-r--r--application/ColorCache.h119
1 files changed, 119 insertions, 0 deletions
diff --git a/application/ColorCache.h b/application/ColorCache.h
new file mode 100644
index 00000000..9d5ad02b
--- /dev/null
+++ b/application/ColorCache.h
@@ -0,0 +1,119 @@
+#pragma once
+#include <QtGui/QColor>
+#include <rainbow.h>
+#include <launch/MessageLevel.h>
+#include <QMap>
+
+class ColorCache
+{
+public:
+ ColorCache(QColor front, QColor back, qreal bias)
+ {
+ m_front = front;
+ m_back = back;
+ m_bias = bias;
+ };
+
+ void addColor(int key, QColor color)
+ {
+ m_colors[key] = {color, blend(color), blendBackground(color)};
+ }
+
+ void setForeground(QColor front)
+ {
+ if(m_front != front)
+ {
+ m_front = front;
+ recolorAll();
+ }
+ }
+
+ void setBackground(QColor back)
+ {
+ if(m_back != back)
+ {
+ m_back = back;
+ recolorAll();
+ }
+ }
+
+ QColor getFront(int key)
+ {
+ auto iter = m_colors.find(key);
+ if(iter == m_colors.end())
+ {
+ return QColor();
+ }
+ return (*iter).front;
+ }
+
+ QColor getBack(int key)
+ {
+ auto iter = m_colors.find(key);
+ if(iter == m_colors.end())
+ {
+ return QColor();
+ }
+ return (*iter).back;
+ }
+
+ /**
+ * Blend the color with the front color, adapting to the back color
+ */
+ QColor blend(QColor color);
+
+ /**
+ * Blend the color with the back color
+ */
+ QColor blendBackground(QColor color);
+
+protected:
+ void recolorAll();
+
+protected:
+ struct ColorEntry
+ {
+ QColor original;
+ QColor front;
+ QColor back;
+ };
+
+protected:
+ qreal m_bias;
+ QColor m_front;
+ QColor m_back;
+ QMap<int, ColorEntry> m_colors;
+};
+
+class LogColorCache : public ColorCache
+{
+public:
+ LogColorCache(QColor front, QColor back)
+ : ColorCache(front, back, 1.0)
+ {
+ addColor((int)MessageLevel::MultiMC, QColor("purple"));
+ addColor((int)MessageLevel::Debug, QColor("green"));
+ addColor((int)MessageLevel::Warning, QColor("orange"));
+ addColor((int)MessageLevel::Error, QColor("red"));
+ addColor((int)MessageLevel::Fatal, QColor("red"));
+ addColor((int)MessageLevel::Message, front);
+ }
+
+ QColor getFront(MessageLevel::Enum level)
+ {
+ if(!m_colors.contains((int) level))
+ {
+ return ColorCache::getFront((int)MessageLevel::Message);
+ }
+ return ColorCache::getFront((int)level);
+ }
+
+ QColor getBack(MessageLevel::Enum level)
+ {
+ if(level == MessageLevel::Fatal)
+ {
+ return QColor(Qt::black);
+ }
+ return QColor(Qt::transparent);
+ }
+};