Support automatic resize [Part 1/4]: display.js
* Split viewportChange into two functions, one for changing size and the other for changing position. * Modified viewport code to be capable of changing to a bigger size in the context of a client-initiated resize. * Made clearer distinctions between when viewport-clipping or not. * Added public function for telling when viewport-clipping. * Updated tests that were using viewportChange.
This commit is contained in:
+12
-10
@@ -65,13 +65,15 @@ describe('Display/Canvas Helper', function () {
|
||||
beforeEach(function () {
|
||||
display = new Display({ target: document.createElement('canvas'), prefer_js: false, viewport: true });
|
||||
display.resize(5, 5);
|
||||
display.viewportChange(1, 1, 3, 3);
|
||||
display.viewportChangeSize(3, 3);
|
||||
display.viewportChangePos(1, 1);
|
||||
display.getCleanDirtyReset();
|
||||
});
|
||||
|
||||
it('should take viewport location into consideration when drawing images', function () {
|
||||
display.resize(4, 4);
|
||||
display.viewportChange(0, 0, 2, 2);
|
||||
display.set_width(4);
|
||||
display.set_height(4);
|
||||
display.viewportChangeSize(2, 2);
|
||||
display.drawImage(make_image_canvas(basic_data), 1, 1);
|
||||
|
||||
var expected = new Uint8Array(16);
|
||||
@@ -82,7 +84,7 @@ describe('Display/Canvas Helper', function () {
|
||||
});
|
||||
|
||||
it('should redraw the left side when shifted left', function () {
|
||||
display.viewportChange(-1, 0, 3, 3);
|
||||
display.viewportChangePos(-1, 0);
|
||||
var cdr = display.getCleanDirtyReset();
|
||||
expect(cdr.cleanBox).to.deep.equal({ x: 1, y: 1, w: 2, h: 3 });
|
||||
expect(cdr.dirtyBoxes).to.have.length(1);
|
||||
@@ -90,7 +92,7 @@ describe('Display/Canvas Helper', function () {
|
||||
});
|
||||
|
||||
it('should redraw the right side when shifted right', function () {
|
||||
display.viewportChange(1, 0, 3, 3);
|
||||
display.viewportChangePos(1, 0);
|
||||
var cdr = display.getCleanDirtyReset();
|
||||
expect(cdr.cleanBox).to.deep.equal({ x: 2, y: 1, w: 2, h: 3 });
|
||||
expect(cdr.dirtyBoxes).to.have.length(1);
|
||||
@@ -98,7 +100,7 @@ describe('Display/Canvas Helper', function () {
|
||||
});
|
||||
|
||||
it('should redraw the top part when shifted up', function () {
|
||||
display.viewportChange(0, -1, 3, 3);
|
||||
display.viewportChangePos(0, -1);
|
||||
var cdr = display.getCleanDirtyReset();
|
||||
expect(cdr.cleanBox).to.deep.equal({ x: 1, y: 1, w: 3, h: 2 });
|
||||
expect(cdr.dirtyBoxes).to.have.length(1);
|
||||
@@ -106,7 +108,7 @@ describe('Display/Canvas Helper', function () {
|
||||
});
|
||||
|
||||
it('should redraw the bottom part when shifted down', function () {
|
||||
display.viewportChange(0, 1, 3, 3);
|
||||
display.viewportChangePos(0, 1);
|
||||
var cdr = display.getCleanDirtyReset();
|
||||
expect(cdr.cleanBox).to.deep.equal({ x: 1, y: 2, w: 3, h: 2 });
|
||||
expect(cdr.dirtyBoxes).to.have.length(1);
|
||||
@@ -114,7 +116,7 @@ describe('Display/Canvas Helper', function () {
|
||||
});
|
||||
|
||||
it('should reset the entire viewport to being clean after calculating the clean/dirty boxes', function () {
|
||||
display.viewportChange(0, 1, 3, 3);
|
||||
display.viewportChangePos(0, 1);
|
||||
var cdr1 = display.getCleanDirtyReset();
|
||||
var cdr2 = display.getCleanDirtyReset();
|
||||
expect(cdr1).to.not.deep.equal(cdr2);
|
||||
@@ -146,9 +148,9 @@ describe('Display/Canvas Helper', function () {
|
||||
});
|
||||
|
||||
it('should update the viewport dimensions', function () {
|
||||
sinon.spy(display, 'viewportChange');
|
||||
sinon.spy(display, 'viewportChangeSize');
|
||||
display.resize(2, 2);
|
||||
expect(display.viewportChange).to.have.been.calledOnce;
|
||||
expect(display.viewportChangeSize).to.have.been.calledOnce;
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
+4
-4
@@ -1593,7 +1593,7 @@ describe('Remote Frame Buffer Protocol Client', function() {
|
||||
|
||||
it('should not send movement messages when viewport dragging', function () {
|
||||
client._viewportDragging = true;
|
||||
client._display.viewportChange = sinon.spy();
|
||||
client._display.viewportChangePos = sinon.spy();
|
||||
client._mouse._onMouseMove(13, 9);
|
||||
expect(client._sock.send).to.not.have.been.called;
|
||||
});
|
||||
@@ -1622,14 +1622,14 @@ describe('Remote Frame Buffer Protocol Client', function() {
|
||||
client._viewportDrag = true;
|
||||
client._viewportDragging = true;
|
||||
client._viewportDragPos = { x: 13, y: 9 };
|
||||
client._display.viewportChange = sinon.spy();
|
||||
client._display.viewportChangePos = sinon.spy();
|
||||
|
||||
client._mouse._onMouseMove(10, 4);
|
||||
|
||||
expect(client._viewportDragging).to.be.true;
|
||||
expect(client._viewportDragPos).to.deep.equal({ x: 10, y: 4 });
|
||||
expect(client._display.viewportChange).to.have.been.calledOnce;
|
||||
expect(client._display.viewportChange).to.have.been.calledWith(3, 5);
|
||||
expect(client._display.viewportChangePos).to.have.been.calledOnce;
|
||||
expect(client._display.viewportChangePos).to.have.been.calledWith(3, 5);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
+4
-5
@@ -97,7 +97,7 @@
|
||||
deltaY = lastPos.y - y; // drag frame buffer
|
||||
lastPos = {'x': x, 'y': y};
|
||||
|
||||
display.viewportChange(deltaX, deltaY);
|
||||
display.viewportChangePos(deltaX, deltaY);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -166,14 +166,13 @@
|
||||
var p = $D('canvas').parentNode;
|
||||
message("doResize1: [" + (p.offsetWidth - padW) +
|
||||
"," + (p.offsetHeight - padH) + "]");
|
||||
display.viewportChange(0, 0,
|
||||
p.offsetWidth - padW, p.offsetHeight - padH);
|
||||
display.viewportChangeSize(p.offsetWidth - padW, p.offsetHeight - padH);
|
||||
/*
|
||||
var pos, new_w, new_h;pos
|
||||
pos = Util.getPosition($D('canvas').parentNode);
|
||||
new_w = window.innerWidth - pos.x;
|
||||
new_h = window.innerHeight - pos.y;
|
||||
display.viewportChange(0, 0, new_w, new_h);
|
||||
display.viewportChangeSize(new_w, new_h);
|
||||
*/
|
||||
}
|
||||
|
||||
@@ -194,7 +193,7 @@
|
||||
Util.addEvent(window, 'resize', doResize);
|
||||
// Shrink viewport for first resize call so that the
|
||||
// scrollbars are disabled
|
||||
display.viewportChange(0, 0, 10, 10);
|
||||
display.viewportChangeSize(10, 10);
|
||||
setTimeout(doResize, 1);
|
||||
setInterval(dirtyRedraw, 50);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user