moved bitmaps by (-0.5,-0.5), in the hope that the duplicate top row/left
[swftools.git] / pdf2swf / swfoutput.cc
index 1c12e46..93f2a84 100644 (file)
@@ -808,12 +808,18 @@ void drawpath2poly(struct swfoutput *obj, SWF_OUTLINE*outline, struct swfmatrix*
     tmp->last = 0;
 
     while(1) {
+       double previousx = x, previousy = y;
        if(tmp) {
            x += (tmp->dest.x/(float)0xffff);
            y += (tmp->dest.y/(float)0xffff);
        }
         if(!tmp || tmp->type == SWF_PATHTYPE_MOVE) {
            if(valid && last) {
+               if(fabs(lastx-previousx)<0.001 && fabs(lasty-previousy)<0.001) {
+                   /* endpoints match- the path is closed.
+                      Don't bother to draw endings */
+                   drawShortPath(obj, lastx, lasty, m, last);
+               }
                if(last->type == SWF_PATHTYPE_LINE && t1linelen(obj,last)>line_width*2 &&
                   lastwasline && line_cap != LINE_CAP_ROUND)
                    drawShortPathWithStraightEnds(obj, lastx, lasty, m, last, valid, line_cap, line_join, line_width);
@@ -828,7 +834,7 @@ void drawpath2poly(struct swfoutput *obj, SWF_OUTLINE*outline, struct swfmatrix*
            lasty = y;
        } else {
            if(!last)
-               last = tmp;
+               last = tmp; //remember last stroke start (first segment after moveto)
            valid++;
        }
 
@@ -1722,13 +1728,7 @@ static void endshape(swfoutput*obj, int clipdepth)
     if(i->shapeisempty ||
        /*bbox empty?*/
        (i->bboxrect.xmin == i->bboxrect.xmax && 
-        i->bboxrect.ymin == i->bboxrect.ymax) ||
-       /*bbox outside page?*/
-       (i->bboxrect.xmax <= i->min_x ||
-       i->bboxrect.ymax <= i->min_y ||
-       i->bboxrect.xmin >= i->max_x ||
-       i->bboxrect.ymin >= i->max_y)
-       ) 
+        i->bboxrect.ymin == i->bboxrect.ymax))
     {
        // delete the shape again, we didn't do anything
        cancelshape(obj);
@@ -2247,8 +2247,8 @@ static void drawimage(struct swfoutput*obj, int bitid, int sizex,int sizey,
     m.r0 = (int)(65536*20*(p1.x-p2.x)/sizey);
     m.sy = -(int)(65536*20*(p1.y-p2.y)/sizey);
 
-    m.tx = (int)(p1.x*20);
-    m.ty = (int)(p1.y*20);
+    m.tx = (int)(p1.x*20) - 10;
+    m.ty = (int)(p1.y*20) - 10;
   
     /* shape */
     myshapeid = ++i->currentswfid;