Add screen corners
Commit message TBD https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1328
This commit is contained in:
parent
08a5f41505
commit
99e64396b2
@ -53,3 +53,8 @@
|
|||||||
@include fontsize($base_font_size - 1);
|
@include fontsize($base_font_size - 1);
|
||||||
color: $warning_color;
|
color: $warning_color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.screen-corner {
|
||||||
|
-screen-corner-radius: $panel_corner_radius;
|
||||||
|
-screen-corner-background-color: black;
|
||||||
|
}
|
||||||
|
@ -89,6 +89,7 @@
|
|||||||
<file>ui/remoteSearch.js</file>
|
<file>ui/remoteSearch.js</file>
|
||||||
<file>ui/ripples.js</file>
|
<file>ui/ripples.js</file>
|
||||||
<file>ui/runDialog.js</file>
|
<file>ui/runDialog.js</file>
|
||||||
|
<file>ui/screenCorner.js</file>
|
||||||
<file>ui/screenShield.js</file>
|
<file>ui/screenShield.js</file>
|
||||||
<file>ui/screencast.js</file>
|
<file>ui/screencast.js</file>
|
||||||
<file>ui/screenshot.js</file>
|
<file>ui/screenshot.js</file>
|
||||||
|
@ -12,6 +12,7 @@ const DND = imports.ui.dnd;
|
|||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
const Ripples = imports.ui.ripples;
|
const Ripples = imports.ui.ripples;
|
||||||
|
const ScreenCorner = imports.ui.screenCorner;
|
||||||
|
|
||||||
var STARTUP_ANIMATION_TIME = 500;
|
var STARTUP_ANIMATION_TIME = 500;
|
||||||
var KEYBOARD_ANIMATION_TIME = 150;
|
var KEYBOARD_ANIMATION_TIME = 150;
|
||||||
@ -200,6 +201,7 @@ var LayoutManager = GObject.registerClass({
|
|||||||
this.primaryMonitor = null;
|
this.primaryMonitor = null;
|
||||||
this.primaryIndex = -1;
|
this.primaryIndex = -1;
|
||||||
this.hotCorners = [];
|
this.hotCorners = [];
|
||||||
|
this._screenCorners = [];
|
||||||
|
|
||||||
this._keyboardIndex = -1;
|
this._keyboardIndex = -1;
|
||||||
this._rightPanelBarrier = null;
|
this._rightPanelBarrier = null;
|
||||||
@ -440,6 +442,25 @@ var LayoutManager = GObject.registerClass({
|
|||||||
this.emit('hot-corners-changed');
|
this.emit('hot-corners-changed');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_updateScreenCorners() {
|
||||||
|
// destroy old corners
|
||||||
|
this._screenCorners.forEach(corner => {
|
||||||
|
if (corner)
|
||||||
|
corner.destroy();
|
||||||
|
});
|
||||||
|
this._screenCorners = [];
|
||||||
|
|
||||||
|
// build new corners
|
||||||
|
for (let monitor of this.monitors) {
|
||||||
|
for (let corner of Object.values(Meta.DisplayCorner)) {
|
||||||
|
var actor = new ScreenCorner.ScreenCorner(corner, monitor);
|
||||||
|
|
||||||
|
this.addTopChrome(actor, { trackFullscreen: true });
|
||||||
|
this._screenCorners.push(actor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_addBackgroundMenu(bgManager) {
|
_addBackgroundMenu(bgManager) {
|
||||||
BackgroundMenu.addBackgroundMenu(bgManager.backgroundActor, this);
|
BackgroundMenu.addBackgroundMenu(bgManager.backgroundActor, this);
|
||||||
}
|
}
|
||||||
@ -540,6 +561,7 @@ var LayoutManager = GObject.registerClass({
|
|||||||
this._updateMonitors();
|
this._updateMonitors();
|
||||||
this._updateBoxes();
|
this._updateBoxes();
|
||||||
this._updateHotCorners();
|
this._updateHotCorners();
|
||||||
|
this._updateScreenCorners();
|
||||||
this._updateBackgrounds();
|
this._updateBackgrounds();
|
||||||
this._updateFullscreen();
|
this._updateFullscreen();
|
||||||
this._updateVisibility();
|
this._updateVisibility();
|
||||||
|
79
js/ui/screenCorner.js
Normal file
79
js/ui/screenCorner.js
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
/* exported ScreenCorner */
|
||||||
|
|
||||||
|
const { Clutter, GObject, Meta, St } = imports.gi;
|
||||||
|
const Cairo = imports.cairo;
|
||||||
|
|
||||||
|
const Layout = imports.ui.layout;
|
||||||
|
|
||||||
|
var ScreenCorner = GObject.registerClass(
|
||||||
|
class ScreenCorner extends St.DrawingArea {
|
||||||
|
_init(corner, monitor) {
|
||||||
|
super._init({ style_class: 'screen-corner' });
|
||||||
|
|
||||||
|
this._corner = corner;
|
||||||
|
|
||||||
|
this.add_constraint(new Layout.MonitorConstraint({ index: monitor.index }));
|
||||||
|
|
||||||
|
if (corner === Meta.DisplayCorner.TOPRIGHT ||
|
||||||
|
corner === Meta.DisplayCorner.BOTTOMRIGHT)
|
||||||
|
this.x_align = Clutter.ActorAlign.END;
|
||||||
|
|
||||||
|
if (corner === Meta.DisplayCorner.BOTTOMLEFT ||
|
||||||
|
corner === Meta.DisplayCorner.BOTTOMRIGHT)
|
||||||
|
this.y_align = Clutter.ActorAlign.END;
|
||||||
|
}
|
||||||
|
|
||||||
|
vfunc_repaint() {
|
||||||
|
let node = this.get_theme_node();
|
||||||
|
|
||||||
|
let cornerRadius = node.get_length("-screen-corner-radius");
|
||||||
|
let backgroundColor = node.get_color('-screen-corner-background-color');
|
||||||
|
|
||||||
|
let cr = this.get_context();
|
||||||
|
cr.setOperator(Cairo.Operator.SOURCE);
|
||||||
|
|
||||||
|
switch (this._corner) {
|
||||||
|
case Meta.DisplayCorner.TOPLEFT:
|
||||||
|
cr.arc(cornerRadius, cornerRadius,
|
||||||
|
cornerRadius, Math.PI, 3 * Math.PI / 2);
|
||||||
|
cr.lineTo(0, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Meta.DisplayCorner.TOPRIGHT:
|
||||||
|
cr.arc(0, cornerRadius,
|
||||||
|
cornerRadius, 3 * Math.PI / 2, 2 * Math.PI);
|
||||||
|
cr.lineTo(cornerRadius, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Meta.DisplayCorner.BOTTOMLEFT:
|
||||||
|
cr.arc(cornerRadius, 0,
|
||||||
|
cornerRadius, Math.PI / 2, Math.PI);
|
||||||
|
cr.lineTo(0, cornerRadius);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Meta.DisplayCorner.BOTTOMRIGHT:
|
||||||
|
cr.arc(0, 0,
|
||||||
|
cornerRadius, 0, Math.PI / 2);
|
||||||
|
cr.lineTo(cornerRadius, cornerRadius);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
cr.closePath();
|
||||||
|
|
||||||
|
Clutter.cairo_set_source_color(cr, backgroundColor);
|
||||||
|
cr.fill();
|
||||||
|
|
||||||
|
cr.$dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
vfunc_style_changed() {
|
||||||
|
super.vfunc_style_changed();
|
||||||
|
|
||||||
|
let node = this.get_theme_node();
|
||||||
|
|
||||||
|
let cornerRadius = node.get_length("-screen-corner-radius");
|
||||||
|
|
||||||
|
this.set_size(cornerRadius, cornerRadius);
|
||||||
|
}
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user