mirror-chatterino2/src/singletons/thememanager.hpp
Rasmus Karlsson ae26b835b6 Perform initial refactoring work
Things that were once singletons are no longer singletons, but are
instead stored in the "Application" singleton

Some singletons still remain, and some renaming/renamespacing is left
2018-04-27 22:11:19 +02:00

144 lines
2.9 KiB
C++

#pragma once
#include "util/serialize-custom.hpp"
#include <QBrush>
#include <QColor>
#include <pajlada/settings/setting.hpp>
namespace chatterino {
namespace singletons {
class WindowManager;
class ThemeManager
{
ThemeManager();
friend class Application;
public:
~ThemeManager() = delete;
inline bool isLightTheme() const
{
return this->isLight;
}
struct TabColors {
QColor text;
struct Backgrounds {
QBrush regular;
QBrush hover;
QBrush unfocused;
} backgrounds;
};
/// WINDOW
struct {
QColor background;
QColor text;
QColor borderUnfocused;
QColor borderFocused;
} window;
/// TABS
struct {
TabColors regular;
TabColors selected;
TabColors highlighted;
TabColors newMessage;
QColor border;
QColor bottomLine;
} tabs;
/// SPLITS
struct {
QColor messageSeperator;
QColor background;
QColor border;
QColor borderFocused;
QColor dropPreview;
struct {
QColor border;
QColor background;
QColor text;
// int margin;
} header;
struct {
QColor border;
QColor background;
QColor selection;
QColor text;
QString styleSheet;
// int margin;
} input;
} splits;
/// MESSAGES
struct {
struct {
QColor regular;
QColor caret;
QColor link;
QColor system;
} textColors;
struct {
QColor regular;
QColor highlighted;
// QColor resub;
// QColor whisper;
} backgrounds;
QColor disabled;
// QColor seperator;
// QColor seperatorInner;
QColor selection;
} messages;
/// SCROLLBAR
struct {
QColor background;
QColor thumb;
QColor thumbSelected;
// const int highlightsCount = 3;
// QColor highlights[3];
} scrollbars;
/// TOOLTIP
struct {
QColor text;
QColor background;
} tooltip;
void normalizeColor(QColor &color);
void update();
pajlada::Signals::NoArgSignal updated;
pajlada::Settings::Setting<QString> themeName;
pajlada::Settings::Setting<double> themeHue;
private:
void actuallyUpdate(double hue, double multiplier);
QColor blendColors(const QColor &color1, const QColor &color2, qreal ratio);
double middleLookupTable[360] = {};
double minLookupTable[360] = {};
void fillLookupTableValues(double (&array)[360], double from, double to, double fromValue,
double toValue);
bool isLight = false;
pajlada::Signals::NoArgSignal repaintVisibleChatWidgets;
friend class WindowManager;
};
} // namespace singletons
} // namespace chatterino