Fix miscalculated gaps

This commit is contained in:
outfoxxed 2023-06-29 12:58:41 -07:00
parent a3c32868cc
commit fe98ccaf9a
No known key found for this signature in database
GPG key ID: 4C88A185FB89301E
2 changed files with 76 additions and 48 deletions

View file

@ -219,10 +219,22 @@ void Hy3Layout::recalculateMonitor(const int& monitor_id) {
} else {
// Vaxry's hack from below, but again
// clang-format off
static const auto* gaps_in = &HyprlandAPI::getConfigValue(PHANDLE, "general:gaps_in")->intValue;
static const auto* gaps_out = &HyprlandAPI::getConfigValue(PHANDLE, "general:gaps_out")->intValue;
// clang-format on
int outer_gaps = -(*gaps_in - *gaps_out);
auto gap_pos_offset = Vector2D(outer_gaps, outer_gaps);
auto gap_size_offset = Vector2D(outer_gaps * 2, outer_gaps * 2);
Debug::log(LOG, "FS gaps: %d", outer_gaps);
Hy3Node fakeNode = {
.data = window,
.position = monitor->vecPosition + monitor->vecReservedTopLeft,
.size = monitor->vecSize - monitor->vecReservedTopLeft - monitor->vecReservedBottomRight,
.gap_pos_offset = gap_pos_offset,
.gap_size_offset = gap_size_offset,
.workspace_id = window->m_iWorkspaceID,
};
@ -528,10 +540,22 @@ void Hy3Layout::fullscreenRequestForWindow(
Debug::log(LOG, "vaxry hack");
// Copy of vaxry's massive hack
// clang-format off
static const auto* gaps_in = &HyprlandAPI::getConfigValue(PHANDLE, "general:gaps_in")->intValue;
static const auto* gaps_out = &HyprlandAPI::getConfigValue(PHANDLE, "general:gaps_out")->intValue;
// clang-format on
int outer_gaps = -(*gaps_in - *gaps_out);
auto gap_pos_offset = Vector2D(outer_gaps, outer_gaps);
auto gap_size_offset = Vector2D(outer_gaps * 2, outer_gaps * 2);
Debug::log(LOG, "FS gaps: %d", outer_gaps);
Hy3Node fakeNode = {
.data = window,
.position = monitor->vecPosition + monitor->vecReservedTopLeft,
.size = monitor->vecSize - monitor->vecReservedTopLeft - monitor->vecReservedBottomRight,
.gap_pos_offset = gap_pos_offset,
.gap_size_offset = gap_size_offset,
.workspace_id = window->m_iWorkspaceID,
};
@ -790,7 +814,7 @@ Hy3Node* findTabBarAt(Hy3Node& node, Vector2D pos, Hy3Node** focused_node) {
if (node.data.as_group.layout == Hy3GroupLayout::Tabbed
&& node.data.as_group.tab_bar != nullptr)
{
if (pos.y < node.position.y + inset) {
if (pos.y < node.position.y + node.gap_pos_offset.y + inset) {
auto& children = node.data.as_group.children;
auto& tab_bar = *node.data.as_group.tab_bar;

View file

@ -228,7 +228,7 @@ void Hy3Node::recalcSizePosRecursive(bool no_animation) {
Vector2D gap_pos_offset;
Vector2D gap_size_offset;
if (this->parent == nullptr) {
outer_gaps = *gaps_out - *gaps_in;
outer_gaps = -(*gaps_in - *gaps_out);
gap_pos_offset = Vector2D(outer_gaps, outer_gaps);
gap_size_offset = Vector2D(outer_gaps * 2, outer_gaps * 2);
@ -250,45 +250,6 @@ void Hy3Node::recalcSizePosRecursive(bool no_animation) {
auto* group = &this->data.as_group;
if (group->children.size() == 1 && this->parent != nullptr) {
auto child = group->children.front();
if (child == this) {
Debug::log(ERR, "a group (%p) has become its own child", this);
errorNotif();
}
switch (group->layout) {
case Hy3GroupLayout::SplitH:
child->position.x = tpos.x;
child->size.x = tsize.x - *group_inset;
child->position.y = tpos.y;
child->size.y = tsize.y;
break;
case Hy3GroupLayout::SplitV:
child->position.y = tpos.y;
child->size.y = tsize.y - *group_inset;
child->position.x = tpos.x;
child->size.x = tsize.x;
break;
case Hy3GroupLayout::Tabbed:
child->position.y = tpos.y + tab_height_offset;
child->size.y = tsize.y - tab_height_offset;
child->position.x = tpos.x;
child->size.x = tsize.x;
break;
}
child->gap_pos_offset = gap_pos_offset;
child->gap_size_offset = gap_size_offset;
child->setHidden(this->hidden);
child->recalcSizePosRecursive(no_animation);
this->updateTabBar(no_animation);
return;
}
int constraint;
switch (group->layout) {
case Hy3GroupLayout::SplitH: constraint = tsize.x; break;
@ -296,6 +257,12 @@ void Hy3Node::recalcSizePosRecursive(bool no_animation) {
case Hy3GroupLayout::Tabbed: break;
}
switch (group->layout) {
case Hy3GroupLayout::SplitH: constraint -= gap_size_offset.x; break;
case Hy3GroupLayout::SplitV: constraint -= gap_size_offset.y; break;
case Hy3GroupLayout::Tabbed: break;
}
double ratio_mul = group->layout != Hy3GroupLayout::Tabbed
? group->children.empty() ? 0 : constraint / group->children.size()
: 0;
@ -320,6 +287,25 @@ void Hy3Node::recalcSizePosRecursive(bool no_animation) {
child->position.y = tpos.y;
child->size.y = tsize.y;
child->setHidden(this->hidden);
if (group->children.size() == 1) {
child->gap_pos_offset = gap_pos_offset;
child->gap_size_offset = gap_size_offset;
if (this->parent != nullptr) child->gap_size_offset.x += *group_inset;
child->size.x += gap_size_offset.x;
} else if (child == group->children.front()) {
child->gap_pos_offset = gap_pos_offset;
child->gap_size_offset = Vector2D(0, gap_size_offset.y);
offset += gap_pos_offset.x;
} else if (child == group->children.back()) {
child->gap_pos_offset = Vector2D(0, gap_pos_offset.y);
child->gap_size_offset = gap_size_offset;
child->size.x += gap_size_offset.x;
} else {
child->gap_pos_offset = Vector2D(0, gap_pos_offset.y);
child->gap_size_offset = Vector2D(0, gap_size_offset.y);
}
child->recalcSizePosRecursive(no_animation);
break;
case Hy3GroupLayout::SplitV:
@ -329,21 +315,39 @@ void Hy3Node::recalcSizePosRecursive(bool no_animation) {
child->position.x = tpos.x;
child->size.x = tsize.x;
child->setHidden(this->hidden);
if (group->children.size() == 1) {
child->gap_pos_offset = gap_pos_offset;
child->gap_size_offset = gap_size_offset;
if (this->parent != nullptr) child->gap_size_offset.y += *group_inset;
child->size.y += gap_size_offset.y;
} else if (child == group->children.front()) {
child->gap_pos_offset = gap_pos_offset;
child->gap_size_offset = Vector2D(gap_size_offset.x, 0);
offset += gap_pos_offset.y;
} else if (child == group->children.back()) {
child->gap_pos_offset = Vector2D(gap_pos_offset.x, 0);
child->gap_size_offset = gap_size_offset;
child->size.y += gap_size_offset.y;
} else {
child->gap_pos_offset = Vector2D(gap_pos_offset.x, 0);
child->gap_size_offset = Vector2D(gap_size_offset.x, 0);
}
child->recalcSizePosRecursive(no_animation);
break;
case Hy3GroupLayout::Tabbed:
child->position.y = tpos.y + tab_height_offset;
child->size.y = tsize.y - tab_height_offset;
child->position.x = tpos.x;
child->size.x = tsize.x;
child->position = tpos;
child->size = tsize;
bool hidden = this->hidden || group->focused_child != child;
child->setHidden(hidden);
child->gap_pos_offset = Vector2D(gap_pos_offset.x, gap_pos_offset.y + tab_height_offset);
child->gap_size_offset = Vector2D(gap_size_offset.x, gap_size_offset.y + tab_height_offset);
child->recalcSizePosRecursive(no_animation);
break;
}
child->gap_pos_offset = gap_pos_offset;
child->gap_size_offset = gap_pos_offset;
}
this->updateTabBar(no_animation);