mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-25 13:11:13 +00:00
gsk: Add gsk_render_node_get_opaque_rect()
Gets a rectangle inside the rendernode that is opaque. This function only adds the API. So far, no implementation exists.
This commit is contained in:
parent
5a59548d72
commit
9c032bec89
@ -160,6 +160,13 @@ gsk_render_node_real_diff (GskRenderNode *node1,
|
||||
gsk_render_node_diff_impossible (node1, node2, data);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gsk_render_node_real_get_opaque_rect (GskRenderNode *node,
|
||||
graphene_rect_t *out_opaque)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gsk_render_node_class_init (GskRenderNodeClass *klass)
|
||||
{
|
||||
@ -167,6 +174,7 @@ gsk_render_node_class_init (GskRenderNodeClass *klass)
|
||||
klass->finalize = gsk_render_node_finalize;
|
||||
klass->can_diff = gsk_render_node_real_can_diff;
|
||||
klass->diff = gsk_render_node_real_diff;
|
||||
klass->get_opaque_rect = gsk_render_node_real_get_opaque_rect;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -559,6 +567,35 @@ gsk_render_node_diff (GskRenderNode *node1,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* gsk_render_node_get_opaque_rect:
|
||||
* @self: a `GskRenderNode`
|
||||
* @out_opaque: (out):
|
||||
*
|
||||
* Gets an opaque rectangle inside the node that GTK can determine to
|
||||
* be fully opaque.
|
||||
*
|
||||
* There is no guarantee that this is indeed the largest opaque rectangle or
|
||||
* that regions outside the rectangle are not opaque. This function is a best
|
||||
* effort with that goal.
|
||||
*
|
||||
* The rectangle will be fully contained in the bounds of the node.
|
||||
*
|
||||
* Returns: %TRUE if part or all of the rendernode is opaque, %FALSE if no
|
||||
* opaque region could be found.
|
||||
*
|
||||
* Since: 4.16
|
||||
**/
|
||||
gboolean
|
||||
gsk_render_node_get_opaque_rect (GskRenderNode *self,
|
||||
graphene_rect_t *out_opaque)
|
||||
{
|
||||
g_return_val_if_fail (GSK_IS_RENDER_NODE (self), FALSE);
|
||||
g_return_val_if_fail (out_opaque != NULL, FALSE);
|
||||
|
||||
return GSK_RENDER_NODE_GET_CLASS (self)->get_opaque_rect (self, out_opaque);
|
||||
}
|
||||
|
||||
/**
|
||||
* gsk_render_node_write_to_file:
|
||||
* @node: a `GskRenderNode`
|
||||
|
@ -122,6 +122,10 @@ GDK_AVAILABLE_IN_ALL
|
||||
void gsk_render_node_get_bounds (GskRenderNode *node,
|
||||
graphene_rect_t *bounds);
|
||||
|
||||
GDK_AVAILABLE_IN_4_16
|
||||
gboolean gsk_render_node_get_opaque_rect (GskRenderNode *self,
|
||||
graphene_rect_t *out_opaque);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gsk_render_node_draw (GskRenderNode *node,
|
||||
cairo_t *cr);
|
||||
|
@ -48,14 +48,16 @@ struct _GskRenderNodeClass
|
||||
|
||||
GskRenderNodeType node_type;
|
||||
|
||||
void (* finalize) (GskRenderNode *node);
|
||||
void (* draw) (GskRenderNode *node,
|
||||
cairo_t *cr);
|
||||
gboolean (* can_diff) (const GskRenderNode *node1,
|
||||
const GskRenderNode *node2);
|
||||
void (* diff) (GskRenderNode *node1,
|
||||
GskRenderNode *node2,
|
||||
GskDiffData *data);
|
||||
void (* finalize) (GskRenderNode *node);
|
||||
void (* draw) (GskRenderNode *node,
|
||||
cairo_t *cr);
|
||||
gboolean (* can_diff) (const GskRenderNode *node1,
|
||||
const GskRenderNode *node2);
|
||||
void (* diff) (GskRenderNode *node1,
|
||||
GskRenderNode *node2,
|
||||
GskDiffData *data);
|
||||
gboolean (* get_opaque_rect) (GskRenderNode *node,
|
||||
graphene_rect_t *out_opaque);
|
||||
};
|
||||
|
||||
void gsk_render_node_init_types (void);
|
||||
|
Loading…
Reference in New Issue
Block a user