opt: eliminate the positional deviation in master layout
This commit is contained in:
@@ -413,6 +413,21 @@ void center_tile(Monitor *m) {
|
|||||||
// 判断是否需要主区域铺满
|
// 判断是否需要主区域铺满
|
||||||
int should_overspread = center_master_overspread && (n <= nmasters);
|
int should_overspread = center_master_overspread && (n <= nmasters);
|
||||||
|
|
||||||
|
uint32_t master_surplus_height =
|
||||||
|
(m->w.height - 2 * cur_gappov -
|
||||||
|
cur_gappiv * ie * (master_num - 1));
|
||||||
|
float master_surplus_ratio = 1.0;
|
||||||
|
|
||||||
|
uint32_t slave_left_surplus_height =
|
||||||
|
(m->w.height - 2 * cur_gappov -
|
||||||
|
cur_gappiv * ie * (stack_num / 2 - 1));
|
||||||
|
float slave_left_surplus_ratio = 1.0;
|
||||||
|
|
||||||
|
uint32_t slave_right_surplus_height =
|
||||||
|
(m->w.height - 2 * cur_gappov -
|
||||||
|
cur_gappiv * ie * ((stack_num + 1) / 2 - 1));
|
||||||
|
float slave_right_surplus_ratio = 1.0;
|
||||||
|
|
||||||
if (n > nmasters || !should_overspread) {
|
if (n > nmasters || !should_overspread) {
|
||||||
// 计算主区域宽度(居中模式)
|
// 计算主区域宽度(居中模式)
|
||||||
mw = nmasters ? (m->w.width - 2 * cur_gappoh - cur_gappih * ie) * mfact
|
mw = nmasters ? (m->w.width - 2 * cur_gappoh - cur_gappih * ie) * mfact
|
||||||
@@ -457,9 +472,9 @@ void center_tile(Monitor *m) {
|
|||||||
// 主区域窗口
|
// 主区域窗口
|
||||||
r = MIN(n, nmasters) - i;
|
r = MIN(n, nmasters) - i;
|
||||||
if (c->master_inner_per > 0.0f) {
|
if (c->master_inner_per > 0.0f) {
|
||||||
h = (m->w.height - 2 * cur_gappov -
|
h = master_surplus_height * c->master_inner_per / master_surplus_ratio;
|
||||||
cur_gappiv * ie * (master_num - 1)) *
|
master_surplus_height = master_surplus_height - h;
|
||||||
c->master_inner_per;
|
master_surplus_ratio = master_surplus_ratio - c->master_inner_per;
|
||||||
c->master_mfact_per = mfact;
|
c->master_mfact_per = mfact;
|
||||||
} else {
|
} else {
|
||||||
h = (m->w.height - my - cur_gappov -
|
h = (m->w.height - my - cur_gappov -
|
||||||
@@ -521,9 +536,9 @@ void center_tile(Monitor *m) {
|
|||||||
if ((stack_index % 2) ^ (n % 2 == 0)) {
|
if ((stack_index % 2) ^ (n % 2 == 0)) {
|
||||||
// 右侧堆叠窗口
|
// 右侧堆叠窗口
|
||||||
if (c->stack_innder_per > 0.0f) {
|
if (c->stack_innder_per > 0.0f) {
|
||||||
h = (m->w.height - 2 * cur_gappov -
|
h = slave_right_surplus_height * c->stack_innder_per / slave_right_surplus_ratio;
|
||||||
cur_gappiv * ie * ((stack_num + 1) / 2 - 1)) *
|
slave_right_surplus_height = slave_right_surplus_height - h;
|
||||||
c->stack_innder_per;
|
slave_right_surplus_ratio = slave_right_surplus_ratio - c->stack_innder_per;
|
||||||
c->master_mfact_per = mfact;
|
c->master_mfact_per = mfact;
|
||||||
} else {
|
} else {
|
||||||
h = (m->w.height - ety - cur_gappov -
|
h = (m->w.height - ety - cur_gappov -
|
||||||
@@ -547,9 +562,9 @@ void center_tile(Monitor *m) {
|
|||||||
} else {
|
} else {
|
||||||
// 左侧堆叠窗口
|
// 左侧堆叠窗口
|
||||||
if (c->stack_innder_per > 0.0f) {
|
if (c->stack_innder_per > 0.0f) {
|
||||||
h = (m->w.height - 2 * cur_gappov -
|
h = slave_left_surplus_height * c->stack_innder_per / slave_left_surplus_ratio;
|
||||||
cur_gappiv * ie * (stack_num / 2 - 1)) *
|
slave_left_surplus_height = slave_left_surplus_height - h;
|
||||||
c->stack_innder_per;
|
slave_left_surplus_ratio = slave_left_surplus_ratio - c->stack_innder_per;
|
||||||
c->master_mfact_per = mfact;
|
c->master_mfact_per = mfact;
|
||||||
} else {
|
} else {
|
||||||
h = (m->w.height - oty - cur_gappov -
|
h = (m->w.height - oty - cur_gappov -
|
||||||
@@ -619,15 +634,26 @@ void tile(Monitor *m) {
|
|||||||
mw = m->w.width - 2 * cur_gappoh + cur_gappih * ie;
|
mw = m->w.width - 2 * cur_gappoh + cur_gappih * ie;
|
||||||
i = 0;
|
i = 0;
|
||||||
my = ty = cur_gappov;
|
my = ty = cur_gappov;
|
||||||
|
|
||||||
|
uint32_t master_surplus_height =
|
||||||
|
(m->w.height - 2 * cur_gappov - cur_gappiv * ie * (master_num - 1));
|
||||||
|
float master_surplus_ratio = 1.0;
|
||||||
|
|
||||||
|
uint32_t slave_surplus_height =
|
||||||
|
(m->w.height - 2 * cur_gappov - cur_gappiv * ie * (stack_num - 1));
|
||||||
|
float slave_surplus_ratio = 1.0;
|
||||||
|
|
||||||
wl_list_for_each(c, &clients, link) {
|
wl_list_for_each(c, &clients, link) {
|
||||||
if (!VISIBLEON(c, m) || !ISTILED(c))
|
if (!VISIBLEON(c, m) || !ISTILED(c))
|
||||||
continue;
|
continue;
|
||||||
if (i < m->pertag->nmasters[m->pertag->curtag]) {
|
if (i < m->pertag->nmasters[m->pertag->curtag]) {
|
||||||
r = MIN(n, m->pertag->nmasters[m->pertag->curtag]) - i;
|
r = MIN(n, m->pertag->nmasters[m->pertag->curtag]) - i;
|
||||||
if (c->master_inner_per > 0.0f) {
|
if (c->master_inner_per > 0.0f) {
|
||||||
h = (m->w.height - 2 * cur_gappov -
|
h = master_surplus_height * c->master_inner_per /
|
||||||
cur_gappiv * ie * (master_num - 1)) *
|
master_surplus_ratio;
|
||||||
c->master_inner_per;
|
master_surplus_height = master_surplus_height - h;
|
||||||
|
master_surplus_ratio =
|
||||||
|
master_surplus_ratio - c->master_inner_per;
|
||||||
c->master_mfact_per = mfact;
|
c->master_mfact_per = mfact;
|
||||||
} else {
|
} else {
|
||||||
h = (m->w.height - my - cur_gappov -
|
h = (m->w.height - my - cur_gappov -
|
||||||
@@ -647,9 +673,10 @@ void tile(Monitor *m) {
|
|||||||
} else {
|
} else {
|
||||||
r = n - i;
|
r = n - i;
|
||||||
if (c->stack_innder_per > 0.0f) {
|
if (c->stack_innder_per > 0.0f) {
|
||||||
h = (m->w.height - 2 * cur_gappov -
|
h = slave_surplus_height * c->stack_innder_per /
|
||||||
cur_gappiv * ie * (stack_num - 1)) *
|
slave_surplus_ratio;
|
||||||
c->stack_innder_per;
|
slave_surplus_height = slave_surplus_height - h;
|
||||||
|
slave_surplus_ratio = slave_surplus_ratio - c->stack_innder_per;
|
||||||
c->master_mfact_per = mfact;
|
c->master_mfact_per = mfact;
|
||||||
} else {
|
} else {
|
||||||
h = (m->w.height - ty - cur_gappov -
|
h = (m->w.height - ty - cur_gappov -
|
||||||
@@ -717,15 +744,26 @@ void right_tile(Monitor *m) {
|
|||||||
mw = m->w.width - 2 * cur_gappoh + cur_gappih * ie;
|
mw = m->w.width - 2 * cur_gappoh + cur_gappih * ie;
|
||||||
i = 0;
|
i = 0;
|
||||||
my = ty = cur_gappov;
|
my = ty = cur_gappov;
|
||||||
|
|
||||||
|
uint32_t master_surplus_height =
|
||||||
|
(m->w.height - 2 * cur_gappov - cur_gappiv * ie * (master_num - 1));
|
||||||
|
float master_surplus_ratio = 1.0;
|
||||||
|
|
||||||
|
uint32_t slave_surplus_height =
|
||||||
|
(m->w.height - 2 * cur_gappov - cur_gappiv * ie * (stack_num - 1));
|
||||||
|
float slave_surplus_ratio = 1.0;
|
||||||
|
|
||||||
wl_list_for_each(c, &clients, link) {
|
wl_list_for_each(c, &clients, link) {
|
||||||
if (!VISIBLEON(c, m) || !ISTILED(c))
|
if (!VISIBLEON(c, m) || !ISTILED(c))
|
||||||
continue;
|
continue;
|
||||||
if (i < m->pertag->nmasters[m->pertag->curtag]) {
|
if (i < m->pertag->nmasters[m->pertag->curtag]) {
|
||||||
r = MIN(n, m->pertag->nmasters[m->pertag->curtag]) - i;
|
r = MIN(n, m->pertag->nmasters[m->pertag->curtag]) - i;
|
||||||
if (c->master_inner_per > 0.0f) {
|
if (c->master_inner_per > 0.0f) {
|
||||||
h = (m->w.height - 2 * cur_gappov -
|
h = master_surplus_height * c->master_inner_per /
|
||||||
cur_gappiv * ie * (master_num - 1)) *
|
master_surplus_ratio;
|
||||||
c->master_inner_per;
|
master_surplus_height = master_surplus_height - h;
|
||||||
|
master_surplus_ratio =
|
||||||
|
master_surplus_ratio - c->master_inner_per;
|
||||||
c->master_mfact_per = mfact;
|
c->master_mfact_per = mfact;
|
||||||
} else {
|
} else {
|
||||||
h = (m->w.height - my - cur_gappov -
|
h = (m->w.height - my - cur_gappov -
|
||||||
@@ -746,9 +784,10 @@ void right_tile(Monitor *m) {
|
|||||||
} else {
|
} else {
|
||||||
r = n - i;
|
r = n - i;
|
||||||
if (c->stack_innder_per > 0.0f) {
|
if (c->stack_innder_per > 0.0f) {
|
||||||
h = (m->w.height - 2 * cur_gappov -
|
h = slave_surplus_height * c->stack_innder_per /
|
||||||
cur_gappiv * ie * (stack_num - 1)) *
|
slave_surplus_ratio;
|
||||||
c->stack_innder_per;
|
slave_surplus_height = slave_surplus_height - h;
|
||||||
|
slave_surplus_ratio = slave_surplus_ratio - c->stack_innder_per;
|
||||||
c->master_mfact_per = mfact;
|
c->master_mfact_per = mfact;
|
||||||
} else {
|
} else {
|
||||||
h = (m->w.height - ty - cur_gappov -
|
h = (m->w.height - ty - cur_gappov -
|
||||||
|
|||||||
@@ -41,15 +41,26 @@ void vertical_tile(Monitor *m) {
|
|||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
mx = tx = cur_gapih;
|
mx = tx = cur_gapih;
|
||||||
|
|
||||||
|
uint32_t master_surplus_width =
|
||||||
|
(m->w.width - 2 * cur_gapih - cur_gapih * ie * (master_num - 1));
|
||||||
|
float master_surplus_ratio = 1.0;
|
||||||
|
|
||||||
|
uint32_t slave_surplus_width =
|
||||||
|
(m->w.width - 2 * cur_gapih - cur_gapih * ie * (stack_num - 1));
|
||||||
|
float slave_surplus_ratio = 1.0;
|
||||||
|
|
||||||
wl_list_for_each(c, &clients, link) {
|
wl_list_for_each(c, &clients, link) {
|
||||||
if (!VISIBLEON(c, m) || !ISTILED(c))
|
if (!VISIBLEON(c, m) || !ISTILED(c))
|
||||||
continue;
|
continue;
|
||||||
if (i < m->pertag->nmasters[m->pertag->curtag]) {
|
if (i < m->pertag->nmasters[m->pertag->curtag]) {
|
||||||
r = MIN(n, m->pertag->nmasters[m->pertag->curtag]) - i;
|
r = MIN(n, m->pertag->nmasters[m->pertag->curtag]) - i;
|
||||||
if (c->master_inner_per > 0.0f) {
|
if (c->master_inner_per > 0.0f) {
|
||||||
w = (m->w.width - 2 * cur_gapih -
|
w = master_surplus_width * c->master_inner_per /
|
||||||
cur_gapih * ie * (master_num - 1)) *
|
master_surplus_ratio;
|
||||||
c->master_inner_per;
|
master_surplus_width = master_surplus_width - w;
|
||||||
|
master_surplus_ratio =
|
||||||
|
master_surplus_ratio - c->master_inner_per;
|
||||||
c->master_mfact_per = mfact;
|
c->master_mfact_per = mfact;
|
||||||
} else {
|
} else {
|
||||||
w = (m->w.width - mx - cur_gapih - cur_gapih * ie * (r - 1)) /
|
w = (m->w.width - mx - cur_gapih - cur_gapih * ie * (r - 1)) /
|
||||||
@@ -68,9 +79,10 @@ void vertical_tile(Monitor *m) {
|
|||||||
} else {
|
} else {
|
||||||
r = n - i;
|
r = n - i;
|
||||||
if (c->stack_innder_per > 0.0f) {
|
if (c->stack_innder_per > 0.0f) {
|
||||||
w = (m->w.width - 2 * cur_gapih -
|
w = slave_surplus_width * c->stack_innder_per /
|
||||||
cur_gapih * ie * (stack_num - 1)) *
|
slave_surplus_ratio;
|
||||||
c->stack_innder_per;
|
slave_surplus_width = slave_surplus_width - w;
|
||||||
|
slave_surplus_ratio = slave_surplus_ratio - c->stack_innder_per;
|
||||||
c->master_mfact_per = mfact;
|
c->master_mfact_per = mfact;
|
||||||
} else {
|
} else {
|
||||||
w = (m->w.width - tx - cur_gapih - cur_gapih * ie * (r - 1)) /
|
w = (m->w.width - tx - cur_gapih - cur_gapih * ie * (r - 1)) /
|
||||||
|
|||||||
Reference in New Issue
Block a user