Initial mouse tracking

This commit is contained in:
Fmstrat
2020-01-02 16:39:54 -05:00
parent cdb7f4fb31
commit f0df658e2b

View File

@@ -7,6 +7,9 @@ const ModalDialog = imports.ui.modalDialog;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const St = imports.gi.St;
const Tweener = imports.ui.tweener;
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
@@ -23,6 +26,7 @@ var _log = function(str) {
let config = {
cols: 2,
useMaximize: true,
close: 50,
debug: true
}
@@ -571,11 +575,19 @@ function windowGrabBegin(meta_display, meta_screen, meta_window, meta_grab_op, g
if (app.wintile) {
checkForMove(app.get_frame_rect(), app);
}
checkIfNearGrid(app);
}
function windowGrabEnd(meta_display, meta_screen, meta_window, meta_grab_op, gpointer) {
_log('windowGrabEnd')
windowMoving = false;
if (preview.visible == true) {
var app = global.display.focus_window;
if (!app.wintile)
initApp(app)
moveApp(app, { "row": preview.row, "col": preview.col, "height": 1, "width": 1 });
hidePreview();
}
}
function changeBinding(settings, key, oldBinding, newBinding) {
@@ -595,6 +607,76 @@ function resetBinding(settings, key) {
settings.set_strv(key, binding);
}
function isClose(a, b) {
if (a <= b && a > b - config.close)
return true;
else if (a >= b && a < b + config.close)
return true;
else
return false;
}
var preview = new St.BoxLayout({
style_class: 'tile-preview',
visible: true
});
Main.uiGroup.add_actor(preview);
function showPreview(col, row, _x, _y, _w, _h) {
Tweener.removeTweens(preview);
preview.visible = true;
preview.col = col;
preview.row = row;
Tweener.addTween(preview, {
time: 0.125,
opacity: 255,
visible: true,
transition: 'easeOutQuad',
x: _x,
y: _y,
width: _w,
height: _h
});
}
function hidePreview() {
Tweener.removeTweens(preview);
preview.visible = false;
preview.col = null;
preview.row = null;
}
function checkIfNearGrid(app) {
_log('checkIfNearGrid')
if (windowMoving) {
var space = app.get_work_area_current_monitor()
colWidth = Math.floor(space.width/config.cols)
rowHeight = Math.floor(space.height/2)
let [x, y, mask] = global.get_pointer();
_log(`mouse - x:${x} y:${y}`);
var close = false;
for (var i = 0; i < config.cols; i++) {
var grid_x = i * colWidth + space.x;
if ((isClose(y, space.y) || y < space.y) && x > grid_x && x < grid_x+colWidth) {
// If we are close to the top, show a preview for the top grid item
showPreview(i, 0, grid_x, space.y, colWidth, rowHeight)
close = true;
break;
} else if ((isClose(y, space.y+space.height) || y > space.y+space.height) && x > grid_x && x < grid_x+colWidth) {
// If we are close to the bottom, show a preview for the bottom grid item
showPreview(i, 1, grid_x, space.y+rowHeight, colWidth, rowHeight)
close = true;
break;
}
}
if (!close)
hidePreview();
Mainloop.timeout_add(100, function () {
checkIfNearGrid(app);
});
}
}
var enable = function() {
if (!keyManager) {
keyManager = new KeyBindings.Manager();