workspace: Move border radius handling to WorkspaceBackground

Let WorkspaceBackground itself manage its background radius.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1691>
This commit is contained in:
Georges Basile Stavracas Neto 2021-02-18 19:47:49 -03:00 committed by Marge Bot
parent a17c4283ea
commit 1819e34f29

View File

@ -856,7 +856,7 @@ var WorkspaceLayout = GObject.registerClass({
var WorkspaceBackground = GObject.registerClass( var WorkspaceBackground = GObject.registerClass(
class WorkspaceBackground extends St.Widget { class WorkspaceBackground extends St.Widget {
_init(monitorIndex) { _init(monitorIndex, stateAdjustment) {
super._init({ super._init({
style_class: 'workspace-background', style_class: 'workspace-background',
layout_manager: new Clutter.BinLayout(), layout_manager: new Clutter.BinLayout(),
@ -867,6 +867,9 @@ class WorkspaceBackground extends St.Widget {
this._monitorIndex = monitorIndex; this._monitorIndex = monitorIndex;
this._workarea = Main.layoutManager.getWorkAreaForMonitor(monitorIndex); this._workarea = Main.layoutManager.getWorkAreaForMonitor(monitorIndex);
this._stateAdjustment = stateAdjustment;
stateAdjustment.connect('notify::value', () => this._updateBorderRadius());
this._bin = new Clutter.Actor({ this._bin = new Clutter.Actor({
layout_manager: new Clutter.BinLayout(), layout_manager: new Clutter.BinLayout(),
clip_to_allocation: true, clip_to_allocation: true,
@ -898,6 +901,15 @@ class WorkspaceBackground extends St.Widget {
this.connect('destroy', this._onDestroy.bind(this)); this.connect('destroy', this._onDestroy.bind(this));
} }
_updateBorderRadius() {
const { scaleFactor } = St.ThemeContext.get_for_stage(global.stage);
const cornerRadius = scaleFactor * BACKGROUND_CORNER_RADIUS_PIXELS;
const backgroundContent = this._bgManager.backgroundActor.content;
backgroundContent.rounded_clip_radius =
Util.lerp(0, cornerRadius, this._stateAdjustment.value);
}
_updateRoundedClipBounds() { _updateRoundedClipBounds() {
const monitor = Main.layoutManager.monitors[this._monitorIndex]; const monitor = Main.layoutManager.monitors[this._monitorIndex];
@ -942,10 +954,6 @@ class WorkspaceBackground extends St.Widget {
delete this._workareasChangedId; delete this._workareasChangedId;
} }
} }
set cornerRadius(radius) {
this._bgManager.backgroundActor.content.rounded_clip_radius = radius;
}
}); });
/** /**
@ -960,12 +968,14 @@ class Workspace extends St.Widget {
layout_manager: new Clutter.BinLayout(), layout_manager: new Clutter.BinLayout(),
}); });
const layoutManager = new WorkspaceLayout(metaWorkspace, monitorIndex);
// Background // Background
this._background = new WorkspaceBackground(monitorIndex); this._background =
new WorkspaceBackground(monitorIndex, layoutManager.stateAdjustment);
this.add_child(this._background); this.add_child(this._background);
// Window previews // Window previews
const layoutManager = new WorkspaceLayout(metaWorkspace, monitorIndex);
this._container = new Clutter.Actor({ this._container = new Clutter.Actor({
reactive: true, reactive: true,
x_expand: true, x_expand: true,
@ -1031,17 +1041,6 @@ class Workspace extends St.Widget {
// DND requires this to be set // DND requires this to be set
this._delegate = this; this._delegate = this;
layoutManager.stateAdjustment.connect('notify::value',
() => this._updateBackgroundBorderRadius());
}
_updateBackgroundBorderRadius() {
const { scaleFactor } = St.ThemeContext.get_for_stage(global.stage);
const cornerRadius = scaleFactor * BACKGROUND_CORNER_RADIUS_PIXELS;
const { stateAdjustment } = this._container.layout_manager;
this._background.cornerRadius =
Util.lerp(0, cornerRadius, stateAdjustment.value);
} }
_shouldLeaveOverview() { _shouldLeaveOverview() {