From d0e88011dc025a1e68964a9363cece66c677969f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Thu, 20 Aug 2015 01:49:03 +0200 Subject: GH-1197 finish color stuff --- application/ColorCache.h | 119 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 application/ColorCache.h (limited to 'application/ColorCache.h') 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 +#include +#include +#include + +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 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); + } +}; -- cgit v1.2.3