[gnome-shell] osdWindow: Implement new OSD design
- From: Marge Bot <marge-bot src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] osdWindow: Implement new OSD design
- Date: Sat, 12 Feb 2022 15:33:39 +0000 (UTC)
commit 3e8fd65045f0309e32702856f238f74c645c9222
Author: Florian Müllner <fmuellner gnome org>
Date: Tue Jan 25 23:15:52 2022 +0100
osdWindow: Implement new OSD design
Switch to a horizontal layout, use smaller icons and move
the OSD to the bottom of the screen.
https://gitlab.gnome.org/Teams/Design/os-mockups/-/issues/152
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2127>
data/theme/gnome-shell-sass/_common.scss | 2 +-
data/theme/gnome-shell-sass/widgets/_osd.scss | 15 +++--
js/ui/osdWindow.js | 94 +++++----------------------
3 files changed, 28 insertions(+), 83 deletions(-)
---
diff --git a/data/theme/gnome-shell-sass/_common.scss b/data/theme/gnome-shell-sass/_common.scss
index b68260236c..ff630616af 100644
--- a/data/theme/gnome-shell-sass/_common.scss
+++ b/data/theme/gnome-shell-sass/_common.scss
@@ -77,7 +77,7 @@ stage {
color: $osd_fg_color;
background-color: $osd_bg_color;
border: 1px solid $osd_outer_borders_color;
- border-radius: $modal_radius;
+ border-radius: 999px;
padding: $base_padding*2;
}
diff --git a/data/theme/gnome-shell-sass/widgets/_osd.scss b/data/theme/gnome-shell-sass/widgets/_osd.scss
index 87f376d17f..e3d07074cd 100644
--- a/data/theme/gnome-shell-sass/widgets/_osd.scss
+++ b/data/theme/gnome-shell-sass/widgets/_osd.scss
@@ -1,29 +1,32 @@
/* OSD */
-$osd_levelbar_height:8px;
+$osd_levelbar_height:6px;
.osd-window {
@extend %osd_panel;
text-align: center;
font-weight: bold;
- spacing: $base_spacing * 2; // 12px
- margin: $base_margin * 8; // 32px
- min-width: 64px;
- min-height: 64px;
+ &, & > * { spacing: $base_spacing * 2; } // 12px
+ margin: 4em;
StIcon {
- icon-size:$base_icon_size * 6;
+ icon-size:$base_icon_size * 2;
+
+ &:first-child:last-child { padding: 0 $base_padding * 2; }
}
.osd-monitor-label { font-size: 3em; }
.level {
height: $osd_levelbar_height;
+ min-width:$base_icon_size * 10;
-barlevel-height: $osd_levelbar_height;
-barlevel-background-color: transparentize($osd_fg_color, if($variant=='light', 0.7, 0.9));
-barlevel-active-background-color: $osd_fg_color;
-barlevel-overdrive-color: $destructive_color;
-barlevel-overdrive-separator-width: 3px;
+ &:ltr {margin-right: 16px;}
+ &:rtl {margin-left: 16px;}
}
}
diff --git a/js/ui/osdWindow.js b/js/ui/osdWindow.js
index ce33c069ce..b183333613 100644
--- a/js/ui/osdWindow.js
+++ b/js/ui/osdWindow.js
@@ -11,36 +11,6 @@ var HIDE_TIMEOUT = 1500;
var FADE_TIME = 100;
var LEVEL_ANIMATION_TIME = 100;
-var OsdWindowConstraint = GObject.registerClass(
-class OsdWindowConstraint extends Clutter.Constraint {
- _init(props) {
- this._minSize = 0;
- super._init(props);
- }
-
- set minSize(v) {
- this._minSize = v;
- if (this.actor)
- this.actor.queue_relayout();
- }
-
- vfunc_update_allocation(actor, actorBox) {
- // Clutter will adjust the allocation for margins,
- // so add it to our minimum size
- let minSize = this._minSize + actor.margin_top + actor.margin_bottom;
- let [width, height] = actorBox.get_size();
-
- // Enforce a ratio of 1
- let size = Math.ceil(Math.max(minSize, height));
- actorBox.set_size(size, size);
-
- // Recenter
- let [x, y] = actorBox.get_origin();
- actorBox.set_origin(Math.ceil(x + width / 2 - size / 2),
- Math.ceil(y + height / 2 - size / 2));
- }
-});
-
var OsdWindow = GObject.registerClass(
class OsdWindow extends Clutter.Actor {
_init(monitorIndex) {
@@ -48,56 +18,43 @@ class OsdWindow extends Clutter.Actor {
x_expand: true,
y_expand: true,
x_align: Clutter.ActorAlign.CENTER,
- y_align: Clutter.ActorAlign.CENTER,
+ y_align: Clutter.ActorAlign.END,
});
this._monitorIndex = monitorIndex;
let constraint = new Layout.MonitorConstraint({ index: monitorIndex });
this.add_constraint(constraint);
- this._boxConstraint = new OsdWindowConstraint();
- this._box = new St.BoxLayout({ style_class: 'osd-window',
- vertical: true });
- this._box.add_constraint(this._boxConstraint);
- this.add_actor(this._box);
+ this._hbox = new St.BoxLayout({
+ style_class: 'osd-window',
+ });
+ this.add_actor(this._hbox);
this._icon = new St.Icon({ y_expand: true });
- this._box.add_child(this._icon);
+ this._hbox.add_child(this._icon);
+
+ this._vbox = new St.BoxLayout({
+ vertical: true,
+ y_align: Clutter.ActorAlign.CENTER,
+ });
+ this._hbox.add_child(this._vbox);
this._label = new St.Label();
- this._box.add(this._label);
+ this._vbox.add_child(this._label);
this._level = new BarLevel.BarLevel({
style_class: 'level',
value: 0,
});
- this._box.add(this._level);
+ this._vbox.add_child(this._level);
this._hideTimeoutId = 0;
this._reset();
-
- this.connect('destroy', this._onDestroy.bind(this));
-
- this._monitorsChangedId =
- Main.layoutManager.connect('monitors-changed',
- this._relayout.bind(this));
- let themeContext = St.ThemeContext.get_for_stage(global.stage);
- this._scaleChangedId =
- themeContext.connect('notify::scale-factor',
- this._relayout.bind(this));
- this._relayout();
Main.uiGroup.add_child(this);
}
- _onDestroy() {
- if (this._monitorsChangedId)
- Main.layoutManager.disconnect(this._monitorsChangedId);
- this._monitorsChangedId = 0;
-
- let themeContext = St.ThemeContext.get_for_stage(global.stage);
- if (this._scaleChangedId)
- themeContext.disconnect(this._scaleChangedId);
- this._scaleChangedId = 0;
+ _updateBoxVisibility() {
+ this._vbox.visible = [...this._vbox].some(c => c.visible);
}
setIcon(icon) {
@@ -108,6 +65,7 @@ class OsdWindow extends Clutter.Actor {
this._label.visible = label != undefined;
if (label)
this._label.text = label;
+ this._updateBoxVisibility();
}
setLevel(value) {
@@ -122,6 +80,7 @@ class OsdWindow extends Clutter.Actor {
this._level.value = value;
}
}
+ this._updateBoxVisibility();
}
setMaxLevel(maxLevel = 1) {
@@ -180,23 +139,6 @@ class OsdWindow extends Clutter.Actor {
this.setMaxLevel(null);
this.setLevel(null);
}
-
- _relayout() {
- /* assume 110x110 on a 640x480 display and scale from there */
- let monitor = Main.layoutManager.monitors[this._monitorIndex];
- if (!monitor)
- return; // we are about to be removed
-
- let scalew = monitor.width / 640.0;
- let scaleh = monitor.height / 480.0;
- let scale = Math.min(scalew, scaleh);
- let popupSize = 110 * Math.max(1, scale);
-
- let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
- this._icon.icon_size = popupSize / (2 * scaleFactor);
- this._box.translation_y = Math.round(monitor.height / 4);
- this._boxConstraint.minSize = popupSize;
- }
});
var OsdWindowManager = class {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]