added comment to endPage()
[swftools.git] / lib / pdf / GFXOutputDev.cc
index 207fc05..27042b8 100644 (file)
@@ -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("<warning> %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,
@@ -1032,6 +1026,8 @@ void GFXOutputDev::endPage()
        device->endclip(device);
        outer_clip_box = 0;
     }
+    /* notice: we're not fully done yet with this page- there might still be 
+       a few calls to drawLink() yet to come */
 }
 
 #define STROKE_FILL 1
@@ -1218,6 +1214,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 +1333,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;
     }
@@ -1806,14 +1814,14 @@ void GFXOutputDev::updateStrokeColor(GfxState *state)
 }
 
 
-gfxfont_t* createGfxFont(GfxFont*xpdffont, FontInfo*src, double config_fontquality)
+static gfxfont_t* createGfxFont(GfxFont*xpdffont, FontInfo*src, double config_fontquality)
 {
     gfxfont_t*font = (gfxfont_t*)malloc(sizeof(gfxfont_t));
     memset(font, 0, sizeof(gfxfont_t));
 
     font->glyphs = (gfxglyph_t*)malloc(sizeof(gfxglyph_t)*src->num_glyphs);
     memset(font->glyphs, 0, sizeof(gfxglyph_t)*src->num_glyphs);
-    font->id = strdup(getFontID(xpdffont));
+    font->id = 0;
     int t;
     
     double quality = (INTERNAL_FONT_SIZE * 200 / config_fontquality) / src->max_size;
@@ -2114,14 +2122,14 @@ void GFXOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str,
 
   if(!pbminfo && !(str->getKind()==strDCT)) {
       if(!type3active) {
-         msg("<notice> file contains pbm pictures %s",mask?"(masked)":"");
+         msg("<notice> File contains pbm pictures %s",mask?"(masked)":"");
          pbminfo = 1;
       }
       if(mask)
       msg("<verbose> drawing %d by %d masked picture", width, height);
   }
   if(!jpeginfo && (str->getKind()==strDCT)) {
-      msg("<notice> file contains jpeg pictures");
+      msg("<notice> File contains jpeg pictures");
       jpeginfo = 1;
   }
 
@@ -2169,7 +2177,7 @@ void GFXOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str,
 
          width = realwidth;
          height = realheight;
-         free(pic);
+         delete[] pic;
          pic = pic2;
          
          /* make a black/white palette */
@@ -2191,8 +2199,8 @@ void GFXOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str,
        }
       }
       drawimagelossless(device, pic2, width, height, x1,y1,x2,y2,x3,y3,x4,y4);
-      free(pic2);
-      free(pic);
+      delete[] pic2;
+      delete[] pic;
       delete imgStr;
       if(maskbitmap) free(maskbitmap);
       return;
@@ -2655,7 +2663,7 @@ void GFXOutputDev::clearSoftMask(GfxState *state)
     }
   
     gfxresult_t*mask = states[statepos].softmaskrecording;
-    gfxresult_t*below = this->device->finish(this->device);
+    gfxresult_t*below = this->device->finish(this->device);free(this->device);
     this->device = states[statepos].olddevice;
 
     /* get outline of all objects below the soft mask */
@@ -2664,14 +2672,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;