void nr_arena_group_set_child_transform(NRArenaGroup *group, Geom::Matrix const *t)
{
    if (!t) t = &GEOM_MATRIX_IDENTITY;

    if (!Geom::matrix_equalp(*t, group->child_transform, NR_EPSILON)) {
        nr_arena_item_request_render (NR_ARENA_ITEM (group));
        group->child_transform = *t;
        nr_arena_item_request_update (NR_ARENA_ITEM (group), NR_ARENA_ITEM_STATE_ALL, TRUE);
    }
}
Exemple #2
0
void
nr_arena_group_set_child_transform (NRArenaGroup *group, NRMatrixF *t)
{
	if (!t) t = &NR_MATRIX_F_IDENTITY;

	if (!NR_MATRIX_DF_TEST_CLOSE (t, &group->child_transform, NR_EPSILON_F)) {
		nr_arena_item_request_render (NR_ARENA_ITEM (group));
		group->child_transform = *t;
		nr_arena_item_request_update (NR_ARENA_ITEM (group), NR_ARENA_ITEM_STATE_ALL, TRUE);
	}
}
static void
nr_arena_group_remove_child (NRArenaItem *item, NRArenaItem *child)
{
    NRArenaGroup *group = NR_ARENA_GROUP (item);

    if (child == group->last) group->last = child->prev;

    if (child->prev) {
        nr_arena_item_detach (item, child);
    } else {
        group->children = nr_arena_item_detach (item, child);
    }

    nr_arena_item_request_update (item, NR_ARENA_ITEM_STATE_ALL, FALSE);
}
static void
nr_arena_group_add_child (NRArenaItem *item, NRArenaItem *child, NRArenaItem *ref)
{
    NRArenaGroup *group = NR_ARENA_GROUP (item);

    if (!ref) {
        group->children = nr_arena_item_attach (item, child, NULL, group->children);
    } else {
        ref->next = nr_arena_item_attach (item, child, ref, ref->next);
    }

    if (ref == group->last) group->last = child;

    nr_arena_item_request_update (item, NR_ARENA_ITEM_STATE_ALL, FALSE);
}