summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2018-08-16 17:50:09 +0200
committerPierre Ossman <ossman@cendio.se>2018-08-16 17:50:09 +0200
commitce6287574fa98b2fb7c2638cde1b5628d29bdfdb (patch)
treeac913c7c5593ebc057872f840a81aa2f91bc07bb
parentc995c0863edd45a49927b84637e3faa28b17f34b (diff)
parent7407c1f4e29a7c7d998edbcc4cbf379edd6b5d76 (diff)
downloadnovnc-ce6287574fa98b2fb7c2638cde1b5628d29bdfdb.tar.gz
Merge branch 'hidpi_scale' of https://github.com/CendioOssman/noVNC
-rw-r--r--core/display.js7
-rw-r--r--core/rfb.js7
-rw-r--r--tests/test.mouse.js23
3 files changed, 26 insertions, 11 deletions
diff --git a/core/display.js b/core/display.js
index 4955ce2..d6db075 100644
--- a/core/display.js
+++ b/core/display.js
@@ -168,6 +168,9 @@ export default class Display {
height = this._fb_height;
}
+ width = Math.floor(width);
+ height = Math.floor(height);
+
if (width > this._fb_width) {
width = this._fb_width;
}
@@ -524,8 +527,8 @@ export default class Display {
// style width to a number, the canvas is cleared.
// However, if you set the style width to a string
// ('NNNpx'), the canvas is scaled without clearing.
- const width = Math.round(factor * vp.w) + 'px';
- const height = Math.round(factor * vp.h) + 'px';
+ const width = factor * vp.w + 'px';
+ const height = factor * vp.h + 'px';
if ((this._target.style.width !== width) ||
(this._target.style.height !== height)) {
diff --git a/core/rfb.js b/core/rfb.js
index 0276f16..a52c00d 100644
--- a/core/rfb.js
+++ b/core/rfb.js
@@ -547,7 +547,8 @@ export default class RFB extends EventTargetMixin {
}
const size = this._screenSize();
- RFB.messages.setDesktopSize(this._sock, size.w, size.h,
+ RFB.messages.setDesktopSize(this._sock,
+ Math.floor(size.w), Math.floor(size.h),
this._screen_id, this._screen_flags);
Log.Debug('Requested new desktop size: ' +
@@ -556,8 +557,8 @@ export default class RFB extends EventTargetMixin {
// Gets the the size of the available screen
_screenSize() {
- return { w: this._screen.offsetWidth,
- h: this._screen.offsetHeight };
+ let r = this._screen.getBoundingClientRect();
+ return { w: r.width, h: r.height };
}
_fixScrollbars() {
diff --git a/tests/test.mouse.js b/tests/test.mouse.js
index dd8046c..9630706 100644
--- a/tests/test.mouse.js
+++ b/tests/test.mouse.js
@@ -5,12 +5,23 @@ import Mouse from '../core/input/mouse.js';
describe('Mouse Event Handling', function() {
"use strict";
- // This function is only used on target (the canvas)
- // and for these tests we can assume that the canvas is 100x100
- // located at coordinates 10x10
- sinon.stub(Element.prototype, 'getBoundingClientRect').returns(
- {left: 10, right: 110, top: 10, bottom: 110, width: 100, height: 100});
- const target = document.createElement('canvas');
+ let target;
+
+ beforeEach(function () {
+ // For these tests we can assume that the canvas is 100x100
+ // located at coordinates 10x10
+ target = document.createElement('canvas');
+ target.style.position = "absolute";
+ target.style.top = "10px";
+ target.style.left = "10px";
+ target.style.width = "100px";
+ target.style.height = "100px";
+ document.body.appendChild(target);
+ });
+ afterEach(function () {
+ document.body.removeChild(target);
+ target = null;
+ });
// The real constructors might not work everywhere we
// want to run these tests