mirror of
https://github.com/brl/mutter.git
synced 2025-04-22 18:09:39 +00:00
Move default paint volume computation into a function
This should reduce the amount of copy and paste for actor sub-classes that use the default paint volume from the allocation.
This commit is contained in:
parent
fd41024d29
commit
16f7ee13f2
@ -370,25 +370,9 @@ static gboolean
|
|||||||
clutter_cairo_texture_get_paint_volume (ClutterActor *self,
|
clutter_cairo_texture_get_paint_volume (ClutterActor *self,
|
||||||
ClutterPaintVolume *volume)
|
ClutterPaintVolume *volume)
|
||||||
{
|
{
|
||||||
ClutterGeometry allocation;
|
return _clutter_actor_set_default_paint_volume (self,
|
||||||
|
CLUTTER_TYPE_CAIRO_TEXTURE,
|
||||||
/* XXX: we are being conservative here and not making assumptions
|
volume);
|
||||||
* that sub-classes won't paint outside their allocation. */
|
|
||||||
if (G_OBJECT_TYPE (self) != CLUTTER_TYPE_CAIRO_TEXTURE)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
/* XXX: clutter_actor_get_allocation can potentially be very
|
|
||||||
* expensive to call if called while the actor doesn't have a valid
|
|
||||||
* allocation since it will trigger a synchronous relayout of the
|
|
||||||
* scenegraph. We explicitly check we have a valid allocation
|
|
||||||
* to avoid hitting that codepath. */
|
|
||||||
if (!clutter_actor_has_allocation (self))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
clutter_actor_get_allocation_geometry (self, &allocation);
|
|
||||||
clutter_paint_volume_set_width (volume, allocation.width);
|
|
||||||
clutter_paint_volume_set_height (volume, allocation.height);
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -812,4 +812,50 @@ _clutter_paint_volume_axis_align (ClutterPaintVolume *pv)
|
|||||||
pv->is_2d = FALSE;
|
pv->is_2d = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*<private>
|
||||||
|
* _clutter_actor_set_default_paint_volume:
|
||||||
|
* @self: a #ClutterActor
|
||||||
|
* @check_gtype: if not %G_TYPE_INVALID, match the type of @self against
|
||||||
|
* this type
|
||||||
|
* @volume: the #ClutterPaintVolume to set
|
||||||
|
*
|
||||||
|
* Sets the default paint volume for @self.
|
||||||
|
*
|
||||||
|
* This function should be called by #ClutterActor sub-classes that follow
|
||||||
|
* the default assumption that their paint volume is defined by their
|
||||||
|
* allocation.
|
||||||
|
*
|
||||||
|
* If @check_gtype is not %G_TYPE_INVALID, this function will check the
|
||||||
|
* type of @self and only compute the paint volume if the type matches;
|
||||||
|
* this can be used to avoid computing the paint volume for sub-classes
|
||||||
|
* of an actor class
|
||||||
|
*
|
||||||
|
* Return value: %TRUE if the paint volume was set, and %FALSE otherwise
|
||||||
|
*/
|
||||||
|
gboolean
|
||||||
|
_clutter_actor_set_default_paint_volume (ClutterActor *self,
|
||||||
|
GType check_gtype,
|
||||||
|
ClutterPaintVolume *volume)
|
||||||
|
{
|
||||||
|
ClutterGeometry geometry = { 0, };
|
||||||
|
|
||||||
|
if (check_gtype != G_TYPE_INVALID)
|
||||||
|
{
|
||||||
|
if (G_OBJECT_TYPE (self) != check_gtype)
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* calling clutter_actor_get_allocation_* can potentially be very
|
||||||
|
* expensive, as it can result in a synchronous full stage relayout
|
||||||
|
* and redraw
|
||||||
|
*/
|
||||||
|
if (!clutter_actor_has_allocation (self))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
clutter_actor_get_allocation_geometry (self, &geometry);
|
||||||
|
|
||||||
|
clutter_paint_volume_set_width (volume, geometry.width);
|
||||||
|
clutter_paint_volume_set_height (volume, geometry.height);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
@ -530,6 +530,10 @@ void _clutter_util_fully_transform_vertices (const CoglMatrix *mo
|
|||||||
ClutterVertex *vertices_out,
|
ClutterVertex *vertices_out,
|
||||||
int n_vertices);
|
int n_vertices);
|
||||||
|
|
||||||
|
gboolean _clutter_actor_set_default_paint_volume (ClutterActor *self,
|
||||||
|
GType check_gtype,
|
||||||
|
ClutterPaintVolume *volume);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* _HAVE_CLUTTER_PRIVATE_H */
|
#endif /* _HAVE_CLUTTER_PRIVATE_H */
|
||||||
|
@ -156,25 +156,9 @@ static gboolean
|
|||||||
clutter_rectangle_get_paint_volume (ClutterActor *self,
|
clutter_rectangle_get_paint_volume (ClutterActor *self,
|
||||||
ClutterPaintVolume *volume)
|
ClutterPaintVolume *volume)
|
||||||
{
|
{
|
||||||
ClutterGeometry allocation;
|
return _clutter_actor_set_default_paint_volume (self,
|
||||||
|
CLUTTER_TYPE_RECTANGLE,
|
||||||
/* XXX: we are being conservative here and not making assumptions
|
volume);
|
||||||
* that sub-classes won't paint outside their allocation. */
|
|
||||||
if (G_OBJECT_TYPE (self) != CLUTTER_TYPE_RECTANGLE)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
/* XXX: clutter_actor_get_allocation can potentially be very
|
|
||||||
* expensive to call if called while the actor doesn't have a valid
|
|
||||||
* allocation since it will trigger a synchronous relayout of the
|
|
||||||
* scenegraph. We explicitly check we have a valid allocation
|
|
||||||
* to avoid hitting that codepath. */
|
|
||||||
if (!clutter_actor_has_allocation (self))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
clutter_actor_get_allocation_geometry (self, &allocation);
|
|
||||||
clutter_paint_volume_set_width (volume, allocation.width);
|
|
||||||
clutter_paint_volume_set_height (volume, allocation.height);
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -689,25 +689,9 @@ static gboolean
|
|||||||
clutter_texture_get_paint_volume (ClutterActor *self,
|
clutter_texture_get_paint_volume (ClutterActor *self,
|
||||||
ClutterPaintVolume *volume)
|
ClutterPaintVolume *volume)
|
||||||
{
|
{
|
||||||
ClutterGeometry allocation;
|
return _clutter_actor_set_default_paint_volume (self,
|
||||||
|
CLUTTER_TYPE_TEXTURE,
|
||||||
/* XXX: we are being conservative here and not making assumptions
|
volume);
|
||||||
* that sub-classes won't paint outside their allocation. */
|
|
||||||
if (G_OBJECT_TYPE (self) != CLUTTER_TYPE_TEXTURE)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
/* XXX: clutter_actor_get_allocation can potentially be very
|
|
||||||
* expensive to call if called while the actor doesn't have a valid
|
|
||||||
* allocation since it will trigger a synchronous relayout of the
|
|
||||||
* scenegraph. We explicitly check we have a valid allocation
|
|
||||||
* to avoid hitting that codepath. */
|
|
||||||
if (!clutter_actor_has_allocation (self))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
clutter_actor_get_allocation_geometry (self, &allocation);
|
|
||||||
clutter_paint_volume_set_width (volume, allocation.width);
|
|
||||||
clutter_paint_volume_set_height (volume, allocation.height);
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
x
Reference in New Issue
Block a user