Index: trunk/src/data.c =================================================================== --- trunk/src/data.c (revision 680) +++ trunk/src/data.c (revision 681) @@ -44,9 +44,12 @@ void camv_layer_init(camv_layer_t *layer) { + static rnd_xform_mx_t ident = RND_XFORM_MX_IDENT; + memset(layer, 0, sizeof(camv_layer_t)); camv_rtree_init(&layer->objs); layer->vis = 1; + memcpy(layer->mx, ident, sizeof(ident)); } camv_layer_t *camv_layer_new(void) Index: trunk/src/data.h =================================================================== --- trunk/src/data.h (revision 680) +++ trunk/src/data.h (revision 681) @@ -56,10 +56,10 @@ unsigned sub:1; /* if 1, layer is a sub-layer in compositing; a main layer is the first of a series of composite layers; sub layers are not visible in the layer sel */ unsigned vis:1; /* for main layers: UI visibility */ unsigned clearing:1; /* if 1, the layer is negative, clearing layer */ + unsigned enable_mx:1; /* if 1, apply mx (as a matrix transformation) when drawing */ - /* cache */ - rnd_xform_mx_t mx; + rnd_xform_mx_t mx; /* drawin/rendering mx transformation; does not affect bbox */ }; extern camv_design_t camv; Index: trunk/src/draw.c =================================================================== --- trunk/src/draw.c (revision 680) +++ trunk/src/draw.c (revision 681) @@ -33,6 +33,9 @@ void *o; rnd_xform_mx_t *mx = NULL; + if (ly->enable_mx) + mx = &ly->mx; + for(o = camv_rtree_first(&it, &ly->objs, (camv_rtree_box_t *)®ion->view); o != NULL; o = camv_rtree_next(&it)) { camv_any_obj_t *obj = o; obj->proto.calls->draw(obj, gc, mx);