1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2025-12-21 09:48:00 +01:00

Fix smooth scroll issue.

This commit is contained in:
Kris Maglione
2011-09-29 15:17:39 -04:00
parent 6ebda9b918
commit a1432a07de

View File

@@ -1345,31 +1345,30 @@ var Buffer = Module("buffer", {
* Like scrollTo, but scrolls more smoothly and does not update * Like scrollTo, but scrolls more smoothly and does not update
* marks. * marks.
*/ */
smoothScrollTo: function smoothScrollTo(elem, x, y) { smoothScrollTo: function smoothScrollTo(node, x, y) {
let time = options["scrolltime"]; let time = options["scrolltime"];
let steps = options["scrollsteps"]; let steps = options["scrollsteps"];
let data = elem; let elem = Buffer.Scrollable(node);
elem = Buffer.Scrollable(elem);
if (data.dactylScrollTimer) if (node.dactylScrollTimer)
data.dactylScrollTimer.cancel(); node.dactylScrollTimer.cancel();
x = data.dactylScrollDestX = Math.min(x, elem.scrollWidth - elem.clientWidth); x = node.dactylScrollDestX = Math.min(x, elem.scrollWidth - elem.clientWidth);
y = data.dactylScrollDestY = Math.min(y, elem.scrollHeight - elem.clientHeight); y = node.dactylScrollDestY = Math.min(y, elem.scrollHeight - elem.clientHeight);
let [startX, startY] = [elem.scrollLeft, elem.scrollTop]; let [startX, startY] = [elem.scrollLeft, elem.scrollTop];
let n = 0; let n = 0;
(function next() { (function next() {
if (n++ === steps) { if (n++ === steps) {
elem.scrollLeft = x; elem.scrollLeft = x;
elem.scrollTop = y; elem.scrollTop = y;
delete data.dactylScrollDestX; delete node.dactylScrollDestX;
delete data.dactylScrollDestY; delete node.dactylScrollDestY;
} }
else { else {
elem.scrollLeft = startX + (x - startX) / steps * n; elem.scrollLeft = startX + (x - startX) / steps * n;
elem.scrollTop = startY + (y - startY) / steps * n; elem.scrollTop = startY + (y - startY) / steps * n;
data.dactylScrollTimer = util.timeout(next, time / steps); node.dactylScrollTimer = util.timeout(next, time / steps);
} }
}).call(this); }).call(this);
}, },
@@ -1386,11 +1385,10 @@ var Buffer = Module("buffer", {
* @throws {FailedAssertion} if scrolling is not possible in the * @throws {FailedAssertion} if scrolling is not possible in the
* given direction. * given direction.
*/ */
scrollHorizontal: function scrollHorizontal(elem, unit, number) { scrollHorizontal: function scrollHorizontal(node, unit, number) {
let fontSize = parseInt(DOM(elem).style.fontSize); let fontSize = parseInt(DOM(node).style.fontSize);
let data = elem; let elem = Buffer.Scrollable(node);
elem = Buffer.Scrollable(elem);
let increment; let increment;
if (unit == "columns") if (unit == "columns")
increment = fontSize; // Good enough, I suppose. increment = fontSize; // Good enough, I suppose.
@@ -1401,10 +1399,10 @@ var Buffer = Module("buffer", {
dactyl.assert(number < 0 ? elem.scrollLeft > 0 : elem.scrollLeft < elem.scrollWidth - elem.clientWidth); dactyl.assert(number < 0 ? elem.scrollLeft > 0 : elem.scrollLeft < elem.scrollWidth - elem.clientWidth);
let left = data.dactylScrollDestX !== undefined ? data.dactylScrollDestX : elem.scrollLeft; let left = node.dactylScrollDestX !== undefined ? node.dactylScrollDestX : elem.scrollLeft;
data.dactylScrollDestX = undefined; node.dactylScrollDestX = undefined;
Buffer.scrollTo(elem, left + number * increment, null, "h-" + unit); Buffer.scrollTo(node, left + number * increment, null, "h-" + unit);
}, },
/** /**
@@ -1419,11 +1417,10 @@ var Buffer = Module("buffer", {
* @throws {FailedAssertion} if scrolling is not possible in the * @throws {FailedAssertion} if scrolling is not possible in the
* given direction. * given direction.
*/ */
scrollVertical: function scrollVertical(elem, unit, number) { scrollVertical: function scrollVertical(node, unit, number) {
let fontSize = parseInt(DOM(elem).style.lineHeight); let fontSize = parseInt(DOM(node).style.lineHeight);
let data = elem; let elem = Buffer.Scrollable(node);
elem = Buffer.Scrollable(elem);
let increment; let increment;
if (unit == "lines") if (unit == "lines")
increment = fontSize; increment = fontSize;
@@ -1434,10 +1431,10 @@ var Buffer = Module("buffer", {
dactyl.assert(number < 0 ? elem.scrollTop > 0 : elem.scrollTop < elem.scrollHeight - elem.clientHeight); dactyl.assert(number < 0 ? elem.scrollTop > 0 : elem.scrollTop < elem.scrollHeight - elem.clientHeight);
let top = data.dactylScrollDestY !== undefined ? data.dactylScrollDestY : elem.scrollTop; let top = node.dactylScrollDestY !== undefined ? node.dactylScrollDestY : elem.scrollTop;
data.dactylScrollDestY = undefined; node.dactylScrollDestY = undefined;
Buffer.scrollTo(elem, null, top + number * increment, "v-" + unit); Buffer.scrollTo(node, null, top + number * increment, "v-" + unit);
}, },
/** /**
@@ -1452,9 +1449,9 @@ var Buffer = Module("buffer", {
* of the current viewport height to scroll to. If null, do not * of the current viewport height to scroll to. If null, do not
* scroll vertically. * scroll vertically.
*/ */
scrollToPercent: function scrollToPercent(elem, horizontal, vertical) { scrollToPercent: function scrollToPercent(node, horizontal, vertical) {
elem = Buffer.Scrollable(elem); let elem = Buffer.Scrollable(node);
Buffer.scrollTo(elem, Buffer.scrollTo(node,
horizontal == null ? null horizontal == null ? null
: (elem.scrollWidth - elem.clientWidth) * (horizontal / 100), : (elem.scrollWidth - elem.clientWidth) * (horizontal / 100),
vertical == null ? null vertical == null ? null