diff --git a/src/ShapeCornersShader.cpp b/src/ShapeCornersShader.cpp index fd8c8a1..ba75308 100644 --- a/src/ShapeCornersShader.cpp +++ b/src/ShapeCornersShader.cpp @@ -6,10 +6,12 @@ #include #include #include +#include #include "ShapeCornersShader.h" ShapeCornersShader::ShapeCornersShader(): - m_manager(KWin::ShaderManager::instance()) + m_manager(KWin::ShaderManager::instance()), + m_palette(QWidget().palette()) { const QString shadersDir = IsLegacy()? "kwin/shaders/1.10/": "kwin/shaders/1.40/"; const QString fragmentshader = QStandardPaths::locate(QStandardPaths::GenericDataLocation, shadersDir + QStringLiteral("shapecorners.frag")); @@ -59,6 +61,7 @@ bool isWindowActive(KWin::EffectWindow *w) { const std::unique_ptr& ShapeCornersShader::Bind(KWin::EffectWindow *w) const { + QColor outlineColor, shadowColor; auto xy = QVector2D((w->frameGeometry().left() - w->expandedGeometry().left()), (w->frameGeometry().top() - w->expandedGeometry().top())); m_manager->pushShader(m_shader.get()); @@ -66,12 +69,36 @@ ShapeCornersShader::Bind(KWin::EffectWindow *w) const { m_shader->setUniform(m_shader_windowExpandedSize, QVector2D(w->expandedGeometry().width(), w->expandedGeometry().height())); m_shader->setUniform(m_shader_windowTopLeft, xy); m_shader->setUniform(m_shader_windowHasDecoration, w->hasDecoration()); - m_shader->setUniform(m_shader_shadowColor, isWindowActive(w) ? ShapeCornersConfig::shadowColor(): ShapeCornersConfig::inactiveShadowColor()); - m_shader->setUniform(m_shader_shadowSize, isWindowActive(w) ? (float)ShapeCornersConfig::shadowSize(): (float)ShapeCornersConfig::inactiveShadowSize()); - m_shader->setUniform(m_shader_radius, (float)ShapeCornersConfig::size()); - m_shader->setUniform(m_shader_outlineColor, isWindowActive(w) ? ShapeCornersConfig::outlineColor() : ShapeCornersConfig::inactiveOutlineColor()); - m_shader->setUniform(m_shader_outlineThickness, (float)ShapeCornersConfig::outlineThickness()); m_shader->setUniform(m_shader_front, 0); + if (isWindowActive(w)) { + m_shader->setUniform(m_shader_shadowSize, (float)ShapeCornersConfig::shadowSize()); + m_shader->setUniform(m_shader_radius, (float)ShapeCornersConfig::size()); + m_shader->setUniform(m_shader_outlineThickness, (float)ShapeCornersConfig::outlineThickness()); + + outlineColor = ShapeCornersConfig::activeOutlineUsePalette() ? + m_palette.color(QPalette::Active, static_cast(ShapeCornersConfig::activeOutlinePalette())): + ShapeCornersConfig::outlineColor(); + shadowColor = ShapeCornersConfig::activeShadowUsePalette() ? + m_palette.color(QPalette::Active, static_cast(ShapeCornersConfig::activeShadowPalette())): + ShapeCornersConfig::shadowColor(); + outlineColor.setAlpha(ShapeCornersConfig::activeOutlineAlpha()); + shadowColor.setAlpha(ShapeCornersConfig::activeShadowAlpha()); + } else { + m_shader->setUniform(m_shader_shadowSize, (float)ShapeCornersConfig::inactiveShadowSize()); + m_shader->setUniform(m_shader_radius, (float)ShapeCornersConfig::inactiveCornerRadius()); + m_shader->setUniform(m_shader_outlineThickness, (float)ShapeCornersConfig::inactiveOutlineThickness()); + + outlineColor = ShapeCornersConfig::inactiveOutlineUsePalette() ? + m_palette.color(QPalette::Active, static_cast(ShapeCornersConfig::inactiveOutlinePalette())): + ShapeCornersConfig::inactiveOutlineColor(); + shadowColor = ShapeCornersConfig::inactiveShadowUsePalette() ? + m_palette.color(QPalette::Active, static_cast(ShapeCornersConfig::inactiveShadowPalette())): + ShapeCornersConfig::inactiveShadowColor(); + outlineColor.setAlpha(ShapeCornersConfig::inactiveOutlineAlpha()); + shadowColor.setAlpha(ShapeCornersConfig::inactiveShadowAlpha()); + } + m_shader->setUniform(m_shader_outlineColor, outlineColor); + m_shader->setUniform(m_shader_shadowColor, shadowColor); return m_shader; } diff --git a/src/ShapeCornersShader.h b/src/ShapeCornersShader.h index 566523d..0d2c3b0 100644 --- a/src/ShapeCornersShader.h +++ b/src/ShapeCornersShader.h @@ -7,6 +7,7 @@ #include #include +#include #include "ShapeCornersConfig.h" namespace KWin { @@ -28,6 +29,7 @@ class ShapeCornersShader { private: std::unique_ptr m_shader; KWin::ShaderManager* m_manager; + QPalette m_palette; int m_shader_windowSize = 0; int m_shader_windowExpandedSize = 0; int m_shader_windowTopLeft = 0; diff --git a/src/kcm/ShapeCornersKCM.cpp b/src/kcm/ShapeCornersKCM.cpp index 9faf62c..736b1b7 100644 --- a/src/kcm/ShapeCornersKCM.cpp +++ b/src/kcm/ShapeCornersKCM.cpp @@ -13,6 +13,36 @@ ShapeCornersKCM::ShapeCornersKCM(QWidget* parent, const QVariantList& args) { ui->setupUi(this); addConfig(ShapeCornersConfig::self(), this); + update_colors(); + + QPixmap pix (16, 16); + for (int index = 0; index < ui->kcfg_ActiveOutlinePalette->count(); ++index) { + auto c = palette().color(QPalette::Active, static_cast(index)); + pix.fill(c); + QIcon icon (pix); + ui->kcfg_ActiveOutlinePalette->setItemIcon(index, icon); + ui->kcfg_ActiveShadowPalette->setItemIcon(index, icon); + + c = palette().color(QPalette::Inactive, static_cast(index)); + pix.fill(c); + QIcon icon2 (pix); + ui->kcfg_InactiveOutlinePalette->setItemIcon(index, icon2); + ui->kcfg_InactiveShadowPalette->setItemIcon(index, icon2); + } + + connect(ui->kcfg_ActiveOutlinePalette, QOverload::of(&QComboBox::currentIndexChanged), this, &ShapeCornersKCM::update_colors); + connect(ui->kcfg_InactiveOutlinePalette, QOverload::of(&QComboBox::currentIndexChanged), this, &ShapeCornersKCM::update_colors); + connect(ui->kcfg_OutlineColor, &KColorButton::changed, this, &ShapeCornersKCM::update_colors); + connect(ui->kcfg_InactiveOutlineColor, &KColorButton::changed, this, &ShapeCornersKCM::update_colors); + connect(ui->kcfg_ActiveOutlineUsePalette, &QRadioButton::toggled, this, &ShapeCornersKCM::update_colors); + connect(ui->kcfg_InactiveOutlineUsePalette, &QRadioButton::toggled, this, &ShapeCornersKCM::update_colors); + + connect(ui->kcfg_ActiveShadowPalette, QOverload::of(&QComboBox::currentIndexChanged), this, &ShapeCornersKCM::update_colors); + connect(ui->kcfg_ActiveShadowPalette, QOverload::of(&QComboBox::currentIndexChanged), this, &ShapeCornersKCM::update_colors); + connect(ui->kcfg_ShadowColor, &KColorButton::changed, this, &ShapeCornersKCM::update_colors); + connect(ui->kcfg_InactiveShadowColor, &KColorButton::changed, this, &ShapeCornersKCM::update_colors); + connect(ui->kcfg_ActiveShadowUsePalette, &QRadioButton::toggled, this, &ShapeCornersKCM::update_colors); + connect(ui->kcfg_InactiveShadowUsePalette, &QRadioButton::toggled, this, &ShapeCornersKCM::update_colors); } void @@ -29,3 +59,29 @@ ShapeCornersKCM::save() ShapeCornersKCM::~ShapeCornersKCM() { delete ui; } + +void ShapeCornersKCM::update_colors() { + QColor color; + bool checked; + int index; + + checked = ui->kcfg_ActiveOutlineUsePalette->isChecked(); + index = ui->kcfg_ActiveOutlinePalette->currentIndex(); + color = checked ? palette().color(QPalette::Active, static_cast(index)): ui->kcfg_OutlineColor->color(); + ui->kcfg_ActiveOutlineAlpha->setSecondColor(color); + + checked = ui->kcfg_InactiveOutlineUsePalette->isChecked(); + index = ui->kcfg_InactiveOutlinePalette->currentIndex(); + color = checked ? palette().color(QPalette::Inactive, static_cast(index)): ui->kcfg_InactiveOutlineColor->color(); + ui->kcfg_InactiveOutlineAlpha->setSecondColor(color); + + checked = ui->kcfg_ActiveShadowUsePalette->isChecked(); + index = ui->kcfg_ActiveShadowPalette->currentIndex(); + color = checked ? palette().color(QPalette::Active, static_cast(index)): ui->kcfg_ShadowColor->color(); + ui->kcfg_ActiveShadowAlpha->setSecondColor(color); + + checked = ui->kcfg_InactiveShadowUsePalette->isChecked(); + index = ui->kcfg_InactiveShadowPalette->currentIndex(); + color = checked ? palette().color(QPalette::Inactive, static_cast(index)): ui->kcfg_InactiveShadowColor->color(); + ui->kcfg_InactiveShadowAlpha->setSecondColor(color); +} diff --git a/src/kcm/ShapeCornersKCM.h b/src/kcm/ShapeCornersKCM.h index ec9576c..476f266 100644 --- a/src/kcm/ShapeCornersKCM.h +++ b/src/kcm/ShapeCornersKCM.h @@ -12,6 +12,7 @@ class ShapeCornersKCM : public KCModule public slots: void save() override; + void update_colors(); private: Ui::Form *ui; diff --git a/src/kcm/ShapeCornersKCM.ui b/src/kcm/ShapeCornersKCM.ui index daa3b51..1529944 100644 --- a/src/kcm/ShapeCornersKCM.ui +++ b/src/kcm/ShapeCornersKCM.ui @@ -6,8 +6,8 @@ 0 0 - 400 - 390 + 658 + 494 @@ -19,181 +19,915 @@ Form - - - + + + - - - Roundness Radius + + + Active Window + + + + + + + Corner Roundness Radius + + + + + + + + + - - - 1 - - - 50 - - - 1 - - - Qt::Horizontal + + + Inactive Window + + + + + + + Corner Roundness Radius + + + + + + + + + + + + + - + - Outline - - - false + Active Outline - + - - - Qt::AlignHCenter|Qt::AlignTop - + - + - Active Window Outline Color + Outline Thickness - - - true + + + + + + Outline Transparency - - - - Thickness + + + + + 0 + 0 + + + + + 30 + 30 + + + + + 16777215 + 30 + + + + 99 + + + 255 + + + true + + + Qt::UpArrow + + + + 0 + 0 + 0 + + + + + 0 + 0 + 0 + - - - 1 + + + + 0 + 0 + - - 0.500000000000000 + + Highlight - - 10.000000000000000 + + 12 - - 0.500000000000000 + + + WindowText + + + + + Button + + + + + Light + + + + + Midlight + + + + + Dark + + + + + Mid + + + + + Text + + + + + BrightText + + + + + ButtonText + + + + + Base + + + + + Window + + + + + Shadow + + + + + Highlight + + + + + HighlightedText + + + + + Link + + + + + LinkVisited + + + + + AlternateBase + + + + + NoRole + + + + + ToolTipBase + + + + + ToolTipText + + + + + PlaceholderText + + + + + + + + Use Decoration Color - - 1.000000000000000 + + + + + + + + + Use Custom Color + + + + + + + + + + + + Inactive Outline + + + + + + + + Outline Thickness + + + - + - Inactive Window Outline Color + Outline Transparency - - + + + + 0 + 0 + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + 99 + + + 255 + + true + + Qt::UpArrow + + + + 0 + 0 + 0 + + + + + 0 + 0 + 0 + + + + + + + + Use Decoration Color + + + + + + + + 0 + 0 + + + + Highlight + + + 12 + + + + WindowText + + + + + Button + + + + + Light + + + + + Midlight + + + + + Dark + + + + + Mid + + + + + Text + + + + + BrightText + + + + + ButtonText + + + + + Base + + + + + Window + + + + + Shadow + + + + + Highlight + + + + + HighlightedText + + + + + Link + + + + + LinkVisited + + + + + AlternateBase + + + + + NoRole + + + + + ToolTipBase + + + + + ToolTipText + + + + + PlaceholderText + + + + + + Use Custom Color + + + + + + + + + + - + - Shadows + Active Shadow - + - - - Qt::AlignHCenter|Qt::AlignTop - + - + - Active Window Shadow Color + Shadow Size - - - true + + + + + + Initial Transparency - - - 1 + + + + 0 + 0 + + + + + 0 + 30 + + + + + 16777215 + 30 + - 50 + 255 + + + 255 + + + Qt::UpArrow - - Qt::Horizontal + + + 0 + 0 + 0 + + + + + 0 + 0 + 0 + - - - - 1 + + + + Use Decoration Color - - 50 + + + + + + + 0 + 0 + - - Qt::Horizontal + + WindowText + + + WindowText + + + + + Button + + + + + Light + + + + + Midlight + + + + + Dark + + + + + Mid + + + + + Text + + + + + BrightText + + + + + ButtonText + + + + + Base + + + + + Window + + + + + Shadow + + + + + Highlight + + + + + HighlightedText + + + + + Link + + + + + LinkVisited + + + + + AlternateBase + + + + + NoRole + + + + + ToolTipBase + + + + + ToolTipText + + + + + PlaceholderText + + - - + + - Active Window Shadow Size + Use Custom Color - + + + + false + + + + + + + + + + + + Inactive Shadow + + + + + - Inactive Window Shadow Size + Shadow Size + + + + + + + + + + Initial Transparency + + + + + + + + 0 + 0 + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + 255 + + + 255 + + + Qt::UpArrow + + + + 0 + 0 + 0 + + + + + 0 + 0 + 0 + - + - Inactive Window Shadow Color + Use Decoration Color + + + + 0 + 0 + + + + WindowText + + + + WindowText + + + + + Button + + + + + Light + + + + + Midlight + + + + + Dark + + + + + Mid + + + + + Text + + + + + BrightText + + + + + ButtonText + + + + + Base + + + + + Window + + + + + Shadow + + + + + Highlight + + + + + HighlightedText + + + + + Link + + + + + LinkVisited + + + + + AlternateBase + + + + + NoRole + + + + + ToolTipBase + + + + + ToolTipText + + + + + PlaceholderText + + + + + + + + Use Custom Color + + + + - true + false @@ -204,7 +938,7 @@ - + Qt::Vertical @@ -225,6 +959,11 @@ QPushButton
kcolorbutton.h
+ + KGradientSelector + QWidget +
kselector.h
+
diff --git a/src/options.kcfg b/src/options.kcfg index 57ed482..fc5b987 100644 --- a/src/options.kcfg +++ b/src/options.kcfg @@ -8,6 +8,9 @@ 10 + + 10 + 25 1 @@ -24,6 +27,13 @@ 1 + 0 + 20 + + + 1 + 0 + 20 black @@ -31,5 +41,61 @@ black + + 255 + 0 + 255 + + + 255 + 0 + 255 + + + 12 + + + 12 + + + false + + + false + + + true + + + true + + + 255 + 0 + 255 + + + 255 + 0 + 255 + + + 11 + + + 11 + + + true + + + true + + + false + + + false + \ No newline at end of file