X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fpdf%2FGFXOutputDev.cc;h=88fa7288c623cbb6aa7066cf3d30d7c6b321a461;hb=1328e56e38a5148fb51eb0225c5570bc6d4645b4;hp=8ee24b44c90e215a7aecf120c2007021d7ec55d6;hpb=dded149e9730fb089e8238872b2d117f0eaf7454;p=swftools.git diff --git a/lib/pdf/GFXOutputDev.cc b/lib/pdf/GFXOutputDev.cc index 8ee24b4..88fa728 100644 --- a/lib/pdf/GFXOutputDev.cc +++ b/lib/pdf/GFXOutputDev.cc @@ -1026,6 +1026,12 @@ void GFXOutputDev::endPage() device->endclip(device); outer_clip_box = 0; } + if(this->dashPattern) { + free(this->dashPattern); + this->dashPattern = 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 @@ -1048,7 +1054,7 @@ void GFXOutputDev::strokeGfxline(GfxState *state, gfxline_t*line, int flags) col.g = colToByte(rgb.g); col.b = colToByte(rgb.b); col.a = (unsigned char)(opaq*255); - + gfx_capType capType = gfx_capRound; if(lineCap == 0) capType = gfx_capButt; else if(lineCap == 1) capType = gfx_capRound; @@ -1059,28 +1065,23 @@ void GFXOutputDev::strokeGfxline(GfxState *state, gfxline_t*line, int flags) else if(lineJoin == 1) joinType = gfx_joinRound; else if(lineJoin == 2) joinType = gfx_joinBevel; - int dashnum = 0; - double dashphase = 0; - double * ldash = 0; - state->getLineDash(&ldash, &dashnum, &dashphase); - gfxline_t*line2 = 0; - if(dashnum && ldash) { - float * dash = (float*)malloc(sizeof(float)*(dashnum+1)); + if(0 && this->dashLength && this->dashPattern) { + float * dash = (float*)malloc(sizeof(float)*(this->dashLength+1)); int t; - msg(" %d dashes", dashnum); - msg(" | phase: %f", dashphase); - for(t=0;t | d%-3d: %f", t, ldash[t]); + msg(" %d dashes", this->dashLength); + msg(" | phase: %f", this->dashStart); + for(t=0;tdashLength;t++) { + dash[t] = (float)this->dashPattern[t]; + msg(" | d%-3d: %f", t, this->dashPattern[t]); } - dash[dashnum] = -1; + dash[this->dashLength] = -1; if(getLogLevel() >= LOGLEVEL_TRACE) { dump_outline(line); } - line2 = gfxtool_dash_line(line, dash, (float)dashphase); + line2 = gfxtool_dash_line(line, dash, (float)this->dashStart); line = line2; free(dash); msg(" After dashing:"); @@ -1091,7 +1092,7 @@ void GFXOutputDev::strokeGfxline(GfxState *state, gfxline_t*line, int flags) width, lineJoin==0?"miter": (lineJoin==1?"round":"bevel"), lineCap==0?"butt": (lineJoin==1?"round":"square"), - dashnum, + this->dashLength, col.r,col.g,col.b,col.a ); dump_outline(line); @@ -1527,6 +1528,10 @@ void GFXOutputDev::startPage(int pageNum, GfxState *state, double crop_x1, doubl states[statepos].clipbbox.ymin = x1; states[statepos].clipbbox.xmax = x2; states[statepos].clipbbox.ymax = y2; + + this->dashPattern = 0; + this->dashLength = 0; + this->dashStart = 0; } @@ -1753,11 +1758,19 @@ void GFXOutputDev::restoreState(GfxState *state) { } statepos--; } + +void GFXOutputDev::updateLineDash(GfxState *state) +{ + state->getLineDash(&this->dashPattern, &this->dashLength, &this->dashStart); + msg(" updateLineDash, %d dashes", this->dashLength); + if(!this->dashLength) { + this->dashPattern = 0; + } +} void GFXOutputDev::updateLineWidth(GfxState *state) { double width = state->getTransformedLineWidth(); - //swfoutput_setlinewidth(&device, width); } void GFXOutputDev::updateLineCap(GfxState *state) @@ -2175,7 +2188,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 */ @@ -2197,8 +2210,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;