skeleton of shading fill

This commit is contained in:
Chris Jones 2011-06-10 12:16:45 -07:00
parent 4b8057bc53
commit a5731ddc47

100
pdf.js
View File

@ -603,6 +603,27 @@ function IsRef(v) {
return v instanceof Ref;
}
function IsFunction(v) {
var fnDict;
if (typeof v != "object")
return false;
else if (IsDict(v))
fnDict = v;
else if (IsStream(v))
fnDict = v.dict;
else
return false;
return fnDict.has("FunctionType");
}
function IsFunctionDict(v) {
return IsFunction(v) && IsDict(v);
}
function IsFunctionStream(v) {
return IsFunction(v) && IsStream(v);
}
var EOF = {};
function IsEOF(v) {
@ -1875,8 +1896,83 @@ var CanvasGraphics = (function() {
},
// Shading
shadingFill: function(entry) {
TODO("shading fill");
shadingFill: function(entryRef) {
var shadingRes = this.res.get("Shading");
if (!shadingRes)
return;
shadingRes = this.xref.fetchIfRef(shadingRes);
var shading = shadingRes.get(entryRef.name);
if (!shading)
return;
shading = this.xref.fetchIfRef(shading);
if (!shading)
return;
this.save();
var bbox = shading.get("BBox");
if (bbox && IsArray(bbox) && 4 == bbox.length) {
this.rectangle.apply(this, bbox);
this.clip();
this.endPath();
}
TODO("shading-fill color space");
var type = shading.get("ShadingType");
switch (type) {
case 1:
this.fillFunctionShading(shading);
break;
case 2:
this.fillAxialShading(shading);
break;
case 3:
this.fillRadialShading(shading);
break;
case 4: case 5: case 6: case 7:
TODO("shading fill type "+ type);
default:
malformed("Unknown shading type "+ type);
}
this.restore();
},
fillAxialShading: function(sh) {
var coordsArr = sh.get("Coords");
var x0 = coordsArr[0], y0 = coordsArr[1],
x1 = coordsArr[2], y1 = coordsArr[3];
var t0 = 0.0, t1 = 1.0;
if (sh.has("Domain")) {
var domainArr = sh.get("Domain");
t0 = domainArr[0], t1 = domainArr[1];
}
var extendStart = false, extendEnd = false;
if (sh.has("Extend")) {
var extendArr = sh.get("Extend");
extendStart = extendArr[0], extendEnd = extendArr[1];
}
var fn = sh.get("Function");
fn = this.xref.fetchIfRef(fn);
/*
console.log("x0: "+ x0, "y0: "+ y0, "x1: "+ x1, "y1: "+ y1);
console.log("size: "+ fn.dict.get("Size"));
console.log("BPS: "+ fn.dict.get("BitsPerSample"));
console.log(fn.dict.get("Encode"));
console.log(fn.dict.get("Range"));
console.log(fn.dict.get("Decode"));
*/
var gradient = this.ctx.createLinearGradient(x0, y0, x1, y1);
gradient.addColorStop(0, 'rgb(0,0,255)');
gradient.addColorStop(1, 'rgb(0,255,0)');
this.ctx.fillStyle = gradient;
this.ctx.fill();
this.consumePath();
},
// XObjects