void sp_clippath_hide (SPClipPath *cp, unsigned int key) { SPClipPathView *v; SPObject *child; g_return_if_fail (cp != NULL); g_return_if_fail (SP_IS_CLIPPATH (cp)); for (child = SP_OBJECTGROUP (cp)->children; child != NULL; child = child->next) { if (SP_IS_ITEM (child)) { sp_item_invoke_hide (SP_ITEM (child), key); } } for (v = cp->display; v != NULL; v = v->next) { if (v->key == key) { /* We simply unref and let item to manage this in handler */ cp->display = sp_clippath_view_list_remove (cp->display, v); return; } } g_assert_not_reached (); }
NRArenaItem * sp_clippath_show(SPClipPath *cp, NRArena *arena, unsigned int key) { g_return_val_if_fail(cp != NULL, NULL); g_return_val_if_fail(SP_IS_CLIPPATH(cp), NULL); g_return_val_if_fail(arena != NULL, NULL); g_return_val_if_fail(NR_IS_ARENA(arena), NULL); NRArenaItem *ai = NRArenaGroup::create(arena); cp->display = sp_clippath_view_new_prepend(cp->display, key, ai); for (SPObject *child = sp_object_first_child(SP_OBJECT(cp)) ; child != NULL; child = SP_OBJECT_NEXT(child)) { if (SP_IS_ITEM(child)) { NRArenaItem *ac = sp_item_invoke_show(SP_ITEM(child), arena, key, SP_ITEM_REFERENCE_FLAGS); if (ac) { /* The order is not important in clippath */ nr_arena_item_add_child(ai, ac, NULL); } } } if (cp->clipPathUnits == SP_CONTENT_UNITS_OBJECTBOUNDINGBOX) { Geom::Matrix t(Geom::Scale(cp->display->bbox.x1 - cp->display->bbox.x0, cp->display->bbox.y1 - cp->display->bbox.y0)); t[4] = cp->display->bbox.x0; t[5] = cp->display->bbox.y0; nr_arena_group_set_child_transform(NR_ARENA_GROUP(ai), &t); } return ai; }
NRArenaItem * sp_clippath_show (SPClipPath *cp, NRArena *arena, unsigned int key) { NRArenaItem *ai, *ac; SPObject *child; g_return_val_if_fail (cp != NULL, NULL); g_return_val_if_fail (SP_IS_CLIPPATH (cp), NULL); g_return_val_if_fail (arena != NULL, NULL); g_return_val_if_fail (NR_IS_ARENA (arena), NULL); ai = nr_arena_item_new (arena, NR_TYPE_ARENA_GROUP); cp->display = sp_clippath_view_new_prepend (cp->display, key, ai); for (child = SP_OBJECTGROUP (cp)->children; child != NULL; child = child->next) { if (SP_IS_ITEM (child)) { ac = sp_item_invoke_show (SP_ITEM (child), arena, key, SP_ITEM_REFERENCE_FLAGS); if (ac) { /* The order is not important in clippath */ nr_arena_item_add_child (ai, ac, NULL); nr_arena_item_unref (ac); } } } if (cp->clipPathUnits == SP_CONTENT_UNITS_OBJECTBOUNDINGBOX) { NRMatrixF t; nr_matrix_f_set_scale (&t, cp->display->bbox.x1 - cp->display->bbox.x0, cp->display->bbox.y1 - cp->display->bbox.y0); t.c[4] = cp->display->bbox.x0; t.c[5] = cp->display->bbox.y0; nr_arena_group_set_child_transform (NR_ARENA_GROUP (ai), &t); } return ai; }