コード例 #1
0
/**
 * clutter_layout_manager_end_animation:
 * @manager: a #ClutterLayoutManager
 *
 * Ends an animation started by clutter_layout_manager_begin_animation()
 *
 * The result of this call depends on the @manager implementation
 *
 * Since: 1.2
 */
void
clutter_layout_manager_end_animation (ClutterLayoutManager *manager)
{
    g_return_if_fail (CLUTTER_IS_LAYOUT_MANAGER (manager));

    CLUTTER_LAYOUT_MANAGER_GET_CLASS (manager)->end_animation (manager);
}
コード例 #2
0
/**
 * clutter_layout_manager_layout_changed:
 * @manager: a #ClutterLayoutManager
 *
 * Emits the #ClutterLayoutManager::layout-changed signal on @manager
 *
 * This function should only be called by implementations of the
 * #ClutterLayoutManager class
 *
 * Since: 1.2
 */
void
clutter_layout_manager_layout_changed (ClutterLayoutManager *manager)
{
  g_return_if_fail (CLUTTER_IS_LAYOUT_MANAGER (manager));

  g_signal_emit (manager, manager_signals[LAYOUT_CHANGED], 0);
}
コード例 #3
0
ファイル: clutter-box.c プロジェクト: nobled/clutter
/**
 * clutter_box_set_layout_manager:
 * @box: a #ClutterBox
 * @manager: a #ClutterLayoutManager
 *
 * Sets the #ClutterLayoutManager for @box
 *
 * A #ClutterLayoutManager is a delegate object that controls the
 * layout of the children of @box
 *
 * Since: 1.2
 */
void
clutter_box_set_layout_manager (ClutterBox           *box,
                                ClutterLayoutManager *manager)
{
  g_return_if_fail (CLUTTER_IS_BOX (box));
  g_return_if_fail (CLUTTER_IS_LAYOUT_MANAGER (manager));

  set_layout_manager (box, manager);
}
コード例 #4
0
ファイル: clutter-box.c プロジェクト: nobled/clutter
/**
 * clutter_box_new:
 * @manager: a #ClutterLayoutManager
 *
 * Creates a new #ClutterBox. The children of the box will be layed
 * out by the passed @manager
 *
 * Return value: the newly created #ClutterBox actor
 *
 * Since: 1.0
 */
ClutterActor *
clutter_box_new (ClutterLayoutManager *manager)
{
  g_return_val_if_fail (CLUTTER_IS_LAYOUT_MANAGER (manager), NULL);

  return g_object_new (CLUTTER_TYPE_BOX,
                       "layout-manager", manager,
                       NULL);
}
コード例 #5
0
/**
 * clutter_layout_manager_get_child_meta:
 * @manager: a #ClutterLayoutManager
 * @container: a #ClutterContainer using @manager
 * @actor: a #ClutterActor child of @container
 *
 * Retrieves the #ClutterLayoutMeta that the layout @manager associated
 * to the @actor child of @container, eventually by creating one if the
 * #ClutterLayoutManager supports layout properties
 *
 * Return value: (transfer none): a #ClutterLayoutMeta, or %NULL if the
 *   #ClutterLayoutManager does not have layout properties. The returned
 *   layout meta instance is owned by the #ClutterLayoutManager and it
 *   should not be unreferenced
 *
 * Since: 1.0
 */
ClutterLayoutMeta *
clutter_layout_manager_get_child_meta (ClutterLayoutManager *manager,
                                       ClutterContainer     *container,
                                       ClutterActor         *actor)
{
    g_return_val_if_fail (CLUTTER_IS_LAYOUT_MANAGER (manager), NULL);
    g_return_val_if_fail (CLUTTER_IS_CONTAINER (container), NULL);
    g_return_val_if_fail (CLUTTER_IS_ACTOR (actor), NULL);

    return get_child_meta (manager, container, actor);
}
コード例 #6
0
/**
 * clutter_layout_manager_get_animation_progress:
 * @manager: a #ClutterLayoutManager
 *
 * Retrieves the progress of the animation, if one has been started by
 * clutter_layout_manager_begin_animation()
 *
 * The returned value has the same semantics of the #ClutterAlpha:alpha
 * value
 *
 * Return value: the progress of the animation
 *
 * Since: 1.2
 */
gdouble
clutter_layout_manager_get_animation_progress (ClutterLayoutManager *manager)
{
    ClutterLayoutManagerClass *klass;

    g_return_val_if_fail (CLUTTER_IS_LAYOUT_MANAGER (manager), 1.0);

    klass = CLUTTER_LAYOUT_MANAGER_GET_CLASS (manager);

    return klass->get_animation_progress (manager);
}
コード例 #7
0
/**
 * clutter_layout_manager_set_container:
 * @manager: a #ClutterLayoutManager
 * @container: (allow-none): a #ClutterContainer using @manager
 *
 * If the #ClutterLayoutManager sub-class allows it, allow
 * adding a weak reference of the @container using @manager
 * from within the layout manager
 *
 * The layout manager should not increase the reference
 * count of the @container
 *
 * Since: 1.2
 */
void
clutter_layout_manager_set_container (ClutterLayoutManager *manager,
                                      ClutterContainer     *container)
{
    ClutterLayoutManagerClass *klass;

    g_return_if_fail (CLUTTER_IS_LAYOUT_MANAGER (manager));
    g_return_if_fail (container == NULL || CLUTTER_IS_CONTAINER (container));

    klass = CLUTTER_LAYOUT_MANAGER_GET_CLASS (manager);
    if (klass->set_container)
        klass->set_container (manager, container);
}
コード例 #8
0
/**
 * clutter_layout_manager_begin_animation:
 * @manager: a #ClutterLayoutManager
 * @duration: the duration of the animation, in milliseconds
 * @mode: the easing mode of the animation
 *
 * Begins an animation of @duration milliseconds, using the provided
 * easing @mode
 *
 * The easing mode can be specified either as a #ClutterAnimationMode
 * or as a logical id returned by clutter_alpha_register_func()
 *
 * The result of this function depends on the @manager implementation
 *
 * Return value: (transfer none): The #ClutterAlpha created by the
 *   layout manager; the returned instance is owned by the layout
 *   manager and should not be unreferenced
 *
 * Since: 1.2
 */
ClutterAlpha *
clutter_layout_manager_begin_animation (ClutterLayoutManager *manager,
                                        guint                 duration,
                                        gulong                mode)
{
    ClutterLayoutManagerClass *klass;

    g_return_val_if_fail (CLUTTER_IS_LAYOUT_MANAGER (manager), NULL);

    klass = CLUTTER_LAYOUT_MANAGER_GET_CLASS (manager);

    return klass->begin_animation (manager, duration, mode);
}
コード例 #9
0
/**
 * clutter_layout_manager_layout_changed:
 * @manager: a #ClutterLayoutManager
 *
 * Emits the #ClutterLayoutManager::layout-changed signal on @manager
 *
 * This function should only be called by implementations of the
 * #ClutterLayoutManager class
 *
 * Since: 1.2
 */
void
clutter_layout_manager_layout_changed (ClutterLayoutManager *manager)
{
    gpointer is_frozen;

    g_return_if_fail (CLUTTER_IS_LAYOUT_MANAGER (manager));

    is_frozen = g_object_get_data (G_OBJECT (manager), "freeze-change");
    if (is_frozen == NULL)
        g_signal_emit (manager, manager_signals[LAYOUT_CHANGED], 0);
    else
        CLUTTER_NOTE (LAYOUT, "Layout manager '%s'[%p] has been frozen",
                      G_OBJECT_TYPE_NAME (manager),
                      manager);
}
コード例 #10
0
/**
 * clutter_layout_manager_allocate:
 * @manager: a #ClutterLayoutManager
 * @container: the #ClutterContainer using @manager
 * @allocation: the #ClutterActorBox containing the allocated area
 *   of @container
 * @flags: the allocation flags
 *
 * Allocates the children of @container given an area
 *
 * See also clutter_actor_allocate()
 *
 * Since: 1.2
 */
void
clutter_layout_manager_allocate (ClutterLayoutManager   *manager,
                                 ClutterContainer       *container,
                                 const ClutterActorBox  *allocation,
                                 ClutterAllocationFlags  flags)
{
    ClutterLayoutManagerClass *klass;

    g_return_if_fail (CLUTTER_IS_LAYOUT_MANAGER (manager));
    g_return_if_fail (CLUTTER_IS_CONTAINER (container));
    g_return_if_fail (allocation != NULL);

    klass = CLUTTER_LAYOUT_MANAGER_GET_CLASS (manager);
    klass->allocate (manager, container, allocation, flags);
}
コード例 #11
0
/**
 * clutter_layout_manager_get_preferred_height:
 * @manager: a #ClutterLayoutManager
 * @container: the #ClutterContainer using @manager
 * @for_width: the width for which the height should be computed, or -1
 * @min_height_p: (out) (allow-none): return location for the minimum height
 *   of the layout, or %NULL
 * @nat_height_p: (out) (allow-none): return location for the natural height
 *   of the layout, or %NULL
 *
 * Computes the minimum and natural heights of the @container according
 * to @manager.
 *
 * See also clutter_actor_get_preferred_height()
 *
 * Since: 1.2
 */
void
clutter_layout_manager_get_preferred_height (ClutterLayoutManager *manager,
        ClutterContainer     *container,
        gfloat                for_width,
        gfloat               *min_height_p,
        gfloat               *nat_height_p)
{
    ClutterLayoutManagerClass *klass;

    g_return_if_fail (CLUTTER_IS_LAYOUT_MANAGER (manager));
    g_return_if_fail (CLUTTER_IS_CONTAINER (container));

    klass = CLUTTER_LAYOUT_MANAGER_GET_CLASS (manager);
    klass->get_preferred_height (manager, container, for_width,
                                 min_height_p,
                                 nat_height_p);
}
コード例 #12
0
/**
 * clutter_layout_manager_child_set_property:
 * @manager: a #ClutterLayoutManager
 * @container: a #ClutterContainer using @manager
 * @actor: a #ClutterActor child of @container
 * @property_name: the name of the property to set
 * @value: a #GValue with the value of the property to set
 *
 * Sets a property on the #ClutterLayoutMeta created by @manager and
 * attached to a child of @container
 *
 * Since: 1.2
 */
void
clutter_layout_manager_child_set_property (ClutterLayoutManager *manager,
        ClutterContainer     *container,
        ClutterActor         *actor,
        const gchar          *property_name,
        const GValue         *value)
{
    ClutterLayoutMeta *meta;
    GObjectClass *klass;
    GParamSpec *pspec;

    g_return_if_fail (CLUTTER_IS_LAYOUT_MANAGER (manager));
    g_return_if_fail (CLUTTER_IS_CONTAINER (container));
    g_return_if_fail (CLUTTER_IS_ACTOR (actor));
    g_return_if_fail (property_name != NULL);
    g_return_if_fail (value != NULL);

    meta = get_child_meta (manager, container, actor);
    if (meta == NULL)
    {
        g_warning ("Layout managers of type '%s' do not support "
                   "layout metadata",
                   g_type_name (G_OBJECT_TYPE (manager)));
        return;
    }

    klass = G_OBJECT_GET_CLASS (meta);

    pspec = g_object_class_find_property (klass, property_name);
    if (pspec == NULL)
    {
        g_warning ("%s: Layout managers of type '%s' have no layout "
                   "property named '%s'",
                   G_STRLOC, G_OBJECT_TYPE_NAME (manager), property_name);
        return;
    }

    layout_set_property_internal (manager, G_OBJECT (meta), pspec, value);
}
コード例 #13
0
/**
 * clutter_layout_manager_child_set:
 * @manager: a #ClutterLayoutManager
 * @container: a #ClutterContainer using @manager
 * @actor: a #ClutterActor child of @container
 * @first_property: the first property name
 * @Varargs: a list of property name and value pairs
 *
 * Sets a list of properties and their values on the #ClutterLayoutMeta
 * associated by @manager to a child of @container
 *
 * Languages bindings should use clutter_layout_manager_child_set_property()
 * instead
 *
 * Since: 1.2
 */
void
clutter_layout_manager_child_set (ClutterLayoutManager *manager,
                                  ClutterContainer     *container,
                                  ClutterActor         *actor,
                                  const gchar          *first_property,
                                  ...)
{
    ClutterLayoutMeta *meta;
    GObjectClass *klass;
    const gchar *pname;
    va_list var_args;

    g_return_if_fail (CLUTTER_IS_LAYOUT_MANAGER (manager));
    g_return_if_fail (CLUTTER_IS_CONTAINER (container));
    g_return_if_fail (CLUTTER_IS_ACTOR (actor));
    g_return_if_fail (first_property != NULL);

    meta = get_child_meta (manager, container, actor);
    if (meta == NULL)
    {
        g_warning ("Layout managers of type '%s' do not support "
                   "layout metadata",
                   g_type_name (G_OBJECT_TYPE (manager)));
        return;
    }

    klass = G_OBJECT_GET_CLASS (meta);

    va_start (var_args, first_property);

    pname = first_property;
    while (pname)
    {
        GValue value = { 0, };
        GParamSpec *pspec;
        gchar *error;
        gboolean res;

        pspec = g_object_class_find_property (klass, pname);
        if (pspec == NULL)
        {
            g_warning ("%s: Layout managers of type '%s' have no layout "
                       "property named '%s'",
                       G_STRLOC, G_OBJECT_TYPE_NAME (manager), pname);
            break;
        }

        G_VALUE_COLLECT_INIT (&value, G_PARAM_SPEC_VALUE_TYPE (pspec),
                              var_args, 0,
                              &error);

        if (error)
        {
            g_warning ("%s: %s", G_STRLOC, error);
            g_free (error);
            break;
        }

        res = layout_set_property_internal (manager, G_OBJECT (meta),
                                            pspec,
                                            &value);

        g_value_unset (&value);

        if (!res)
            break;

        pname = va_arg (var_args, gchar*);
    }

    va_end (var_args);
}