static void st_bin_remove (ClutterContainer *container, ClutterActor *actor) { StBinPrivate *priv = ST_BIN (container)->priv; if (priv->child == actor) st_bin_set_child (ST_BIN (container), NULL); }
static void shell_slicer_get_preferred_height (ClutterActor *self, gfloat for_width, gfloat *min_height_p, gfloat *natural_height_p) { ClutterActor *child = st_bin_get_child (ST_BIN (self)); StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (self)); st_theme_node_adjust_for_width (theme_node, &for_width); if (min_height_p) *min_height_p = 0; if (child == NULL) { if (natural_height_p) *natural_height_p = 0; } else { _st_actor_get_preferred_height (child, for_width, FALSE, NULL, natural_height_p); } st_theme_node_adjust_preferred_height (theme_node, min_height_p, natural_height_p); }
static void st_bin_get_preferred_height (ClutterActor *self, gfloat for_width, gfloat *min_height_p, gfloat *natural_height_p) { StBinPrivate *priv = ST_BIN (self)->priv; StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (self)); st_theme_node_adjust_for_width (theme_node, &for_width); if (priv->child == NULL) { if (min_height_p) *min_height_p = 0; if (natural_height_p) *natural_height_p = 0; } else { _st_actor_get_preferred_height (priv->child, for_width, priv->x_fill, min_height_p, natural_height_p); } st_theme_node_adjust_preferred_height (theme_node, min_height_p, natural_height_p); }
static void st_bin_get_property (GObject *gobject, guint prop_id, GValue *value, GParamSpec *pspec) { StBinPrivate *priv = ST_BIN (gobject)->priv; switch (prop_id) { case PROP_CHILD: g_value_set_object (value, priv->child); break; case PROP_X_FILL: g_value_set_boolean (value, priv->x_fill); break; case PROP_Y_FILL: g_value_set_boolean (value, priv->y_fill); break; case PROP_X_ALIGN: g_value_set_enum (value, priv->x_align); break; case PROP_Y_ALIGN: g_value_set_enum (value, priv->y_align); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); } }
static void st_bin_popup_menu (StWidget *widget) { StBinPrivate *priv = ST_BIN (widget)->priv; if (priv->child && ST_IS_WIDGET (priv->child)) st_widget_popup_menu (ST_WIDGET (priv->child)); }
static void st_bin_foreach (ClutterContainer *container, ClutterCallback callback, gpointer user_data) { StBinPrivate *priv = ST_BIN (container)->priv; if (priv->child) callback (priv->child, user_data); }
static void st_bin_dispose (GObject *gobject) { StBinPrivate *priv = ST_BIN (gobject)->priv; if (priv->child) clutter_actor_destroy (priv->child); g_assert (priv->child == NULL); G_OBJECT_CLASS (st_bin_parent_class)->dispose (gobject); }
static void st_bin_pick (ClutterActor *self, const ClutterColor *pick_color) { StBinPrivate *priv = ST_BIN (self)->priv; /* get the default pick implementation */ CLUTTER_ACTOR_CLASS (st_bin_parent_class)->pick (self, pick_color); if (priv->child) clutter_actor_paint (priv->child); }
static void st_bin_paint (ClutterActor *self) { StBinPrivate *priv = ST_BIN (self)->priv; /* allow StWidget to paint the background */ CLUTTER_ACTOR_CLASS (st_bin_parent_class)->paint (self); /* the pain our child */ if (priv->child) clutter_actor_paint (priv->child); }
static void shell_slicer_paint_child (ShellSlicer *self) { ClutterActor *child; ClutterActorBox self_box; ClutterActorBox child_box; float width, height, child_width, child_height; StAlign x_align, y_align; double x_align_factor, y_align_factor; child = st_bin_get_child (ST_BIN (self)); if (!child) return; st_bin_get_alignment (ST_BIN (self), &x_align, &y_align); _st_get_align_factors (x_align, y_align, &x_align_factor, &y_align_factor); clutter_actor_get_allocation_box (CLUTTER_ACTOR (self), &self_box); clutter_actor_get_allocation_box (child, &child_box); width = self_box.x2 - self_box.x1; height = self_box.y2 - self_box.y1; child_width = child_box.x2 - child_box.x1; child_height = child_box.y2 - child_box.y1; cogl_push_matrix (); cogl_clip_push_rectangle (0, 0, width, height); cogl_translate ((int)(0.5 + x_align_factor * (width - child_width)), (int)(0.5 + y_align_factor * (height - child_height)), 0); clutter_actor_paint (child); cogl_clip_pop (); cogl_pop_matrix (); }
/** * st_button_set_label: * @button: a #Stbutton * @text: text to set the label to * * Sets the text displayed on the button */ void st_button_set_label (StButton *button, const gchar *text) { StButtonPrivate *priv; ClutterActor *label; g_return_if_fail (ST_IS_BUTTON (button)); priv = button->priv; g_free (priv->text); if (text) priv->text = g_strdup (text); else priv->text = g_strdup (""); label = st_bin_get_child (ST_BIN (button)); if (label && CLUTTER_IS_TEXT (label)) { clutter_text_set_text (CLUTTER_TEXT (label), priv->text); } else { label = g_object_new (CLUTTER_TYPE_TEXT, "text", priv->text, "line-alignment", PANGO_ALIGN_CENTER, "ellipsize", PANGO_ELLIPSIZE_END, "use-markup", TRUE, NULL); st_bin_set_child (ST_BIN (button), label); } /* Fake a style change so that we reset the style properties on the label */ st_widget_style_changed (ST_WIDGET (button)); g_object_notify (G_OBJECT (button), "label"); }
static void st_button_update_label_style (StButton *button) { ClutterActor *label; label = st_bin_get_child (ST_BIN (button)); /* check the child is really a label */ if (!CLUTTER_IS_TEXT (label)) return; _st_set_text_from_style (CLUTTER_TEXT (label), st_widget_get_theme_node (ST_WIDGET (button))); }
static void shell_slicer_allocate (ClutterActor *self, const ClutterActorBox *box, ClutterAllocationFlags flags) { ClutterActor *child; clutter_actor_set_allocation (self, box, flags); child = st_bin_get_child (ST_BIN (self)); if (child) clutter_actor_allocate_preferred_size (child, flags); }
static void sagarmatha_slicer_allocate (ClutterActor *self, const ClutterActorBox *box, ClutterAllocationFlags flags) { ClutterActor *child; /* Chain up directly to ClutterActor to set actor->allocation. We explicitly skip our parent class * StBin here because we want to override the allocate function. */ CLUTTER_ACTOR_CLASS (g_type_class_peek (clutter_actor_get_type ()))->allocate (self, box, flags); child = st_bin_get_child (ST_BIN (self)); if (child) clutter_actor_allocate_preferred_size (child, flags); }
static void st_bin_set_property (GObject *gobject, guint prop_id, const GValue *value, GParamSpec *pspec) { StBin *bin = ST_BIN (gobject); switch (prop_id) { case PROP_CHILD: st_bin_set_child (bin, g_value_get_object (value)); break; case PROP_X_ALIGN: st_bin_set_alignment (bin, g_value_get_enum (value), bin->priv->y_align); break; case PROP_Y_ALIGN: st_bin_set_alignment (bin, bin->priv->x_align, g_value_get_enum (value)); break; case PROP_X_FILL: st_bin_set_fill (bin, g_value_get_boolean (value), bin->priv->y_fill); break; case PROP_Y_FILL: st_bin_set_fill (bin, bin->priv->y_fill, g_value_get_boolean (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); } }
static gboolean st_bin_navigate_focus (StWidget *widget, ClutterActor *from, GtkDirectionType direction) { StBinPrivate *priv = ST_BIN (widget)->priv; ClutterActor *bin_actor = CLUTTER_ACTOR (widget); if (st_widget_get_can_focus (widget)) { if (from && clutter_actor_contains (bin_actor, from)) return FALSE; clutter_actor_grab_key_focus (bin_actor); return TRUE; } else if (priv->child && ST_IS_WIDGET (priv->child)) return st_widget_navigate_focus (ST_WIDGET (priv->child), from, direction, FALSE); else return FALSE; }
static void st_bin_allocate (ClutterActor *self, const ClutterActorBox *box, ClutterAllocationFlags flags) { StBinPrivate *priv = ST_BIN (self)->priv; CLUTTER_ACTOR_CLASS (st_bin_parent_class)->allocate (self, box, flags); if (priv->child) { StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (self)); ClutterActorBox childbox; st_theme_node_get_content_box (theme_node, box, &childbox); _st_allocate_fill (ST_WIDGET (self), priv->child, &childbox, priv->x_align, priv->y_align, priv->x_fill, priv->y_fill); clutter_actor_allocate (priv->child, &childbox, flags); } }
static void st_bin_allocate (ClutterActor *self, const ClutterActorBox *box, ClutterAllocationFlags flags) { StBinPrivate *priv = ST_BIN (self)->priv; clutter_actor_set_allocation (self, box, flags); if (priv->child && clutter_actor_is_visible (priv->child)) { StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (self)); ClutterActorBox childbox; gdouble x_align_f, y_align_f; st_theme_node_get_content_box (theme_node, box, &childbox); _st_get_align_factors (priv->x_align, priv->y_align, &x_align_f, &y_align_f); clutter_actor_allocate_align_fill (priv->child, &childbox, x_align_f, y_align_f, priv->x_fill, priv->y_fill, flags); } }
static void st_bin_add (ClutterContainer *container, ClutterActor *actor) { st_bin_set_child (ST_BIN (container), actor); }