Add ClutterGridLayout

ClutterGridLayout is port of GtkGrid to a Clutter layout manager. All
the logic is taken from gtkgrid.c, so all the credits should go to
Matthias Clasen for writing this nice piece of code.

ClutterGridLayout supports adding children with it's own methods
GridLayout.attach() and GridLayout.attach_next_to() as well as
Actor.add_child() and friends. The latter adds children in a similar
fashion to ClutterBoxLayout

https://bugzilla.gnome.org/show_bug.cgi?id=677372
This commit is contained in:
Bastian Winkler 2012-06-03 05:02:31 +02:00
parent 8ef55e4e98
commit 1eb869ec8f
9 changed files with 2440 additions and 0 deletions

View File

@ -86,6 +86,7 @@ source_h = \
$(srcdir)/clutter-fixed-layout.h \
$(srcdir)/clutter-flow-layout.h \
$(srcdir)/clutter-gesture-action.h \
$(srcdir)/clutter-grid-layout.h \
$(srcdir)/clutter-group.h \
$(srcdir)/clutter-image.h \
$(srcdir)/clutter-input-device.h \
@ -164,6 +165,7 @@ source_c = \
$(srcdir)/clutter-flatten-effect.c \
$(srcdir)/clutter-flow-layout.c \
$(srcdir)/clutter-gesture-action.c \
$(srcdir)/clutter-grid-layout.c \
$(srcdir)/clutter-image.c \
$(srcdir)/clutter-input-device.c \
$(srcdir)/clutter-interval.c \

View File

@ -1237,6 +1237,24 @@ typedef enum { /*< prefix=CLUTTER_SCROLL >*/
CLUTTER_SCROLL_BOTH = CLUTTER_SCROLL_HORIZONTALLY | CLUTTER_SCROLL_VERTICALLY
} ClutterScrollMode;
/**
* ClutterGridPosition:
* @CLUTTER_GRID_POSITION_LEFT: left position
* @CLUTTER_GRID_POSITION_RIGHT: right position
* @CLUTTER_GRID_POSITION_TOP: top position
* @CLUTTER_GRID_POSITION_BOTTOM: bottom position
*
* Grid position modes.
*
* Since: 1.12
*/
typedef enum {
CLUTTER_GRID_POSITION_LEFT,
CLUTTER_GRID_POSITION_RIGHT,
CLUTTER_GRID_POSITION_TOP,
CLUTTER_GRID_POSITION_BOTTOM
} ClutterGridPosition;
G_END_DECLS
#endif /* __CLUTTER_ENUMS_H__ */

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,161 @@
/*
* Clutter.
*
* An OpenGL based 'interactive canvas' library.
*
* Copyright (C) 2010 Red Hat, Inc.
* Copyright (C) 2012 Bastian Winkler <buz@netbuz.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
* Author:
* Bastian Winkler <buz@netbuz.org>
*
* Based on GtkGrid widget by:
* Matthias Clasen
*/
#if !defined(__CLUTTER_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
#error "Only <clutter/clutter.h> can be included directly."
#endif
#ifndef __CLUTTER_GRID_LAYOUT_H__
#define __CLUTTER_GRID_LAYOUT_H__
#include <clutter/clutter-layout-manager.h>
G_BEGIN_DECLS
#define CLUTTER_TYPE_GRID_LAYOUT (clutter_grid_layout_get_type ())
#define CLUTTER_GRID_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_GRID_LAYOUT, ClutterGridLayout))
#define CLUTTER_IS_GRID_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_GRID_LAYOUT))
#define CLUTTER_GRID_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_GRID_LAYOUT, ClutterGridLayoutClass))
#define CLUTTER_IS_GRID_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_GRID_LAYOUT))
#define CLUTTER_GRID_LAYOUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_GRID_LAYOUT, ClutterGridLayoutClass))
typedef struct _ClutterGridLayout ClutterGridLayout;
typedef struct _ClutterGridLayoutPrivate ClutterGridLayoutPrivate;
typedef struct _ClutterGridLayoutClass ClutterGridLayoutClass;
/**
* ClutterGridLayout:
*
* The #ClutterGridLayout structure contains only private data
* and should be accessed using the provided API
*
* Since: 1.12
*/
struct _ClutterGridLayout
{
/*< private >*/
ClutterLayoutManager parent_instance;
ClutterGridLayoutPrivate *priv;
};
/**
* ClutterGridLayoutClass:
*
* The #ClutterGridLayoutClass structure contains only private
* data and should be accessed using the provided API
*
* Since: 1.12
*/
struct _ClutterGridLayoutClass
{
/*< private >*/
ClutterLayoutManagerClass parent_class;
gpointer _padding[8];
};
CLUTTER_AVAILABLE_IN_1_12
GType clutter_grid_layout_get_type (void) G_GNUC_CONST;
CLUTTER_AVAILABLE_IN_1_12
ClutterLayoutManager * clutter_grid_layout_new (void);
CLUTTER_AVAILABLE_IN_1_12
void clutter_grid_layout_attach (ClutterGridLayout *layout,
ClutterActor *child,
gint left,
gint top,
gint width,
gint height);
CLUTTER_AVAILABLE_IN_1_12
void clutter_grid_layout_attach_next_to (ClutterGridLayout *layout,
ClutterActor *child,
ClutterActor *sibling,
ClutterGridPosition side,
gint width,
gint height);
CLUTTER_AVAILABLE_IN_1_12
ClutterActor * clutter_grid_layout_get_child_at (ClutterGridLayout *layout,
gint left,
gint top);
CLUTTER_AVAILABLE_IN_1_12
void clutter_grid_layout_insert_row (ClutterGridLayout *layout,
gint position);
CLUTTER_AVAILABLE_IN_1_12
void clutter_grid_layout_insert_column (ClutterGridLayout *layout,
gint position);
CLUTTER_AVAILABLE_IN_1_12
void clutter_grid_layout_insert_next_to (ClutterGridLayout *layout,
ClutterActor *sibling,
ClutterGridPosition side);
CLUTTER_AVAILABLE_IN_1_12
void clutter_grid_layout_set_orientation (ClutterGridLayout *layout,
ClutterOrientation orientation);
CLUTTER_AVAILABLE_IN_1_12
ClutterOrientation clutter_grid_layout_get_orientation (ClutterGridLayout *layout);
CLUTTER_AVAILABLE_IN_1_12
void clutter_grid_layout_set_column_spacing (ClutterGridLayout *layout,
guint spacing);
CLUTTER_AVAILABLE_IN_1_12
guint clutter_grid_layout_get_column_spacing (ClutterGridLayout *layout);
CLUTTER_AVAILABLE_IN_1_12
void clutter_grid_layout_set_row_spacing (ClutterGridLayout *layout,
guint spacing);
CLUTTER_AVAILABLE_IN_1_12
guint clutter_grid_layout_get_row_spacing (ClutterGridLayout *layout);
CLUTTER_AVAILABLE_IN_1_12
void clutter_grid_layout_set_column_homogeneous (ClutterGridLayout *layout,
gboolean homogeneous);
CLUTTER_AVAILABLE_IN_1_12
gboolean clutter_grid_layout_get_column_homogeneous (ClutterGridLayout *layout);
CLUTTER_AVAILABLE_IN_1_12
void clutter_grid_layout_set_row_homogeneous (ClutterGridLayout *layout,
gboolean homogeneous);
CLUTTER_AVAILABLE_IN_1_12
gboolean clutter_grid_layout_get_row_homogeneous (ClutterGridLayout *layout);
G_END_DECLS
#endif /* __CLUTTER_GRID_LAYOUT_H__ */

View File

@ -66,6 +66,7 @@
#include "clutter-fixed-layout.h"
#include "clutter-flow-layout.h"
#include "clutter-gesture-action.h"
#include "clutter-grid-layout.h"
#include "clutter-group.h"
#include "clutter-image.h"
#include "clutter-input-device.h"

View File

@ -745,6 +745,24 @@ clutter_grab_keyboard
clutter_grab_pointer
clutter_grab_pointer_for_device
clutter_gravity_get_type
clutter_grid_layout_get_type
clutter_grid_layout_new
clutter_grid_layout_attach
clutter_grid_layout_attach_next_to
clutter_grid_layout_get_child_at
clutter_grid_layout_insert_row
clutter_grid_layout_insert_column
clutter_grid_layout_insert_next_to
clutter_grid_layout_set_orientation
clutter_grid_layout_get_orientation
clutter_grid_layout_set_column_spacing
clutter_grid_layout_get_column_spacing
clutter_grid_layout_set_row_spacing
clutter_grid_layout_get_row_spacing
clutter_grid_layout_set_column_homogeneous
clutter_grid_layout_get_column_homogeneous
clutter_grid_layout_set_row_homogeneous
clutter_grid_layout_get_row_homogeneous
clutter_group_get_nth_child
clutter_group_get_n_children
clutter_group_get_type

View File

@ -86,6 +86,7 @@
<xi:include href="xml/clutter-flow-layout.xml"/>
<xi:include href="xml/clutter-box-layout.xml"/>
<xi:include href="xml/clutter-table-layout.xml"/>
<xi:include href="xml/clutter-grid-layout.xml"/>
</chapter>
<chapter>

View File

@ -2292,6 +2292,45 @@ ClutterFlowLayoutPrivate
clutter_flow_layout_get_type
</SECTION>
<SECTION>
<FILE>clutter-grid-layout</FILE>
<TITLE>ClutterGridLayout</TITLE>
ClutterGridPosition
ClutterGridLayout
ClutterGridLayoutClass
clutter_grid_layout_new
clutter_grid_layout_attach
clutter_grid_layout_attach_next_to
clutter_grid_layout_get_child_at
clutter_grid_layout_insert_column
clutter_grid_layout_insert_row
clutter_grid_layout_insert_next_to
<SUBSECTION>
clutter_grid_layout_set_orientation
clutter_grid_layout_get_orientation
clutter_grid_layout_set_column_homogeneous
clutter_grid_layout_get_column_homogeneous
clutter_grid_layout_set_row_homogeneous
clutter_grid_layout_get_row_homogeneous
clutter_grid_layout_set_column_spacing
clutter_grid_layout_get_column_spacing
clutter_grid_layout_set_row_spacing
clutter_grid_layout_get_row_spacing
<SUBSECTION Standard>
CLUTTER_TYPE_GRID_LAYOUT
CLUTTER_GRID_LAYOUT
CLUTTER_GRID_LAYOUT_CLASS
CLUTTER_GRID_LAYOUT_GET_CLASS
CLUTTER_IS_GRID_LAYOUT
CLUTTER_IS_GRID_LAYOUT_CLASS
<SUBSECTION Private>
ClutterGridLayoutPrivate
clutter_grid_layout_get_type
</SECTION>
<SECTION>
<TITLE>ClutterBoxLayout</TITLE>
<FILE>clutter-box-layout</FILE>

View File

@ -40,6 +40,7 @@ clutter_effect_get_type
clutter_fixed_layout_get_type
clutter_flow_layout_get_type
clutter_gesture_action_get_type
clutter_grid_layout_get_type
clutter_group_get_type
clutter_input_device_get_type
clutter_interval_get_type