(empty) Minimap for all spaces!

Not hooked up to 'window-added/removed' so the map will be empty.
This commit is contained in:
Ole Jørgen Brønner
2017-09-27 21:26:08 +02:00
parent 75220ee83d
commit d7fa57592c
3 changed files with 49 additions and 56 deletions

View File

@@ -2,12 +2,6 @@ Clutter = imports.gi.Clutter;
Tweener = imports.ui.tweener;
Lang = imports.lang;
if (window.mm) {
mm.viewport.destroy();
}
mm = null;
calcOffset = function(metaWindow) {
let buffer = metaWindow.get_buffer_rect();
let frame = metaWindow.get_frame_rect();
@@ -16,49 +10,21 @@ calcOffset = function(metaWindow) {
return [x_offset, y_offset];
}
layout = function(actors) {
function tweenTo(actor, x) {
let [dx, dy] = calcOffset(actor.meta_window);
// actor.set_pivot_point(0, 0);
Tweener.addTween(actor, { x: x - dx
, scale_x: 1
, scale_y: 1
, time: 0.25
, transition: "easeInOutQuad"});
}
function propagate_forward(i, leftEdge, gap) {
if(i < 0 || i >= actors.length)
return;
let actor = actors[i];
let w = actor.meta_window.get_frame_rect().width;
let x = leftEdge;
tweenTo(actor, x);
propagate_forward(i+1, x + w + gap, gap);
}
propagate_forward(0, 0, window_gap);
}
allocationChanged = function allocationChanged(actor, propertySpec) {
layout(mm.viewport.clones);
this.layout(this.clones);
}
createMinimap = function(workspace) {
let space = spaces[workspace.index()].slice();
function createMinimap(space) {
let viewport = new Clutter.Actor();
let clones = space.map((mw) => {
let windowActor = mw.get_compositor_private()
let clone = new Clutter.Clone({ source: windowActor });
clone.meta_window = mw;
windowActor.connect("notify::allocation",
dynamic_function_ref("allocationChanged"));
Lang.bind(viewport, dynamic_function_ref("allocationChanged")));
return clone;
});
let minimapActor = new Clutter.Actor();
let viewport = new Clutter.Actor();
clones.forEach(clone => {
minimapActor.add_actor(clone);
})
@@ -108,7 +74,41 @@ createMinimap = function(workspace) {
}
viewport.unfold = function () {
layout(clones);
viewport.layout(clones);
}
viewport.toggle = function() {
viewport.visible = !viewport.visible;
}
viewport.layout = function(actors) {
function tweenTo(actor, x) {
let [dx, dy] = calcOffset(actor.meta_window);
// actor.set_pivot_point(0, 0);
Tweener.addTween(actor, { x: x - dx
, scale_x: 1
, scale_y: 1
, time: 0.25
, transition: "easeInOutQuad"});
}
function propagate_forward(i, leftEdge, gap) {
if(i < 0 || i >= actors.length)
return;
let actor = actors[i];
let w = actor.meta_window.get_frame_rect().width;
let x = leftEdge;
tweenTo(actor, x);
propagate_forward(i+1, x + w + gap, gap);
}
propagate_forward(0, 0, window_gap);
}
viewport.sync = function(originX) {
Tweener.addTween(minimapActor, { x: originX, time: 0.25, transition: 'easeInOutQuad' });
}
viewport.clones = clones;
@@ -118,23 +118,15 @@ createMinimap = function(workspace) {
viewport.add_actor(minimapActor);
viewport.set_background_color(Clutter.Color.get_static(3))
viewport.hide();
return {viewport: viewport, minimap: minimapActor};
}
minimapSyncFn = function(originX) {
Tweener.addTween(mm.minimap, { x: originX, time: 0.25, transition: 'easeInOutQuad' });
}
viewport.layout(viewport.clones);
global.stage.add_actor(viewport)
viewport.x = (primary.width - viewport.get_transformed_size()[0])/2;
toggleMinimap = function() {
if (!mm) {
mm = createMinimap(global.screen.get_active_workspace());
layout(mm.viewport.clones);
global.stage.add_actor(mm.viewport)
mm.viewport.x = (primary.width - mm.viewport.get_transformed_size()[0])/2;
}
mm.viewport.visible = !mm.viewport.visible;
return viewport;
}
// bg=Main.layoutManager._backgroundGroup.get_children()[0]
// bgc= new Clutter.Clone({source:bg})

View File

@@ -10,6 +10,8 @@ const Shell = imports.gi.Shell;
const Gio = imports.gi.Gio;
const utils = Extension.imports.utils;
Minimap = Extension.imports.minimap;
let preferences = Extension.imports.convenience.getSettings();
// Gap between windows
window_gap = preferences.get_int('window-gap');
@@ -53,6 +55,7 @@ Space = (workspace) => {
space.moving = false;
space.leftStack = 0;
space.rightStack = 0;
space.minimap = Minimap.createMinimap(space);
return space;
}
@@ -299,9 +302,7 @@ ensure_viewport = (space, meta_window, force) => {
debug('delay', delay)
}
let newOriginX = move_to(space, meta_window, x, y, delay, transition);
if(window.minimapSyncFn) {
window.minimapSyncFn(newOriginX);
}
space.minimap.sync(newOriginX);
}
focus_handler = (meta_window, user_data) => {

View File

@@ -39,7 +39,7 @@ framestr = (rect) => {
dynamic_function_ref = (handler_name, owner_obj) => {
owner_obj = owner_obj || window;
return function() {
owner_obj[handler_name].apply(owner_obj, arguments);
owner_obj[handler_name].apply(this, arguments);
}
}