diff options
author | Marc-André Lureau <marcandre.lureau@gmail.com> | 2013-09-10 22:59:31 +0200 |
---|---|---|
committer | Frediano Ziglio <fziglio@redhat.com> | 2015-11-02 12:12:14 +0000 |
commit | 372eb0072aca0051867b5b9496d5376c685567af (patch) | |
tree | 59407c7ade6f21faf6d1df7a5aa9b720542ef4a4 /server/tree.h | |
parent | 9e42647101ef3683a3318ba2baaae7e4edd58baf (diff) | |
download | spice-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.h | 111 |
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_ */ |