From 0a571899c806c21cf1457a8929b01cdcd138d4a3 Mon Sep 17 00:00:00 2001 From: Julian Viereck Date: Mon, 5 Sep 2011 16:07:03 -0700 Subject: [PATCH] Very basic worker implementation --- web/viewer.html | 1 + web/viewer.js | 2 +- worker.js | 67 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 worker.js diff --git a/web/viewer.html b/web/viewer.html index a53593df3..d236f840e 100644 --- a/web/viewer.html +++ b/web/viewer.html @@ -11,6 +11,7 @@ + diff --git a/web/viewer.js b/web/viewer.js index d7c9d6b66..082dfaa87 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -152,7 +152,7 @@ var PDFView = { while (container.hasChildNodes()) container.removeChild(container.lastChild); - var pdf = new PDFDoc(new Stream(data)); + var pdf = new WorkerPDFDoc(data); var pagesCount = pdf.numPages; document.getElementById('numPages').innerHTML = pagesCount; diff --git a/worker.js b/worker.js new file mode 100644 index 000000000..d26735005 --- /dev/null +++ b/worker.js @@ -0,0 +1,67 @@ +/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ + +'use strict'; + +var WorkerPage = (function() { + function constructor(workerPDF, page) { + this.workerPDF = workerPDF; + this.page = page; + + this.ref = page.ref; + } + + constructor.prototype = { + get width() { + return this.page.width; + }, + + get height() { + return this.page.height; + }, + + get stats() { + return this.page.stats; + }, + + startRendering: function(ctx, callback, errback) { + // TODO: Place the worker magic HERE. + this.page.startRendering(ctx, callback, errback); + }, + + getLinks: function() { + return this.page.getLinks(); + } + }; + + return constructor; +})(); + +var WorkerPDFDoc = (function() { + function constructor(data) { + this.data = data; + this.stream = new Stream(data); + this.pdf = new PDFDoc(this.stream); + + this.catalog = this.pdf.catalog; + + this.pageCache = []; + } + + constructor.prototype = { + get numPages() { + return this.pdf.numPages; + }, + + getPage: function(n) { + if (this.pageCache[n]) { + return this.pageCache[n]; + } + + var page = this.pdf.getPage(n); + return this.pageCache[n] = new WorkerPage(this, page); + } + }; + + return constructor; +})();