Merge branch 'master' into chromeclip

This commit is contained in:
matt 2021-10-01 09:03:09 +00:00
commit c533d18ac7
4 changed files with 37 additions and 15 deletions

View File

@ -193,6 +193,7 @@ const UI = {
UI.initSetting('treat_lossless', 7);
UI.initSetting('jpeg_video_quality', 5);
UI.initSetting('webp_video_quality', 5);
UI.initSetting('anti_aliasing', 0);
UI.initSetting('video_area', 65);
UI.initSetting('video_time', 5);
UI.initSetting('video_out_time', 3);
@ -412,6 +413,8 @@ const UI = {
UI.addSettingChangeHandler('dynamic_quality_max', UI.updateQuality);
UI.addSettingChangeHandler('treat_lossless');
UI.addSettingChangeHandler('treat_lossless', UI.updateQuality);
UI.addSettingChangeHandler('anti_aliasing');
UI.addSettingChangeHandler('anti_aliasing', UI.updateQuality);
UI.addSettingChangeHandler('jpeg_video_quality');
UI.addSettingChangeHandler('jpeg_video_quality', UI.updateQuality);
UI.addSettingChangeHandler('webp_video_quality');
@ -953,6 +956,7 @@ const UI = {
UI.updateSetting('dynamic_quality_min', 3);
UI.updateSetting('dynamic_quality_max', 9);
UI.updateSetting('treat_lossless', 7);
UI.updateSetting('anti_aliasing', 0);
UI.updateSetting('jpeg_video_quality', 5);
UI.updateSetting('webp_video_quality', 5);
UI.updateSetting('video_area', 65);
@ -1293,6 +1297,7 @@ const UI = {
UI.rfb.showDotCursor = UI.getSetting('show_dot');
UI.rfb.idleDisconnect = UI.getSetting('idle_disconnect');
UI.rfb.videoQuality = UI.getSetting('video_quality');
UI.rfb.antiAliasing = UI.getSetting('anti_aliasing');
UI.rfb.clipboardUp = UI.getSetting('clipboard_up');
UI.rfb.clipboardDown = UI.getSetting('clipboard_down');
UI.rfb.clipboardBinary = supportsBinaryClipboard();
@ -1714,6 +1719,7 @@ const UI = {
// avoid sending too many, will only apply when there are changes
setTimeout(function() {
UI.rfb.qualityLevel = parseInt(UI.getSetting('quality'));
UI.rfb.antiAliasing = parseInt(UI.getSetting('anti_aliasing'));
UI.rfb.dynamicQualityMin = parseInt(UI.getSetting('dynamic_quality_min'));
UI.rfb.dynamicQualityMax = parseInt(UI.getSetting('dynamic_quality_max'));
UI.rfb.jpegVideoQuality = parseInt(UI.getSetting('jpeg_video_quality'));

View File

@ -43,11 +43,6 @@ export default class Display {
}
this._targetCtx = this._target.getContext('2d');
//Smoothing causes high DPI displays to look blurry
this._targetCtx.mozImageSmoothingEnabled = false;
this._targetCtx.webkitImageSmoothingEnabled = false;
this._targetCtx.msImageSmoothingEnabled = false;
this._targetCtx.imageSmoothingEnabled = false;
// the visible canvas viewport (i.e. what actually gets seen)
this._viewportLoc = { 'x': 0, 'y': 0, 'w': this._target.width, 'h': this._target.height };
@ -55,11 +50,6 @@ export default class Display {
// The hidden canvas, where we do the actual rendering
this._backbuffer = document.createElement('canvas');
this._drawCtx = this._backbuffer.getContext('2d');
//Smoothing causes high DPI displays to look blurry
this._drawCtx.mozImageSmoothingEnabled = false;
this._drawCtx.webkitImageSmoothingEnabled = false;
this._drawCtx.msImageSmoothingEnabled = false;
this._drawCtx.imageSmoothingEnabled = false;
this._damageBounds = { left: 0, top: 0,
right: this._backbuffer.width,
@ -73,6 +63,7 @@ export default class Display {
this._scale = 1.0;
this._clipViewport = false;
this._antiAliasing = 0;
// ===== EVENT HANDLERS =====
@ -80,6 +71,12 @@ export default class Display {
}
// ===== PROPERTIES =====
get antiAliasing() { return this._antiAliasing; }
set antiAliasing(value) {
this._antiAliasing = value;
this._rescale(this._scale);
}
get scale() { return this._scale; }
set scale(scale) {
@ -462,10 +459,17 @@ export default class Display {
this._target.style.height = height;
}
if (factor === 1 && this._target.style.imageRendering !== 'pixelated') {
this._target.style.imageRendering = 'pixelated';
} else if (factor !== 1 && this._target.style.imageRendering !== 'auto') {
this._target.style.imageRendering = 'auto';
Log.Debug('Pixel Ratio: ' + window.devicePixelRatio + ', VNC Scale: ' + factor + 'VNC Res: ' + vp.w + 'x' + vp.h);
var pixR = Math.abs(Math.ceil(window.devicePixelRatio));
var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
if (this.antiAliasing === 2 || (this.antiAliasing === 0 && factor === 1 && this._target.style.imageRendering !== 'pixelated' && pixR === window.devicePixelRatio && vp.w > 0)) {
this._target.style.imageRendering = ((!isFirefox) ? 'pixelated' : 'crisp-edges' );
Log.Debug('Smoothing disabled');
} else if (this.antiAliasing === 1 || (this.antiAliasing === 0 && factor !== 1 && this._target.style.imageRendering !== 'auto')) {
this._target.style.imageRendering = 'auto'; //auto is really smooth (blurry) using trilinear of linear
Log.Debug('Smoothing enabled');
}
}

View File

@ -227,7 +227,6 @@ export default class RFB extends EventTargetMixin {
this._canvas.style.margin = 'auto';
// Some browsers add an outline on focus
this._canvas.style.outline = 'none';
this._canvas.style.imageRendering = 'pixelated';
this._canvas.width = 0;
this._canvas.height = 0;
this._canvas.tabIndex = -1;
@ -431,6 +430,11 @@ export default class RFB extends EventTargetMixin {
}
}
get antiAliasing() { return this._display.antiAliasing; }
set antiAliasing(value) {
this._display.antiAliasing = value;
}
get jpegVideoQuality() { return this._jpegVideoQuality; }
set jpegVideoQuality(qualityLevel) {
if (!Number.isInteger(qualityLevel) || qualityLevel < 0 || qualityLevel > 9) {

View File

@ -278,6 +278,14 @@
<label for="noVNC_setting_quality">Quality:</label>
<input id="noVNC_setting_quality" type="range" min="0" max="9" value="6">
</li>
<li>
<label for="noVNC_setting_anti_aliasing">Smoothing:</label>
<select id="noVNC_setting_anti_aliasing" name="vncAntiAliasing">
<option value=0>Auto Dynamic</option>
<option value=1>On</option>
<option value=2>Off</option>
</select>
</li>
<li>
<label for="noVNC_setting_dynamic_quality_min">Dynamic Quality Min:</label>
<input id="noVNC_setting_dynamic_quality_min" type="range" min="0" max="9" value="3" onchange="noVNC_setting_dynamic_quality_min_output.value=value">