improve pointer cursor management

* cross cursor for geometric shapes
* 'hand' cursor for 'ctrl' actions
* default cursor in menu
This commit is contained in:
abakkk 2019-11-27 06:04:37 +01:00
parent fb8e46bb45
commit 1af3554f5c
2 changed files with 34 additions and 12 deletions

25
draw.js
View File

@ -326,6 +326,7 @@ var DrawingArea = new Lang.Class({
this._updateCursorTimeout();
this.textHasCursor = true;
this._redisplay();
this.updatePointerCursor();
return;
}
@ -334,6 +335,7 @@ var DrawingArea = new Lang.Class({
this.currentElement = null;
this._redisplay();
this.updatePointerCursor();
},
_updateDrawing: function(x, y, controlPressed) {
@ -349,7 +351,9 @@ var DrawingArea = new Lang.Class({
this.currentElement.transformLine(x, y);
else
this.currentElement.points[1] = [x, y];
this._redisplay();
this.updatePointerCursor(controlPressed);
},
_stopWriting: function() {
@ -360,6 +364,20 @@ var DrawingArea = new Lang.Class({
this._redisplay();
},
setPointerCursor: function(pointerCursorName) {
if (!this.currentPointerCursorName || this.currentPointerCursorName != pointerCursorName) {
this.currentPointerCursorName = pointerCursorName;
ExtensionJs.setCursor(pointerCursorName);
}
},
updatePointerCursor: function(controlPressed) {
if (!this.currentElement || (this.currentElement.shape == Shapes.TEXT && this.currentElement.state == TextState.WRITING))
this.setPointerCursor(this.currentShape == Shapes.NONE ? 'POINTING_HAND' : 'CROSSHAIR');
else if (this.currentElement.shape != Shapes.NONE && controlPressed)
this.setPointerCursor('MOVE_OR_RESIZE_WINDOW');
},
_stopCursorTimeout: function() {
if (this.cursorTimeoutId) {
Mainloop.source_remove(this.cursorTimeoutId);
@ -456,6 +474,7 @@ var DrawingArea = new Lang.Class({
selectShape: function(shape) {
this.currentShape = shape;
this.emitter.emit('show-osd', _(ShapeNames[shape]), null);
this.updatePointerCursor();
},
toggleFill: function() {
@ -1047,9 +1066,13 @@ var DrawingMenu = new Lang.Class({
},
_onMenuOpenStateChanged: function(menu, open) {
if (!open)
if (open) {
this.area.setPointerCursor('DEFAULT');
} else {
this.area.updatePointerCursor();
// actionMode has changed, set previous actionMode in order to keep internal shortcuts working
Main.actionMode = ExtensionJs.DRAWING_ACTION_MODE | Shell.ActionMode.NORMAL;
}
},
popup: function() {

View File

@ -279,11 +279,7 @@ var AreaManager = new Lang.Class({
if (!this.settings.get_boolean("drawing-on-desktop"))
activeContainer.hide();
// check display or screen (API changes)
if (global.display.set_cursor)
global.display.set_cursor(Meta.Cursor.DEFAULT);
else if (global.screen && global.screen.set_cursor)
global.screen.set_cursor(Meta.Cursor.DEFAULT);
setCursor('DEFAULT');
if (!this.osdDisabled)
Main.osdWindowManager.show(activeIndex, this.leaveGicon, _("Leaving drawing mode"), null);
} else {
@ -302,12 +298,7 @@ var AreaManager = new Lang.Class({
this.activeArea.reactive = true;
this.activeArea.enterDrawingMode();
// check display or screen (API changes)
if (global.display.set_cursor)
global.display.set_cursor(Meta.Cursor.POINTING_HAND);
else if (global.screen && global.screen.set_cursor)
global.screen.set_cursor(Meta.Cursor.POINTING_HAND);
setCursor('POINTING_HAND');
this.osdDisabled = this.settings.get_boolean('osd-disabled');
if (!this.osdDisabled) {
// increase OSD display time
@ -414,4 +405,12 @@ var DrawingIndicator = new Lang.Class({
}
});
function setCursor(cursorName) {
// check display or screen (API changes)
if (global.display.set_cursor)
global.display.set_cursor(Meta.Cursor[cursorName]);
else if (global.screen && global.screen.set_cursor)
global.screen.set_cursor(Meta.Cursor[cursorName]);
}