From: Vivien Nicolas <21@vingtetun.org> Date: Sat, 18 Jun 2011 19:53:52 +0000 (+0200) Subject: Merge remote branch 'upstream/master' X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=8b88ee0338e809bf88f2ab57135db273d0a70a5c;p=pdf.js.git Merge remote branch 'upstream/master' --- 8b88ee0338e809bf88f2ab57135db273d0a70a5c diff --cc viewer.js index 0000000,59d8167..a8e7ae6 mode 000000,100644..100644 --- a/viewer.js +++ b/viewer.js @@@ -1,0 -1,130 +1,129 @@@ + /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- / + /* vim: set shiftwidth=4 tabstop=8 autoindent cindent expandtab: */ + + var pdfDocument, canvas, pageDisplay, pageNum, pageInterval; + function load(userInput) { + canvas = document.getElementById("canvas"); + canvas.mozOpaque = true; + pageNum = parseInt(queryParams().page) || 1; + fileName = userInput; + if (!userInput) { + fileName = queryParams().file || "compressed.tracemonkey-pldi-09.pdf"; + } + open(fileName); + } + + function queryParams() { + var qs = window.location.search.substring(1); + var kvs = qs.split("&"); + var params = { }; + for (var i = 0; i < kvs.length; ++i) { + var kv = kvs[i].split("="); + params[unescape(kv[0])] = unescape(kv[1]); + } + return params; + } + + function open(url) { + document.title = url; + req = new XMLHttpRequest(); + req.open("GET", url); + req.mozResponseType = req.responseType = "arraybuffer"; + req.expected = (document.URL.indexOf("file:") == 0) ? 0 : 200; + req.onreadystatechange = function() { + if (req.readyState == 4 && req.status == req.expected) { + var data = req.mozResponseArrayBuffer || req.mozResponse || + req.responseArrayBuffer || req.response; + pdfDocument = new PDFDoc(new Stream(data)); + numPages = pdfDocument.numPages; + document.getElementById("numPages").innerHTML = numPages.toString(); + goToPage(pageNum); + } + }; + req.send(null); + } + + function gotoPage(num) { + if (0 <= num && num <= numPages) + pageNum = num; + displayPage(pageNum); + } + + function displayPage(num) { - if (pageNum != num) - window.clearTimeout(pageInterval); ++ window.clearInterval(pageInterval); + + document.getElementById("pageNumber").value = num; + + var t0 = Date.now(); + + var page = pdfDocument.getPage(pageNum = num); + + var t1 = Date.now(); + var ctx = canvas.getContext("2d"); + ctx.save(); + ctx.fillStyle = "rgb(255, 255, 255)"; + ctx.fillRect(0, 0, canvas.width, canvas.height); + ctx.restore(); + + var gfx = new CanvasGraphics(ctx); + + // page.compile will collect all fonts for us, once we have loaded them + // we can trigger the actual page rendering with page.display + var fonts = []; + page.compile(gfx, fonts); + var t2 = Date.now(); + + var fontsReady = true; + + // Inspect fonts and translate the missing one + var count = fonts.length; + for (var i = 0; i < count; i++) { + var font = fonts[i]; + if (Fonts[font.name]) { + fontsReady = fontsReady && !Fonts[font.name].loading; + continue; + } + + new Font(font.name, font.file, font.properties); + fontsReady = false; + } + + function delayLoadFont() { + for (var i = 0; i < count; i++) { + if (Fonts[font.name].loading) + return; + } - clearInterval(pageInterval); ++ window.clearInterval(pageInterval); + + var t3 = Date.now(); + + page.display(gfx); + + var t4 = Date.now(); + + var infoDisplay = document.getElementById("info"); + infoDisplay.innerHTML = "Time to load/compile/fonts/render: "+ (t1 - t0) + "/" + (t2 - t1) + "/" + (t3 - t2) + "/" + (t4 - t3) + " ms"; + }; + + if (fontsReady) { + delayLoadFont(); + } else { + pageInterval = setInterval(delayLoadFont, 10); + } + } + + function nextPage() { + if (pageNum < pdfDocument.numPages) + displayPage(++pageNum); + } + + function prevPage() { + if (pageNum > 1) + displayPage(--pageNum); + } + + function goToPage(num) { + if (0 <= num && num <= numPages) + displayPage(pageNum = num); + } +