Skip to content

Commit 7f05b85

Browse files
authored
Merge pull request #269 from kfh83/master
Aero Backdrop Update v2
2 parents a2d18f5 + 43abe6c commit 7f05b85

3 files changed

Lines changed: 117 additions & 78 deletions

File tree

Common/Common.cpp

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -154,20 +154,19 @@ namespace MDWMBlurGlass
154154
ret = Utils::GetIniString(path, L"config", L"glassIntensity");
155155
if (!ret.empty())
156156
cfgData.glassIntensity = (float)std::clamp(_wtof(ret.data()), 0.0, 1.0);
157-
ret = Utils::GetIniString(path, L"config.aero", L"activeColorBalance");
157+
ret = Utils::GetIniString(path, L"config.aero", L"ColorizationColorBalance");
158158
if (!ret.empty())
159-
cfgData.activeColorBalance = (float)std::clamp(_wtof(ret.data()), 0.0, 1.0);
160-
ret = Utils::GetIniString(path, L"config.aero", L"inactiveColorBalance");
161-
if (!ret.empty())
162-
cfgData.inactiveColorBalance = (float)std::clamp(_wtof(ret.data()), 0.0, 1.0);
159+
cfgData.ColorizationColorBalance = (float)std::clamp(_wtof(ret.data()), 0.0, 100.0);
163160

164-
ret = Utils::GetIniString(path, L"config.aero", L"activeBlurBalance");
161+
ret = Utils::GetIniString(path, L"config.aero", L"ColorizationAfterglowBalance");
165162
if (!ret.empty())
166-
cfgData.activeBlurBalance = (float)std::clamp(_wtof(ret.data()), -1.0, 1.0);
167-
ret = Utils::GetIniString(path, L"config.aero", L"inactiveBlurBalance");
163+
cfgData.ColorizationAfterglowBalance = (float)std::clamp(_wtof(ret.data()), 0.0, 100.0);
164+
165+
ret = Utils::GetIniString(path, L"config.aero", L"ColorizationBlurBalance");
168166
if (!ret.empty())
169-
cfgData.inactiveBlurBalance = (float)std::clamp(_wtof(ret.data()), -1.0, 1.0);
170-
//
167+
cfgData.ColorizationBlurBalance = (float)std::clamp(_wtof(ret.data()), 0.0, 100.0);
168+
169+
171170

172171
ret = Utils::GetIniString(path, L"config", L"effectType");
173172
if (!ret.empty())
@@ -203,10 +202,9 @@ namespace MDWMBlurGlass
203202

204203
// newly added params since 2.1.0
205204
Utils::SetIniString(path, L"config", L"glassIntensity", std::to_wstring(cfg.glassIntensity));
206-
Utils::SetIniString(path, L"config.aero", L"activeColorBalance", std::to_wstring(cfg.activeColorBalance));
207-
Utils::SetIniString(path, L"config.aero", L"inactiveColorBalance", std::to_wstring(cfg.inactiveColorBalance));
208-
Utils::SetIniString(path, L"config.aero", L"activeBlurBalance", std::to_wstring(cfg.activeBlurBalance));
209-
Utils::SetIniString(path, L"config.aero", L"inactiveBlurBalance", std::to_wstring(cfg.inactiveBlurBalance));
205+
Utils::SetIniString(path, L"config.aero", L"ColorizationColorBalance", std::to_wstring(cfg.ColorizationColorBalance));
206+
Utils::SetIniString(path, L"config.aero", L"ColorizationAfterglowBalance", std::to_wstring(cfg.ColorizationAfterglowBalance));
207+
Utils::SetIniString(path, L"config.aero", L"BlurBalance", std::to_wstring(cfg.ColorizationBlurBalance));
210208

211209
Utils::SetIniString(path, L"config", L"activeTextColor", std::to_wstring(cfg.activeTextColor));
212210
Utils::SetIniString(path, L"config", L"inactiveTextColor", std::to_wstring(cfg.inactiveTextColor));

Common/Common.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,9 @@ namespace MDWMBlurGlass
5959

6060
// these settings are optimal for the default Sky color from Windows 7
6161
// newly added params since 2.1.0
62-
float activeColorBalance = 0.08f;
63-
float inactiveColorBalance = 0.032f;
64-
float activeBlurBalance = -0.125f;
65-
float inactiveBlurBalance = 0.365f;
62+
float ColorizationColorBalance = 8.0f;
63+
float ColorizationAfterglowBalance = 43.0f;
64+
float ColorizationBlurBalance = 49.0f;
6665

6766
COLORREF activeTextColor = 0xFF000000;
6867
COLORREF inactiveTextColor = 0xFFB4B4B4;

DWMBlurGlassExt/Backdrops/AeroBackdrop.hpp

Lines changed: 102 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "../Effects/BlendEffect.hpp"
88
#include "../Effects/ExposureEffect.hpp"
99
#include "../Effects/CompositeEffect.hpp"
10+
#include "../Effects/SaturationEffect.hpp"
1011

1112
namespace MDWMBlurGlassExt
1213
{
@@ -44,67 +45,106 @@ namespace MDWMBlurGlassExt
4445
bool hostBackdrop
4546
) try
4647
{
47-
// New Aero backdrop recipe by @ALTaleX531 (https://github.com/ALTaleX531/MDWMBlurGlassExt), @aubymori (normal layer fixes)
48-
// @kfh83 for porting to DWMBlurGlass and minor modifications
48+
// New Aero backdrop recive v2, thx 2 @aubymori and @wackyideas for some help
4949

50-
auto colorEffect{ winrt::make_self<ColorSourceEffect>() };
51-
colorEffect->SetName(L"MainColor");
52-
colorEffect->SetColor(mainColor);
50+
// define the colors used
5351

54-
auto colorOpacityEffect{ winrt::make_self<OpacityEffect>() };
55-
colorOpacityEffect->SetName(L"MainColorOpacity");
56-
colorOpacityEffect->SetInput(*colorEffect);
57-
colorOpacityEffect->SetOpacity(colorBalance);
52+
// before you ask why i have 3 of the color black, ask Direct2D first why i can't just reuse this color
5853

59-
auto glowColorEffect{ winrt::make_self<ColorSourceEffect>() };
60-
glowColorEffect->SetName(L"GlowColor");
61-
glowColorEffect->SetColor(glowColor);
54+
winrt::Windows::UI::Color black{ 255,0,0,0 };
55+
winrt::Windows::UI::Color black2{ 255,0,0,0 };
56+
winrt::Windows::UI::Color black3{ 255,0,0,0 };
6257

63-
auto glowOpacityEffect{ winrt::make_self<OpacityEffect>() };
64-
glowOpacityEffect->SetName(L"GlowColorOpacity");
65-
glowOpacityEffect->SetInput(*glowColorEffect);
66-
glowOpacityEffect->SetOpacity(glowBalance);
58+
auto ColorizationColor{ winrt::make_self<ColorSourceEffect>() };
59+
ColorizationColor->SetName(L"MainColor");
60+
ColorizationColor->SetColor(mainColor);
6761

68-
auto blurredBackdropBalanceEffect{ winrt::make_self<ExposureEffect>() };
69-
blurredBackdropBalanceEffect->SetName(L"BlurBalance");
70-
blurredBackdropBalanceEffect->SetExposureAmount(blurBalance);
62+
auto ColorizationAfterglow{ winrt::make_self<ColorSourceEffect>() };
63+
ColorizationAfterglow->SetName(L"GlowColor");
64+
ColorizationAfterglow->SetColor(glowColor);
7165

72-
if (hostBackdrop)
73-
{
74-
blurredBackdropBalanceEffect->SetInput(winrt::Windows::UI::Composition::CompositionEffectSourceParameter{ L"Backdrop" });
75-
}
76-
else
77-
{
78-
auto gaussianBlurEffect{ winrt::make_self<GaussianBlurEffect>() };
79-
gaussianBlurEffect->SetName(L"Blur");
80-
gaussianBlurEffect->SetBorderMode(D2D1_BORDER_MODE_HARD);
81-
gaussianBlurEffect->SetBlurAmount(blurAmount);
82-
gaussianBlurEffect->SetInput(winrt::Windows::UI::Composition::CompositionEffectSourceParameter{ L"Backdrop" });
83-
blurredBackdropBalanceEffect->SetInput(*gaussianBlurEffect);
84-
}
66+
// again this is disgusting and i hate that i have to use it, but Direct2D will NOT let me use brushes & colors
67+
68+
auto BalanceBackdrop{ winrt::make_self<ColorSourceEffect>() }; // used to blend against the layers thus acting as the balance
69+
BalanceBackdrop->SetColor(black);
70+
71+
auto BalanceBackdrop2{ winrt::make_self<ColorSourceEffect>() }; // used to blend against the layers thus acting as the balance
72+
BalanceBackdrop2->SetColor(black2);
73+
74+
auto BalanceBackdrop3{ winrt::make_self<ColorSourceEffect>() }; // used to blend against the layers thus acting as the balance
75+
BalanceBackdrop3->SetColor(black3);
76+
77+
// gaussian blur backdrop
78+
79+
// apparently i CANNOT REUSE brushes... so here goes 2 gaussian blur brushes !!!
80+
81+
auto AfterglowBlur{ winrt::make_self<GaussianBlurEffect>() };
82+
AfterglowBlur->SetBorderMode(D2D1_BORDER_MODE_HARD);
83+
AfterglowBlur->SetBlurAmount(blurAmount);
84+
AfterglowBlur->SetInput(winrt::Windows::UI::Composition::CompositionEffectSourceParameter{ L"Backdrop" });
8585

86-
auto glowBlendEffect{ winrt::make_self<BlendEffect>() };
87-
glowBlendEffect->SetBlendMode(D2D1_BLEND_MODE_MULTIPLY);
88-
glowBlendEffect->SetBackground(*blurredBackdropBalanceEffect);
89-
glowBlendEffect->SetForeground(*glowOpacityEffect);
86+
auto RegularBlur{ winrt::make_self<GaussianBlurEffect>() };
87+
RegularBlur->SetBorderMode(D2D1_BORDER_MODE_HARD);
88+
RegularBlur->SetBlurAmount(blurAmount);
89+
RegularBlur->SetInput(winrt::Windows::UI::Composition::CompositionEffectSourceParameter{ L"Backdrop" });
9090

91-
auto glowBalanceEffect{ winrt::make_self<ExposureEffect>() };
92-
glowBalanceEffect->SetName(L"GlowBalance");
93-
glowBalanceEffect->SetExposureAmount(glowBalance / 10.f);
94-
glowBalanceEffect->SetInput(*glowBlendEffect);
91+
// ColorizationColor -- render semi-transparent color over black bg
9592

96-
auto compositeEffect{ winrt::make_self<CompositeStepEffect>() };
97-
compositeEffect->SetCompositeMode(D2D1_COMPOSITE_MODE_SOURCE_OVER);
98-
compositeEffect->SetName(L"Composite");
99-
compositeEffect->SetDestination(*glowBalanceEffect);
100-
compositeEffect->SetSource(*colorOpacityEffect);
93+
auto ColorizationColorBalance{ winrt::make_self<OpacityEffect>() };
94+
ColorizationColorBalance->SetInput(*ColorizationColor);
95+
ColorizationColorBalance->SetOpacity(colorBalance);
10196

102-
auto colorBalanceEffect{ winrt::make_self<ExposureEffect>() };
103-
colorBalanceEffect->SetName(L"ColorBalance");
104-
colorBalanceEffect->SetExposureAmount(colorBalance / 10.f);
105-
colorBalanceEffect->SetInput(*compositeEffect);
97+
auto ColorizationColorRender{ winrt::make_self<CompositeStepEffect>() };
98+
ColorizationColorRender->SetCompositeMode(D2D1_COMPOSITE_MODE_SOURCE_OVER);
99+
ColorizationColorRender->SetDestination(*BalanceBackdrop);
100+
ColorizationColorRender->SetSource(*ColorizationColorBalance);
106101

107-
auto effectBrush{ compositor.CreateEffectFactory(*colorBalanceEffect).CreateBrush() };
102+
// ColorizationAfterglow -- multiply over b&w bg, over black bg
103+
104+
auto CAGSetSaturation{ winrt::make_self<SaturationEffect>() };
105+
CAGSetSaturation->SetInput(*AfterglowBlur);
106+
CAGSetSaturation->SetSaturation(0);
107+
108+
auto ColorizationAfterglowBlend{ winrt::make_self<BlendEffect>() };
109+
ColorizationAfterglowBlend->SetBlendMode(D2D1_BLEND_MODE_MULTIPLY);
110+
ColorizationAfterglowBlend->SetBackground(*CAGSetSaturation);
111+
ColorizationAfterglowBlend->SetForeground(*ColorizationAfterglow);
112+
113+
auto ColorizationAfterglowBalance{ winrt::make_self<OpacityEffect>() };
114+
ColorizationAfterglowBalance->SetInput(*ColorizationAfterglowBlend);
115+
ColorizationAfterglowBalance->SetOpacity(glowBalance);
116+
117+
auto ColorizationAfterglowRender{ winrt::make_self<CompositeStepEffect>() };
118+
ColorizationAfterglowRender->SetCompositeMode(D2D1_COMPOSITE_MODE_SOURCE_OVER);
119+
ColorizationAfterglowRender->SetDestination(*BalanceBackdrop2);
120+
ColorizationAfterglowRender->SetSource(*ColorizationAfterglowBalance);
121+
122+
// ColorizationBlurBalance -- gaussian blur over black bg
123+
124+
auto ColorizationBlurBalance{ winrt::make_self<OpacityEffect>() };
125+
ColorizationBlurBalance->SetName(L"gaussianBlurEffect");
126+
ColorizationBlurBalance->SetInput(*RegularBlur);
127+
ColorizationBlurBalance->SetOpacity(blurBalance);
128+
129+
auto ColorizationBlurBalanceRender{ winrt::make_self<CompositeStepEffect>() };
130+
ColorizationBlurBalanceRender->SetCompositeMode(D2D1_COMPOSITE_MODE_SOURCE_OVER);
131+
ColorizationBlurBalanceRender->SetName(L"ColorizationBlurBalanceRender");
132+
ColorizationBlurBalanceRender->SetDestination(*BalanceBackdrop3);
133+
ColorizationBlurBalanceRender->SetSource(*ColorizationBlurBalance);
134+
135+
// blend everything together with ADDITIVE BLENDING... it's not color dodge folks!!!
136+
137+
auto ColorOverBlur{ winrt::make_self<CompositeStepEffect>() };
138+
ColorOverBlur->SetCompositeMode(D2D1_COMPOSITE_MODE_PLUS);
139+
ColorOverBlur->SetDestination(*ColorizationAfterglowRender);
140+
ColorOverBlur->SetSource(*ColorizationColorRender);
141+
142+
auto BlendOverBlur{ winrt::make_self<CompositeStepEffect>() };
143+
BlendOverBlur->SetCompositeMode(D2D1_COMPOSITE_MODE_PLUS);
144+
BlendOverBlur->SetDestination(*ColorizationBlurBalanceRender);
145+
BlendOverBlur->SetSource(*ColorOverBlur);
146+
147+
auto effectBrush{ compositor.CreateEffectFactory(*BlendOverBlur).CreateBrush() };
108148
if (hostBackdrop)
109149
{
110150
effectBrush.SetSourceParameter(L"Backdrop", compositor.CreateHostBackdropBrush());
@@ -132,18 +172,20 @@ namespace MDWMBlurGlassExt
132172
lightMode_Active_GlowColor = lightMode_Active_Color;
133173
lightMode_Inactive_GlowColor = lightMode_Inactive_Color;
134174

135-
lightMode_Active_ColorBalance = g_configData.activeColorBalance;
136-
lightMode_Inactive_ColorBalance = g_configData.inactiveColorBalance;
137-
darkMode_Active_ColorBalance = g_configData.activeColorBalance;
138-
darkMode_Inactive_ColorBalance = g_configData.inactiveColorBalance;
175+
// please altalex keep this as is or atleast try to keep this behavior
176+
177+
lightMode_Active_ColorBalance = g_configData.ColorizationColorBalance / 100.0f;
178+
lightMode_Inactive_ColorBalance = lightMode_Active_ColorBalance * 0.4f;
179+
darkMode_Active_ColorBalance = g_configData.ColorizationColorBalance / 100.0f;
180+
darkMode_Inactive_ColorBalance = darkMode_Active_ColorBalance * 0.4f;
139181

140-
lightMode_Active_GlowBalance = GetFloatAlpha(g_configData.activeBlendColor);
141-
lightMode_Inactive_GlowBalance = GetFloatAlpha(g_configData.inactiveBlendColor);
142-
darkMode_Active_GlowBalance = GetFloatAlpha(g_configData.activeBlendColorDark);
143-
darkMode_Inactive_GlowBalance = GetFloatAlpha(g_configData.inactiveBlendColorDark);
182+
lightMode_Active_GlowBalance = g_configData.ColorizationAfterglowBalance / 100.0f;
183+
lightMode_Inactive_GlowBalance = g_configData.ColorizationAfterglowBalance / 100.0f;
184+
darkMode_Active_GlowBalance = g_configData.ColorizationAfterglowBalance / 100.0f;
185+
darkMode_Inactive_GlowBalance = g_configData.ColorizationAfterglowBalance / 100.0f;
144186

145-
Active_BlurBalance = g_configData.activeBlurBalance;
146-
Inactive_BlurBalance = g_configData.inactiveBlurBalance;
187+
Active_BlurBalance = g_configData.ColorizationBlurBalance / 100.0f;
188+
Inactive_BlurBalance = (Active_BlurBalance * 0.4) + 0.60;
147189

148190
blurAmount = g_configData.customBlurAmount;
149191
}

0 commit comments

Comments
 (0)