git.asbjorn.biz
/
swftools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
c++ compile fix
[swftools.git]
/
lib
/
pdf
/
GFXOutputDev.cc
diff --git
a/lib/pdf/GFXOutputDev.cc
b/lib/pdf/GFXOutputDev.cc
index
3dcaed9
..
e0ade7f
100644
(file)
--- a/
lib/pdf/GFXOutputDev.cc
+++ b/
lib/pdf/GFXOutputDev.cc
@@
-540,7
+540,7
@@
GFXOutputDev::GFXOutputDev(InfoOutputDev*info, PDFDoc*doc)
this->info = info;
this->doc = doc;
this->xref = doc->getXRef();
this->info = info;
this->doc = doc;
this->xref = doc->getXRef();
-
+
this->jpeginfo = 0;
this->textmodeinfo = 0;
this->linkinfo = 0;
this->jpeginfo = 0;
this->textmodeinfo = 0;
this->linkinfo = 0;
@@
-572,6
+572,7
@@
GFXOutputDev::GFXOutputDev(InfoOutputDev*info, PDFDoc*doc)
this->config_extrafontdata = 0;
this->config_fontquality = 10;
this->config_optimize_polygons = 0;
this->config_extrafontdata = 0;
this->config_fontquality = 10;
this->config_optimize_polygons = 0;
+ this->config_multiply = 1;
this->gfxfontlist = gfxfontlist_create();
this->gfxfontlist = gfxfontlist_create();
@@
-591,6
+592,10
@@
void GFXOutputDev::setParameter(const char*key, const char*value)
this->config_extrafontdata = atoi(value);
} else if(!strcmp(key,"convertgradients")) {
this->config_convertgradients = atoi(value);
this->config_extrafontdata = atoi(value);
} else if(!strcmp(key,"convertgradients")) {
this->config_convertgradients = atoi(value);
+ } else if(!strcmp(key,"multiply")) {
+ this->config_multiply = atoi(value);
+ if(this->config_multiply<1)
+ this->config_multiply=1;
} else if(!strcmp(key,"optimize_polygons")) {
this->config_optimize_polygons = atoi(value);
} else if(!strcmp(key,"bigchar")) {
} else if(!strcmp(key,"optimize_polygons")) {
this->config_optimize_polygons = atoi(value);
} else if(!strcmp(key,"bigchar")) {
@@
-999,6
+1004,8
@@
GBool GFXOutputDev::axialShadedFill(GfxState *state, GfxAxialShading *shading)
m.ty = (y0 + y1)/2 - 0.5;
device->fillgradient(device, &p1, g, gfxgradient_linear, &m);
m.ty = (y0 + y1)/2 - 0.5;
device->fillgradient(device, &p1, g, gfxgradient_linear, &m);
+
+ free(g);
return gTrue;
}
return gTrue;
}
@@
-1223,6
+1230,9
@@
GFXOutputDev::~GFXOutputDev()
if(this->pages) {
free(this->pages); this->pages = 0;
}
if(this->pages) {
free(this->pages); this->pages = 0;
}
+ if(this->dashPattern) {
+ free(this->dashPattern);this->dashPattern = 0;
+ }
feature_t*f = this->featurewarnings;
while(f) {
feature_t*f = this->featurewarnings;
while(f) {
@@
-1781,10
+1791,18
@@
void GFXOutputDev::restoreState(GfxState *state) {
void GFXOutputDev::updateLineDash(GfxState *state)
{
void GFXOutputDev::updateLineDash(GfxState *state)
{
- state->getLineDash(&this->dashPattern, &this->dashLength, &this->dashStart);
+ if(this->dashPattern) {
+ free(this->dashPattern);this->dashPattern = 0;
+ }
+ double *pattern = 0;
+ state->getLineDash(&pattern, &this->dashLength, &this->dashStart);
msg("<debug> updateLineDash, %d dashes", this->dashLength);
if(!this->dashLength) {
this->dashPattern = 0;
msg("<debug> updateLineDash, %d dashes", this->dashLength);
if(!this->dashLength) {
this->dashPattern = 0;
+ } else {
+ double*p = (double*)malloc(this->dashLength*sizeof(this->dashPattern[0]));
+ memcpy(p, pattern, this->dashLength*sizeof(this->dashPattern[0]));
+ this->dashPattern = p;
}
}
}
}
@@
-2035,7
+2053,7
@@
static void drawimage(gfxdevice_t*dev, gfxcolor_t* data, int sizex,int sizey,
double x1,double y1,
double x2,double y2,
double x3,double y3,
double x1,double y1,
double x2,double y2,
double x3,double y3,
- double x4,double y4, int type)
+ double x4,double y4, int type, int multiply)
{
gfxcolor_t*newpic=0;
{
gfxcolor_t*newpic=0;
@@
-2060,12
+2078,13
@@
static void drawimage(gfxdevice_t*dev, gfxcolor_t* data, int sizex,int sizey,
p5.x = (int)(p5.x*20)/20.0;
p5.y = (int)(p5.y*20)/20.0;
}
p5.x = (int)(p5.x*20)/20.0;
p5.y = (int)(p5.y*20)/20.0;
}
-
+
gfxmatrix_t m;
m.m00 = (p4.x-p1.x)/sizex; m.m10 = (p2.x-p1.x)/sizey;
m.m01 = (p4.y-p1.y)/sizex; m.m11 = (p2.y-p1.y)/sizey;
gfxmatrix_t m;
m.m00 = (p4.x-p1.x)/sizex; m.m10 = (p2.x-p1.x)/sizey;
m.m01 = (p4.y-p1.y)/sizex; m.m11 = (p2.y-p1.y)/sizey;
- m.tx = p1.x - 0.5;
- m.ty = p1.y - 0.5;
+
+ m.tx = p1.x - 0.5*multiply;
+ m.ty = p1.y - 0.5*multiply;
gfximage_t img;
img.data = (gfxcolor_t*)data;
gfximage_t img;
img.data = (gfxcolor_t*)data;
@@
-2081,15
+2100,15
@@
static void drawimage(gfxdevice_t*dev, gfxcolor_t* data, int sizex,int sizey,
}
void drawimagejpeg(gfxdevice_t*dev, gfxcolor_t*mem, int sizex,int sizey,
}
void drawimagejpeg(gfxdevice_t*dev, gfxcolor_t*mem, int sizex,int sizey,
- double x1,double y1, double x2,double y2, double x3,double y3, double x4,double y4)
+ double x1,double y1, double x2,double y2, double x3,double y3, double x4,double y4, int multiply)
{
{
- drawimage(dev,mem,sizex,sizey,x1,y1,x2,y2,x3,y3,x4,y4, IMAGE_TYPE_JPEG);
+ drawimage(dev,mem,sizex,sizey,x1,y1,x2,y2,x3,y3,x4,y4, IMAGE_TYPE_JPEG, multiply);
}
void drawimagelossless(gfxdevice_t*dev, gfxcolor_t*mem, int sizex,int sizey,
}
void drawimagelossless(gfxdevice_t*dev, gfxcolor_t*mem, int sizex,int sizey,
- double x1,double y1, double x2,double y2, double x3,double y3, double x4,double y4)
+ double x1,double y1, double x2,double y2, double x3,double y3, double x4,double y4, int multiply)
{
{
- drawimage(dev,mem,sizex,sizey,x1,y1,x2,y2,x3,y3,x4,y4, IMAGE_TYPE_LOSSLESS);
+ drawimage(dev,mem,sizex,sizey,x1,y1,x2,y2,x3,y3,x4,y4, IMAGE_TYPE_LOSSLESS, multiply);
}
}
@@
-2222,7
+2241,7
@@
void GFXOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str,
buf[0]=1-buf[0];
pic[width*y+x] = buf[0];
}
buf[0]=1-buf[0];
pic[width*y+x] = buf[0];
}
-
+
if(type3active) {
unsigned char*pic2 = 0;
numpalette = 16;
if(type3active) {
unsigned char*pic2 = 0;
numpalette = 16;
@@
-2259,7
+2278,7
@@
void GFXOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str,
pic2[width*y+x] = pal[pic[y*width+x]];
}
}
pic2[width*y+x] = pal[pic[y*width+x]];
}
}
- drawimagelossless(device, pic2, width, height, x1,y1,x2,y2,x3,y3,x4,y4);
+ drawimagelossless(device, pic2, width, height, x1,y1,x2,y2,x3,y3,x4,y4, config_multiply);
delete[] pic2;
delete[] pic;
delete imgStr;
delete[] pic2;
delete[] pic;
delete imgStr;
@@
-2301,9
+2320,9
@@
void GFXOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str,
}
}
if(str->getKind()==strDCT)
}
}
if(str->getKind()==strDCT)
- drawimagejpeg(device, pic, width, height, x1,y1,x2,y2,x3,y3,x4,y4);
+ drawimagejpeg(device, pic, width, height, x1,y1,x2,y2,x3,y3,x4,y4, config_multiply);
else
else
- drawimagelossless(device, pic, width, height, x1,y1,x2,y2,x3,y3,x4,y4);
+ drawimagelossless(device, pic, width, height, x1,y1,x2,y2,x3,y3,x4,y4, config_multiply);
delete[] pic;
delete imgStr;
if(maskbitmap) free(maskbitmap);
delete[] pic;
delete imgStr;
if(maskbitmap) free(maskbitmap);
@@
-2378,7
+2397,7
@@
void GFXOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str,
height = maskHeight;
}
}
height = maskHeight;
}
}
- drawimagelossless(device, pic, width, height, x1,y1,x2,y2,x3,y3,x4,y4);
+ drawimagelossless(device, pic, width, height, x1,y1,x2,y2,x3,y3,x4,y4, config_multiply);
delete[] pic;
delete imgStr;
delete[] pic;
delete imgStr;