change in buffer management

This commit is contained in:
John McLear 2021-01-07 20:09:54 +00:00
parent 170dd43e8b
commit 2fff1c473f
2 changed files with 19 additions and 14 deletions

View file

@ -354,15 +354,15 @@ Scroll.prototype.movePage = function (direction) {
// if the buffer of a fixed value isn't working as intended // if the buffer of a fixed value isn't working as intended
const linePosition = caretPosition.getPosition(); const linePosition = caretPosition.getPosition();
const buffer = 25; const buffer = 25;
// we need to remember that lineoffset needs to be removed too..
let pixelsToScroll = viewport.top - viewport.bottom; let offset = linePosition.bottom - viewport.top;
let pixelsToScroll = viewport.top - viewport.bottom + offset;
if (direction === 'up') { if (direction === 'up') {
// buffer pixels unscrolled our safety net here. You can't use the current or previous // buffer pixels unscrolled our safety net here. You can't use the current or previous
// line height because it might be a very long line.. // line height because it might be a very long line..
pixelsToScroll = -Math.abs(pixelsToScroll + buffer); pixelsToScroll = -Math.abs(pixelsToScroll + buffer/2);
} else { } else {
pixelsToScroll = Math.abs(pixelsToScroll + buffer); pixelsToScroll = Math.abs(pixelsToScroll + buffer/2);
} }
this.outerWin.scrollBy(0, pixelsToScroll); this.outerWin.scrollBy(0, pixelsToScroll);
@ -371,12 +371,10 @@ Scroll.prototype.movePage = function (direction) {
Scroll.prototype.getFirstVisibleCharacter = function (direction, rep) { Scroll.prototype.getFirstVisibleCharacter = function (direction, rep) {
const viewport = this._getViewPortTopBottom(); const viewport = this._getViewPortTopBottom();
console.log('viewport', viewport);
const editor = parent.document.getElementsByTagName('iframe'); const editor = parent.document.getElementsByTagName('iframe');
const lines = $(editor).contents().find('div'); const lines = $(editor).contents().find('div');
// const currentLine = $(editor).contents().find('#innerdocbody'); // const currentLine = $(editor).contents().find('#innerdocbody');
const currentLine = rep.lines.atIndex(rep.selEnd[0]); const currentLine = rep.lines.atIndex(rep.selEnd[0]);
console.log('currentLine', currentLine);
const modifiedRep = {}; const modifiedRep = {};
modifiedRep.selStart = []; modifiedRep.selStart = [];
modifiedRep.selEnd = []; modifiedRep.selEnd = [];
@ -389,7 +387,6 @@ Scroll.prototype.getFirstVisibleCharacter = function (direction, rep) {
// is each line in the viewport? // is each line in the viewport?
if (lineBase > viewport.top) { if (lineBase > viewport.top) {
top.console.log('returning', index);
modifiedRep.selEnd[0] = index; modifiedRep.selEnd[0] = index;
modifiedRep.selStart[0] = index; modifiedRep.selStart[0] = index;
modifiedRep.selEnd[1] = 0; modifiedRep.selEnd[1] = 0;
@ -405,7 +402,6 @@ Scroll.prototype.getFirstVisibleCharacter = function (direction, rep) {
// oh dear, looks like the original line is still the first in the viewport.. // oh dear, looks like the original line is still the first in the viewport..
// we will need to move the rep X chars within that original position. // we will need to move the rep X chars within that original position.
console.log('CANT SEE NEXT LiNE!');
modifiedRep.selStart[0] = rep.selStart[0]; modifiedRep.selStart[0] = rep.selStart[0];
modifiedRep.selEnd[0] = rep.selEnd[0]; modifiedRep.selEnd[0] = rep.selEnd[0];

View file

@ -357,7 +357,7 @@ describe('Shift Page Up/Down', function () {
}, },
}); });
}); });
/*
it('highlights lines on shift page down and releases them on page up', async function () { it('highlights lines on shift page down and releases them on page up', async function () {
await helper.edit('xxx', 1); // caret is offset 6 await helper.edit('xxx', 1); // caret is offset 6
@ -391,8 +391,18 @@ describe('Shift Page Up/Down', function () {
}); });
await helper.waitForPromise(() => helper.padInner$.document.getSelection().type === 'Range'); await helper.waitForPromise(() => helper.padInner$.document.getSelection().type === 'Range');
}); });
*/
it('BROKEN JM TO FIX - highlights from end of document on page up then releases them on shift page down', async function () { it('Highlights from end of document on page up then releases them on shift page down', async function () {
// TODO: JM NEEDS HELP: Why isn't this working? It works if you do the same in browser..
throw new Error("I NEED HELPZ PLZ")
await helper.waitForPromise(() => helper.caretLineNumber() >= 201);
// make sure we're at bottom
helper.pageDown({
pressAndHold: true,
});
await helper.waitForPromise(() => helper.caretLineNumber() >= 201);
helper.pageUp({ helper.pageUp({
shift: true, shift: true,
}); });
@ -403,7 +413,6 @@ describe('Shift Page Up/Down', function () {
}); });
await helper.waitForPromise(() => helper.padInner$.document.getSelection().type === 'Caret'); await helper.waitForPromise(() => helper.padInner$.document.getSelection().type === 'Caret');
}); });
/*
it('highlights from end of document on page up twice and retains on single page down', async function () { it('highlights from end of document on page up twice and retains on single page down', async function () {
helper.pageUp({ helper.pageUp({
shift: true, shift: true,
@ -451,7 +460,7 @@ describe('Shift Page Up/Down', function () {
xit('highlights (a few lines) range backwards (rep.selFocusAtStart) then hit page down, selStart should be initial selEnd and selEnd further than original selEnd', async function () { xit('highlights (a few lines) range backwards (rep.selFocusAtStart) then hit page down, selStart should be initial selEnd and selEnd further than original selEnd', async function () {
throw new Error("JM TO DO") throw new Error("JM TO DO")
}); });
*/
}); });
describe('Press and Hold Page Up/Down', function () { describe('Press and Hold Page Up/Down', function () {