Fix breakage after hyprland#4911

This commit is contained in:
outfoxxed 2024-03-06 02:02:07 -08:00
parent ca20df2f17
commit a392bfd13c
No known key found for this signature in database
GPG key ID: 4C88A185FB89301E
4 changed files with 71 additions and 72 deletions

13
flake.lock generated
View file

@ -10,13 +10,12 @@
"xdph": "xdph" "xdph": "xdph"
}, },
"locked": { "locked": {
"lastModified": 1709080360, "lastModified": 1709339717,
"narHash": "sha256-oZe4k6jtO/0govmERGcbeyvE9EfTvXY5bnyIs6AsL9U=", "narHash": "sha256-VXh6tiY1+Tmaz+dgUNE5IpWaFq4wbf/iCTHclGm33vA=",
"ref": "v0.36.0", "owner": "hyprwm",
"rev": "1c460e98f870676b15871fe4e5bfeb1a32a3d6d8", "repo": "Hyprland",
"revCount": 4102, "rev": "b2c34404777ea0850f90f4c38f64484f03599d14",
"type": "git", "type": "github"
"url": "file:///home/admin/programming/outfoxxed/hyprland/Hyprland"
}, },
"original": { "original": {
"owner": "hyprwm", "owner": "hyprwm",

View file

@ -487,8 +487,8 @@ void Hy3Layout::resizeActiveWindow(const Vector2D& delta, eRectCorner corner, CW
} else if (window->m_bIsFloating) { } else if (window->m_bIsFloating) {
// No parent node - is this a floating window? If so, use the same logic as the `main` layout // No parent node - is this a floating window? If so, use the same logic as the `main` layout
const auto required_size = Vector2D( const auto required_size = Vector2D(
std::max((window->m_vRealSize.goalv() + delta).x, 20.0), std::max((window->m_vRealSize.goal() + delta).x, 20.0),
std::max((window->m_vRealSize.goalv() + delta).y, 20.0) std::max((window->m_vRealSize.goal() + delta).y, 20.0)
); );
window->m_vRealSize = required_size; window->m_vRealSize = required_size;
} }
@ -530,10 +530,10 @@ void Hy3Layout::fullscreenRequestForWindow(
// save position and size if floating // save position and size if floating
if (window->m_bIsFloating) { if (window->m_bIsFloating) {
window->m_vLastFloatingPosition = window->m_vRealPosition.goalv(); window->m_vLastFloatingPosition = window->m_vRealPosition.goal();
window->m_vPosition = window->m_vRealPosition.goalv(); window->m_vPosition = window->m_vRealPosition.goal();
window->m_vLastFloatingSize = window->m_vRealSize.goalv(); window->m_vLastFloatingSize = window->m_vRealSize.goal();
window->m_vSize = window->m_vRealSize.goalv(); window->m_vSize = window->m_vRealSize.goal();
} }
if (fullscreen_mode == FULLSCREEN_FULL) { if (fullscreen_mode == FULLSCREEN_FULL) {
@ -573,7 +573,7 @@ void Hy3Layout::fullscreenRequestForWindow(
} }
g_pCompositor->updateWindowAnimatedDecorationValues(window); g_pCompositor->updateWindowAnimatedDecorationValues(window);
g_pXWaylandManager->setWindowSize(window, window->m_vRealSize.goalv()); g_pXWaylandManager->setWindowSize(window, window->m_vRealSize.goal());
g_pCompositor->changeWindowZOrder(window, true); g_pCompositor->changeWindowZOrder(window, true);
this->recalculateMonitor(monitor->ID); this->recalculateMonitor(monitor->ID);
} }
@ -1085,14 +1085,14 @@ Hy3Node* findTabBarAt(Hy3Node& node, Vector2D pos, Hy3Node** focused_node) {
auto& children = node.data.as_group.children; auto& children = node.data.as_group.children;
auto& tab_bar = *node.data.as_group.tab_bar; auto& tab_bar = *node.data.as_group.tab_bar;
auto size = tab_bar.size.vec(); auto size = tab_bar.size.value();
auto x = pos.x - tab_bar.pos.vec().x; auto x = pos.x - tab_bar.pos.value().x;
auto child_iter = children.begin(); auto child_iter = children.begin();
for (auto& tab: tab_bar.bar.entries) { for (auto& tab: tab_bar.bar.entries) {
if (child_iter == children.end()) break; if (child_iter == children.end()) break;
if (x > tab.offset.fl() * size.x && x < (tab.offset.fl() + tab.width.fl()) * size.x) { if (x > tab.offset.value() * size.x && x < (tab.offset.value() + tab.width.value()) * size.x) {
*focused_node = *child_iter; *focused_node = *child_iter;
return &node; return &node;
} }
@ -1316,7 +1316,7 @@ fullscreen:
// goto fsupdate; // goto fsupdate;
fsupdate: fsupdate:
g_pCompositor->updateWindowAnimatedDecorationValues(window); g_pCompositor->updateWindowAnimatedDecorationValues(window);
g_pXWaylandManager->setWindowSize(window, window->m_vRealSize.goalv()); g_pXWaylandManager->setWindowSize(window, window->m_vRealSize.goal());
g_pCompositor->changeWindowZOrder(window, true); g_pCompositor->changeWindowZOrder(window, true);
this->recalculateMonitor(monitor->ID); this->recalculateMonitor(monitor->ID);
} }

View file

@ -12,7 +12,6 @@
Hy3TabBarEntry::Hy3TabBarEntry(Hy3TabBar& tab_bar, Hy3Node& node): tab_bar(tab_bar), node(node) { Hy3TabBarEntry::Hy3TabBarEntry(Hy3TabBar& tab_bar, Hy3Node& node): tab_bar(tab_bar), node(node) {
this->focused.create( this->focused.create(
AVARTYPE_FLOAT,
0.0f, 0.0f,
g_pConfigManager->getAnimationPropertyConfig("fadeSwitch"), g_pConfigManager->getAnimationPropertyConfig("fadeSwitch"),
nullptr, nullptr,
@ -20,7 +19,6 @@ Hy3TabBarEntry::Hy3TabBarEntry(Hy3TabBar& tab_bar, Hy3Node& node): tab_bar(tab_b
); );
this->urgent.create( this->urgent.create(
AVARTYPE_FLOAT,
0.0f, 0.0f,
g_pConfigManager->getAnimationPropertyConfig("fadeSwitch"), g_pConfigManager->getAnimationPropertyConfig("fadeSwitch"),
nullptr, nullptr,
@ -28,7 +26,6 @@ Hy3TabBarEntry::Hy3TabBarEntry(Hy3TabBar& tab_bar, Hy3Node& node): tab_bar(tab_b
); );
this->offset.create( this->offset.create(
AVARTYPE_FLOAT,
-1.0f, -1.0f,
g_pConfigManager->getAnimationPropertyConfig("windowsMove"), g_pConfigManager->getAnimationPropertyConfig("windowsMove"),
nullptr, nullptr,
@ -36,7 +33,6 @@ Hy3TabBarEntry::Hy3TabBarEntry(Hy3TabBar& tab_bar, Hy3Node& node): tab_bar(tab_b
); );
this->width.create( this->width.create(
AVARTYPE_FLOAT,
-1.0f, -1.0f,
g_pConfigManager->getAnimationPropertyConfig("windowsMove"), g_pConfigManager->getAnimationPropertyConfig("windowsMove"),
nullptr, nullptr,
@ -44,7 +40,6 @@ Hy3TabBarEntry::Hy3TabBarEntry(Hy3TabBar& tab_bar, Hy3Node& node): tab_bar(tab_b
); );
this->vertical_pos.create( this->vertical_pos.create(
AVARTYPE_FLOAT,
1.0f, 1.0f,
g_pConfigManager->getAnimationPropertyConfig("windowsIn"), g_pConfigManager->getAnimationPropertyConfig("windowsIn"),
nullptr, nullptr,
@ -52,13 +47,17 @@ Hy3TabBarEntry::Hy3TabBarEntry(Hy3TabBar& tab_bar, Hy3Node& node): tab_bar(tab_b
); );
this->fade_opacity.create( this->fade_opacity.create(
AVARTYPE_FLOAT,
0.0f, 0.0f,
g_pConfigManager->getAnimationPropertyConfig("windowsIn"), g_pConfigManager->getAnimationPropertyConfig("windowsIn"),
nullptr, nullptr,
AVARDAMAGE_NONE AVARDAMAGE_NONE
); );
// !!! Can be removed after hyprland#4992
this->offset = -1.0f;
this->width = -1.0f;
this->vertical_pos = 1.0f;
this->focused.registerVar(); this->focused.registerVar();
this->urgent.registerVar(); this->urgent.registerVar();
this->offset.registerVar(); this->offset.registerVar();
@ -89,14 +88,14 @@ bool Hy3TabBarEntry::operator==(const Hy3TabBarEntry& entry) const {
} }
void Hy3TabBarEntry::setFocused(bool focused) { void Hy3TabBarEntry::setFocused(bool focused) {
if (this->focused.goalf() != focused) { if (this->focused.goal() != focused) {
this->focused = focused; this->focused = focused;
} }
} }
void Hy3TabBarEntry::setUrgent(bool urgent) { void Hy3TabBarEntry::setUrgent(bool urgent) {
if (urgent && this->focused.goalf() == 1.0) urgent = false; if (urgent && this->focused.goal() == 1.0) urgent = false;
if (this->urgent.goalf() != urgent) { if (this->urgent.goal() != urgent) {
this->urgent = urgent; this->urgent = urgent;
} }
} }
@ -121,7 +120,7 @@ void Hy3TabBarEntry::unDestroy() {
} }
bool Hy3TabBarEntry::shouldRemove() { bool Hy3TabBarEntry::shouldRemove() {
return this->destroying && (this->vertical_pos.fl() == 1.0 || this->width.fl() == 0.0); return this->destroying && (this->vertical_pos.value() == 1.0 || this->width.value() == 0.0);
} }
void Hy3TabBarEntry::prepareTexture(float scale, CBox& box) { void Hy3TabBarEntry::prepareTexture(float scale, CBox& box) {
@ -149,8 +148,8 @@ void Hy3TabBarEntry::prepareTexture(float scale, CBox& box) {
// clang-format off // clang-format off
|| this->last_render.x != box.x || this->last_render.x != box.x
|| this->last_render.y != box.y || this->last_render.y != box.y
|| this->last_render.focused != this->focused.fl() || this->last_render.focused != this->focused.value()
|| this->last_render.urgent != this->urgent.fl() || this->last_render.urgent != this->urgent.value()
|| this->last_render.window_title != this->window_title || this->last_render.window_title != this->window_title
|| this->last_render.rounding != rounding || this->last_render.rounding != rounding
|| this->last_render.text_font != *text_font || this->last_render.text_font != *text_font
@ -167,8 +166,8 @@ void Hy3TabBarEntry::prepareTexture(float scale, CBox& box) {
{ {
this->last_render.x = box.x; this->last_render.x = box.x;
this->last_render.y = box.y; this->last_render.y = box.y;
this->last_render.focused = this->focused.fl(); this->last_render.focused = this->focused.value();
this->last_render.urgent = this->urgent.fl(); this->last_render.urgent = this->urgent.value();
this->last_render.window_title = this->window_title; this->last_render.window_title = this->window_title;
this->last_render.rounding = rounding; this->last_render.rounding = rounding;
this->last_render.text_font = *text_font; this->last_render.text_font = *text_font;
@ -191,8 +190,8 @@ void Hy3TabBarEntry::prepareTexture(float scale, CBox& box) {
cairo_restore(cairo); cairo_restore(cairo);
// set brush // set brush
auto focused = this->focused.fl(); auto focused = this->focused.value();
auto urgent = this->urgent.fl(); auto urgent = this->urgent.value();
auto inactive = 1.0 - (focused + urgent); auto inactive = 1.0 - (focused + urgent);
auto c = (CColor(*col_active) * focused) + (CColor(*col_urgent) * urgent) auto c = (CColor(*col_active) * focused) + (CColor(*col_urgent) * urgent)
+ (CColor(*col_inactive) * inactive); + (CColor(*col_inactive) * inactive);
@ -278,13 +277,15 @@ void Hy3TabBarEntry::prepareTexture(float scale, CBox& box) {
Hy3TabBar::Hy3TabBar() { Hy3TabBar::Hy3TabBar() {
this->fade_opacity.create( this->fade_opacity.create(
AVARTYPE_FLOAT,
1.0f, 1.0f,
g_pConfigManager->getAnimationPropertyConfig("windowsMove"), g_pConfigManager->getAnimationPropertyConfig("windowsMove"),
nullptr, nullptr,
AVARDAMAGE_NONE AVARDAMAGE_NONE
); );
// !!! Can be removed after hyprland#4992
this->fade_opacity = 1.0f;
this->fade_opacity.registerVar(); this->fade_opacity.registerVar();
this->fade_opacity.setUpdateCallback([this](void*) { this->dirty = true; }); this->fade_opacity.setUpdateCallback([this](void*) { this->dirty = true; });
} }
@ -396,29 +397,30 @@ void Hy3TabBar::updateAnimations(bool warp) {
auto entry = this->entries.begin(); auto entry = this->entries.begin();
while (entry != this->entries.end()) { while (entry != this->entries.end()) {
if (warp) { if (warp) {
if (entry->width.goalf() == 0.0) { if (entry->width.goal() == 0.0) {
this->entries.erase(entry++); //this->entries.erase(entry++);
entry = std::next(entry);
continue; continue;
} }
entry->offset.setValueAndWarp(offset); entry->offset.setValueAndWarp(offset);
entry->width.setValueAndWarp(entry_width); entry->width.setValueAndWarp(entry_width);
} else { } else {
auto warp_init = entry->offset.goalf() == -1.0; auto warp_init = entry->offset.goal() == -1.0;
if (warp_init) { if (warp_init) {
entry->offset.setValueAndWarp(offset); entry->offset.setValueAndWarp(offset);
entry->width.setValueAndWarp(entry->vertical_pos.fl() == 0.0 ? 0.0 : entry_width); entry->width.setValueAndWarp(entry->vertical_pos.value() == 0.0 ? 0.0 : entry_width);
} }
if (!entry->destroying) { if (!entry->destroying) {
if (entry->offset.goalf() != offset) entry->offset = offset; if (entry->offset.goal() != offset) entry->offset = offset;
if ((warp_init || entry->width.goalf() != 0.0) && entry->width.goalf() != entry_width) if ((warp_init || entry->width.goal() != 0.0) && entry->width.goal() != entry_width)
entry->width = entry_width; entry->width = entry_width;
} }
} }
if (!entry->destroying) offset += entry->width.goalf(); if (!entry->destroying) offset += entry->width.goal();
entry = std::next(entry); entry = std::next(entry);
} }
} }
@ -430,14 +432,12 @@ void Hy3TabBar::setSize(Vector2D size) {
Hy3TabGroup::Hy3TabGroup(Hy3Node& node) { Hy3TabGroup::Hy3TabGroup(Hy3Node& node) {
this->pos.create( this->pos.create(
AVARTYPE_VECTOR,
g_pConfigManager->getAnimationPropertyConfig("windowsMove"), g_pConfigManager->getAnimationPropertyConfig("windowsMove"),
nullptr, nullptr,
AVARDAMAGE_NONE AVARDAMAGE_NONE
); );
this->size.create( this->size.create(
AVARTYPE_VECTOR,
g_pConfigManager->getAnimationPropertyConfig("windowsMove"), g_pConfigManager->getAnimationPropertyConfig("windowsMove"),
nullptr, nullptr,
AVARDAMAGE_NONE AVARDAMAGE_NONE
@ -467,12 +467,12 @@ void Hy3TabGroup::updateWithGroup(Hy3Node& node, bool warp) {
// clang-format on // clang-format on
this->hidden = node.hidden; this->hidden = node.hidden;
if (this->pos.goalv() != tpos) { if (this->pos.goal() != tpos) {
this->pos = tpos; this->pos = tpos;
if (warp) this->pos.warp(); if (warp) this->pos.warp();
} }
if (this->size.goalv() != tsize) { if (this->size.goal() != tsize) {
this->size = tsize; this->size = tsize;
if (warp) this->size.warp(); if (warp) this->size.warp();
} }
@ -494,14 +494,14 @@ void Hy3TabGroup::tick() {
if (workspace != nullptr) { if (workspace != nullptr) {
if (workspace->m_bHasFullscreenWindow) { if (workspace->m_bHasFullscreenWindow) {
if (this->bar.fade_opacity.goalf() != 0.0) this->bar.fade_opacity = 0.0; if (this->bar.fade_opacity.goal() != 0.0) this->bar.fade_opacity = 0.0;
} else { } else {
if (this->bar.fade_opacity.goalf() != 1.0) this->bar.fade_opacity = 1.0; if (this->bar.fade_opacity.goal() != 1.0) this->bar.fade_opacity = 1.0;
} }
} }
auto pos = this->pos.vec(); auto pos = this->pos.value();
auto size = this->size.vec(); auto size = this->size.value();
if (this->last_pos != pos || this->last_size != size) { if (this->last_pos != pos || this->last_size != size) {
CBox damage_box = {this->last_pos.x, this->last_pos.y, this->last_size.x, this->last_size.y}; CBox damage_box = {this->last_pos.x, this->last_pos.y, this->last_size.x, this->last_size.y};
@ -537,11 +537,11 @@ void Hy3TabGroup::renderTabBar() {
auto scale = monitor->scale; auto scale = monitor->scale;
auto monitor_size = monitor->vecSize; auto monitor_size = monitor->vecSize;
auto pos = this->pos.vec() - monitor->vecPosition; auto pos = this->pos.value() - monitor->vecPosition;
auto size = this->size.vec(); auto size = this->size.value();
if (workspace != nullptr) { if (workspace != nullptr) {
pos = pos + workspace->m_vRenderOffset.vec(); pos = pos + workspace->m_vRenderOffset.value();
} }
auto scaled_pos = Vector2D(std::round(pos.x * scale), std::round(pos.y * scale)); auto scaled_pos = Vector2D(std::round(pos.x * scale), std::round(pos.y * scale));
@ -588,8 +588,8 @@ void Hy3TabGroup::renderTabBar() {
for (auto* window: this->stencil_windows) { for (auto* window: this->stencil_windows) {
if (!g_pCompositor->windowExists(window)) continue; if (!g_pCompositor->windowExists(window)) continue;
auto wpos = window->m_vRealPosition.vec() - monitor->vecPosition; auto wpos = window->m_vRealPosition.value() - monitor->vecPosition;
auto wsize = window->m_vRealSize.vec(); auto wsize = window->m_vRealSize.value();
CBox window_box = {wpos.x, wpos.y, wsize.x, wsize.y}; CBox window_box = {wpos.x, wpos.y, wsize.x, wsize.y};
// scaleBox(&window_box, scale); // scaleBox(&window_box, scale);
@ -607,16 +607,16 @@ void Hy3TabGroup::renderTabBar() {
} }
auto fade_opacity = auto fade_opacity =
this->bar.fade_opacity.fl() * (workspace == nullptr ? 1.0 : workspace->m_fAlpha.fl()); this->bar.fade_opacity.value() * (workspace == nullptr ? 1.0 : workspace->m_fAlpha.value());
auto render_entry = [&](Hy3TabBarEntry& entry) { auto render_entry = [&](Hy3TabBarEntry& entry) {
Vector2D entry_pos = { Vector2D entry_pos = {
(pos.x + (entry.offset.fl() * size.x) + (*padding * 0.5)) * scale, (pos.x + (entry.offset.value() * size.x) + (*padding * 0.5)) * scale,
scaled_pos.y scaled_pos.y
+ ((entry.vertical_pos.fl() * (size.y + *padding) * scale) * (*enter_from_top ? -1 : 1) + ((entry.vertical_pos.value() * (size.y + *padding) * scale) * (*enter_from_top ? -1 : 1)
), ),
}; };
Vector2D entry_size = {((entry.width.fl() * size.x) - *padding) * scale, scaled_size.y}; Vector2D entry_size = {((entry.width.value() * size.x) - *padding) * scale, scaled_size.y};
if (entry_size.x < 0 || entry_size.y < 0 || fade_opacity == 0.0) return; if (entry_size.x < 0 || entry_size.y < 0 || fade_opacity == 0.0) return;
CBox box = { CBox box = {
@ -627,16 +627,16 @@ void Hy3TabGroup::renderTabBar() {
}; };
entry.prepareTexture(scale, box); entry.prepareTexture(scale, box);
g_pHyprOpenGL->renderTexture(entry.texture, &box, fade_opacity * entry.fade_opacity.fl()); g_pHyprOpenGL->renderTexture(entry.texture, &box, fade_opacity * entry.fade_opacity.value());
}; };
for (auto& entry: this->bar.entries) { for (auto& entry: this->bar.entries) {
if (entry.focused.goalf() == 1.0) continue; if (entry.focused.goal() == 1.0) continue;
render_entry(entry); render_entry(entry);
} }
for (auto& entry: this->bar.entries) { for (auto& entry: this->bar.entries) {
if (entry.focused.goalf() == 0.0) continue; if (entry.focused.goal() == 0.0) continue;
render_entry(entry); render_entry(entry);
} }
@ -677,5 +677,5 @@ void findOverlappingWindows(Hy3Node& node, float height, std::vector<CWindow*>&
void Hy3TabGroup::updateStencilWindows(Hy3Node& group) { void Hy3TabGroup::updateStencilWindows(Hy3Node& group) {
this->stencil_windows.clear(); this->stencil_windows.clear();
findOverlappingWindows(group, this->size.goalv().y, this->stencil_windows); findOverlappingWindows(group, this->size.goal().y, this->stencil_windows);
} }

View file

@ -16,12 +16,12 @@ struct Hy3TabBarEntry {
std::string window_title; std::string window_title;
bool destroying = false; bool destroying = false;
CTexture texture; CTexture texture;
CAnimatedVariable focused; CAnimatedVariable<float> focused;
CAnimatedVariable urgent; CAnimatedVariable<float> urgent;
CAnimatedVariable offset; // 0.0-1.0 of total bar CAnimatedVariable<float> offset; // 0.0-1.0 of total bar
CAnimatedVariable width; // 0.0-1.0 of total bar CAnimatedVariable<float> width; // 0.0-1.0 of total bar
CAnimatedVariable vertical_pos; // 0.0-1.0, user specified direction CAnimatedVariable<float> vertical_pos; // 0.0-1.0, user specified direction
CAnimatedVariable fade_opacity; // 0.0-1.0 CAnimatedVariable<float> fade_opacity; // 0.0-1.0
Hy3TabBar& tab_bar; Hy3TabBar& tab_bar;
Hy3Node& node; // only used for comparioson. do not deref. Hy3Node& node; // only used for comparioson. do not deref.
@ -62,7 +62,7 @@ public:
bool destroy = false; bool destroy = false;
bool dirty = true; bool dirty = true;
bool damaged = true; bool damaged = true;
CAnimatedVariable fade_opacity; CAnimatedVariable<float> fade_opacity;
Hy3TabBar(); Hy3TabBar();
void beginDestroy(); void beginDestroy();
@ -89,8 +89,8 @@ public:
int workspace_id = -1; int workspace_id = -1;
bool hidden = false; bool hidden = false;
Hy3TabBar bar; Hy3TabBar bar;
CAnimatedVariable pos; CAnimatedVariable<Vector2D> pos;
CAnimatedVariable size; CAnimatedVariable<Vector2D> size;
// initialize a group with the given node. UB if node is not a group. // initialize a group with the given node. UB if node is not a group.
Hy3TabGroup(Hy3Node&); Hy3TabGroup(Hy3Node&);