Light Theme (#1486)

* Implement Light Them for Cutter
This commit is contained in:
Itay Cohen 2019-04-27 20:58:44 +03:00 committed by GitHub
parent a39b579d2b
commit 1d20129a0a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
53 changed files with 1161 additions and 109 deletions

View File

@ -532,7 +532,9 @@ FORMS += \
RESOURCES += \ RESOURCES += \
resources.qrc \ resources.qrc \
themes/qdarkstyle/style.qrc themes/native/native.qrc \
themes/qdarkstyle/style.qrc \
themes/lightstyle/light.qrc
DISTFILES += Cutter.astylerc DISTFILES += Cutter.astylerc

View File

@ -21,9 +21,12 @@ static const QStringList cutterSpecificOptions = {
"gui.dataoffset", "gui.dataoffset",
"gui.navbar.code", "gui.navbar.code",
"gui.navbar.empty", "gui.navbar.empty",
"angui.navbar.str", "gui.navbar.str",
"gui.disass_selected", "gui.disass_selected",
"gui.breakpoint_background", "gui.breakpoint_background",
"gui.overview.node",
"gui.tooltip.background",
"gui.tooltip.foreground"
"gui.overview.node" "gui.overview.node"
}; };

View File

@ -11,7 +11,8 @@
const QList<CutterQtTheme> kCutterQtThemesList = { const QList<CutterQtTheme> kCutterQtThemesList = {
{ "Native", static_cast<ColorFlags>(LightFlag | DarkFlag) }, { "Native", static_cast<ColorFlags>(LightFlag | DarkFlag) },
{ "Dark", DarkFlag } { "Dark", DarkFlag },
{ "Light", LightFlag }
}; };
Configuration *Configuration::mPtr = nullptr; Configuration *Configuration::mPtr = nullptr;
@ -199,7 +200,15 @@ bool Configuration::windowColorIsDark()
void Configuration::loadBaseThemeNative() void Configuration::loadBaseThemeNative()
{ {
/* Load Qt Theme */ /* Load Qt Theme */
qApp->setStyleSheet(""); QFile f(":native/native.qss");
if (!f.exists()) {
qWarning() << "Can't find Native theme stylesheet.";
} else {
f.open(QFile::ReadOnly | QFile::Text);
QTextStream ts(&f);
QString stylesheet = ts.readAll();
qApp->setStyleSheet(stylesheet);
}
/* Colors */ /* Colors */
// GUI // GUI
@ -218,6 +227,8 @@ void Configuration::loadBaseThemeNative()
setColor("gui.item_invalid", QColor(155, 155, 155)); setColor("gui.item_invalid", QColor(155, 155, 155));
setColor("gui.item_unsafe", QColor(255, 129, 123)); setColor("gui.item_unsafe", QColor(255, 129, 123));
setColor("gui.overview.node", QColor(200, 200, 200)); setColor("gui.overview.node", QColor(200, 200, 200));
setColor("gui.tooltip.background", QColor(250, 252, 254));
setColor("gui.tooltip.foreground", QColor(42, 44, 46));
} }
void Configuration::loadNativeTheme() void Configuration::loadNativeTheme()
@ -232,6 +243,8 @@ void Configuration::loadNativeTheme()
setColor("highlight", QColor(255, 255, 255, 15)); setColor("highlight", QColor(255, 255, 255, 15));
setColor("highlightWord", QColor(20, 20, 20, 255)); setColor("highlightWord", QColor(20, 20, 20, 255));
setColor("highlightPC", QColor(87, 26, 7)); setColor("highlightPC", QColor(87, 26, 7));
setColor("gui.tooltip.background", QColor(42, 44, 46));
setColor("gui.tooltip.foreground", QColor(250, 252, 254));
} else { } else {
setColor("gui.border", QColor(0, 0, 0)); setColor("gui.border", QColor(0, 0, 0));
setColor("gui.background", QColor(255, 255, 255)); setColor("gui.background", QColor(255, 255, 255));
@ -243,12 +256,41 @@ void Configuration::loadNativeTheme()
} }
} }
/**
* @brief Loads the Light theme of Cutter and modify special theme colors
*/
void Configuration::loadLightTheme()
{
/* Load Qt Theme */
QFile f(":lightstyle/light.qss");
if (!f.exists()) {
qWarning() << "Can't find Light theme stylesheet.";
} else {
f.open(QFile::ReadOnly | QFile::Text);
QTextStream ts(&f);
QString stylesheet = ts.readAll();
qApp->setStyleSheet(stylesheet);
}
setColor("gui.border", QColor(145, 200, 250));
setColor("gui.background", QColor(255, 255, 255));
setColor("gui.alt_background", QColor(245, 250, 255));
setColor("gui.disass_selected", QColor(255, 255, 255));
setColor("highlight", QColor(210, 210, 255, 150));
setColor("highlightWord", QColor(179, 119, 214, 60));
setColor("highlightPC", QColor(214, 255, 210));
setColor("gui.navbar.empty", QColor(220, 236, 245));
setColor("gui.navbar.err", QColor(3, 170, 245));
setColor("gui.tooltip.background", QColor(250, 252, 254));
setColor("gui.tooltip.foreground", QColor(42, 44, 46));
}
void Configuration::loadBaseThemeDark() void Configuration::loadBaseThemeDark()
{ {
/* Load Qt Theme */ /* Load Qt Theme */
QFile f(":qdarkstyle/style.qss"); QFile f(":qdarkstyle/style.qss");
if (!f.exists()) { if (!f.exists()) {
qWarning() << "Can't find dark theme stylesheet."; qWarning() << "Can't find Dark theme stylesheet.";
} else { } else {
f.open(QFile::ReadOnly | QFile::Text); f.open(QFile::ReadOnly | QFile::Text);
QTextStream ts(&f); QTextStream ts(&f);
@ -279,7 +321,7 @@ void Configuration::loadBaseThemeDark()
setColor("gui.navbar.seek", QColor(233, 86, 86)); setColor("gui.navbar.seek", QColor(233, 86, 86));
setColor("gui.navbar.pc", QColor(66, 238, 244)); setColor("gui.navbar.pc", QColor(66, 238, 244));
setColor("gui.navbar.code", QColor(130, 200, 111)); setColor("gui.navbar.code", QColor(130, 200, 111));
setColor("angui.navbar.str", QColor(111, 134, 216)); setColor("gui.navbar.str", QColor(111, 134, 216));
setColor("gui.navbar.sym", QColor(221, 163, 104)); setColor("gui.navbar.sym", QColor(221, 163, 104));
setColor("gui.navbar.empty", QColor(100, 100, 100)); setColor("gui.navbar.empty", QColor(100, 100, 100));
@ -303,6 +345,8 @@ void Configuration::loadDarkTheme()
// Disassembly line selected // Disassembly line selected
setColor("highlight", QColor(21, 29, 29, 150)); setColor("highlight", QColor(21, 29, 29, 150));
setColor("highlightWord", QColor(52, 58, 71, 255)); setColor("highlightWord", QColor(52, 58, 71, 255));
setColor("gui.tooltip.background", QColor(42, 44, 46));
setColor("gui.tooltip.foreground", QColor(250, 252, 254));
} }
const QFont Configuration::getFont() const const QFont Configuration::getFont() const
@ -336,10 +380,13 @@ void Configuration::setTheme(int theme)
loadNativeTheme(); loadNativeTheme();
} else if (themeName == "Dark") { } else if (themeName == "Dark") {
loadDarkTheme(); loadDarkTheme();
} else if (themeName == "Light") {
loadLightTheme();
} else { } else {
loadNativeTheme(); loadNativeTheme();
} }
emit themeChanged();
emit colorsUpdated(); emit colorsUpdated();
} }

View File

@ -31,6 +31,7 @@ private:
void loadBaseThemeNative(); void loadBaseThemeNative();
void loadBaseThemeDark(); void loadBaseThemeDark();
void loadNativeTheme(); void loadNativeTheme();
void loadLightTheme();
void loadDarkTheme(); void loadDarkTheme();
void setColor(const QString &name, const QColor &color); void setColor(const QString &name, const QColor &color);
@ -124,6 +125,7 @@ public:
signals: signals:
void fontsUpdated(); void fontsUpdated();
void colorsUpdated(); void colorsUpdated();
void themeChanged();
}; };
#endif // CONFIGURATION_H #endif // CONFIGURATION_H

View File

@ -1,4 +1,5 @@
#include "common/Helpers.h" #include "common/Helpers.h"
#include "Configuration.h"
#include <cmath> #include <cmath>
#include <QPlainTextEdit> #include <QPlainTextEdit>
@ -197,4 +198,33 @@ QByteArray applyColorToSvg(const QString &filename, QColor color)
return applyColorToSvg(file.readAll(), color); return applyColorToSvg(file.readAll(), color);
} }
/**
* @brief finds the theme-specific icon path and calls `setter` functor providing a pointer of an object which has to be used
* and loaded icon
* @param supportedIconsNames list of <object ptr, icon name>
* @param setter functor which has to be called
* for example we need to set an action icon, the functor can be just [](void* o, const QIcon &icon) { static_cast<QAction*>(o)->setIcon(icon); }
*/
void setThemeIcons(QList<QPair<void*, QString>> supportedIconsNames, std::function<void(void *, const QIcon &)> setter)
{
if (supportedIconsNames.isEmpty() || !setter) {
return;
}
const QString &iconsDirPath = QStringLiteral(":/img/icons/");
const QString &currTheme = Config()->getCurrentTheme()->name;
const QString &relativeThemeDir = currTheme.toLower() + "/";
QString iconPath;
foreach (const auto &p, supportedIconsNames) {
iconPath = iconsDirPath;
// Verify that indeed there is an alternative icon in this theme
// Otherwise, fallback to the regular icon folder
if (QFile::exists(iconPath + relativeThemeDir + p.second)) {
iconPath += relativeThemeDir;
}
setter(p.first, QIcon(iconPath + p.second));
}
}
} // end namespace } // end namespace

View File

@ -4,7 +4,9 @@
#include <QString> #include <QString>
#include <QColor> #include <QColor>
#include <QSizePolicy> #include <QSizePolicy>
#include <functional>
class QIcon;
class QPlainTextEdit; class QPlainTextEdit;
class QTextEdit; class QTextEdit;
class QString; class QString;
@ -45,6 +47,9 @@ int getMaxFullyDisplayedLines(QPlainTextEdit *plainTextEdit);
QByteArray applyColorToSvg(const QByteArray &data, QColor color); QByteArray applyColorToSvg(const QByteArray &data, QColor color);
QByteArray applyColorToSvg(const QString &filename, QColor color); QByteArray applyColorToSvg(const QString &filename, QColor color);
}
void setThemeIcons(QList<QPair<void*, QString>> supportedIconsNames, std::function<void(void *, const QIcon &)> setter);
} // qhelpers
#endif // HELPERS_H #endif // HELPERS_H

View File

@ -129,6 +129,7 @@ void MainWindow::initUI()
/* /*
* Some global shortcuts * Some global shortcuts
*/ */
// Period goes to command entry // Period goes to command entry
QShortcut *cmd_shortcut = new QShortcut(QKeySequence(Qt::Key_Period), this); QShortcut *cmd_shortcut = new QShortcut(QKeySequence(Qt::Key_Period), this);
connect(cmd_shortcut, SIGNAL(activated()), consoleDock, SLOT(focusInputLineEdit())); connect(cmd_shortcut, SIGNAL(activated()), consoleDock, SLOT(focusInputLineEdit()));
@ -171,9 +172,12 @@ void MainWindow::initUI()
void MainWindow::initToolBar() void MainWindow::initToolBar()
{ {
chooseThemeIcons();
// Sepparator between undo/redo and goto lineEdit // Sepparator between undo/redo and goto lineEdit
QWidget *spacer3 = new QWidget(); QWidget *spacer3 = new QWidget();
spacer3->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); spacer3->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
spacer3->setStyleSheet("background-color: rgba(0,0,0,0)");
spacer3->setMinimumSize(20, 20); spacer3->setMinimumSize(20, 20);
spacer3->setMaximumWidth(100); spacer3->setMaximumWidth(100);
ui->mainToolBar->addWidget(spacer3); ui->mainToolBar->addWidget(spacer3);
@ -193,8 +197,9 @@ void MainWindow::initToolBar()
// Sepparator between undo/redo and goto lineEdit // Sepparator between undo/redo and goto lineEdit
QWidget *spacer4 = new QWidget(); QWidget *spacer4 = new QWidget();
spacer4->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); spacer4->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
spacer4->setMinimumSize(20, 20); spacer4->setStyleSheet("background-color: rgba(0,0,0,0)");
spacer4->setMaximumWidth(100); spacer4->setMinimumSize(10, 10);
spacer4->setMaximumWidth(10);
ui->mainToolBar->addWidget(spacer4); ui->mainToolBar->addWidget(spacer4);
// Omnibar LineEdit // Omnibar LineEdit
@ -204,6 +209,7 @@ void MainWindow::initToolBar()
// Add special separators to the toolbar that expand to separate groups of elements // Add special separators to the toolbar that expand to separate groups of elements
QWidget *spacer2 = new QWidget(); QWidget *spacer2 = new QWidget();
spacer2->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); spacer2->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
spacer2->setStyleSheet("background-color: rgba(0,0,0,0)");
spacer2->setMinimumSize(10, 10); spacer2->setMinimumSize(10, 10);
spacer2->setMaximumWidth(300); spacer2->setMaximumWidth(300);
ui->mainToolBar->addWidget(spacer2); ui->mainToolBar->addWidget(spacer2);
@ -211,14 +217,17 @@ void MainWindow::initToolBar()
// Separator between back/forward and undo/redo buttons // Separator between back/forward and undo/redo buttons
QWidget *spacer = new QWidget(); QWidget *spacer = new QWidget();
spacer->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); spacer->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
spacer->setStyleSheet("background-color: rgba(0,0,0,0)");
spacer->setMinimumSize(20, 20); spacer->setMinimumSize(20, 20);
ui->mainToolBar->addWidget(spacer); ui->mainToolBar->addWidget(spacer);
tasksProgressIndicator = new ProgressIndicator(); tasksProgressIndicator = new ProgressIndicator();
tasksProgressIndicator->setStyleSheet("background-color: rgba(0,0,0,0)");
ui->mainToolBar->addWidget(tasksProgressIndicator); ui->mainToolBar->addWidget(tasksProgressIndicator);
QWidget *spacerEnd = new QWidget(); QWidget *spacerEnd = new QWidget();
spacerEnd->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); spacerEnd->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
spacerEnd->setStyleSheet("background-color: rgba(0,0,0,0)");
spacerEnd->setMinimumSize(4, 0); spacerEnd->setMinimumSize(4, 0);
spacerEnd->setMaximumWidth(4); spacerEnd->setMaximumWidth(4);
ui->mainToolBar->addWidget(spacerEnd); ui->mainToolBar->addWidget(spacerEnd);
@ -231,6 +240,7 @@ void MainWindow::initToolBar()
QObject::connect(configuration, &Configuration::colorsUpdated, [this]() { QObject::connect(configuration, &Configuration::colorsUpdated, [this]() {
this->visualNavbar->updateGraphicsScene(); this->visualNavbar->updateGraphicsScene();
}); });
QObject::connect(configuration, &Configuration::themeChanged, this, &MainWindow::chooseThemeIcons);
} }
void MainWindow::initDocks() void MainWindow::initDocks()
@ -1197,3 +1207,21 @@ void MainWindow::messageBoxWarning(QString title, QString message)
mb.setText(message); mb.setText(message);
mb.exec(); mb.exec();
} }
/**
* \brief When theme changed, change icons which have a special version for the theme.
*/
void MainWindow::chooseThemeIcons()
{
// List of QActions which have alternative icons in different themes
const QList<QPair<void*, QString>> kSupportedIconsNames {
{ ui->actionForward, QStringLiteral("arrow_right.svg") },
{ ui->actionBackward, QStringLiteral("arrow_left.svg") },
};
// Set the correct icon for the QAction
qhelpers::setThemeIcons(kSupportedIconsNames, [](void *obj, const QIcon &icon) {
static_cast<QAction*>(obj)->setIcon(icon);
});
}

View File

@ -185,6 +185,7 @@ private slots:
bool eventFilter(QObject *object, QEvent *event) override; bool eventFilter(QObject *object, QEvent *event) override;
void changeDebugView(); void changeDebugView();
void changeDefinedView(); void changeDefinedView();
void chooseThemeIcons();
private: private:
CutterCore *core; CutterCore *core;

View File

@ -20,48 +20,7 @@
<string notr="true">Cutter</string> <string notr="true">Cutter</string>
</property> </property>
<property name="styleSheet"> <property name="styleSheet">
<string notr="true">QHeaderView::section { <string notr="true">
padding: 3px;
padding-left: 10px;
/* border: 2px solid white;*/
}
QMainWindow &gt; QTabBar
{
qproperty-drawBase: 0;
}
QMainWindow &gt; QTabBar::tab {
border-bottom-color: #2180a9;
border-top-left-radius: 0px;
border-top-right-radius: 0px;
min-width: 8px;
max-width: 200px;
padding: 5px;
margin-bottom: 3px;
margin-top: 3px;
}
QMainWindow &gt; QTabBar::tab:selected {
background: #2180a9;
color: #FFFFFF;
}
QMainWindow &gt; QTabBar::tab:hover {
background: #2180a9; /* #3C879E; */
color: #FFFFFF;
}
QDockWidget::title {
text-align: center;
}
QToolTip {
background-color: #444;
border: 3px solid #444;
color: rgb(232, 232, 232);
font: 11pt &quot;Monaco&quot;;
}
</string> </string>
</property> </property>
<property name="documentMode"> <property name="documentMode">
@ -393,7 +352,7 @@ QToolTip {
<action name="actionBackward"> <action name="actionBackward">
<property name="icon"> <property name="icon">
<iconset resource="resources.qrc"> <iconset resource="resources.qrc">
<normaloff>:/img/icons/arrow_left_light.svg</normaloff>:/img/icons/arrow_left_light.svg</iconset> <normaloff>:/img/icons/arrow_left.svg</normaloff>:/img/icons/arrow_left.svg</iconset>
</property> </property>
<property name="text"> <property name="text">
<string>Back</string> <string>Back</string>
@ -405,7 +364,7 @@ QToolTip {
<action name="actionForward"> <action name="actionForward">
<property name="icon"> <property name="icon">
<iconset resource="resources.qrc"> <iconset resource="resources.qrc">
<normaloff>:/img/icons/arrow_right_light.svg</normaloff>:/img/icons/arrow_right_light.svg</iconset> <normaloff>:/img/icons/arrow_right.svg</normaloff>:/img/icons/arrow_right.svg</iconset>
</property> </property>
<property name="text"> <property name="text">
<string>Forward</string> <string>Forward</string>

View File

@ -208,6 +208,11 @@
<string>Dark Theme</string> <string>Dark Theme</string>
</property> </property>
</item> </item>
<item>
<property name="text">
<string>Light Theme</string>
</property>
</item>
</widget> </widget>
</item> </item>
<item> <item>

View File

@ -52,7 +52,7 @@
<item> <item>
<widget class="QTreeWidget" name="toTreeWidget"> <widget class="QTreeWidget" name="toTreeWidget">
<property name="frameShape"> <property name="frameShape">
<enum>QFrame::NoFrame</enum> <enum>QFrame::Box</enum>
</property> </property>
<property name="frameShadow"> <property name="frameShadow">
<enum>QFrame::Plain</enum> <enum>QFrame::Plain</enum>
@ -90,7 +90,7 @@
<item> <item>
<widget class="QTreeWidget" name="fromTreeWidget"> <widget class="QTreeWidget" name="fromTreeWidget">
<property name="frameShape"> <property name="frameShape">
<enum>QFrame::NoFrame</enum> <enum>QFrame::Box</enum>
</property> </property>
<property name="frameShadow"> <property name="frameShadow">
<enum>QFrame::Plain</enum> <enum>QFrame::Plain</enum>

View File

@ -35,7 +35,6 @@ AppearanceOptionsWidget::AppearanceOptionsWidget(PreferencesDialog *dialog)
ui(new Ui::AppearanceOptionsWidget) ui(new Ui::AppearanceOptionsWidget)
{ {
ui->setupUi(this); ui->setupUi(this);
updateFontFromConfig(); updateFontFromConfig();
updateThemeFromConfig(false); updateThemeFromConfig(false);

View File

@ -28,34 +28,36 @@ PreferencesDialog::PreferencesDialog(QWidget *parent)
{ {
tr("Disassembly"), tr("Disassembly"),
new AsmOptionsWidget(this), new AsmOptionsWidget(this),
QIcon(":/img/icons/disas_light.svg"), QIcon(":/img/icons/disas.svg"),
{ {
{ {
"Graph", "Graph",
new GraphOptionsWidget(this), new GraphOptionsWidget(this),
QIcon(":/img/icons/graph_light.svg") QIcon(":/img/icons/graph.svg")
}, },
} }
}, },
{ {
tr("Debug"), tr("Debug"),
new DebugOptionsWidget(this), new DebugOptionsWidget(this),
QIcon(":/img/icons/bug_light.svg") QIcon(":/img/icons/bug.svg")
}, },
{ {
tr("Appearance"), tr("Appearance"),
new AppearanceOptionsWidget(this), new AppearanceOptionsWidget(this),
QIcon(":/img/icons/polar_light.svg") QIcon(":/img/icons/polar.svg")
}, },
{ {
tr("Plugins"), tr("Plugins"),
new PluginsOptionsWidget(this), new PluginsOptionsWidget(this),
QIcon(":/img/icons/plugins_light.svg") QIcon(":/img/icons/plugins.svg")
} }
}; };
for (auto &c : prefs) for (auto &c : prefs)
{
c.addItem(*ui->configCategories, *ui->configPanel); c.addItem(*ui->configCategories, *ui->configPanel);
}
connect(ui->configCategories, connect(ui->configCategories,
SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)), SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)),
@ -66,6 +68,9 @@ PreferencesDialog::PreferencesDialog(QWidget *parent)
QTreeWidgetItem *defitem = ui->configCategories->topLevelItem(0); QTreeWidgetItem *defitem = ui->configCategories->topLevelItem(0);
ui->configCategories->setCurrentItem(defitem, 0); ui->configCategories->setCurrentItem(defitem, 0);
connect(Config(), &Configuration::themeChanged, this, &PreferencesDialog::chooseThemeIcons);
chooseThemeIcons();
} }
PreferencesDialog::~PreferencesDialog() PreferencesDialog::~PreferencesDialog()
@ -99,3 +104,30 @@ void PreferencesDialog::changePage(QTreeWidgetItem *current, QTreeWidgetItem *pr
if (index) if (index)
ui->configPanel->setCurrentIndex(index - 1); ui->configPanel->setCurrentIndex(index - 1);
} }
void PreferencesDialog::chooseThemeIcons()
{
// List of QActions which have alternative icons in different themes
const QList<QPair<QString, QString>> kCategoryIconsNames {
{ QStringLiteral("Debug"), QStringLiteral("bug.svg") },
{ QStringLiteral("Assembly"), QStringLiteral("disas.svg") },
{ QStringLiteral("Graph"), QStringLiteral("graph.svg") },
{ QStringLiteral("Appearance"), QStringLiteral("polar.svg") },
{ QStringLiteral("Plugins"), QStringLiteral("plugins.svg") },
};
QList<QPair<void*, QString>> supportedIconsNames;
foreach (const auto &p, kCategoryIconsNames) {
QList<QTreeWidgetItem *> items = ui->configCategories->findItems(p.first, Qt::MatchContains|Qt::MatchRecursive, 0);
if (items.isEmpty()) {
continue;
}
supportedIconsNames.append( { items.first(), p.second } );
}
// Set the correct icon for the QAction
qhelpers::setThemeIcons(supportedIconsNames, [](void *obj, const QIcon &icon) {
// here we have our setter functor, in this case it is almost "unique" because it specified the column in `setIcon` call
static_cast<QTreeWidgetItem*>(obj)->setIcon(0, icon);
});
}

View File

@ -31,6 +31,7 @@ public slots:
private: private:
std::unique_ptr<Ui::PreferencesDialog> ui; std::unique_ptr<Ui::PreferencesDialog> ui;
void chooseThemeIcons();
}; };
#endif //PREFERENCESDIALOG_H #endif //PREFERENCESDIALOG_H

View File

@ -1,4 +1,4 @@
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'> <!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
<svg style="enable-background:new 0 0 32 32" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="32px" width="32px" version="1.1" y="0px" x="0px" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32"> <svg style="enable-background:new 0 0 32 32" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="32px" width="32px" version="1.1" y="0px" x="0px" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32">
<path d="m16 32l5.7-5.7-6.3-6.3h16v-8h-17l6.3-6.3-5-5.7-16 16 16 16z" fill="#4d4d4f"/> <path d="m16 32l5.7-5.7-6.3-6.3h16v-8h-17l6.3-6.3-5-5.7-16 16 16 16z" fill="#aaacaf"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 418 B

After

Width:  |  Height:  |  Size: 418 B

View File

@ -1,4 +1,4 @@
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'> <!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
<svg style="enable-background:new 0 0 32 32" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="32px" width="32px" version="1.1" y="0px" x="0px" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32"> <svg style="enable-background:new 0 0 32 32" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="32px" width="32px" version="1.1" y="0px" x="0px" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32">
<path d="m16 0l-5.7 5.7 6.3 6.3h-16v8h17l-6.3 6.3 5 6 16-16-16-16z" fill="#4d4d4f"/> <path d="m16 0l-5.7 5.7 6.3 6.3h-16v8h17l-6.3 6.3 5 6 16-16-16-16z" fill="#aaacaf"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 416 B

After

Width:  |  Height:  |  Size: 416 B

View File

Before

Width:  |  Height:  |  Size: 761 B

After

Width:  |  Height:  |  Size: 761 B

View File

@ -1,4 +1,4 @@
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'> <!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
<svg style="enable-background:new 0 0 32 32" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="32px" width="32px" version="1.1" y="0px" x="0px" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32"> <svg style="enable-background:new 0 0 32 32" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="32px" width="32px" version="1.1" y="0px" x="0px" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32">
<path d="m16 32l5.7-5.7-6.3-6.3h16v-8h-17l6.3-6.3-5-5.7-16 16 16 16z" fill="#aaacaf"/> <path d="m16 32l5.7-5.7-6.3-6.3h16v-8h-17l6.3-6.3-5-5.7-16 16 16 16z" fill="#4d4d4f"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 418 B

After

Width:  |  Height:  |  Size: 418 B

View File

@ -1,4 +1,4 @@
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'> <!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
<svg style="enable-background:new 0 0 32 32" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="32px" width="32px" version="1.1" y="0px" x="0px" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32"> <svg style="enable-background:new 0 0 32 32" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="32px" width="32px" version="1.1" y="0px" x="0px" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32">
<path d="m16 0l-5.7 5.7 6.3 6.3h-16v8h17l-6.3 6.3 5 6 16-16-16-16z" fill="#aaacaf"/> <path d="m16 0l-5.7 5.7 6.3 6.3h-16v8h17l-6.3 6.3 5 6 16-16-16-16z" fill="#4d4d4f"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 416 B

After

Width:  |  Height:  |  Size: 416 B

View File

@ -1,6 +1,6 @@
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'> <!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
<svg style="enable-background:new 0 0 32 32" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="32px" width="32px" version="1.1" y="0px" x="0px" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32"> <svg style="enable-background:new 0 0 32 32" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="32px" width="32px" version="1.1" y="0px" x="0px" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32">
<g fill="#4d4d4f"> <g fill="#aaacaf">
<polygon points="32 4 0 4 0 0 32 0"/> <polygon points="32 4 0 4 0 0 32 0"/>
<polygon points="20 12 0 12 0 8 20 8"/> <polygon points="20 12 0 12 0 8 20 8"/>
<polygon points="32 20 0 20 0 16 32 16"/> <polygon points="32 20 0 20 0 16 32 16"/>

Before

Width:  |  Height:  |  Size: 620 B

After

Width:  |  Height:  |  Size: 620 B

View File

@ -4,9 +4,9 @@
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="28px" height="32px" viewBox="0 0 28 32" enable-background="new 0 0 28 32" xml:space="preserve"> width="28px" height="32px" viewBox="0 0 28 32" enable-background="new 0 0 28 32" xml:space="preserve">
<g> <g>
<path fill="#4d4d4f" d="M20,0v3.9c0,1.6-0.62,3.1-1.8,4.2l-11,11c-1.9,2-2.8,4-3,7h-4l6,6l6-6h-4c0.1-1.399,0.68-2.8,1.7-3.8l11-11 <path fill="#aaacaf" d="M20,0v3.9c0,1.6-0.62,3.1-1.8,4.2l-11,11c-1.9,2-2.8,4-3,7h-4l6,6l6-6h-4c0.1-1.399,0.68-2.8,1.7-3.8l11-11
c2-1.9,3-4.5,3-7.1V0.3h-4L20,0z"/> c2-1.9,3-4.5,3-7.1V0.3h-4L20,0z"/>
<path fill="#4d4d4f" d="M24,26c-0.109-2.5-1.1-4.8-2.9-6.6L18.9,17.2l-3,3l2.199,2.2c1,1,1.601,2.399,1.7,3.8h-4l6,6l6-6h-4L24,26z <path fill="#aaacaf" d="M24,26c-0.109-2.5-1.1-4.8-2.9-6.6L18.9,17.2l-3,3l2.199,2.2c1,1,1.601,2.399,1.7,3.8h-4l6,6l6-6h-4L24,26z
"/> "/>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 793 B

After

Width:  |  Height:  |  Size: 793 B

View File

@ -4,9 +4,9 @@
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="28px" height="32px" viewBox="0 0 28 32" enable-background="new 0 0 28 32" xml:space="preserve"> width="28px" height="32px" viewBox="0 0 28 32" enable-background="new 0 0 28 32" xml:space="preserve">
<g> <g>
<path fill="#aaacaf" d="M20,0v3.9c0,1.6-0.62,3.1-1.8,4.2l-11,11c-1.9,2-2.8,4-3,7h-4l6,6l6-6h-4c0.1-1.399,0.68-2.8,1.7-3.8l11-11 <path fill="#4d4d4f" d="M20,0v3.9c0,1.6-0.62,3.1-1.8,4.2l-11,11c-1.9,2-2.8,4-3,7h-4l6,6l6-6h-4c0.1-1.399,0.68-2.8,1.7-3.8l11-11
c2-1.9,3-4.5,3-7.1V0.3h-4L20,0z"/> c2-1.9,3-4.5,3-7.1V0.3h-4L20,0z"/>
<path fill="#aaacaf" d="M24,26c-0.109-2.5-1.1-4.8-2.9-6.6L18.9,17.2l-3,3l2.199,2.2c1,1,1.601,2.399,1.7,3.8h-4l6,6l6-6h-4L24,26z <path fill="#4d4d4f" d="M24,26c-0.109-2.5-1.1-4.8-2.9-6.6L18.9,17.2l-3,3l2.199,2.2c1,1,1.601,2.399,1.7,3.8h-4l6,6l6-6h-4L24,26z
"/> "/>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 793 B

After

Width:  |  Height:  |  Size: 793 B

View File

@ -0,0 +1,4 @@
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
<svg style="enable-background:new 0 0 32 32" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="32px" width="32px" version="1.1" y="0px" x="0px" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32">
<path d="m16 32l5.7-5.7-6.3-6.3h16v-8h-17l6.3-6.3-5-5.7-16 16 16 16z" fill="#ffffff"/>
</svg>

After

Width:  |  Height:  |  Size: 418 B

View File

@ -0,0 +1,4 @@
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
<svg style="enable-background:new 0 0 32 32" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="32px" width="32px" version="1.1" y="0px" x="0px" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32">
<path d="m16 0l-5.7 5.7 6.3 6.3h-16v8h17l-6.3 6.3 5 6 16-16-16-16z" fill="#ffffff"/>
</svg>

After

Width:  |  Height:  |  Size: 416 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8" viewBox="0 0 8 8">
<path d="M3.5 0c-1.19 0-1.98 1.69-1.19 2.5-.09.07-.2.14-.28.22l-1.31-.66a.5.5 0 0 0-.34-.06.5.5 0 0 0-.09.94l1.16.56c-.09.16-.19.33-.25.5h-.69a.5.5 0 0 0-.09 0 .5.5 0 1 0 .09 1h.5c0 .23.02.45.06.66l-.78.41a.5.5 0 1 0 .44.88l.66-.34c.25.46.62.85 1.03 1.09.35-.19.59-.44.59-.72v-1.44a.5.5 0 0 0 0-.09v-.81a.5.5 0 0 0 0-.22c.05-.23.26-.41.5-.41.28 0 .5.22.5.5v.88a.5.5 0 0 0 0 .09v.06a.5.5 0 0 0 0 .09v1.34c0 .27.24.53.59.72.41-.25.79-.63 1.03-1.09l.66.34a.5.5 0 1 0 .44-.88l-.78-.41c.04-.21.06-.43.06-.66h.5a.5.5 0 1 0 0-1h-.69c-.06-.17-.16-.34-.25-.5l1.16-.56a.5.5 0 0 0-.31-.94.5.5 0 0 0-.13.06l-1.31.66c-.09-.08-.19-.15-.28-.22.78-.83 0-2.5-1.19-2.5z" fill="#039be5"
/>
</svg>

After

Width:  |  Height:  |  Size: 761 B

View File

@ -1,6 +1,6 @@
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'> <!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
<svg style="enable-background:new 0 0 32 32" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="32px" width="32px" version="1.1" y="0px" x="0px" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32"> <svg style="enable-background:new 0 0 32 32" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="32px" width="32px" version="1.1" y="0px" x="0px" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32">
<g fill="#aaacaf"> <g fill="#039be5">
<polygon points="32 4 0 4 0 0 32 0"/> <polygon points="32 4 0 4 0 0 32 0"/>
<polygon points="20 12 0 12 0 8 20 8"/> <polygon points="20 12 0 12 0 8 20 8"/>
<polygon points="32 20 0 20 0 16 32 16"/> <polygon points="32 20 0 20 0 16 32 16"/>

Before

Width:  |  Height:  |  Size: 620 B

After

Width:  |  Height:  |  Size: 620 B

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="28px" height="32px" viewBox="0 0 28 32" enable-background="new 0 0 28 32" xml:space="preserve">
<g>
<path fill="#039be5" d="M20,0v3.9c0,1.6-0.62,3.1-1.8,4.2l-11,11c-1.9,2-2.8,4-3,7h-4l6,6l6-6h-4c0.1-1.399,0.68-2.8,1.7-3.8l11-11
c2-1.9,3-4.5,3-7.1V0.3h-4L20,0z"/>
<path fill="#039be5" d="M24,26c-0.109-2.5-1.1-4.8-2.9-6.6L18.9,17.2l-3,3l2.199,2.2c1,1,1.601,2.399,1.7,3.8h-4l6,6l6-6h-4L24,26z
"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 793 B

View File

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
style="enable-background:new 0 0 32 32"
xml:space="preserve"
height="32px"
width="32px"
version="1.1"
y="0px"
x="0px"
viewBox="0 0 32 32"
id="svg8"
sodipodi:docname="plugin.svg"
inkscape:version="0.92.4 5da689c313, 2019-01-14"><metadata
id="metadata14"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
id="defs12">
</defs><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1918"
inkscape:window-height="1042"
id="namedview10"
showgrid="false"
inkscape:zoom="10.429825"
inkscape:cx="-16.624731"
inkscape:cy="16.507785"
inkscape:window-x="1920"
inkscape:window-y="18"
inkscape:window-maximized="1"
inkscape:current-layer="svg8"
inkscape:snap-bbox="true" />
<path
inkscape:connector-curvature="0"
id="rect5115"
d="M 13,0 C 10.784,0 9,1.784 9,4 V 6 H 4 C 1.784,6 0,7.784 0,10 v 5 h 2 c 2.216,0 4,1.784 4,4 0,2.216 -1.784,4 -4,4 H 0 v 5 c 0,2.216 1.784,4 4,4 h 5 v -2 c 0,-2.216 1.784,-4 4,-4 2.216,0 4,1.784 4,4 v 2 h 5 c 2.216,0 4,-1.784 4,-4 v -5 h 2 c 2.216,0 4,-1.784 4,-4 0,-2.216 -1.784,-4 -4,-4 H 26 V 10 C 26,7.784 24.216,6 22,6 H 17 V 4 C 17,1.784 15.216,0 13,0 Z"
style="display:inline;fill:#039be5;fill-opacity:1;stroke:none;stroke-width:1.9352982;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:label="puzzle" />
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -0,0 +1,11 @@
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
<svg style="enable-background:new 0 0 32 32" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="32px" width="32px" version="1.1" y="0px" x="0px" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32">
<g fill="#039be5">
<path d="m21 14l5.7-9.7c-3-2.6-7-4.3-11-4.3-1 0-2 0.12-2.9 0.29l8 14z"/>
<path d="m20 20h11c1-1 1-3 1-4 0-3.9-1.4-7.4-3.7-10l-8 14z"/>
<path d="m16 10l-5.4-9.2c-4.4 1.5-8 4.8-9.8 9.2h15z"/>
<path d="m16 22l5.4 9.1c4.4-1.5 8-4.8 9.8-9.1h-15z"/>
<path d="m12 12h-11c-0.77 1-1 3-1 4 0 3.9 1.4 7.4 3.8 10l8.2-14z"/>
<path d="m11 18l-5.7 9.8c2.7 2 6.7 4 11 4 1 0 2.1-0.12 3-0.3l-8-14z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 751 B

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

Before

Width:  |  Height:  |  Size: 751 B

After

Width:  |  Height:  |  Size: 751 B

View File

@ -1,9 +1,11 @@
<RCC> <RCC>
<qresource prefix="/"> <qresource prefix="/">
<file>img/icons/arrow_left_light.svg</file> <file>img/icons/dark/arrow_left.svg</file>
<file>img/icons/dark/arrow_right.svg</file>
<file>img/icons/arrow_left.svg</file> <file>img/icons/arrow_left.svg</file>
<file>img/icons/arrow_right_light.svg</file>
<file>img/icons/arrow_right.svg</file> <file>img/icons/arrow_right.svg</file>
<file>img/icons/light/arrow_right.svg</file>
<file>img/icons/light/arrow_left.svg</file>
<file>img/icons/sidebar.svg</file> <file>img/icons/sidebar.svg</file>
<file>img/icons/undo.svg</file> <file>img/icons/undo.svg</file>
<file>img/icons/redo.svg</file> <file>img/icons/redo.svg</file>
@ -39,21 +41,23 @@
<file>img/icons/load_light.svg</file> <file>img/icons/load_light.svg</file>
<file>img/icons/save_light.svg</file> <file>img/icons/save_light.svg</file>
<file>img/icons/trash_light.svg</file> <file>img/icons/trash_light.svg</file>
<file>img/icons/disas_light.svg</file>
<file>img/icons/disas_white.svg</file>
<file>img/icons/disas.svg</file> <file>img/icons/disas.svg</file>
<file>img/icons/graph_light.svg</file> <file>img/icons/light/disas.svg</file>
<file>img/icons/disas_white.svg</file>
<file>img/icons/graph_white.svg</file> <file>img/icons/graph_white.svg</file>
<file>img/icons/graph.svg</file> <file>img/icons/graph.svg</file>
<file>img/icons/light/graph.svg</file>
<file>img/icons/hexdump_light.svg</file> <file>img/icons/hexdump_light.svg</file>
<file>img/icons/hexdump_white.svg</file> <file>img/icons/hexdump_white.svg</file>
<file>img/icons/bug_light.svg</file> <file>img/icons/bug.svg</file>
<file>img/icons/light/bug.svg</file>
<file>img/icons/cog_light.svg</file> <file>img/icons/cog_light.svg</file>
<file>img/icons/cog_white.svg</file> <file>img/icons/cog_white.svg</file>
<file>img/icons/new_light.svg</file> <file>img/icons/new_light.svg</file>
<file>img/icons/run_light.svg</file> <file>img/icons/run_light.svg</file>
<file>img/icons/edit_light.svg</file> <file>img/icons/edit_light.svg</file>
<file>img/icons/polar_light.svg</file> <file>img/icons/polar.svg</file>
<file>img/icons/light/polar.svg</file>
<file>img/icons/radar_light.svg</file> <file>img/icons/radar_light.svg</file>
<file>img/icons/polar_white.svg</file> <file>img/icons/polar_white.svg</file>
<file>img/icons/radar_white.svg</file> <file>img/icons/radar_white.svg</file>
@ -82,7 +86,8 @@
<file>img/icons/previous.svg</file> <file>img/icons/previous.svg</file>
<file>img/icons/list.svg</file> <file>img/icons/list.svg</file>
<file>img/icons/fork.svg</file> <file>img/icons/fork.svg</file>
<file>img/icons/plugins_light.svg</file> <file>img/icons/plugins.svg</file>
<file>img/icons/light/plugins.svg</file>
<file>python/cutter.py</file> <file>python/cutter.py</file>
<file>python/reg_qtres_importer.py</file> <file>python/reg_qtres_importer.py</file>
</qresource> </qresource>

View File

@ -0,0 +1,17 @@
<RCC>
<qresource prefix="qss_icons">
<file>rc/down_arrow.png</file>
<file>rc/down_arrow_disabled.png</file>
<file>rc/up_arrow.png</file>
<file>rc/up_arrow_disabled.png</file>
<file>rc/right_arrow.png</file>
<file>rc/right_arrow_disabled.png</file>
<file>rc/left_arrow.png</file>
<file>rc/left_arrow_disabled.png</file>
<file>rc/down_arrow_combo.png</file>
<file>rc/up_arrow_combo.png</file>
</qresource>
<qresource prefix="lightstyle">
<file>light.qss</file>
</qresource>
</RCC>

View File

@ -0,0 +1,741 @@
QColorDialog
{
background-color:#fff;
}
QTextEdit
{
background-color:#fafcfe;
color:#00162e;
}
QWidget
{
color:#00162e;
background-color:#fafcfe;
selection-background-color:#03a9f4;
selection-color:#ffffff;
background-clip:border;
border-image:none;
border:0 transparent #000;
outline:0;
}
QDockWidget
{
background:#fafcfe;
border:1px solid #e0e0e0;
}
QDockWidget::title
{
background-color:#fafcfe;
border-top:1px solid #dee8f3;
text-align:center;
}
QPlainTextEdit
{
selection-background-color:#03a9f4;
selection-color:#ffffff;
color:#00162e;
border-color:transparent;
border-style:solid;
border-width:1px;
}
QPushButton
{
color:#00162e;
background-color:#fff;
border-color:#039be5;
border-style:solid;
border-width:1px;
padding:2px;
}
QPushButton::default
{
color:#00162e;
background-color:#fff;
border-color:transparent transparent #039be5;
border-width:1px;
padding:2px;
}
QToolButton
{
border-top-color:transparent;
border-right-color:transparent;
border-left-color:transparent;
color:#00162e;
background-color:transparent;
border-style:solid;
padding:2px;
}
QToolButton:hover
{
border-bottom-width:2px;
color:#00162e;
padding-bottom:1px;
background-color:transparent;
border-color:transparent transparent #03a9f4;
border-style:solid;
}
QPushButton:hover
{
border-bottom-width:1px;
color:#00162e;
padding-bottom:2px;
background-color:#fafafa;
border:1px solid #039be5;
border-color:transparent transparent #03a9f4;
border-style:solid;
}
QPushButton:pressed
{
border-bottom-width:2px;
color:#03a9f4;
padding-bottom:1px;
background-color:#fff;
border-color:transparent transparent #03a9f4;
border-style:solid;
}
QPushButton:disabled
{
border-bottom-width:2px;
color:#808086;
padding-bottom:1px;
background-color:#fff;
border-color:#e2e3e4;
border-style:solid;
}
QLineEdit
{
border-radius:4px;
color:#00162e;
background:#fff;
selection-background-color:#007ac1;
selection-color:#FFF;
border-color:#bdbdbd;
border-style:inset;
border-width:1px;
padding:0 8px;
}
QLabel
{
color:#00162e;
}
QLCDNumber
{
color:#03a9f4;
}
QProgressBar
{
text-align:center;
color:#f0f0f0;
border-radius:10px;
background-color:#fff;
border-color:#bdbdbd;
border-style:inset;
border-width:1px;
}
QProgressBar::chunk
{
background-color:#039be5;
border-radius:5px;
}
QToolBar
{
background-color:#03a9f4;
}
QMenuBar
{
background-color:#007ac1;
height:40px;
}
QMenuBar::item
{
background:transparent;
color:#fff;
height:40px;
max-width:40px;
text-align:center;
padding-left:10px;
padding-right:10px;
}
QMenuBar::item:selected
{
background:transparent;
border-bottom:2px solid #fff;
background-color:#1386c9;
}
QMenuBar::item:pressed
{
border:1px solid #03a9f4;
background-color:#03a9f4;
color:#fff;
margin-bottom:-1px;
padding-bottom:1px;
}
QMenu
{
background-color:#fafcfe;
border:1px solid #cfcfcf;
padding:2px 2px 2px 6px;
}
QMenu::item
{
background-color:#fafcfe;
border-bottom-width:1px;
color:#00162e;
border-color:transparent;
border-style:solid;
padding:4px 30px;
}
QMenu::item:selected
{
border-left-color:#039be5;
border-left-width:2px;
color:#039be5;
background-color:#f4f9ff;
}
QTabWidget
{
color:#000;
background-color:#fff;
}
QTabWidget::pane
{
background-color:#fff;
border-radius:6px;
border-color:#bdbdbd;
border-style:solid;
border-width:1px;
}
QTabBar::tab
{
border-bottom-width:1px;
color:#007ac1;
margin-left:3px;
background-color:#fff;
border-color:transparent;
border-style:solid;
padding:3px;
}
QTabBar::tab:selected,QTabBar::tab:last:selected,QTabBar::tab:hover
{
border-bottom-width:2px;
color:#007ac1;
padding-left:3px;
padding-bottom:2px;
margin-left:3px;
background-color:#fff;
border-color:transparent transparent #039be5;
border-style:solid;
}
QCheckBox
{
color:#00162e;
padding:2px;
}
QCheckBox:disabled
{
color:#7e7e80;
padding:2px;
}
QCheckBox:hover
{
border-radius:4px;
background-color:#fff;
border-color:#bdbdbd;
border-style:solid;
border-width:1px;
padding:1px;
}
QCheckBox::indicator:checked
{
height:10px;
width:10px;
color:#00162e;
background-color:#039be5;
border-color:#039be5;
border-style:solid;
border-width:1px;
}
QCheckBox::indicator:unchecked
{
height:10px;
width:10px;
color:#00162e;
background-color:transparent;
border-color:#039be5;
border-style:solid;
border-width:1px;
}
QRadioButton
{
color:#00162e;
background-color:#fff;
padding:1px;
}
QRadioButton::indicator:checked
{
height:10px;
width:10px;
border-radius:5px;
color:#00162e;
background-color:#039be5;
border-color:#039be5;
border-style:solid;
border-width:1px;
}
QRadioButton::indicator:!checked
{
height:10px;
width:10px;
}
QStatusBar
{
color:#027f7f;
}
QComboBox
{
selection-background-color:#3daee9;
border:1px solid #76797C;
border-radius:2px;
min-width:75px;
color:#00162e;
background-color:#fff;
border-style:solid;
padding:3px;
}
QComboBox:hover
{
border:1px solid #3daee9;
color:#00162e;
}
QComboBox:on
{
padding-top:3px;
padding-left:4px;
selection-background-color:#4a4a4a;
}
QComboBox QAbstractItemView
{
background-color:#efefef;
border-radius:2px;
border:1px solid #76797C;
selection-background-color:#18465d;
}
QComboBox::drop-down
{
subcontrol-origin:padding;
subcontrol-position:top right;
width:15px;
border-left-width:0;
border-left-color:#e0e0e0;
border-left-style:solid;
border-top-right-radius:3px;
border-bottom-right-radius:3px;
}
QAbstractSpinBox::down-arrow,QAbstractSpinBox::down-arrow:disabled,QAbstractSpinBox::down-arrow:off
{
image:url(:/qss_icons/rc/down_arrow.png);
width:10px;
height:10px;
}
QToolButton::menu-indicator
{
image:url(:/qss_icons/rc/down_arrow.png);
top:-7px;
left:-2px;
}
QAbstractSpinBox::up-arrow,QSpinBox::up-arrow,QAbstractSpinBox::up-arrow:disabled,QAbstractSpinBox::up-arrow:off
{
image:url(:/qss_icons/rc/up_arrow_disabled.png);
width:10px;
height:10px;
}
QSlider::groove:horizontal
{
height:5px;
background:#039be5;
}
QSlider::groove:vertical
{
width:5px;
background:#039be5;
}
QSlider::handle:horizontal
{
border:1px solid #5c5c5c;
width:14px;
border-radius:7px;
background-color:#039be5;
margin:-5px 0;
}
QSlider::handle:vertical
{
border:1px solid #5c5c5c;
height:14px;
border-radius:7px;
background-color:#039be5;
margin:0 -5px;
}
QTreeView,QListView
{
border:1px solid #76797C;
background-color:#fff;
color:#00162e;
}
QListView::item:!selected:hover,QTreeView::item:!selected:hover
{
background:#BBDEFB;
outline:0;
color:#163f6b;
}
QListView::item:selected:hover,QTreeView::item:selected:hover
{
background:#2196F3;
color:#fff;
}
QTableView
{
border:1px solid #76797C;
gridline-color:#bdbdbd;
background-color:#fff;
color:#00162e;
}
QTableView,QHeaderView
{
border-radius:0;
background-color:#fff;
color:#007ac1;
}
QTableCornerButton::section
{
background-color:#bdbdbd;
border:1px transparent #cdcdce;
border-radius:0;
color:#007ac1;
}
QHeaderView::section
{
background-color:#fafcfe;
border-radius:0;
text-align:center;
padding:3px 3px 3px 10px;
}
QScrollBar:horizontal
{
height:15px;
border:1px transparent #9e9e9e;
border-radius:4px;
background-color:#efefef;
margin:3px 15px;
}
QScrollBar::handle:horizontal
{
background-color:#9e9e9e;
min-width:5px;
border-radius:4px;
}
QScrollBar::add-line:horizontal
{
border-image:url(:/qss_icons/rc/right_arrow_disabled.png);
width:10px;
height:10px;
subcontrol-position:right;
subcontrol-origin:margin;
margin:0 3px;
}
QScrollBar::add-line:horizontal:hover,QScrollBar::add-line:horizontal:on
{
border-image:url(:/qss_icons/rc/right_arrow.png);
height:10px;
width:10px;
subcontrol-position:right;
subcontrol-origin:margin;
}
QScrollBar::sub-line:horizontal
{
border-image:url(:/qss_icons/rc/left_arrow_disabled.png);
height:10px;
width:10px;
subcontrol-position:left;
subcontrol-origin:margin;
margin:0 3px;
}
QScrollBar::sub-line:horizontal:hover,QScrollBar::sub-line:horizontal:on
{
border-image:url(:/qss_icons/rc/left_arrow.png);
height:10px;
width:10px;
subcontrol-position:left;
subcontrol-origin:margin;
}
QScrollBar:vertical
{
background-color:#efefef;
width:15px;
border:1px transparent #efefef;
border-radius:4px;
margin:15px 3px;
}
QScrollBar::handle:vertical
{
background-color:#9e9e9e;
min-height:5px;
border-radius:4px;
}
QScrollBar::sub-line:vertical
{
border-image:url(:/qss_icons/rc/up_arrow_disabled.png);
height:10px;
width:10px;
subcontrol-position:top;
subcontrol-origin:margin;
margin:3px 0;
}
QScrollBar::add-line:vertical
{
border-image:url(:/qss_icons/rc/down_arrow_disabled.png);
height:10px;
width:10px;
subcontrol-position:bottom;
subcontrol-origin:margin;
margin:3px 0;
}
QScrollBar::sub-line:vertical:hover,QScrollBar::sub-line:vertical:on
{
border-image:url(:/qss_icons/rc/up_arrow.png);
height:10px;
width:10px;
subcontrol-position:top;
subcontrol-origin:margin;
}
QScrollBar::add-line:vertical:hover,QScrollBar::add-line:vertical:on
{
border-image:url(:/qss_icons/rc/down_arrow.png);
height:10px;
width:10px;
subcontrol-position:bottom;
subcontrol-origin:margin;
}
QLineEdit:hover,QLineEdit:focus
{
border:1px solid #26adfc;
color: #007ac1;
}
QToolTip
{
border-radius:4px;
opacity:200;
border-style:solid;
border-width:2px;
padding:5px;
}
QFrame
{
border-radius:2px;
border:1px solid #c7dce9;
}
QFrame[frameShape="0"]
{
border-radius:2px;
border:1px transparent #c7dce9;
}
QFrame[height="3"],QFrame[width="3"]
{
background-color:#c7dce9;
}
QMainWindow > QTabBar::tab
{
border-bottom-color:#007ac1;
border-top-left-radius:0;
border-top-right-radius:0;
min-width:8px;
max-width:200px;
margin-bottom:3px;
margin-top:3px;
background-color:#fafcfe;
padding:5px;
}
QMenu::indicator
{
border:1px solid #009be2;
border-radius:2px;
margin:3px 3px 3px 4px;
}
QHeaderView::section::horizontal
{
background-color:#fafcfe;
color:#0046af;
}
QMainWindow,QDialog
{
background-color:#fafcfe;
}
QSpinBox,QDoubleSpinBox,QTimeEdit,QDateTimeEdit,QDateEdit,QToolBox,QToolBox::tab
{
color:#00162e;
background-color:#fff;
}
QToolBox::tab:selected,QScrollArea
{
color:#FFF;
background-color:#fff;
}
QSlider::add-page:horizontal,QSlider::add-page:vertical
{
background:#FFF;
}
QSlider::sub-page:horizontal,QSlider::sub-page:vertical
{
background:#039be5;
}
QTableView::item:pressed,QListView::item:pressed,QTreeView::item:pressed,QTableView::item:selected:active,QTreeView::item:selected:active,QListView::item:selected:active
{
background: #bbe0ff;
color:#163f6b;
}
QScrollBar::up-arrow:horizontal,QScrollBar::down-arrow:horizontal,QScrollBar::add-page:horizontal,QScrollBar::sub-page:horizontal,QScrollBar::up-arrow:vertical,QScrollBar::down-arrow:vertical,QScrollBar::add-page:vertical,QScrollBar::sub-page:vertical
{
background:none;
}
QMainWindow > QTabBar::tab:selected,QMainWindow > QTabBar::tab:hover
{
background:#03a9f4;
color:#FFF;
}
QMenu::indicator:non-exclusive:unchecked,QMenu::indicator:non-exclusive:unchecked:selected,QMenu::indicator:exclusive:unchecked
{
background:#ebeef1;
}
QMenu::indicator:non-exclusive:checked,QMenu::indicator:non-exclusive:checked:selected,QMenu::indicator:exclusive:unchecked:selected,QMenu::indicator:exclusive:checked,QMenu::indicator:exclusive:checked:selected
{
background:#03a9f4;
}
QComboBox:hover,QPushButton:hover,QAbstractSpinBox:hover,QLineEdit:hover,QTextEdit:hover,QPlainTextEdit:hover,QAbstractView:hover,QTreeView:hover
{
border:1px solid #3daee9;
}
QTreeView
{
border:1px solid #b7dcf0;
selection-background-color:#bbe0ff;
selection-color:#163f6b;
}
QAbstractSpinBox::down-arrow:hover,QToolButton::menu-arrow,QHeaderView::down-arrow,QSpinBox::down-arrow:hover,QHeaderView::down-arrow
{
image:url(:/qss_icons/rc/down_arrow.png);
}
QHeaderView::up-arrow,QAbstractSpinBox::up-arrow:hover,QHeaderView::up-arrow
{
image:url(:/qss_icons/rc/up_arrow.png);
}
QComboBox::down-arrow,QComboBox::down-arrow:on,QComboBox::down-arrow:hover,QComboBox::down-arrow:focus {
image:url(:/qss_icons/rc/down_arrow_combo.png);
width: 14px;
height: 14px;
}
QSpinBox::down-arrow,QSpinBox::down-arrow:on,QSpinBox::down-arrow:hover,QSpinBox::down-arrow:focus {
image:url(:/qss_icons/rc/down_arrow_combo.png);
border-width: 0px;
}
QSpinBox::up-arrow,QSpinBox::up-arrow:on,QSpinBox::up-arrow:hover,QSpinBox::up-arrow:focus {
image:url(:/qss_icons/rc/up_arrow_combo.png);
border-width: 0px;
}
QLineEdit, QLineEdit[text=""] {
color: #00304d;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 B

View File

@ -0,0 +1,5 @@
<RCC>
<qresource prefix="native">
<file>native.qss</file>
</qresource>
</RCC>

View File

@ -0,0 +1,78 @@
/* QMainWindow */
QHeaderView::section {
padding: 3px;
padding-left: 10px;
/* border: 2px solid white;*/
}
QMainWindow > QTabBar::tab {
border-bottom-color: #2180a9;
border-top-left-radius: 0px;
border-top-right-radius: 0px;
min-width: 8px;
max-width: 200px;
padding: 5px;
margin-bottom: 3px;
margin-top: 3px;
}
QMainWindow > QTabBar::tab:selected {
background: #2180a9;
color: #FFFFFF;
}
QMainWindow > QTabBar::tab:hover {
background: #2180a9; /* #3C879E; */
color: #FFFFFF;
}
QDockWidget::title {
text-align: center;
}
QToolTip {
background-color: #444;
border: 3px solid #444;
color: rgb(232, 232, 232);
font: 11pt "Monaco";
}
/* CutterTreeView */
CutterTreeView::item
{
padding-top: 1px;
padding-bottom: 1px;
}
/* QFilterView */
QToolButton { /* all types of tool button */
border: 2px solid #333;
border-left: 2px solid #333;
border-right: 2px solid #333;
background-color: #333;
color: rgb(255, 255, 255)
}
QToolButton:hover {
border: 2px solid rgb(128, 128, 128);
border-left: 2px solid rgb(128, 128, 128);
border-right: 2px solid rgb(128, 128, 128);
background-color: rgb(128, 128, 128);
color: rgb(255, 255, 255)
}
QToolButton:pressed {
border: 2px solid #2180a9;
border-left: 2px solid #2180a9;
border-right: 2px solid #2180a9;
background-color: #2180a9;
}

View File

@ -282,7 +282,19 @@ static const QMap<QString, OptionIfo> optionInfoMap = {
QObject::tr("Navbar empty"), true QObject::tr("Navbar empty"), true
} }
}, },
{ "gui.breakpoint_background", { "", QObject::tr("Breakpoint background"), true } } { "gui.breakpoint_background", { "", QObject::tr("Breakpoint background"), true } },
{
"gui.tooltip.background", {
QObject::tr("Background color for tooltips"),
QObject::tr("Tooltip background"), true
}
},
{
"gui.tooltip.foreground", {
QObject::tr("Foregorund color for tooltips"),
QObject::tr("Tooltip foreground"), true
}
}
}; };
void ColorOptionDelegate::paint(QPainter *painter, void ColorOptionDelegate::paint(QPainter *painter,

View File

@ -116,7 +116,7 @@
</property> </property>
<property name="icon"> <property name="icon">
<iconset resource="../resources.qrc"> <iconset resource="../resources.qrc">
<normaloff>:/img/icons/arrow_right_light.svg</normaloff>:/img/icons/arrow_right_light.svg</iconset> <normaloff>:/img/icons/arrow_right.svg</normaloff>:/img/icons/arrow_right.svg</iconset>
</property> </property>
<property name="iconSize"> <property name="iconSize">
<size> <size>

View File

@ -423,9 +423,6 @@ void DisassemblerGraphView::drawBlock(QPainter &p, GraphView::GraphBlock &block)
p.setBrush(QColor(0, 0, 0, 100)); p.setBrush(QColor(0, 0, 0, 100));
} }
// Node's shadow effect
p.drawRect(blockX + 2, blockY + 2,
block.width, block.height);
p.setPen(QPen(graphNodeColor, 1)); p.setPen(QPen(graphNodeColor, 1));
if (block_selected) { if (block_selected) {

View File

@ -453,8 +453,9 @@ FunctionsWidget::FunctionsWidget(MainWindow *main, QAction *action) :
// Radare core found in: // Radare core found in:
this->main = main; this->main = main;
setTooltipStylesheet();
connect(Config(), SIGNAL(colorsUpdated()), this, SLOT(setTooltipStylesheet()));
setStyleSheet(QString("QToolTip { max-width: %1px; opacity: 230; }").arg(kMaxTooltipWidth));
// leave the filter visible by default so users know it exists // leave the filter visible by default so users know it exists
//ui->filterLineEdit->setVisible(false); //ui->filterLineEdit->setVisible(false);
@ -684,3 +685,16 @@ void FunctionsWidget::setScrollMode()
{ {
qhelpers::setVerticalScrollMode(ui->functionsTreeView); qhelpers::setVerticalScrollMode(ui->functionsTreeView);
} }
/**
* @brief a SLOT to set the stylesheet for a tooltip
*/
void FunctionsWidget::setTooltipStylesheet()
{
setStyleSheet(QString("QToolTip { border-width: 1px; max-width: %1px;" \
"opacity: 230; background-color: %2;" \
"color: %3; border-color: %3;}")
.arg(kMaxTooltipWidth)
.arg(Config()->getColor("gui.tooltip.background").name())
.arg(Config()->getColor("gui.tooltip.foreground").name()));
}

View File

@ -113,6 +113,7 @@ private slots:
void on_actionHorizontal_triggered(); void on_actionHorizontal_triggered();
void on_actionVertical_triggered(); void on_actionVertical_triggered();
void showTitleContextMenu(const QPoint &pt); void showTitleContextMenu(const QPoint &pt);
void setTooltipStylesheet();
void refreshTree(); void refreshTree();
protected: protected:

View File

@ -55,28 +55,7 @@
</font> </font>
</property> </property>
<property name="styleSheet"> <property name="styleSheet">
<string notr="true">QToolButton { /* all types of tool button */ <string notr="true"></string>
border: 2px solid #333;
border-left: 2px solid #333;
border-right: 2px solid #333;
background-color: #333;
color: rgb(255, 255, 255)
}
QToolButton:hover {
border: 2px solid rgb(128, 128, 128);
border-left: 2px solid rgb(128, 128, 128);
border-right: 2px solid rgb(128, 128, 128);
background-color: rgb(128, 128, 128);
color: rgb(255, 255, 255)
}
QToolButton:pressed {
border: 2px solid #2180a9;
border-left: 2px solid #2180a9;
border-right: 2px solid #2180a9;
background-color: #2180a9;
}</string>
</property> </property>
<property name="text"> <property name="text">
<string>X</string> <string>X</string>

View File

@ -75,7 +75,7 @@ void RegistersWidget::setRegisterGrid()
} }
// decide to highlight QLine Box in case of change of register value // decide to highlight QLine Box in case of change of register value
if (regValue != registerEditValue->text() && registerEditValue->text() != 0) { if (regValue != registerEditValue->text() && registerEditValue->text() != 0) {
registerEditValue->setStyleSheet("QLineEdit {border: 1px solid green;} QLineEdit:hover { border: 1px solid #3daee9; color: #eff0f1;}"); registerEditValue->setStyleSheet("border: 1px solid green;");
} else { } else {
// reset stylesheet // reset stylesheet
registerEditValue->setStyleSheet(""); registerEditValue->setStyleSheet("");