From 978cf9d3ab0f0a3b8662984eae743479d6cc07eb Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Sat, 30 Oct 2010 17:01:41 -0400 Subject: [PATCH] Fix redundant calls to global.get_pointer() Since we are keeping a current pointer position anyways, we don't have to continually call global.get_pointer() which is a round trip to the magnifier; make ZoomRegion simply fetch a current position stored in the Magnifier object. https://bugzilla.gnome.org/show_bug.cgi?id=633553 --- js/ui/magnifier.js | 42 +++++++++++++++++++----------------------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/js/ui/magnifier.js b/js/ui/magnifier.js index edc3d00c2..472fdea59 100644 --- a/js/ui/magnifier.js +++ b/js/ui/magnifier.js @@ -66,11 +66,14 @@ Magnifier.prototype = { // Create the first ZoomRegion and initialize it according to the // magnification settings. - let [xMouse, yMouse, mask] = global.get_pointer(); + + let mask; + [this.xMouse, this.yMouse, mask] = global.get_pointer(); + let aZoomRegion = new ZoomRegion(this, this._cursorRoot); this._zoomRegions.push(aZoomRegion); let showAtLaunch = this._settingsInit(aZoomRegion); - aZoomRegion.scrollContentsTo(xMouse, yMouse); + aZoomRegion.scrollContentsTo(this.xMouse, this.yMouse); xfixesCursor.connect('cursor-change', Lang.bind(this, this._updateMouseSprite)); this._xfixesCursor = xfixesCursor; @@ -138,12 +141,10 @@ Magnifier.prototype = { * Turn on mouse tracking, if not already doing so. */ startTrackingMouse: function() { - // initialize previous mouse coord to undefined. - let prevCoord = { x: NaN, y: NaN }; if (!this._mouseTrackingId) this._mouseTrackingId = Mainloop.timeout_add( MOUSE_POLL_FREQUENCY, - Lang.bind(this, this.scrollToMousePos, prevCoord) + Lang.bind(this, this.scrollToMousePos) ); }, @@ -170,14 +171,15 @@ Magnifier.prototype = { * scrollToMousePos: * Position all zoom regions' ROI relative to the current location of the * system pointer. - * @prevCoord: The previous mouse coordinates. Used to stop scrolling if - * the new position is the same as the last one (optional). * @return true. */ - scrollToMousePos: function(prevCoord) { + scrollToMousePos: function() { let [xMouse, yMouse, mask] = global.get_pointer(); - if (!prevCoord || prevCoord.x != xMouse || prevCoord.y != yMouse) { + if (xMouse != this.xMouse || yMouse != this.yMouse) { + this.xMouse = xMouse; + this.yMouse = yMouse; + let sysMouseOverAny = false; this._zoomRegions.forEach(function(zoomRegion, index, array) { if (zoomRegion.scrollToMousePos()) @@ -187,11 +189,6 @@ Magnifier.prototype = { this.hideSystemCursor(); else this.showSystemCursor(); - - if (prevCoord) { - prevCoord.x = xMouse; - prevCoord.y = yMouse; - } } return true; }, @@ -1018,16 +1015,14 @@ ZoomRegion.prototype = { this._updateMousePosition(); }, - _isMouseOverRegion: function(xMouse, yMouse) { + _isMouseOverRegion: function() { // Return whether the system mouse sprite is over this ZoomRegion. If the // mouse's position is not given, then it is fetched. let mouseIsOver = false; if (this.isActive()) { - if (xMouse == null || yMouse == null) { - let [x, y, mask] = global.get_pointer(); - xMouse = x; - yMouse = y; - } + let xMouse = this._magnifier.xMouse; + let yMouse = this._magnifier.yMouse; + mouseIsOver = ( xMouse >= this._viewPortX && xMouse < (this._viewPortX + this._viewPortWidth) && yMouse >= this._viewPortY && yMouse < (this._viewPortY + this._viewPortHeight) @@ -1053,7 +1048,8 @@ ZoomRegion.prototype = { // Determines where the center should be given the current cursor // position and mouse tracking mode - let [xMouse, yMouse, mask] = global.get_pointer(); + let xMouse = this._magnifier.xMouse; + let yMouse = this._magnifier.yMouse; if (this._mouseTrackingMode == MouseTrackingMode.PROPORTIONAL) { return this._centerFromMouseProportional(xMouse, yMouse); @@ -1147,8 +1143,8 @@ ZoomRegion.prototype = { if (!this.isActive()) return; - let [xMouse, yMouse, mask] = global.get_pointer(); - let [xMagMouse, yMagMouse] = this._screenToViewPort(xMouse, yMouse); + let [xMagMouse, yMagMouse] = this._screenToViewPort(this._magnifier.xMouse, + this._magnifier.yMouse); xMagMouse = Math.round(xMagMouse); yMagMouse = Math.round(yMagMouse);