Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(58)

Unified Diff: remoting/webapp/client_session.js

Issue 9331003: Improving the decoder pipeline. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Redesigned FrameConsumer/FrameProducer. Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/remoting.gyp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/webapp/client_session.js
diff --git a/remoting/webapp/client_session.js b/remoting/webapp/client_session.js
index 9977d58b2e98f34cc2bd7901f3e38a2d71b6482f..594ecf9e147e648c5faaa9821282d4fff3fea2a4 100644
--- a/remoting/webapp/client_session.js
+++ b/remoting/webapp/client_session.js
@@ -435,17 +435,56 @@ remoting.ClientSession.prototype.updateDimensions = function() {
var windowWidth = window.innerWidth;
var windowHeight = window.innerHeight;
- var scale = 1.0;
+
+ // Estimate browser scale factor in order to be able to translate logical
+ // pixels on the page into physical pixels on the screen. Scale factor can
+ // be roughly estimated as a ratio between outerWidht and innerWidth of
Jamie 2012/02/16 00:26:32 s/outerWidht/outerWidth/
alexeypa (please no reviews) 2012/02/16 01:17:56 Done.
+ // the document view. The result is not precise because outerWidth can
+ // include pixels allocated for toolbars, window borders and such.
+ var viewInnerWidth = document.defaultView.innerWidth;
Jamie 2012/02/16 00:26:32 Why document.defaultView instead of window?
alexeypa (please no reviews) 2012/02/16 01:17:56 Done.
+ var viewOuterWidth = document.defaultView.outerWidth;
+ var scale = Math.round(100.0 * viewOuterWidth / viewInnerWidth) / 100.0;
Jamie 2012/02/16 00:26:32 Why convert to int so early? You can stick with fl
alexeypa (please no reviews) 2012/02/16 01:17:56 Done.
+
+ // TODO(alexeypa): remove this hack once proper zooming API is available.
Jamie 2012/02/16 00:26:32 Can you raise a ticket for this and include the nu
+ // Now pick the exact scale factor from the list of known zoom levels.
+ var zoom_levels = [ 0.25, 1.0/3, 0.5, 2.0/3, 0.75, 0.9, 1, 1.1, 1.25, 1.5,
+ 1.75, 2, 2.5, 3, 4 ];
+ var left = 0;
+ var right = zoom_levels.length;
+ while (left < right) {
Jamie 2012/02/16 00:26:32 Binary search seems overkill. In fact, you can sim
+ var middle = Math.floor((left + right) / 2);
+ remoting.debug.log('middle=' + middle);
Jamie 2012/02/16 00:26:32 Remove this debug?
alexeypa (please no reviews) 2012/02/16 01:17:56 Done.
+ if (zoom_levels[middle] < scale) {
+ left = middle + 1;
+ } else {
+ right = middle;
+ }
+ }
+
+ if (left == 0) {
+ scale = zoom_levels[0];
+ } else if (left < zoom_levels.length) {
+ if (Math.abs(zoom_levels[left - 1] - scale) <
+ Math.abs(zoom_levels[left] - scale)) {
+ scale = zoom_levels[left - 1];
+ } else {
+ scale = zoom_levels[left];
+ }
+ } else {
+ scale = zoom_levels[zoom_levels.length - 1];
+ }
+
+ scale = 1.0 / scale;
if (this.getScaleToFit()) {
- var scaleFitHeight = 1.0 * windowHeight / this.plugin.desktopHeight;
- var scaleFitWidth = 1.0 * windowWidth / this.plugin.desktopWidth;
- scale = Math.min(1.0, scaleFitHeight, scaleFitWidth);
+ var scaledHeight = 1.0 * windowHeight / (scale * this.plugin.desktopHeight);
+ var scaledWidth = 1.0 * windowWidth / (scale * this.plugin.desktopWidth);
+ scale = Math.min(1.0, scaledHeight, scaledWidth, scale);
}
// Resize the plugin if necessary.
- this.plugin.width = this.plugin.desktopWidth * scale;
- this.plugin.height = this.plugin.desktopHeight * scale;
+ this.plugin.width = Math.ceil(this.plugin.desktopWidth * scale);
+ this.plugin.height = Math.ceil(this.plugin.desktopHeight * scale);
// Position the container.
// TODO(wez): We should take into account scrollbars when positioning.
« no previous file with comments | « remoting/remoting.gyp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698