Skip to content

Commit

Permalink
Add decoration colors
Browse files Browse the repository at this point in the history
  • Loading branch information
matinlotfali committed Jul 30, 2023
1 parent 761e3d6 commit 8ea68ab
Show file tree
Hide file tree
Showing 6 changed files with 986 additions and 95 deletions.
39 changes: 33 additions & 6 deletions src/ShapeCornersShader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@
#include <QFile>
#include <QStandardPaths>
#include <kwineffects.h>
#include <QWidget>
#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"));
Expand Down Expand Up @@ -59,19 +61,44 @@ bool isWindowActive(KWin::EffectWindow *w) {

const std::unique_ptr<KWin::GLShader>&
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());
m_shader->setUniform(m_shader_windowSize, QVector2D(w->frameGeometry().width(), w->frameGeometry().height()));
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<QPalette::ColorRole>(ShapeCornersConfig::activeOutlinePalette())):
ShapeCornersConfig::outlineColor();
shadowColor = ShapeCornersConfig::activeShadowUsePalette() ?
m_palette.color(QPalette::Active, static_cast<QPalette::ColorRole>(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<QPalette::ColorRole>(ShapeCornersConfig::inactiveOutlinePalette())):
ShapeCornersConfig::inactiveOutlineColor();
shadowColor = ShapeCornersConfig::inactiveShadowUsePalette() ?
m_palette.color(QPalette::Active, static_cast<QPalette::ColorRole>(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;
}

Expand Down
2 changes: 2 additions & 0 deletions src/ShapeCornersShader.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

#include <kwinglutils.h>
#include <memory>
#include <QPalette>
#include "ShapeCornersConfig.h"

namespace KWin {
Expand All @@ -28,6 +29,7 @@ class ShapeCornersShader {
private:
std::unique_ptr<KWin::GLShader> m_shader;
KWin::ShaderManager* m_manager;
QPalette m_palette;
int m_shader_windowSize = 0;
int m_shader_windowExpandedSize = 0;
int m_shader_windowTopLeft = 0;
Expand Down
56 changes: 56 additions & 0 deletions src/kcm/ShapeCornersKCM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<QPalette::ColorRole>(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<QPalette::ColorRole>(index));
pix.fill(c);
QIcon icon2 (pix);
ui->kcfg_InactiveOutlinePalette->setItemIcon(index, icon2);
ui->kcfg_InactiveShadowPalette->setItemIcon(index, icon2);
}

connect(ui->kcfg_ActiveOutlinePalette, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &ShapeCornersKCM::update_colors);
connect(ui->kcfg_InactiveOutlinePalette, QOverload<int>::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<int>::of(&QComboBox::currentIndexChanged), this, &ShapeCornersKCM::update_colors);
connect(ui->kcfg_ActiveShadowPalette, QOverload<int>::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
Expand All @@ -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<QPalette::ColorRole>(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<QPalette::ColorRole>(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<QPalette::ColorRole>(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<QPalette::ColorRole>(index)): ui->kcfg_InactiveShadowColor->color();
ui->kcfg_InactiveShadowAlpha->setSecondColor(color);
}
1 change: 1 addition & 0 deletions src/kcm/ShapeCornersKCM.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ class ShapeCornersKCM : public KCModule

public slots:
void save() override;
void update_colors();

private:
Ui::Form *ui;
Expand Down
Loading

0 comments on commit 8ea68ab

Please sign in to comment.