#define gtk_adjustment_get_page_size(a) ((a)->page_size)
#endif
-#define GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_CLUTTER_VIEWPORT, GtkClutterViewportPrivate))
+#define GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_CLUTTER_TYPE_VIEWPORT, GtkClutterViewportPrivate))
#define I_(str) (g_intern_static_string ((str)))
CLUTTER_TYPE_ACTOR,
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTAINER,
clutter_container_iface_init)
- G_IMPLEMENT_INTERFACE (GTK_TYPE_CLUTTER_SCROLLABLE,
+ G_IMPLEMENT_INTERFACE (GTK_CLUTTER_TYPE_SCROLLABLE,
gtk_clutter_scrollable_iface_init));
struct _GtkClutterViewportPrivate
{
GtkAdjustment *h_adjust = priv->h_adjustment;
GtkAdjustment *v_adjust = priv->v_adjustment;
- ClutterUnit new_x, new_y;
+ gfloat new_x, new_y;
- new_x = CLUTTER_UNITS_FROM_FLOAT (gtk_adjustment_get_value (h_adjust));
- new_y = CLUTTER_UNITS_FROM_FLOAT (gtk_adjustment_get_value (v_adjust));
+ new_x = gtk_adjustment_get_value (h_adjust);
+ new_y = gtk_adjustment_get_value (v_adjust);
/* change the origin and queue a relayout */
if (new_x != priv->origin.x || new_y != priv->origin.y)
}
static gboolean
-viewport_set_hadjustment_values (GtkClutterViewport *viewport)
+viewport_set_hadjustment_values (GtkClutterViewport *viewport,
+ gfloat width)
{
GtkClutterViewportPrivate *priv = viewport->priv;
GtkAdjustment *h_adjust = priv->h_adjustment;
- guint width;
-
- width = clutter_actor_get_width (CLUTTER_ACTOR (viewport));
gtk_adjustment_set_page_size (h_adjust, width);
gtk_adjustment_set_step_increment (h_adjust, width * 0.1);
if (priv->child && CLUTTER_ACTOR_IS_VISIBLE (priv->child))
{
- ClutterUnit natural_width;
+ gfloat natural_width;
clutter_actor_get_preferred_size (priv->child,
NULL, NULL,
&natural_width, NULL);
- gtk_adjustment_set_upper (h_adjust,
- MAX (CLUTTER_UNITS_TO_DEVICE (natural_width),
- width));
+ gtk_adjustment_set_upper (h_adjust, MAX (natural_width, width));
}
else
gtk_adjustment_set_upper (h_adjust, width);
}
static gboolean
-viewport_set_vadjustment_values (GtkClutterViewport *viewport)
+viewport_set_vadjustment_values (GtkClutterViewport *viewport,
+ gfloat height)
{
GtkClutterViewportPrivate *priv = viewport->priv;
GtkAdjustment *v_adjust = priv->v_adjustment;
- guint height;
height = clutter_actor_get_height (CLUTTER_ACTOR (viewport));
if (priv->child && CLUTTER_ACTOR_IS_VISIBLE (priv->child))
{
- ClutterUnit natural_height;
+ gfloat natural_height;
clutter_actor_get_preferred_size (priv->child,
NULL, NULL,
NULL, &natural_height);
- gtk_adjustment_set_upper (v_adjust,
- MAX (CLUTTER_UNITS_TO_DEVICE (natural_height),
- height));
+ gtk_adjustment_set_upper (v_adjust, MAX (natural_height, height));
}
else
gtk_adjustment_set_upper (v_adjust, height);
GtkClutterViewportPrivate *priv = viewport->priv;
GtkAdjustment **adj_p;
gboolean value_changed = FALSE;
+ gfloat width, height;
adj_p = (orientation == GTK_ORIENTATION_HORIZONTAL) ? &priv->h_adjustment
: &priv->v_adjustment;
disconnect_adjustment (viewport, orientation);
*adj_p = g_object_ref_sink (adjustment);
+ clutter_actor_get_size (CLUTTER_ACTOR (viewport), &width, &height);
+
if (orientation == GTK_ORIENTATION_HORIZONTAL)
- value_changed = viewport_set_hadjustment_values (viewport);
+ value_changed = viewport_set_hadjustment_values (viewport, width);
else
- value_changed = viewport_set_vadjustment_values (viewport);
+ value_changed = viewport_set_vadjustment_values (viewport, height);
g_signal_connect (adjustment, "value-changed",
G_CALLBACK (viewport_adjustment_value_changed),
static void
gtk_clutter_viewport_get_preferred_width (ClutterActor *actor,
- ClutterUnit for_height,
- ClutterUnit *min_width_p,
- ClutterUnit *natural_width_p)
+ gfloat for_height,
+ gfloat *min_width_p,
+ gfloat *natural_width_p)
{
GtkClutterViewportPrivate *priv = GTK_CLUTTER_VIEWPORT (actor)->priv;
+ /* we don't have a minimum size */
+ if (min_width_p)
+ *min_width_p = 0;
+
/* if we have a child, we want to be as big as the child
* wishes to be; otherwise, we don't have a preferred width
*/
if (priv->child)
clutter_actor_get_preferred_width (priv->child, for_height,
- min_width_p,
+ NULL,
natural_width_p);
else
{
- if (min_width_p)
- *min_width_p = 0;
-
if (natural_width_p)
*natural_width_p = 0;
}
static void
gtk_clutter_viewport_get_preferred_height (ClutterActor *actor,
- ClutterUnit for_width,
- ClutterUnit *min_height_p,
- ClutterUnit *natural_height_p)
+ gfloat for_width,
+ gfloat *min_height_p,
+ gfloat *natural_height_p)
{
GtkClutterViewportPrivate *priv = GTK_CLUTTER_VIEWPORT (actor)->priv;
+ /* we don't have a minimum size */
+ if (min_height_p)
+ *min_height_p = 0;
+
/* if we have a child, we want to be as big as the child
* wishes to be; otherwise, we don't have a preferred height
*/
if (priv->child)
clutter_actor_get_preferred_height (priv->child, for_width,
- min_height_p,
+ NULL,
natural_height_p);
else
{
- if (min_height_p)
- *min_height_p = 0;
-
if (natural_height_p)
*natural_height_p = 0;
}
}
static void
-gtk_clutter_viewport_allocate (ClutterActor *actor,
- const ClutterActorBox *box,
- gboolean origin_changed)
+gtk_clutter_viewport_allocate (ClutterActor *actor,
+ const ClutterActorBox *box,
+ ClutterAllocationFlags flags)
{
GtkClutterViewport *viewport = GTK_CLUTTER_VIEWPORT (actor);
GtkClutterViewportPrivate *priv = viewport->priv;
ClutterActorClass *parent_class;
gboolean h_adjustment_value_changed, v_adjustment_value_changed;
+ gfloat width, height;
parent_class = CLUTTER_ACTOR_CLASS (gtk_clutter_viewport_parent_class);
- parent_class->allocate (actor, box, origin_changed);
+ parent_class->allocate (actor, box, flags);
- h_adjustment_value_changed = viewport_set_hadjustment_values (viewport);
- v_adjustment_value_changed = viewport_set_vadjustment_values (viewport);
+ width = box->x2 - box->x1;
+ height = box->y2 - box->y1;
- if (priv->child)
+ h_adjustment_value_changed =
+ viewport_set_hadjustment_values (viewport, width);
+ v_adjustment_value_changed =
+ viewport_set_vadjustment_values (viewport, height);
+
+ if (priv->child && CLUTTER_ACTOR_IS_VISIBLE (priv->child))
{
ClutterActorBox child_allocation = { 0, };
- ClutterUnit alloc_width, alloc_height;
+ gfloat alloc_width, alloc_height;
/* a viewport is a boundless actor which can contain a child
* without constraints; hence, we give any child exactly the
NULL, NULL,
&alloc_width, &alloc_height);
- child_allocation.x1 = clutter_actor_get_xu (priv->child);
- child_allocation.y1 = clutter_actor_get_yu (priv->child);
+ child_allocation.x1 = clutter_actor_get_x (priv->child);
+ child_allocation.y1 = clutter_actor_get_y (priv->child);
child_allocation.x2 = child_allocation.x1 + alloc_width;
child_allocation.y2 = child_allocation.y1 + alloc_height;
- clutter_actor_allocate (priv->child, &child_allocation, origin_changed);
+ clutter_actor_allocate (priv->child, &child_allocation, flags);
}
gtk_adjustment_changed (priv->h_adjustment);
/* translate the paint environment by the same amount
* defined by the origin value
*/
- cogl_translatex (CLUTTER_UNITS_TO_FIXED (priv->origin.x) * -1,
- CLUTTER_UNITS_TO_FIXED (priv->origin.y) * -1,
- CLUTTER_UNITS_TO_FIXED (priv->origin.z) * -1);
+ cogl_translate (priv->origin.x * -1,
+ priv->origin.y * -1,
+ priv->origin.z * -1);
/* the child will be painted in the new frame of reference */
if (priv->child && CLUTTER_ACTOR_IS_VISIBLE (priv->child))
gtk_clutter_viewport_new (GtkAdjustment *h_adjust,
GtkAdjustment *v_adjust)
{
- return g_object_new (GTK_TYPE_CLUTTER_VIEWPORT,
+ return g_object_new (GTK_CLUTTER_TYPE_VIEWPORT,
"hadjustment", h_adjust,
"vadjustment", v_adjust,
NULL);
*/
void
gtk_clutter_viewport_get_origin (GtkClutterViewport *viewport,
- gint *x,
- gint *y,
- gint *z)
+ gfloat *x,
+ gfloat *y,
+ gfloat *z)
{
GtkClutterViewportPrivate *priv;
- g_return_if_fail (GTK_IS_CLUTTER_VIEWPORT (viewport));
+ g_return_if_fail (GTK_CLUTTER_IS_VIEWPORT (viewport));
priv = viewport->priv;
if (x)
- *x = CLUTTER_UNITS_TO_DEVICE (priv->origin.x);
+ *x = priv->origin.x;
if (y)
- *y = CLUTTER_UNITS_TO_DEVICE (priv->origin.y);
+ *y = priv->origin.y;
if (z)
- *z = CLUTTER_UNITS_TO_DEVICE (priv->origin.z);
-}
-
-/**
- * gtk_clutter_viewport_get_originu:
- * @viewport: a #GtkClutterViewport
- * @origin: a #ClutterVertex
- *
- * Retrieves the current translation factor ("origin") used
- * when displaying the child of @viewport.
- *
- * This function is the units-based version of
- * gtk_clutter_viewport_get_origin().
- *
- * Since: 1.0
- */
-void
-gtk_clutter_viewport_get_originu (GtkClutterViewport *viewport,
- ClutterVertex *origin)
-{
- g_return_if_fail (GTK_IS_CLUTTER_VIEWPORT (viewport));
-
- *origin = viewport->priv->origin;
+ *z = priv->origin.z;
}