summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO9
-rw-r--r--filter/lzwd.c10
-rw-r--r--tree/debug.c3
-rw-r--r--tree/optimize.c6
-rw-r--r--tree/tree.c21
5 files changed, 20 insertions, 29 deletions
diff --git a/TODO b/TODO
index 488f1fc6..4e77b437 100644
--- a/TODO
+++ b/TODO
@@ -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;
}