summaryrefslogtreecommitdiffstats
path: root/server/tree.h
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@gmail.com>2013-09-10 22:59:31 +0200
committerFrediano Ziglio <fziglio@redhat.com>2015-11-02 12:12:14 +0000
commit372eb0072aca0051867b5b9496d5376c685567af (patch)
tree59407c7ade6f21faf6d1df7a5aa9b720542ef4a4 /server/tree.h
parent9e42647101ef3683a3318ba2baaae7e4edd58baf (diff)
downloadspice-372eb0072aca0051867b5b9496d5376c685567af.tar.gz
spice-372eb0072aca0051867b5b9496d5376c685567af.tar.xz
spice-372eb0072aca0051867b5b9496d5376c685567af.zip
tree: move that to a separate unit
Acked-by: Frediano Ziglio <fziglio@redhat.com>
Diffstat (limited to 'server/tree.h')
-rw-r--r--server/tree.h111
1 files changed, 111 insertions, 0 deletions
diff --git a/server/tree.h b/server/tree.h
new file mode 100644
index 00000000..8cd7b05f
--- /dev/null
+++ b/server/tree.h
@@ -0,0 +1,111 @@
+/* -*- Mode: C; c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/*
+ Copyright (C) 2009-2015 Red Hat, Inc.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, see <http://www.gnu.org/licenses/>.
+*/
+#ifndef TREE_H_
+# define TREE_H_
+
+#include <stdint.h>
+#include "common/region.h"
+#include "common/ring.h"
+
+enum {
+ TREE_ITEM_TYPE_NONE,
+ TREE_ITEM_TYPE_DRAWABLE,
+ TREE_ITEM_TYPE_CONTAINER,
+ TREE_ITEM_TYPE_SHADOW,
+
+ TREE_ITEM_TYPE_LAST,
+};
+
+typedef struct TreeItem TreeItem;
+typedef struct Shadow Shadow;
+typedef struct Container Container;
+typedef struct DrawItem DrawItem;
+
+/* TODO consider GNode instead */
+struct TreeItem {
+ RingItem siblings_link;
+ uint32_t type;
+ Container *container;
+ QRegion rgn;
+};
+
+struct Shadow {
+ TreeItem base;
+ QRegion on_hold;
+ DrawItem* owner;
+};
+
+struct Container {
+ TreeItem base;
+ Ring items;
+};
+
+struct DrawItem {
+ TreeItem base;
+ uint8_t effect;
+ uint8_t container_root;
+ Shadow *shadow;
+};
+
+#define IS_DRAW_ITEM(item) ((item)->type == TREE_ITEM_TYPE_DRAWABLE)
+
+typedef enum {
+ BITMAP_GRADUAL_INVALID,
+ BITMAP_GRADUAL_NOT_AVAIL,
+ BITMAP_GRADUAL_LOW,
+ BITMAP_GRADUAL_MEDIUM,
+ BITMAP_GRADUAL_HIGH,
+} BitmapGradualType;
+
+typedef struct DependItem {
+ Drawable *drawable;
+ RingItem ring_item;
+} DependItem;
+
+struct Drawable {
+ uint8_t refs;
+ RingItem surface_list_link;
+ RingItem list_link;
+ DrawItem tree_item;
+ Ring pipes;
+ PipeItem *pipe_item_rest;
+ uint32_t size_pipe_item_rest;
+ RedDrawable *red_drawable;
+
+ Ring glz_ring;
+
+ red_time_t creation_time;
+ int frames_count;
+ int gradual_frames_count;
+ int last_gradual_frame;
+ Stream *stream;
+ Stream *sized_stream;
+ int streamable;
+ BitmapGradualType copy_bitmap_graduality;
+ uint32_t group_id;
+ DependItem depend_items[3];
+
+ int surface_id;
+ int surfaces_dest[3];
+
+ uint32_t process_commands_generation;
+};
+
+void tree_item_dump (TreeItem *item);
+
+#endif /* TREE_H_ */