summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathon Jongsma <jjongsma@redhat.com>2015-11-13 17:52:15 +0100
committerFabiano FidĂȘncio <fidencio@redhat.com>2015-11-13 18:29:40 +0100
commita408bb3e2551baa8cd1fe309fca7c73160135ed7 (patch)
treed4437a5f6f0e201e5ceffca5c614d02729652682
parentdea8500fe9af6bbe9220d5b45dce3460a1399c53 (diff)
downloadspice-a408bb3e2551baa8cd1fe309fca7c73160135ed7.zip
spice-a408bb3e2551baa8cd1fe309fca7c73160135ed7.tar.gz
spice-a408bb3e2551baa8cd1fe309fca7c73160135ed7.tar.xz
Move some tree item functions to tree.[ch]
Also rename some functions slightly: __find_shadow -> tree_item_find_shadow() __contained_by -> tree_item_contained_by() ring_of -> tree_item_container_items();
-rw-r--r--server/red_worker.c62
-rw-r--r--server/tree.c50
-rw-r--r--server/tree.h5
3 files changed, 62 insertions, 55 deletions
diff --git a/server/red_worker.c b/server/red_worker.c
index 55e7f72..fcddf1d 100644
--- a/server/red_worker.c
+++ b/server/red_worker.c
@@ -943,21 +943,6 @@ void display_channel_drawable_unref(DisplayChannel *display, Drawable *drawable)
display->drawable_count--;
}
-static inline void remove_shadow(DrawItem *item)
-{
- Shadow *shadow;
-
- if (!item->shadow) {
- return;
- }
- shadow = item->shadow;
- item->shadow = NULL;
- ring_remove(&shadow->base.siblings_link);
- region_destroy(&shadow->base.rgn);
- region_destroy(&shadow->on_hold);
- free(shadow);
-}
-
static void display_stream_trace_add_drawable(DisplayChannel *display, Drawable *item)
{
ItemTrace *trace;
@@ -1001,7 +986,7 @@ static inline void current_remove_drawable(RedWorker *worker, Drawable *item)
DisplayChannel *display = worker->display_channel;
display_stream_trace_add_drawable(display, item);
- remove_shadow(&item->tree_item);
+ draw_item_remove_shadow(&item->tree_item);
ring_remove(&item->tree_item.base.siblings_link);
ring_remove(&item->list_link);
ring_remove(&item->surface_list_link);
@@ -1155,39 +1140,6 @@ static void red_clear_surface_drawables_from_pipes(RedWorker *worker,
}
}
-static inline Shadow *__find_shadow(TreeItem *item)
-{
- while (item->type == TREE_ITEM_TYPE_CONTAINER) {
- if (!(item = (TreeItem *)ring_get_tail(&((Container *)item)->items))) {
- return NULL;
- }
- }
-
- if (item->type != TREE_ITEM_TYPE_DRAWABLE) {
- return NULL;
- }
-
- return ((DrawItem *)item)->shadow;
-}
-
-static inline Ring *ring_of(Ring *ring, TreeItem *item)
-{
- return (item->container) ? &item->container->items : ring;
-}
-
-static inline int __contained_by(TreeItem *item, Ring *ring)
-{
- spice_assert(item && ring);
- do {
- Ring *now = ring_of(ring, item);
- if (now == ring) {
- return TRUE;
- }
- } while ((item = (TreeItem *)item->container));
-
- return FALSE;
-}
-
static inline void __exclude_region(RedWorker *worker, Ring *ring, TreeItem *item, QRegion *rgn,
Ring **top_ring, Drawable *frame_candidate)
{
@@ -1221,8 +1173,8 @@ static inline void __exclude_region(RedWorker *worker, Ring *ring, TreeItem *ite
region_exclude(&shadow->on_hold, &and_rgn);
region_or(rgn, &and_rgn);
// in flat representation of current, shadow is always his owner next
- if (!__contained_by((TreeItem*)shadow, *top_ring)) {
- *top_ring = ring_of(ring, (TreeItem*)shadow);
+ if (!tree_item_contained_by((TreeItem*)shadow, *top_ring)) {
+ *top_ring = tree_item_container_items((TreeItem*)shadow, ring);
}
}
} else {
@@ -1239,10 +1191,10 @@ static inline void __exclude_region(RedWorker *worker, Ring *ring, TreeItem *ite
Shadow *shadow;
region_exclude(rgn, &and_rgn);
- if ((shadow = __find_shadow(item))) {
+ if ((shadow = tree_item_find_shadow(item))) {
region_or(rgn, &shadow->on_hold);
- if (!__contained_by((TreeItem*)shadow, *top_ring)) {
- *top_ring = ring_of(ring, (TreeItem*)shadow);
+ if (!tree_item_contained_by((TreeItem*)shadow, *top_ring)) {
+ *top_ring = tree_item_container_items((TreeItem*)shadow, ring);
}
}
}
@@ -2266,7 +2218,7 @@ static inline int current_add(RedWorker *worker, Ring *ring, Drawable *drawable)
Shadow *shadow;
int skip = now == exclude_base;
- if ((shadow = __find_shadow(sibling))) {
+ if ((shadow = tree_item_find_shadow(sibling))) {
if (exclude_base) {
TreeItem *next = sibling;
exclude_region(worker, ring, exclude_base, &exclude_rgn, &next, NULL);
diff --git a/server/tree.c b/server/tree.c
index ad31f09..1daa90c 100644
--- a/server/tree.c
+++ b/server/tree.c
@@ -250,3 +250,53 @@ void container_cleanup(Container *container)
container = next;
}
}
+
+/* FIXME: document weird function: go down containers, and return drawable->shadow? */
+Shadow* tree_item_find_shadow(TreeItem *item)
+{
+ while (item->type == TREE_ITEM_TYPE_CONTAINER) {
+ if (!(item = (TreeItem *)ring_get_tail(&((Container *)item)->items))) {
+ return NULL;
+ }
+ }
+
+ if (item->type != TREE_ITEM_TYPE_DRAWABLE) {
+ return NULL;
+ }
+
+ return ((DrawItem *)item)->shadow;
+}
+
+Ring *tree_item_container_items(TreeItem *item, Ring *ring)
+{
+ return (item->container) ? &item->container->items : ring;
+}
+
+int tree_item_contained_by(TreeItem *item, Ring *ring)
+{
+ spice_assert(item && ring);
+ do {
+ Ring *now = tree_item_container_items(item, ring);
+ if (now == ring) {
+ return TRUE;
+ }
+ } while ((item = (TreeItem *)item->container));
+
+ return FALSE;
+}
+
+void draw_item_remove_shadow(DrawItem *item)
+{
+ Shadow *shadow;
+
+ if (!item->shadow) {
+ return;
+ }
+ shadow = item->shadow;
+ item->shadow = NULL;
+ /* shadow_free? */
+ ring_remove(&shadow->base.siblings_link);
+ region_destroy(&shadow->base.rgn);
+ region_destroy(&shadow->on_hold);
+ free(shadow);
+}
diff --git a/server/tree.h b/server/tree.h
index 01d4ff9..8b9c6ba 100644
--- a/server/tree.h
+++ b/server/tree.h
@@ -80,6 +80,11 @@ static inline int is_opaque_item(TreeItem *item)
}
void tree_item_dump (TreeItem *item);
+Shadow* tree_item_find_shadow (TreeItem *item);
+int tree_item_contained_by (TreeItem *item, Ring *ring);
+Ring* tree_item_container_items (TreeItem *item, Ring *ring);
+
+void draw_item_remove_shadow (DrawItem *item);
Shadow* shadow_new (DrawItem *item, const SpicePoint *delta);
Container* container_new (DrawItem *item);
void container_free (Container *container);