First cut at activities overlay

When the user clicks on "Activities", adjust the input shape
to the whole screen and show a black overlay group. Actually, the
black should be *beneath* the window actors and the overlay group
transparent so we can fade in the black while leaving the windows
unfaded, visible, but shrunk and rearranged.

svn path=/trunk/; revision=14
This commit is contained in:
Owen Taylor 2008-10-31 23:09:46 +00:00
parent 0cea92e46a
commit 9e45cf84fb
3 changed files with 79 additions and 4 deletions

View File

@ -4,11 +4,13 @@ const Shell = imports.gi.Shell;
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Panel = imports.ui.panel; const Panel = imports.ui.panel;
const Overlay = imports.ui.overlay;
const DEFAULT_BACKGROUND_COLOR = new Clutter.Color(); const DEFAULT_BACKGROUND_COLOR = new Clutter.Color();
DEFAULT_BACKGROUND_COLOR.from_pixel(0x2266bbff); DEFAULT_BACKGROUND_COLOR.from_pixel(0x2266bbff);
let panel = null; let panel = null;
let overlay = null;
function start() { function start() {
let global = Shell.global_get(); let global = Shell.global_get();
@ -20,9 +22,25 @@ function start() {
// Mutter currently hardcodes putting "Yessir. The compositor is running"" // Mutter currently hardcodes putting "Yessir. The compositor is running""
// in the overlay. Clear that out. // in the overlay. Clear that out.
children = global.overlay_group.get_children(); let children = global.overlay_group.get_children();
for (let i = 0; i < children.length; i++) for (let i = 0; i < children.length; i++)
children[i].destroy(); children[i].destroy();
panel = new Panel.Panel(); panel = new Panel.Panel();
overlay = new Overlay.Overlay();
global.set_stage_input_area(0, 0, global.screen_width, Panel.PANEL_HEIGHT);
}
function show_overlay() {
let global = Shell.global_get();
overlay.show();
global.set_stage_input_area(0, 0, global.screen_width, global.screen_height);
}
function hide_overlay() {
let global = Shell.global_get();
overlay.hide();
global.set_stage_input_area(0, 0, global.screen_width, Panel.PANEL_HEIGHT);
} }

47
js/ui/overlay.js Normal file
View File

@ -0,0 +1,47 @@
/* -*- mode: js2; js2-basic-offset: 4; -*- */
const Shell = imports.gi.Shell;
const Clutter = imports.gi.Clutter;
const Panel = imports.ui.panel;
const OVERLAY_BACKGROUND_COLOR = new Clutter.Color();
OVERLAY_BACKGROUND_COLOR.from_pixel(0x000000ff);
function Overlay() {
this._init();
}
Overlay.prototype = {
_init : function() {
let global = Shell.global_get();
this._group = new Clutter.Group();
this.visible = false;
let background = new Clutter.Rectangle({ color: OVERLAY_BACKGROUND_COLOR,
reactive: true,
x: 0,
y: Panel.PANEL_HEIGHT,
width: global.screen_width,
height: global.screen_width - Panel.PANEL_HEIGHT });
this._group.add_actor(background);
this._group.hide();
global.overlay_group.add_actor(this._group);
},
show : function() {
if (!this.visible) {
this.visible = true;
this._group.show();
}
},
hide : function() {
if (this.visible) {
this.visible = false;
this._group.hide();
}
}
};

View File

@ -5,6 +5,11 @@ const Mainloop = imports.mainloop;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
// The mutual import here causes things to break in weird ways,
// (http://bugzilla.gnome.org/show_bug.cgi?id=558741)
// So we do a local import below
// const Main = imports.ui.main;
const PANEL_HEIGHT = 32; const PANEL_HEIGHT = 32;
const PANEL_BACKGROUND_COLOR = new Clutter.Color(); const PANEL_BACKGROUND_COLOR = new Clutter.Color();
PANEL_BACKGROUND_COLOR.from_pixel(0xeeddccff); PANEL_BACKGROUND_COLOR.from_pixel(0xeeddccff);
@ -17,8 +22,6 @@ Panel.prototype = {
_init : function() { _init : function() {
let global = Shell.global_get(); let global = Shell.global_get();
global.set_stage_input_area(0, 0, global.screen_width, PANEL_HEIGHT);
this._group = new Clutter.Group(); this._group = new Clutter.Group();
let background = new Clutter.Rectangle({ color: PANEL_BACKGROUND_COLOR, let background = new Clutter.Rectangle({ color: PANEL_BACKGROUND_COLOR,
@ -41,7 +44,14 @@ Panel.prototype = {
message.connect('button-press-event', message.connect('button-press-event',
function(o, event) { function(o, event) {
log('Clicked!'); // See comment above
let Main = imports.ui.main;
if (Main.overlay.visible)
Main.hide_overlay();
else
Main.show_overlay();
return true; return true;
}); });