ControlsManagerLayout: Cache workAreaBox
Allocation runs every frame during the overview animations, so we want to do as little work there as possible. Cache the work area box computation. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2395>
This commit is contained in:
parent
c3284eb8ac
commit
8562606ad1
@ -45,19 +45,34 @@ class ControlsManagerLayout extends Clutter.BoxLayout {
|
|||||||
this._postAllocationCallbacks = [];
|
this._postAllocationCallbacks = [];
|
||||||
|
|
||||||
stateAdjustment.connect('notify::value', () => this.layout_changed());
|
stateAdjustment.connect('notify::value', () => this.layout_changed());
|
||||||
|
|
||||||
|
this._workAreaBox = new Clutter.ActorBox();
|
||||||
|
global.display.connectObject(
|
||||||
|
'workareas-changed', () => this._updateWorkAreaBox(),
|
||||||
|
this);
|
||||||
|
this._updateWorkAreaBox();
|
||||||
}
|
}
|
||||||
|
|
||||||
_computeWorkspacesBoxForState(state, box, workAreaBox, searchHeight, dashHeight, thumbnailsHeight) {
|
_updateWorkAreaBox() {
|
||||||
|
const monitor = Main.layoutManager.primaryMonitor;
|
||||||
|
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor.index);
|
||||||
|
const startX = workArea.x - monitor.x;
|
||||||
|
const startY = workArea.y - monitor.y;
|
||||||
|
this._workAreaBox.set_origin(startX, startY);
|
||||||
|
this._workAreaBox.set_size(workArea.width, workArea.height);
|
||||||
|
}
|
||||||
|
|
||||||
|
_computeWorkspacesBoxForState(state, box, searchHeight, dashHeight, thumbnailsHeight) {
|
||||||
const workspaceBox = box.copy();
|
const workspaceBox = box.copy();
|
||||||
const [width, height] = workspaceBox.get_size();
|
const [width, height] = workspaceBox.get_size();
|
||||||
const { y1: startY } = workAreaBox;
|
const {y1: startY} = this._workAreaBox;
|
||||||
const { spacing } = this;
|
const { spacing } = this;
|
||||||
const { expandFraction } = this._workspacesThumbnails;
|
const { expandFraction } = this._workspacesThumbnails;
|
||||||
|
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case ControlsState.HIDDEN:
|
case ControlsState.HIDDEN:
|
||||||
workspaceBox.set_origin(...workAreaBox.get_origin());
|
workspaceBox.set_origin(...this._workAreaBox.get_origin());
|
||||||
workspaceBox.set_size(...workAreaBox.get_size());
|
workspaceBox.set_size(...this._workAreaBox.get_size());
|
||||||
break;
|
break;
|
||||||
case ControlsState.WINDOW_PICKER:
|
case ControlsState.WINDOW_PICKER:
|
||||||
workspaceBox.set_origin(0,
|
workspaceBox.set_origin(0,
|
||||||
@ -80,9 +95,9 @@ class ControlsManagerLayout extends Clutter.BoxLayout {
|
|||||||
return workspaceBox;
|
return workspaceBox;
|
||||||
}
|
}
|
||||||
|
|
||||||
_getAppDisplayBoxForState(state, box, workAreaBox, searchHeight, dashHeight, appGridBox) {
|
_getAppDisplayBoxForState(state, box, searchHeight, dashHeight, appGridBox) {
|
||||||
const [width, height] = box.get_size();
|
const [width, height] = box.get_size();
|
||||||
const { y1: startY } = workAreaBox;
|
const {y1: startY} = this._workAreaBox;
|
||||||
const appDisplayBox = new Clutter.ActorBox();
|
const appDisplayBox = new Clutter.ActorBox();
|
||||||
const { spacing } = this;
|
const { spacing } = this;
|
||||||
|
|
||||||
@ -135,13 +150,7 @@ class ControlsManagerLayout extends Clutter.BoxLayout {
|
|||||||
|
|
||||||
const { spacing } = this;
|
const { spacing } = this;
|
||||||
|
|
||||||
const monitor = Main.layoutManager.primaryMonitor;
|
const startY = this._workAreaBox.y1;
|
||||||
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor.index);
|
|
||||||
const startX = workArea.x - monitor.x;
|
|
||||||
const startY = workArea.y - monitor.y;
|
|
||||||
const workAreaBox = new Clutter.ActorBox();
|
|
||||||
workAreaBox.set_origin(startX, startY);
|
|
||||||
workAreaBox.set_size(workArea.width, workArea.height);
|
|
||||||
box.y1 += startY;
|
box.y1 += startY;
|
||||||
const [width, height] = box.get_size();
|
const [width, height] = box.get_size();
|
||||||
let availableHeight = height;
|
let availableHeight = height;
|
||||||
@ -181,7 +190,7 @@ class ControlsManagerLayout extends Clutter.BoxLayout {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Workspaces
|
// Workspaces
|
||||||
let params = [box, workAreaBox, searchHeight, dashHeight, thumbnailsHeight];
|
let params = [box, searchHeight, dashHeight, thumbnailsHeight];
|
||||||
const transitionParams = this._stateAdjustment.getStateTransitionParams();
|
const transitionParams = this._stateAdjustment.getStateTransitionParams();
|
||||||
|
|
||||||
// Update cached boxes
|
// Update cached boxes
|
||||||
@ -206,7 +215,7 @@ class ControlsManagerLayout extends Clutter.BoxLayout {
|
|||||||
const workspaceAppGridBox =
|
const workspaceAppGridBox =
|
||||||
this._cachedWorkspaceBoxes.get(ControlsState.APP_GRID);
|
this._cachedWorkspaceBoxes.get(ControlsState.APP_GRID);
|
||||||
|
|
||||||
params = [box, workAreaBox, searchHeight, dashHeight, workspaceAppGridBox];
|
params = [box, searchHeight, dashHeight, workspaceAppGridBox];
|
||||||
let appDisplayBox;
|
let appDisplayBox;
|
||||||
if (!transitionParams.transitioning) {
|
if (!transitionParams.transitioning) {
|
||||||
appDisplayBox =
|
appDisplayBox =
|
||||||
|
Loading…
Reference in New Issue
Block a user