GH-1197 finish color stuff
This commit is contained in:
parent
6858f1dd62
commit
d0e88011dc
@ -129,8 +129,8 @@ SET(MULTIMC_SOURCES
|
||||
InstanceProxyModel.cpp
|
||||
VersionProxyModel.h
|
||||
VersionProxyModel.cpp
|
||||
Colors.h
|
||||
Colors.cpp
|
||||
ColorCache.h
|
||||
ColorCache.cpp
|
||||
|
||||
# GUI - windows
|
||||
MainWindow.h
|
||||
|
35
application/ColorCache.cpp
Normal file
35
application/ColorCache.cpp
Normal file
@ -0,0 +1,35 @@
|
||||
#include "ColorCache.h"
|
||||
|
||||
|
||||
/**
|
||||
* Blend the color with the front color, adapting to the back color
|
||||
*/
|
||||
QColor ColorCache::blend(QColor color)
|
||||
{
|
||||
if (Rainbow::luma(m_front) > Rainbow::luma(m_back))
|
||||
{
|
||||
// for dark color schemes, produce a fitting color first
|
||||
color = Rainbow::tint(m_front, color, 0.5);
|
||||
}
|
||||
// adapt contrast
|
||||
return Rainbow::mix(m_front, color, m_bias);
|
||||
}
|
||||
|
||||
/**
|
||||
* Blend the color with the back color
|
||||
*/
|
||||
QColor ColorCache::blendBackground(QColor color)
|
||||
{
|
||||
// adapt contrast
|
||||
return Rainbow::mix(m_back, color, m_bias);
|
||||
}
|
||||
|
||||
void ColorCache::recolorAll()
|
||||
{
|
||||
auto iter = m_colors.begin();
|
||||
while(iter != m_colors.end())
|
||||
{
|
||||
iter->front = blend(iter->original);
|
||||
iter->back = blendBackground(iter->original);
|
||||
}
|
||||
}
|
119
application/ColorCache.h
Normal file
119
application/ColorCache.h
Normal file
@ -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);
|
||||
}
|
||||
};
|
@ -1,26 +0,0 @@
|
||||
#include "Colors.h"
|
||||
|
||||
/**
|
||||
* Blend the color with the front color, adapting to the back color
|
||||
*/
|
||||
QColor Color::blend(QColor front, QColor back, QColor color, uchar ratio)
|
||||
{
|
||||
Q_ASSERT(front.isValid());
|
||||
Q_ASSERT(back.isValid());
|
||||
if (Rainbow::luma(front) > Rainbow::luma(back))
|
||||
{
|
||||
// for dark color schemes, produce a fitting color first
|
||||
color = Rainbow::tint(front, color, 0.5);
|
||||
}
|
||||
// adapt contrast
|
||||
return Rainbow::mix(front, color, float(ratio) / float(0xff));
|
||||
}
|
||||
|
||||
/**
|
||||
* Blend the color with the back color
|
||||
*/
|
||||
QColor Color::blendBackground(QColor back, QColor color, uchar ratio)
|
||||
{
|
||||
// adapt contrast
|
||||
return Rainbow::mix(back, color, float(ratio) / float(0xff));
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
#pragma once
|
||||
#include <QtGui/QColor>
|
||||
#include <rainbow.h>
|
||||
namespace Color
|
||||
{
|
||||
/**
|
||||
* Blend the color with the front color, adapting to the back color
|
||||
*/
|
||||
QColor blend(QColor front, QColor back, QColor color, uchar ratio);
|
||||
|
||||
/**
|
||||
* Blend the color with the back color
|
||||
*/
|
||||
QColor blendBackground(QColor back, QColor color, uchar ratio);
|
||||
}
|
@ -10,7 +10,7 @@
|
||||
#include "launch/LaunchTask.h"
|
||||
#include <settings/Setting.h>
|
||||
#include "GuiUtil.h"
|
||||
#include <Colors.h>
|
||||
#include <ColorCache.h>
|
||||
|
||||
LogPage::LogPage(std::shared_ptr<LaunchTask> proc, QWidget *parent)
|
||||
: QWidget(parent), ui(new Ui::LogPage), m_process(proc)
|
||||
@ -41,6 +41,10 @@ LogPage::LogPage(std::shared_ptr<LaunchTask> proc, QWidget *parent)
|
||||
}
|
||||
ui->text->setMaximumBlockCount(maxLines);
|
||||
|
||||
auto origForeground = ui->text->palette().color(ui->text->foregroundRole());
|
||||
auto origBackground = ui->text->palette().color(ui->text->backgroundRole());
|
||||
m_colors.reset(new LogColorCache(origForeground, origBackground));
|
||||
|
||||
m_stopOnOverflow = MMC->settings()->get("ConsoleOverflowStop").toBool();
|
||||
|
||||
auto findShortcut = new QShortcut(QKeySequence(QKeySequence::Find), this);
|
||||
@ -204,48 +208,8 @@ void LogPage::write(QString data, MessageLevel::Enum mode)
|
||||
QListIterator<QString> iter(filtered);
|
||||
QTextCharFormat format(*defaultFormat);
|
||||
|
||||
auto origForeground = ui->text->palette().color(ui->text->foregroundRole());
|
||||
auto origBackground = ui->text->palette().color(ui->text->backgroundRole());
|
||||
auto foreground = [&](QColor foreColor)
|
||||
{
|
||||
format.setForeground(Color::blend(origForeground, origBackground, foreColor, 255));
|
||||
};
|
||||
switch(mode)
|
||||
{
|
||||
case MessageLevel::MultiMC:
|
||||
{
|
||||
foreground(QColor("purple"));
|
||||
break;
|
||||
}
|
||||
case MessageLevel::Debug:
|
||||
{
|
||||
foreground(QColor("green"));
|
||||
break;
|
||||
}
|
||||
case MessageLevel::Warning:
|
||||
{
|
||||
foreground(QColor("orange"));
|
||||
break;
|
||||
}
|
||||
case MessageLevel::Error:
|
||||
{
|
||||
foreground(QColor("red"));
|
||||
break;
|
||||
}
|
||||
case MessageLevel::Fatal:
|
||||
{
|
||||
origBackground = QColor("black");
|
||||
foreground(QColor("red"));
|
||||
format.setBackground(QColor("black"));
|
||||
break;
|
||||
}
|
||||
case MessageLevel::Info:
|
||||
case MessageLevel::Message:
|
||||
default:
|
||||
{
|
||||
foreground(QColor("black"));
|
||||
}
|
||||
}
|
||||
format.setForeground(m_colors->getFront(mode));
|
||||
format.setBackground(m_colors->getBack(mode));
|
||||
|
||||
while (iter.hasNext())
|
||||
{
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "launch/LaunchTask.h"
|
||||
#include "BasePage.h"
|
||||
#include <MultiMC.h>
|
||||
#include <ColorCache.h>
|
||||
|
||||
namespace Ui
|
||||
{
|
||||
@ -86,4 +87,5 @@ private:
|
||||
|
||||
QTextCharFormat * defaultFormat;
|
||||
BasePageContainer * m_parentContainer;
|
||||
std::unique_ptr<LogColorCache> m_colors;
|
||||
};
|
||||
|
@ -40,6 +40,10 @@ enum InstSortMode
|
||||
MultiMCPage::MultiMCPage(QWidget *parent) : QWidget(parent), ui(new Ui::MultiMCPage)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
auto origForeground = ui->fontPreview->palette().color(ui->fontPreview->foregroundRole());
|
||||
auto origBackground = ui->fontPreview->palette().color(ui->fontPreview->backgroundRole());
|
||||
m_colors.reset(new LogColorCache(origForeground, origBackground));
|
||||
|
||||
ui->sortingModeGroup->setId(ui->sortByNameBtn, Sort_Name);
|
||||
ui->sortingModeGroup->setId(ui->sortLastLaunchedBtn, Sort_LastLaunch);
|
||||
|
||||
@ -424,7 +428,7 @@ void MultiMCPage::refreshFontPreview()
|
||||
defaultFormat->setFont(QFont(fontFamily, fontSize));
|
||||
{
|
||||
QTextCharFormat format(*defaultFormat);
|
||||
format.setForeground(QColor("red"));
|
||||
format.setForeground(m_colors->getFront(MessageLevel::Error));
|
||||
// append a paragraph/line
|
||||
auto workCursor = ui->fontPreview->textCursor();
|
||||
workCursor.movePosition(QTextCursor::End);
|
||||
@ -433,6 +437,7 @@ void MultiMCPage::refreshFontPreview()
|
||||
}
|
||||
{
|
||||
QTextCharFormat format(*defaultFormat);
|
||||
format.setForeground(m_colors->getFront(MessageLevel::Message));
|
||||
// append a paragraph/line
|
||||
auto workCursor = ui->fontPreview->textCursor();
|
||||
workCursor.movePosition(QTextCursor::End);
|
||||
@ -441,7 +446,7 @@ void MultiMCPage::refreshFontPreview()
|
||||
}
|
||||
{
|
||||
QTextCharFormat format(*defaultFormat);
|
||||
format.setForeground(QColor("orange"));
|
||||
format.setForeground(m_colors->getFront(MessageLevel::Warning));
|
||||
// append a paragraph/line
|
||||
auto workCursor = ui->fontPreview->textCursor();
|
||||
workCursor.movePosition(QTextCursor::End);
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "java/JavaChecker.h"
|
||||
#include "pages/BasePage.h"
|
||||
#include <MultiMC.h>
|
||||
#include "ColorCache.h"
|
||||
|
||||
class QTextCharFormat;
|
||||
class SettingsObject;
|
||||
@ -97,4 +98,6 @@ private:
|
||||
|
||||
// default format for the font preview...
|
||||
QTextCharFormat *defaultFormat;
|
||||
|
||||
std::unique_ptr<LogColorCache> m_colors;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user