X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fpdf%2FGFXOutputDev.cc;h=a61aebc560d746f58bf1a867d1039a5304f4bc68;hb=89548fb698c2b3002364c52b5962e4c3326eb96e;hp=49bb6dbba021a39c4db854c1f4c165548255d7bc;hpb=857174c423aafd86768d8f74eee7228208cd92fc;p=swftools.git diff --git a/lib/pdf/GFXOutputDev.cc b/lib/pdf/GFXOutputDev.cc index 49bb6db..a61aebc 100644 --- a/lib/pdf/GFXOutputDev.cc +++ b/lib/pdf/GFXOutputDev.cc @@ -152,16 +152,9 @@ static void dbg(const char*format, ...) } -typedef struct _feature -{ - char*string; - struct _feature*next; -} feature_t; -feature_t*featurewarnings = 0; - void GFXOutputDev::showfeature(const char*feature, char fully, char warn) { - feature_t*f = featurewarnings; + feature_t*f = this->featurewarnings; while(f) { if(!strcmp(feature, f->string)) return; @@ -169,8 +162,8 @@ void GFXOutputDev::showfeature(const char*feature, char fully, char warn) } f = (feature_t*)malloc(sizeof(feature_t)); f->string = strdup(feature); - f->next = featurewarnings; - featurewarnings = f; + f->next = this->featurewarnings; + this->featurewarnings = f; if(warn) { msg(" %s not yet %ssupported!",feature,fully?"fully ":""); if(this->config_break_on_warning) { @@ -582,6 +575,7 @@ GFXOutputDev::GFXOutputDev(InfoOutputDev*info, PDFDoc*doc) this->gfxfontlist = gfxfontlist_create(); memset(states, 0, sizeof(states)); + this->featurewarnings = 0; }; void GFXOutputDev::setParameter(const char*key, const char*value) @@ -864,7 +858,7 @@ void GFXOutputDev::tilingPatternFill(GfxState *state, Object *str, int x0, int y0, int x1, int y1, double xStep, double yStep) #else -void GFXBitmapOutputDev::tilingPatternFill(GfxState *state, Gfx *gfx, Object *str, +void GFXOutputDev::tilingPatternFill(GfxState *state, Gfx *gfx, Object *str, int paintType, Dict *resDict, double *mat, double *bbox, int x0, int y0, int x1, int y1, @@ -1218,6 +1212,18 @@ GFXOutputDev::~GFXOutputDev() if(this->pages) { free(this->pages); this->pages = 0; } + + feature_t*f = this->featurewarnings; + while(f) { + feature_t*next = f->next; + if(f->string) { + free(f->string);f->string =0; + } + f->next = 0; + free(f); + f = next; + } + this->featurewarnings = 0; gfxfontlist_free(this->gfxfontlist, 1);this->gfxfontlist = 0; }; @@ -1325,7 +1331,7 @@ void GFXOutputDev::drawChar(GfxState *state, double x, double y, // check for invisible text -- this is used by Acrobat Capture if (render == RENDER_INVISIBLE) { - col.a = 0; + col.a = 255; if(!config_extrafontdata) return; } @@ -2114,14 +2120,14 @@ void GFXOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str, if(!pbminfo && !(str->getKind()==strDCT)) { if(!type3active) { - msg(" file contains pbm pictures %s",mask?"(masked)":""); + msg(" File contains pbm pictures %s",mask?"(masked)":""); pbminfo = 1; } if(mask) msg(" drawing %d by %d masked picture", width, height); } if(!jpeginfo && (str->getKind()==strDCT)) { - msg(" file contains jpeg pictures"); + msg(" File contains jpeg pictures"); jpeginfo = 1; } @@ -2553,14 +2559,15 @@ void GFXOutputDev::beginTransparencyGroup(GfxState *state, double *bbox, void GFXOutputDev::endTransparencyGroup(GfxState *state) { dbgindent-=2; - dbg("endTransparencyGroup"); - msg(" endTransparencyGroup"); - gfxdevice_t*r = this->device; this->device = states[statepos].olddevice; gfxresult_t*recording = r->finish(r); + + dbg("endTransparencyGroup forsoftmask=%d recording=%08x/%08x", states[statepos].createsoftmask, r, recording); + msg(" endTransparencyGroup forsoftmask=%d recording=%08x/%08x", states[statepos].createsoftmask, r, recording); + if(states[statepos].createsoftmask) { states[statepos-1].softmaskrecording = recording; } else { @@ -2663,14 +2670,13 @@ void GFXOutputDev::clearSoftMask(GfxState *state) gfxresult_record_replay(below, &uniondev); gfxline_t*belowoutline = gfxdevice_union_getunion(&uniondev); uniondev.finish(&uniondev); - gfxbbox_t bbox = gfxline_getbbox(belowoutline); + gfxline_free(belowoutline);belowoutline=0; #if 0 this->device->startclip(this->device, belowoutline); gfxresult_record_replay(below, this->device); gfxresult_record_replay(mask, this->device); this->device->endclip(this->device); - gfxline_free(belowoutline); #endif int width = (int)bbox.xmax,height = (int)bbox.ymax;