diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7c403fb43..8cada0b14 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -144,6 +144,7 @@ find_package(Qt${MAJOR_QT_VERSION} REQUIRED
Gui
Network
Svg
+ SvgWidgets
Concurrent
)
if(CHATTERINO_ALLOW_PRIVATE_QT_API)
diff --git a/resources/settings/hint.svg b/resources/settings/hint.svg
new file mode 100644
index 000000000..46c717242
--- /dev/null
+++ b/resources/settings/hint.svg
@@ -0,0 +1,42 @@
+
+
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index fcf4de534..13bf798f4 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -935,6 +935,7 @@ target_link_libraries(${LIBRARY_PROJECT}
Qt${MAJOR_QT_VERSION}::Gui
Qt${MAJOR_QT_VERSION}::Network
Qt${MAJOR_QT_VERSION}::Svg
+ Qt${MAJOR_QT_VERSION}::SvgWidgets
Qt${MAJOR_QT_VERSION}::Concurrent
LibCommuni::LibCommuni
diff --git a/src/widgets/settingspages/SettingWidget.cpp b/src/widgets/settingspages/SettingWidget.cpp
index feeba6786..0fb9409af 100644
--- a/src/widgets/settingspages/SettingWidget.cpp
+++ b/src/widgets/settingspages/SettingWidget.cpp
@@ -19,6 +19,12 @@
#include
#include
#include
+#include
+#include
+#include
+#include
+
+#include
namespace {
@@ -33,7 +39,8 @@ const QRegularExpression MAX_TOOLTIP_LINE_LENGTH_REGEX(
namespace chatterino {
SettingWidget::SettingWidget(const QString &mainKeyword)
- : vLayout(new QVBoxLayout(this))
+ : tooltipIcon(new QSvgWidget(this))
+ , vLayout(new QVBoxLayout(this))
, hLayout(new QHBoxLayout)
{
this->vLayout->setContentsMargins(0, 0, 0, 0);
@@ -42,6 +49,7 @@ SettingWidget::SettingWidget(const QString &mainKeyword)
this->vLayout->addLayout(this->hLayout);
this->keywords.append(mainKeyword);
+ this->tooltipIcon->setVisible(false);
}
SettingWidget *SettingWidget::checkbox(const QString &label,
@@ -52,6 +60,8 @@ SettingWidget *SettingWidget::checkbox(const QString &label,
auto *check = new SCheckBox(label);
widget->hLayout->addWidget(check);
+ widget->hLayout->addWidget(widget->tooltipIcon);
+ widget->hLayout->addStretch(1);
// update when setting changes
setting.connect(
@@ -80,6 +90,8 @@ SettingWidget *SettingWidget::inverseCheckbox(const QString &label,
auto *check = new SCheckBox(label);
widget->hLayout->addWidget(check);
+ widget->hLayout->addWidget(widget->tooltipIcon);
+ widget->hLayout->addStretch(1);
// update when setting changes
setting.connect(
@@ -109,6 +121,8 @@ SettingWidget *SettingWidget::customCheckbox(
auto *check = new SCheckBox(label);
widget->hLayout->addWidget(check);
+ widget->hLayout->addWidget(widget->tooltipIcon);
+ widget->hLayout->addStretch(1);
check->setChecked(initialValue);
@@ -147,6 +161,7 @@ SettingWidget *SettingWidget::intInput(const QString &label,
}
widget->hLayout->addWidget(lbl);
+ widget->hLayout->addWidget(widget->tooltipIcon);
widget->hLayout->addStretch(1);
widget->hLayout->addWidget(input);
@@ -192,6 +207,7 @@ SettingWidget *SettingWidget::dropdown(const QString &label,
widget->label = lbl;
widget->hLayout->addWidget(lbl);
+ widget->hLayout->addWidget(widget->tooltipIcon);
widget->hLayout->addStretch(1);
widget->hLayout->addWidget(combo);
@@ -265,6 +281,7 @@ SettingWidget *SettingWidget::dropdown(const QString &label,
widget->label = lbl;
widget->hLayout->addWidget(lbl);
+ widget->hLayout->addWidget(widget->tooltipIcon);
widget->hLayout->addStretch(1);
widget->hLayout->addWidget(combo);
@@ -343,6 +360,7 @@ SettingWidget *SettingWidget::dropdown(
widget->label = lbl;
widget->hLayout->addWidget(lbl);
+ widget->hLayout->addWidget(widget->tooltipIcon);
widget->hLayout->addStretch(1);
widget->hLayout->addWidget(combo);
@@ -395,6 +413,7 @@ SettingWidget *SettingWidget::colorButton(const QString &label,
auto *colorButton = new ColorButton(color);
widget->hLayout->addWidget(lbl);
+ widget->hLayout->addWidget(widget->tooltipIcon);
widget->hLayout->addStretch(1);
widget->hLayout->addWidget(colorButton);
@@ -442,6 +461,7 @@ SettingWidget *SettingWidget::lineEdit(const QString &label,
}
widget->hLayout->addWidget(lbl);
+ widget->hLayout->addWidget(widget->tooltipIcon);
widget->hLayout->addWidget(edit);
// Update the setting when the widget changes.
@@ -480,6 +500,7 @@ SettingWidget *SettingWidget::fontButton(const QString &label,
auto *button = new SPushButton(currentFont().family());
widget->hLayout->addWidget(lbl);
+ widget->hLayout->addWidget(widget->tooltipIcon);
widget->hLayout->addStretch(1);
widget->hLayout->addWidget(button);
@@ -519,16 +540,28 @@ SettingWidget *SettingWidget::setTooltip(QString tooltip)
tooltip.replace(MAX_TOOLTIP_LINE_LENGTH_REGEX, "\n");
}
+ int sz = 0;
if (this->label != nullptr)
{
this->label->setToolTip(tooltip);
+ sz = this->label->sizeHint().height();
}
if (this->actionWidget != nullptr)
{
this->actionWidget->setToolTip(tooltip);
+ sz = std::max(sz, this->actionWidget->sizeHint().height());
}
+ this->tooltipIcon->setVisible(true);
+ this->tooltipIcon->load(u":/settings/hint.svg"_qs);
+ this->tooltipIcon->setToolTip(tooltip);
+ auto *r = this->tooltipIcon->renderer();
+ auto vb = r->viewBox();
+ this->tooltipIcon->setFixedHeight(sz);
+ this->tooltipIcon->setFixedWidth(
+ int(double(sz) / double(vb.height()) * double(vb.width())));
+
this->keywords.append(tooltip);
return this;
diff --git a/src/widgets/settingspages/SettingWidget.hpp b/src/widgets/settingspages/SettingWidget.hpp
index 0ed1d2ab3..3957ac5a2 100644
--- a/src/widgets/settingspages/SettingWidget.hpp
+++ b/src/widgets/settingspages/SettingWidget.hpp
@@ -25,6 +25,7 @@
class QFormLayout;
class QLayout;
+class QSvgWidget;
namespace chatterino {
@@ -135,6 +136,7 @@ private:
QWidget *label = nullptr;
QWidget *actionWidget = nullptr;
+ QSvgWidget *tooltipIcon;
QVBoxLayout *vLayout;
QHBoxLayout *hLayout;