diff options
-rw-r--r-- | TODO | 9 | ||||
-rw-r--r-- | filter/lzwd.c | 10 | ||||
-rw-r--r-- | tree/debug.c | 3 | ||||
-rw-r--r-- | tree/optimize.c | 6 | ||||
-rw-r--r-- | tree/tree.c | 21 |
5 files changed, 20 insertions, 29 deletions
@@ -1,4 +1,6 @@ immediate plan: + - image color key transparency + - text fill + clip mode - pdf logging - refcount resources - altivec optimize @@ -12,6 +14,9 @@ immediate plan: --- +transparency (v2) + - everything! + colorspace conversions (v2) - fast color cubes - proper colorspace conversions @@ -30,13 +35,9 @@ shadings rendering - fix glyphcache evictlast - bbox culling per glyph - - optimize image load/decode/scale - - cpu-specific optims - font focus parser - - image color key transparency - - rewrite 1x1 images as fillrect - try to clean up colorspace/material handling in interpreter - annotations and destinations (for links and outline) diff --git a/filter/lzwd.c b/filter/lzwd.c index 74ddd9ce..95fc462a 100644 --- a/filter/lzwd.c +++ b/filter/lzwd.c @@ -109,6 +109,13 @@ static inline fz_error * fillbits(fz_lzwd *lzw, fz_buffer *in) return nil; } +static inline void unstuff(fz_lzwd *lzw, fz_buffer *in) +{ + int i = (32 - lzw->bidx) / 8; + while (i-- && in->rp > in->bp) + in->rp --; +} + fz_error * fz_processlzwd(fz_filter *filter, fz_buffer *in, fz_buffer *out) { @@ -131,6 +138,7 @@ fz_processlzwd(fz_filter *filter, fz_buffer *in, fz_buffer *out) if (lzw->bidx > 32 - lzw->codebits) { out->eof = 1; + unstuff(lzw, in); return fz_iodone; } } @@ -146,6 +154,7 @@ fz_processlzwd(fz_filter *filter, fz_buffer *in, fz_buffer *out) { eatbits(lzw, lzw->codebits); out->eof = 1; + unstuff(lzw, in); return fz_iodone; } @@ -162,6 +171,7 @@ fz_processlzwd(fz_filter *filter, fz_buffer *in, fz_buffer *out) { eatbits(lzw, oldcodebits + MINBITS); out->eof = 1; + unstuff(lzw, in); return fz_iodone; } diff --git a/tree/debug.c b/tree/debug.c index e468ef27..b03d4e28 100644 --- a/tree/debug.c +++ b/tree/debug.c @@ -141,8 +141,9 @@ static void lisptext(fz_textnode *node, int level) static void lispimage(fz_imagenode *node, int level) { + fz_image *image = node->image; indent(level); - printf("(image)\n"); + printf("(image %dx%d %d+%d)\n", image->w, image->h, image->n, image->a); } static void lispshade(fz_shadenode *node, int level) diff --git a/tree/optimize.c b/tree/optimize.c index 9f85cdd7..629796e2 100644 --- a/tree/optimize.c +++ b/tree/optimize.c @@ -267,11 +267,11 @@ static fz_error *clean1x1(fz_node *node) if (error) return error; - fz_insertnodeafter(mask, (fz_node*)rect); - fz_insertnodeafter(mask, color); fz_insertnodeafter(current, mask); + fz_insertnodelast(mask, (fz_node*)rect); + fz_insertnodelast(mask, color); fz_removenode(current); - current = color; + current = mask; } else diff --git a/tree/tree.c b/tree/tree.c index f667e39a..f6874711 100644 --- a/tree/tree.c +++ b/tree/tree.c @@ -45,12 +45,6 @@ fz_boundtree(fz_tree *tree, fz_matrix ctm) void fz_insertnodefirst(fz_node *parent, fz_node *child) { - assert(fz_istransformnode(parent) || - fz_isovernode(parent) || - fz_ismasknode(parent) || - fz_isblendnode(parent) || - fz_ismetanode(parent)); - child->parent = parent; child->next = parent->first; parent->first = child; @@ -61,12 +55,6 @@ fz_insertnodefirst(fz_node *parent, fz_node *child) void fz_insertnodelast(fz_node *parent, fz_node *child) { - assert(fz_istransformnode(parent) || - fz_isovernode(parent) || - fz_ismasknode(parent) || - fz_isblendnode(parent) || - fz_ismetanode(parent)); - child->parent = parent; if (!parent->first) parent->first = child; @@ -79,18 +67,9 @@ void fz_insertnodeafter(fz_node *prev, fz_node *child) { fz_node *parent = prev->parent; - - assert(fz_istransformnode(parent) || - fz_isovernode(parent) || - fz_ismasknode(parent) || - fz_isblendnode(parent) || - fz_ismetanode(parent)); - child->parent = parent; - if (parent->last == prev) parent->last = child; - child->next = prev->next; prev->next = child; } |