summaryrefslogtreecommitdiffstats
path: root/server/tree.c
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@gmail.com>2013-09-13 18:11:16 +0200
committerFrediano Ziglio <fziglio@redhat.com>2015-11-06 10:10:40 +0000
commite76f40295209103cc7a0cf7003f8422c7e02577d (patch)
tree2f7942facb13d189acabe5f52fa14f0a9ab9c042 /server/tree.c
parentc9bb089869bd7bed1abaf37bb6233356ef61a242 (diff)
downloadspice-e76f40295209103cc7a0cf7003f8422c7e02577d.tar.gz
spice-e76f40295209103cc7a0cf7003f8422c7e02577d.tar.xz
spice-e76f40295209103cc7a0cf7003f8422c7e02577d.zip
worker: move shadow_new() and container_new()
Acked-by: Fabiano Fidêncio <fidencio@redhat.com>
Diffstat (limited to 'server/tree.c')
-rw-r--r--server/tree.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/server/tree.c b/server/tree.c
index ed7d39ad..64fa6db9 100644
--- a/server/tree.c
+++ b/server/tree.c
@@ -180,3 +180,42 @@ void tree_item_dump(TreeItem *item)
spice_return_if_fail(item != NULL);
tree_foreach(item, dump_item, &di);
}
+
+Shadow* shadow_new(DrawItem *item, const SpicePoint *delta)
+{
+ spice_return_val_if_fail(item->shadow == NULL, NULL);
+ if (!delta->x && !delta->y) {
+ return NULL;
+ }
+
+ Shadow *shadow = spice_new(Shadow, 1);
+
+ shadow->base.type = TREE_ITEM_TYPE_SHADOW;
+ shadow->base.container = NULL;
+ shadow->owner = item;
+ region_clone(&shadow->base.rgn, &item->base.rgn);
+ region_offset(&shadow->base.rgn, delta->x, delta->y);
+ ring_item_init(&shadow->base.siblings_link);
+ region_init(&shadow->on_hold);
+ item->shadow = shadow;
+
+ return shadow;
+}
+
+Container* container_new(DrawItem *item)
+{
+ Container *container = spice_new(Container, 1);
+
+ container->base.type = TREE_ITEM_TYPE_CONTAINER;
+ container->base.container = item->base.container;
+ item->base.container = container;
+ item->container_root = TRUE;
+ region_clone(&container->base.rgn, &item->base.rgn);
+ ring_item_init(&container->base.siblings_link);
+ ring_add_after(&container->base.siblings_link, &item->base.siblings_link);
+ ring_remove(&item->base.siblings_link);
+ ring_init(&container->items);
+ ring_add(&container->items, &item->base.siblings_link);
+
+ return container;
+}