2016-03-17 13:48:19 +00:00
|
|
|
#ifndef __GSK_RENDER_NODE_PRIVATE_H__
|
|
|
|
#define __GSK_RENDER_NODE_PRIVATE_H__
|
|
|
|
|
|
|
|
#include "gskrendernode.h"
|
2016-07-27 15:23:44 +00:00
|
|
|
#include "gskrenderer.h"
|
2016-03-17 13:48:19 +00:00
|
|
|
#include <cairo.h>
|
|
|
|
|
|
|
|
G_BEGIN_DECLS
|
|
|
|
|
|
|
|
#define GSK_RENDER_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GSK_TYPE_RENDER_NODE, GskRenderNodeClass))
|
|
|
|
#define GSK_IS_RENDER_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GSK_TYPE_RENDER_NODE))
|
|
|
|
#define GSK_RENDER_NODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GSK_TYPE_RENDER_NODE, GskRenderNodeClass))
|
|
|
|
|
|
|
|
struct _GskRenderNode
|
|
|
|
{
|
2016-06-29 18:05:33 +00:00
|
|
|
GTypeInstance parent_instance;
|
|
|
|
|
|
|
|
volatile int ref_count;
|
2016-03-17 13:48:19 +00:00
|
|
|
|
2016-07-27 15:23:44 +00:00
|
|
|
/* Back pointer to the renderer that created the node */
|
|
|
|
GskRenderer *renderer;
|
|
|
|
|
2016-03-17 13:48:19 +00:00
|
|
|
/* The graph */
|
|
|
|
GskRenderNode *parent;
|
|
|
|
GskRenderNode *first_child;
|
|
|
|
GskRenderNode *last_child;
|
|
|
|
GskRenderNode *prev_sibling;
|
|
|
|
GskRenderNode *next_sibling;
|
|
|
|
|
|
|
|
int n_children;
|
|
|
|
|
|
|
|
/* Use for debugging */
|
|
|
|
char *name;
|
|
|
|
|
|
|
|
/* Tag updated when adding/removing children */
|
|
|
|
gint64 age;
|
|
|
|
|
2016-08-12 15:44:29 +00:00
|
|
|
/* The contents of the node as a Cairo surface */
|
2016-03-17 13:48:19 +00:00
|
|
|
cairo_surface_t *surface;
|
|
|
|
|
2016-08-12 15:44:29 +00:00
|
|
|
/* The contents of the node as a GL surface */
|
|
|
|
int texture_id;
|
|
|
|
|
2016-03-17 13:48:19 +00:00
|
|
|
/* Paint opacity */
|
|
|
|
double opacity;
|
|
|
|
|
2016-07-01 11:12:30 +00:00
|
|
|
/* Blend mode */
|
|
|
|
GskBlendMode blend_mode;
|
|
|
|
|
2016-03-17 13:48:19 +00:00
|
|
|
/* Clip rectangle */
|
|
|
|
graphene_rect_t bounds;
|
|
|
|
|
|
|
|
/* Transformations relative to the root of the scene */
|
|
|
|
graphene_matrix_t world_matrix;
|
|
|
|
|
|
|
|
/* Transformations applied to the node */
|
|
|
|
graphene_matrix_t transform;
|
|
|
|
|
2016-08-04 14:20:06 +00:00
|
|
|
graphene_point3d_t anchor_point;
|
2016-08-04 05:04:25 +00:00
|
|
|
|
2016-03-17 13:48:19 +00:00
|
|
|
/* Bit fields; leave at the end */
|
2016-06-22 16:30:36 +00:00
|
|
|
gboolean is_mutable : 1;
|
2016-03-17 13:48:19 +00:00
|
|
|
gboolean hidden : 1;
|
|
|
|
gboolean opaque : 1;
|
|
|
|
gboolean transform_set : 1;
|
|
|
|
gboolean needs_world_matrix_update : 1;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct _GskRenderNodeClass
|
|
|
|
{
|
2016-06-29 18:05:33 +00:00
|
|
|
GTypeClass parent_class;
|
|
|
|
|
|
|
|
void (* finalize) (GskRenderNode *node);
|
2016-03-17 13:48:19 +00:00
|
|
|
};
|
|
|
|
|
2016-07-27 15:23:44 +00:00
|
|
|
GskRenderNode *gsk_render_node_new (GskRenderer *renderer);
|
|
|
|
|
2016-06-22 16:30:36 +00:00
|
|
|
void gsk_render_node_make_immutable (GskRenderNode *node);
|
|
|
|
|
2016-03-17 13:48:19 +00:00
|
|
|
void gsk_render_node_get_bounds (GskRenderNode *node,
|
|
|
|
graphene_rect_t *frame);
|
|
|
|
void gsk_render_node_get_transform (GskRenderNode *node,
|
|
|
|
graphene_matrix_t *mv);
|
|
|
|
double gsk_render_node_get_opacity (GskRenderNode *node);
|
|
|
|
|
|
|
|
cairo_surface_t *gsk_render_node_get_surface (GskRenderNode *node);
|
|
|
|
|
2016-08-12 15:44:29 +00:00
|
|
|
int gsk_render_node_get_texture (GskRenderNode *node);
|
|
|
|
|
|
|
|
gboolean gsk_render_node_has_surface (GskRenderNode *node);
|
|
|
|
gboolean gsk_render_node_has_texture (GskRenderNode *node);
|
|
|
|
|
2016-03-17 13:48:19 +00:00
|
|
|
GskRenderNode *gsk_render_node_get_toplevel (GskRenderNode *node);
|
|
|
|
|
|
|
|
void gsk_render_node_update_world_matrix (GskRenderNode *node,
|
|
|
|
gboolean force);
|
|
|
|
|
|
|
|
void gsk_render_node_get_world_matrix (GskRenderNode *node,
|
|
|
|
graphene_matrix_t *mv);
|
|
|
|
|
2016-06-30 16:06:31 +00:00
|
|
|
int gsk_render_node_get_size (GskRenderNode *root);
|
|
|
|
|
2016-03-17 13:48:19 +00:00
|
|
|
G_END_DECLS
|
|
|
|
|
|
|
|
#endif /* __GSK_RENDER_NODE_PRIVATE_H__ */
|