1
0
Fork 0

docs: Add example of preferred_height() and preferred_width()

As most actor subclasses will probably want to implement
size requisition, give a simple example of how to do this
on the basis of the composed actor's size, plus some padding.
This commit is contained in:
Elliot Smith 2011-01-28 11:35:14 +00:00
parent 2adc224f0e
commit 951f13bb8d

View file

@ -137,7 +137,12 @@ cb_button_get_property (GObject *gobject,
}
}
/* ClutterActor implementation */
/* ClutterActor implementation
*
* we only implement allocate(), paint(), get_preferred_height()
* and get_preferred_width(), as this is the minimum
* we can get away with
*/
/* use the actor's allocation for the ClutterBox */
static void
@ -169,6 +174,60 @@ cb_button_paint (ClutterActor *actor)
clutter_actor_paint (priv->child);
}
/* get_preferred_height defers to the internal ClutterBox
* but adds 20px padding around it;
* min_height_p is the minimum height the actor should occupy
* to be useful; natural_height_p is the height the actor
* would occupy if not constrained
*
* note that if we required explicit sizing for CbButtons
* (i.e. a developer must set their height and width),
* we wouldn't need to implement this function
*/
static void
cb_button_get_preferred_height (ClutterActor *self,
gfloat for_width,
gfloat *min_height_p,
gfloat *natural_height_p)
{
CbButtonPrivate *priv = CB_BUTTON (self)->priv;
clutter_actor_get_preferred_height (priv->child,
for_width,
min_height_p,
natural_height_p);
*min_height_p += 20.0;
*natural_height_p += 20.0;
}
/* get_preferred_width defers to the internal ClutterBox
* but adds 20px padding around it;
* min_width_p is the minimum width the actor should occupy
* to be useful; natural_width_p is the width the actor
* would occupy if not constrained
*
* note that if we required explicit sizing for CbButtons
* (i.e. a developer must set their height and width),
* we wouldn't need to implement this function
*/
static void
cb_button_get_preferred_width (ClutterActor *self,
gfloat for_height,
gfloat *min_width_p,
gfloat *natural_width_p)
{
CbButtonPrivate *priv = CB_BUTTON (self)->priv;
clutter_actor_get_preferred_width (priv->child,
for_height,
min_width_p,
natural_width_p);
*min_width_p += 20.0;
*natural_width_p += 20.0;
}
/* proxy ClickAction signals so they become signals from the actor */
static void
cb_button_clicked (ClutterClickAction *action,
@ -181,10 +240,10 @@ cb_button_clicked (ClutterClickAction *action,
/* GObject class and instance initialization functions; note that
* these have been placed after the Clutter implementation, as
* they refer to the static paint() and allocate() functions
* they refer to the static function implementations above
*/
/* class init: attach functions to the class, define properties
/* class init: attach functions to superclasses, define properties
* and signals
*/
static void
@ -201,6 +260,8 @@ cb_button_class_init (CbButtonClass *klass)
actor_class->allocate = cb_button_allocate;
actor_class->paint = cb_button_paint;
actor_class->get_preferred_height = cb_button_get_preferred_height;
actor_class->get_preferred_width = cb_button_get_preferred_width;
g_type_class_add_private (klass, sizeof (CbButtonPrivate));