148 lines
4.9 KiB
JavaScript
148 lines
4.9 KiB
JavaScript
import GLib from 'gi://GLib';
|
|
import {TileWindowManager} from './tileWindowManager.js';
|
|
export var resizeSourceId = null;
|
|
/** Resize Tile with size of rect in the East
|
|
*
|
|
* @param {Tile} tile
|
|
* @param {Mtk.Rectangle} rect
|
|
* @returns
|
|
*/
|
|
export function resizeE(tile, rect) {
|
|
if (!tile.adjacents[1]) {
|
|
if (resizeSourceId !== null)
|
|
GLib.Source.remove(resizeSourceId);
|
|
resizeSourceId = GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
|
|
TileWindowManager.getMonitors()[tile.monitor].root?.update();
|
|
resizeSourceId = null;
|
|
return GLib.SOURCE_REMOVE;
|
|
});
|
|
return;
|
|
}
|
|
let p = tile.findParent(el => el.position.x + el.position.width === tile.position.x + tile.position.width);
|
|
if (p) {
|
|
let pos = p.position;
|
|
let diff = rect.width - tile.position.width;
|
|
pos.width += diff;
|
|
p.resize(pos);
|
|
p.update();
|
|
let sibling = p.getSibling();
|
|
if (sibling) {
|
|
let posSib = sibling.position;
|
|
posSib.width -= diff;
|
|
posSib.x += diff;
|
|
sibling.resize(posSib);
|
|
sibling.update();
|
|
}
|
|
if (p.parent && p.parent.child2)
|
|
p.parent.position.splitProportion = 0.5 * (p.parent.position.width - p.parent.child2.position.width) / p.parent.child2.position.width;
|
|
}
|
|
}
|
|
/** Resize Tile with size of rect in the West
|
|
*
|
|
* @param {Tile} tile
|
|
* @param {Mtk.Rectangle} rect
|
|
* @returns
|
|
*/
|
|
export function resizeW(tile, rect) {
|
|
if (!tile.adjacents[0]) {
|
|
if (resizeSourceId !== null)
|
|
GLib.Source.remove(resizeSourceId);
|
|
resizeSourceId = GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
|
|
TileWindowManager.getMonitors()[tile.monitor].root?.update();
|
|
resizeSourceId = null;
|
|
return GLib.SOURCE_REMOVE;
|
|
});
|
|
return;
|
|
}
|
|
let p = tile.findParent(el => el.position.x === tile.position.x);
|
|
if (p) {
|
|
let pos = p.position;
|
|
let diff = rect.width - tile.position.width;
|
|
pos.width += diff;
|
|
pos.x -= diff;
|
|
p.resize(pos);
|
|
p.update();
|
|
let sibling = p.getSibling();
|
|
if (sibling) {
|
|
let posSib = sibling.position;
|
|
posSib.width -= diff;
|
|
sibling.resize(posSib);
|
|
sibling.update();
|
|
}
|
|
if (p.parent && p.parent.child2)
|
|
p.parent.position.splitProportion = 0.5 * (p.parent.position.width - p.parent.child2.position.width) / p.parent.child2.position.width;
|
|
}
|
|
}
|
|
/** Resize Tile with size of rect in the South
|
|
*
|
|
* @param {Tile} tile
|
|
* @param {Mtk.Rectangle} rect
|
|
* @returns
|
|
*/
|
|
export function resizeS(tile, rect) {
|
|
if (!tile.adjacents[3]) {
|
|
if (resizeSourceId !== null)
|
|
GLib.Source.remove(resizeSourceId);
|
|
resizeSourceId = GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
|
|
TileWindowManager.getMonitors()[tile.monitor].root?.update();
|
|
resizeSourceId = null;
|
|
return GLib.SOURCE_REMOVE;
|
|
});
|
|
return;
|
|
}
|
|
let p = tile.findParent(el => el.position.y + el.position.height === tile.position.y + tile.position.height);
|
|
if (p) {
|
|
let pos = p.position;
|
|
let diff = rect.height - pos.height;
|
|
pos.height = rect.height;
|
|
p.resize(pos);
|
|
p.update();
|
|
let sibling = p.getSibling();
|
|
if (sibling) {
|
|
let posSib = sibling.position;
|
|
posSib.height -= diff;
|
|
posSib.y += diff;
|
|
sibling.resize(posSib);
|
|
sibling.update();
|
|
}
|
|
if (p.parent && p.parent.child2)
|
|
p.parent.position.splitProportion = 0.5 * (p.parent.position.height - p.parent.child2.position.height) / p.parent.child2.position.height;
|
|
}
|
|
}
|
|
/** Resize Tile with size of rect in the North
|
|
*
|
|
* @param {Tile} tile
|
|
* @param {Mtk.Rectangle} rect
|
|
* @returns
|
|
*/
|
|
export function resizeN(tile, rect) {
|
|
if (!tile.adjacents[2]) {
|
|
if (resizeSourceId !== null)
|
|
GLib.Source.remove(resizeSourceId);
|
|
resizeSourceId = GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
|
|
TileWindowManager.getMonitors()[tile.monitor].root?.update();
|
|
resizeSourceId = null;
|
|
return GLib.SOURCE_REMOVE;
|
|
});
|
|
return;
|
|
}
|
|
let p = tile.findParent(el => el.position.y === tile.position.y);
|
|
if (p) {
|
|
let pos = p.position;
|
|
let diff = rect.height - pos.height;
|
|
pos.height += diff;
|
|
pos.y -= diff;
|
|
p.resize(pos);
|
|
p.update();
|
|
let sibling = p.getSibling();
|
|
if (sibling) {
|
|
let posSib = sibling.position;
|
|
posSib.height -= diff;
|
|
sibling.resize(posSib);
|
|
sibling.update();
|
|
}
|
|
if (p.parent && p.parent.child2)
|
|
p.parent.position.splitProportion = 0.5 * (p.parent.position.height - p.parent.child2.position.height) / p.parent.child2.position.height;
|
|
}
|
|
}
|