Merge pull request #957 from jviereck/viewer_default_width

Change default width to page-width
This commit is contained in:
Julian Viereck 2012-01-03 14:02:34 -08:00
commit bf26c1a18c
4 changed files with 69 additions and 36 deletions

View File

@ -70,8 +70,7 @@ var Page = (function PageClosure() {
this.xref = xref; this.xref = xref;
this.ref = ref; this.ref = ref;
this.ctx = null; this.displayReadyPromise = null;
this.callback = null;
} }
Page.prototype = { Page.prototype = {
@ -167,20 +166,12 @@ var Page = (function PageClosure() {
IRQueue, fonts) { IRQueue, fonts) {
var self = this; var self = this;
this.IRQueue = IRQueue; this.IRQueue = IRQueue;
var gfx = new CanvasGraphics(this.ctx, this.objs, this.textLayer);
var displayContinuation = function pageDisplayContinuation() { var displayContinuation = function pageDisplayContinuation() {
// Always defer call to display() to work around bug in // Always defer call to display() to work around bug in
// Firefox error reporting from XHR callbacks. // Firefox error reporting from XHR callbacks.
setTimeout(function pageSetTimeout() { setTimeout(function pageSetTimeout() {
try { self.displayReadyPromise.resolve();
self.display(gfx, self.callback);
} catch (e) {
if (self.callback)
self.callback(e);
else
throw e;
}
}); });
}; };
@ -397,12 +388,27 @@ var Page = (function PageClosure() {
return items; return items;
}, },
startRendering: function pageStartRendering(ctx, callback, textLayer) { startRendering: function pageStartRendering(ctx, callback, textLayer) {
this.ctx = ctx;
this.callback = callback;
this.textLayer = textLayer;
this.startRenderingTime = Date.now(); this.startRenderingTime = Date.now();
this.pdf.startRendering(this);
// If there is no displayReadyPromise yet, then the IRQueue was never
// requested before. Make the request and create the promise.
if (!this.displayReadyPromise) {
this.pdf.startRendering(this);
this.displayReadyPromise = new Promise();
}
// Once the IRQueue and fonts are loaded, perform the actual rendering.
this.displayReadyPromise.then(function pageDisplayReadyPromise() {
var gfx = new CanvasGraphics(ctx, this.objs, textLayer);
try {
this.display(gfx, callback);
} catch (e) {
if (self.callback)
self.callback(e);
else
throw e;
}
}.bind(this));
} }
}; };

View File

@ -284,7 +284,7 @@ var Promise = (function PromiseClosure() {
} }
this.isResolved = true; this.isResolved = true;
this.data = data; this.data = data || null;
var callbacks = this.callbacks; var callbacks = this.callbacks;
for (var i = 0, ii = callbacks.length; i < ii; i++) { for (var i = 0, ii = callbacks.length; i < ii; i++) {

View File

@ -67,10 +67,11 @@
<option value="0.75">75%</option> <option value="0.75">75%</option>
<option value="1">100%</option> <option value="1">100%</option>
<option value="1.25">125%</option> <option value="1.25">125%</option>
<option value="1.5" selected="selected">150%</option> <option value="1.5">150%</option>
<option value="2">200%</option> <option value="2">200%</option>
<option id="pageWidthOption" value="page-width">Page Width</option> <option id="pageWidthOption" value="page-width">Page Width</option>
<option id="pageFitOption" value="page-fit">Page Fit</option> <option id="pageFitOption" value="page-fit">Page Fit</option>
<option id="pageAutoOption" value="auto" selected="selected">Auto</option>
</select> </select>
<div class="separator"></div> <div class="separator"></div>

View File

@ -4,7 +4,7 @@
'use strict'; 'use strict';
var kDefaultURL = 'compressed.tracemonkey-pldi-09.pdf'; var kDefaultURL = 'compressed.tracemonkey-pldi-09.pdf';
var kDefaultScale = 1.5; var kDefaultScale = 'auto';
var kDefaultScaleDelta = 1.1; var kDefaultScaleDelta = 1.1;
var kCacheSize = 20; var kCacheSize = 20;
var kCssUnits = 96.0 / 72.0; var kCssUnits = 96.0 / 72.0;
@ -146,9 +146,13 @@ var PDFView = {
pages: [], pages: [],
thumbnails: [], thumbnails: [],
currentScale: 0, currentScale: 0,
currentScaleValue: null,
initialBookmark: document.location.hash.substring(1), initialBookmark: document.location.hash.substring(1),
setScale: function pdfViewSetScale(val, resetAutoSettings) { setScale: function pdfViewSetScale(val, resetAutoSettings) {
if (val == this.currentScale)
return;
var pages = this.pages; var pages = this.pages;
for (var i = 0; i < pages.length; i++) for (var i = 0; i < pages.length; i++)
pages[i].update(val * kCssUnits); pages[i].update(val * kCssUnits);
@ -169,6 +173,7 @@ var PDFView = {
return; return;
var scale = parseFloat(value); var scale = parseFloat(value);
this.currentScaleValue = value;
if (scale) { if (scale) {
this.setScale(scale, true); this.setScale(scale, true);
return; return;
@ -187,6 +192,10 @@ var PDFView = {
this.setScale( this.setScale(
Math.min(pageWidthScale, pageHeightScale), resetAutoSettings); Math.min(pageWidthScale, pageHeightScale), resetAutoSettings);
} }
if ('auto' == value)
this.setScale(Math.min(1.0, pageWidthScale), resetAutoSettings);
selectScaleOption(value);
}, },
zoomIn: function pdfViewZoomIn() { zoomIn: function pdfViewZoomIn() {
@ -463,8 +472,16 @@ var PDFView = {
if ('zoom' in params) { if ('zoom' in params) {
var zoomArgs = params.zoom.split(','); // scale,left,top var zoomArgs = params.zoom.split(','); // scale,left,top
// building destination array // building destination array
// If the zoom value, it has to get divided by 100. If it is a string,
// it should stay as it is.
var zoomArg = zoomArgs[0];
var zoomArgNumber = parseFloat(zoomArg);
if (zoomArgNumber)
zoomArg = zoomArgNumber / 100;
var dest = [null, {name: 'XYZ'}, (zoomArgs[1] | 0), var dest = [null, {name: 'XYZ'}, (zoomArgs[1] | 0),
(zoomArgs[2] | 0), (zoomArgs[0] | 0) / 100]; (zoomArgs[2] | 0), zoomArg];
var currentPage = this.pages[pageNumber - 1]; var currentPage = this.pages[pageNumber - 1];
currentPage.scrollIntoView(dest); currentPage.scrollIntoView(dest);
} else } else
@ -952,10 +969,15 @@ function updateViewarea() {
PDFView.page = firstPage.id; PDFView.page = firstPage.id;
updateViewarea.inProgress = false; updateViewarea.inProgress = false;
var currentScale = PDFView.currentScale;
var currentScaleValue = PDFView.currentScaleValue;
var normalizedScaleValue = currentScaleValue == currentScale ?
currentScale * 100 : currentScaleValue;
var kViewerTopMargin = 52; var kViewerTopMargin = 52;
var pageNumber = firstPage.id; var pageNumber = firstPage.id;
var pdfOpenParams = '#page=' + pageNumber; var pdfOpenParams = '#page=' + pageNumber;
pdfOpenParams += '&zoom=' + Math.round(PDFView.currentScale * 100); pdfOpenParams += '&zoom=' + normalizedScaleValue;
var currentPage = PDFView.pages[pageNumber - 1]; var currentPage = PDFView.pages[pageNumber - 1];
var topLeft = currentPage.getPagePoint(window.pageXOffset, var topLeft = currentPage.getPagePoint(window.pageXOffset,
window.pageYOffset - firstPage.y - kViewerTopMargin); window.pageYOffset - firstPage.y - kViewerTopMargin);
@ -964,7 +986,7 @@ function updateViewarea() {
var store = PDFView.store; var store = PDFView.store;
store.set('exists', true); store.set('exists', true);
store.set('page', pageNumber); store.set('page', pageNumber);
store.set('zoom', Math.round(PDFView.currentScale * 100)); store.set('zoom', normalizedScaleValue);
store.set('scrollLeft', Math.round(topLeft.x)); store.set('scrollLeft', Math.round(topLeft.x));
store.set('scrollTop', Math.round(topLeft.y)); store.set('scrollTop', Math.round(topLeft.y));
@ -1000,7 +1022,8 @@ window.addEventListener('webkitTransitionEnd', updateThumbViewArea, true);
window.addEventListener('resize', function webViewerResize(evt) { window.addEventListener('resize', function webViewerResize(evt) {
if (document.getElementById('pageWidthOption').selected || if (document.getElementById('pageWidthOption').selected ||
document.getElementById('pageFitOption').selected) document.getElementById('pageFitOption').selected ||
document.getElementById('pageAutoOption').selected)
PDFView.parseScale(document.getElementById('scaleSelect').value); PDFView.parseScale(document.getElementById('scaleSelect').value);
updateViewarea(); updateViewarea();
}); });
@ -1037,6 +1060,21 @@ window.addEventListener('change', function webViewerChange(evt) {
document.getElementById('download').setAttribute('hidden', 'true'); document.getElementById('download').setAttribute('hidden', 'true');
}, true); }, true);
function selectScaleOption(value) {
var options = document.getElementById('scaleSelect').options;
var predefinedValueFound = false;
for (var i = 0; i < options.length; i++) {
var option = options[i];
if (option.value != value) {
option.selected = false;
continue;
}
option.selected = true;
predefinedValueFound = true;
}
return predefinedValueFound;
}
window.addEventListener('scalechange', function scalechange(evt) { window.addEventListener('scalechange', function scalechange(evt) {
var customScaleOption = document.getElementById('customScaleOption'); var customScaleOption = document.getElementById('customScaleOption');
customScaleOption.selected = false; customScaleOption.selected = false;
@ -1048,19 +1086,7 @@ window.addEventListener('scalechange', function scalechange(evt) {
return; return;
} }
var options = document.getElementById('scaleSelect').options; var predefinedValueFound = selectScaleOption('' + evt.scale);
var predefinedValueFound = false;
var value = '' + evt.scale;
for (var i = 0; i < options.length; i++) {
var option = options[i];
if (option.value != value) {
option.selected = false;
continue;
}
option.selected = true;
predefinedValueFound = true;
}
if (!predefinedValueFound) { if (!predefinedValueFound) {
customScaleOption.textContent = Math.round(evt.scale * 10000) / 100 + '%'; customScaleOption.textContent = Math.round(evt.scale * 10000) / 100 + '%';
customScaleOption.selected = true; customScaleOption.selected = true;