Remove NbtkViewport from our tree
NbtkBoxLayout provides the basic functionality of 2-dimensional scrolling and we don't use NbtkViewport anywhere, so remove it. This avoids fixing NbtkViewport up for the interaction of scrolling and borders/padding, which would be a little involved and require a test program for NbtkViewport to be written.
This commit is contained in:
parent
2ac82da232
commit
1a4861ec4f
@ -81,7 +81,6 @@ nbtk_source_h = \
|
|||||||
nbtk/nbtk-texture-frame.h \
|
nbtk/nbtk-texture-frame.h \
|
||||||
nbtk/nbtk-tooltip.h \
|
nbtk/nbtk-tooltip.h \
|
||||||
nbtk/nbtk-types.h \
|
nbtk/nbtk-types.h \
|
||||||
nbtk/nbtk-viewport.h \
|
|
||||||
nbtk/nbtk-widget.h \
|
nbtk/nbtk-widget.h \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
@ -103,7 +102,6 @@ nbtk_source_c = \
|
|||||||
nbtk/nbtk-texture-cache.c \
|
nbtk/nbtk-texture-cache.c \
|
||||||
nbtk/nbtk-texture-frame.c \
|
nbtk/nbtk-texture-frame.c \
|
||||||
nbtk/nbtk-tooltip.c \
|
nbtk/nbtk-tooltip.c \
|
||||||
nbtk/nbtk-viewport.c \
|
|
||||||
nbtk/nbtk-widget.c \
|
nbtk/nbtk-widget.c \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
|
@ -1,668 +0,0 @@
|
|||||||
/*
|
|
||||||
* nbtk-viewport.c: Viewport actor
|
|
||||||
*
|
|
||||||
* Copyright 2008 OpenedHand
|
|
||||||
* Copyright 2009 Intel Corporation.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms and conditions of the GNU Lesser General Public License,
|
|
||||||
* version 2.1, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope 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 program; if not, write to the Free Software Foundation,
|
|
||||||
* Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
* Boston, MA 02111-1307, USA.
|
|
||||||
*
|
|
||||||
* Written by: Chris Lord <chris@openedhand.com>
|
|
||||||
* Port to Nbtk by: Robert Staudinger <robsta@openedhand.com>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
#include <clutter/clutter.h>
|
|
||||||
|
|
||||||
#include "nbtk-viewport.h"
|
|
||||||
#include "nbtk-adjustment.h"
|
|
||||||
#include "nbtk-scrollable.h"
|
|
||||||
#include "nbtk-private.h"
|
|
||||||
#include "nbtk-bin.h"
|
|
||||||
|
|
||||||
static void scrollable_interface_init (NbtkScrollableInterface *iface);
|
|
||||||
|
|
||||||
static void scrollable_set_adjustments (NbtkScrollable *scrollable,
|
|
||||||
NbtkAdjustment *hadjustment,
|
|
||||||
NbtkAdjustment *vadjustment);
|
|
||||||
|
|
||||||
static void scrollable_get_adjustments (NbtkScrollable *scrollable,
|
|
||||||
NbtkAdjustment **hadjustment,
|
|
||||||
NbtkAdjustment **vadjustment);
|
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_CODE (NbtkViewport, nbtk_viewport, NBTK_TYPE_BIN,
|
|
||||||
G_IMPLEMENT_INTERFACE (NBTK_TYPE_SCROLLABLE,
|
|
||||||
scrollable_interface_init))
|
|
||||||
|
|
||||||
#define VIEWPORT_PRIVATE(o) \
|
|
||||||
(G_TYPE_INSTANCE_GET_PRIVATE ((o), NBTK_TYPE_VIEWPORT, \
|
|
||||||
NbtkViewportPrivate))
|
|
||||||
|
|
||||||
struct _NbtkViewportPrivate
|
|
||||||
{
|
|
||||||
gfloat x;
|
|
||||||
gfloat y;
|
|
||||||
gfloat z;
|
|
||||||
|
|
||||||
NbtkAdjustment *hadjustment;
|
|
||||||
NbtkAdjustment *vadjustment;
|
|
||||||
|
|
||||||
gboolean sync_adjustments;
|
|
||||||
};
|
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
PROP_0,
|
|
||||||
|
|
||||||
PROP_X_ORIGIN,
|
|
||||||
PROP_Y_ORIGIN,
|
|
||||||
PROP_Z_ORIGIN,
|
|
||||||
PROP_HADJUST,
|
|
||||||
PROP_VADJUST,
|
|
||||||
PROP_SYNC_ADJUST
|
|
||||||
};
|
|
||||||
|
|
||||||
static void
|
|
||||||
nbtk_viewport_get_property (GObject *object,
|
|
||||||
guint prop_id,
|
|
||||||
GValue *value,
|
|
||||||
GParamSpec *pspec)
|
|
||||||
{
|
|
||||||
NbtkAdjustment *adjustment;
|
|
||||||
|
|
||||||
NbtkViewportPrivate *priv = NBTK_VIEWPORT (object)->priv;
|
|
||||||
|
|
||||||
switch (prop_id)
|
|
||||||
{
|
|
||||||
case PROP_X_ORIGIN:
|
|
||||||
g_value_set_int (value, (int) priv->x);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROP_Y_ORIGIN:
|
|
||||||
g_value_set_int (value, (int) priv->y);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROP_Z_ORIGIN:
|
|
||||||
g_value_set_int (value, (int) priv->z);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROP_HADJUST :
|
|
||||||
scrollable_get_adjustments (NBTK_SCROLLABLE (object), &adjustment, NULL);
|
|
||||||
g_value_set_object (value, adjustment);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROP_VADJUST :
|
|
||||||
scrollable_get_adjustments (NBTK_SCROLLABLE (object), NULL, &adjustment);
|
|
||||||
g_value_set_object (value, adjustment);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROP_SYNC_ADJUST :
|
|
||||||
g_value_set_boolean (value, priv->sync_adjustments);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
nbtk_viewport_set_property (GObject *object,
|
|
||||||
guint prop_id,
|
|
||||||
const GValue *value,
|
|
||||||
GParamSpec *pspec)
|
|
||||||
{
|
|
||||||
NbtkViewport *viewport = NBTK_VIEWPORT (object);
|
|
||||||
NbtkViewportPrivate *priv = viewport->priv;
|
|
||||||
|
|
||||||
switch (prop_id)
|
|
||||||
{
|
|
||||||
case PROP_X_ORIGIN:
|
|
||||||
nbtk_viewport_set_originu (viewport,
|
|
||||||
g_value_get_int (value),
|
|
||||||
priv->y,
|
|
||||||
priv->z);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROP_Y_ORIGIN:
|
|
||||||
nbtk_viewport_set_originu (viewport,
|
|
||||||
priv->x,
|
|
||||||
g_value_get_int (value),
|
|
||||||
priv->z);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROP_Z_ORIGIN:
|
|
||||||
nbtk_viewport_set_originu (viewport,
|
|
||||||
priv->x,
|
|
||||||
priv->y,
|
|
||||||
g_value_get_int (value));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROP_HADJUST :
|
|
||||||
scrollable_set_adjustments (NBTK_SCROLLABLE (object),
|
|
||||||
g_value_get_object (value),
|
|
||||||
priv->vadjustment);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROP_VADJUST :
|
|
||||||
scrollable_set_adjustments (NBTK_SCROLLABLE (object),
|
|
||||||
priv->hadjustment,
|
|
||||||
g_value_get_object (value));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROP_SYNC_ADJUST :
|
|
||||||
priv->sync_adjustments = g_value_get_boolean (value);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
nbtk_viewport_dispose (GObject *gobject)
|
|
||||||
{
|
|
||||||
NbtkViewportPrivate *priv = NBTK_VIEWPORT (gobject)->priv;
|
|
||||||
|
|
||||||
if (priv->hadjustment)
|
|
||||||
{
|
|
||||||
g_object_unref (priv->hadjustment);
|
|
||||||
priv->hadjustment = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (priv->vadjustment)
|
|
||||||
{
|
|
||||||
g_object_unref (priv->vadjustment);
|
|
||||||
priv->vadjustment = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (nbtk_viewport_parent_class)->dispose (gobject);
|
|
||||||
}
|
|
||||||
|
|
||||||
static ClutterActor *
|
|
||||||
get_child_and_natural_size (NbtkViewport *self,
|
|
||||||
gfloat *natural_width,
|
|
||||||
gfloat *natural_height)
|
|
||||||
{
|
|
||||||
/* NbtkBin is a single-child container,
|
|
||||||
* let it grow as big as it wants. */
|
|
||||||
ClutterActor *child;
|
|
||||||
ClutterRequestMode mode;
|
|
||||||
|
|
||||||
child = nbtk_bin_get_child (NBTK_BIN (self));
|
|
||||||
if (child)
|
|
||||||
{
|
|
||||||
|
|
||||||
g_object_get (G_OBJECT (child), "request-mode", &mode, NULL);
|
|
||||||
if (mode == CLUTTER_REQUEST_HEIGHT_FOR_WIDTH)
|
|
||||||
{
|
|
||||||
clutter_actor_get_preferred_width (child, -1, NULL,
|
|
||||||
natural_width);
|
|
||||||
clutter_actor_get_preferred_height (child, *natural_width, NULL,
|
|
||||||
natural_height);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
clutter_actor_get_preferred_height (child, -1, NULL,
|
|
||||||
natural_height);
|
|
||||||
clutter_actor_get_preferred_width (child, *natural_height, NULL,
|
|
||||||
natural_width);
|
|
||||||
}
|
|
||||||
|
|
||||||
return child;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
nbtk_viewport_paint (ClutterActor *self)
|
|
||||||
{
|
|
||||||
NbtkViewportPrivate *priv = NBTK_VIEWPORT (self)->priv;
|
|
||||||
|
|
||||||
cogl_push_matrix ();
|
|
||||||
|
|
||||||
cogl_translate ((int) priv->x * -1,
|
|
||||||
(int) priv->y * -1,
|
|
||||||
(int) priv->z * -1);
|
|
||||||
|
|
||||||
CLUTTER_ACTOR_CLASS (nbtk_viewport_parent_class)->paint (self);
|
|
||||||
|
|
||||||
cogl_pop_matrix ();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
nbtk_viewport_pick (ClutterActor *self,
|
|
||||||
const ClutterColor *color)
|
|
||||||
{
|
|
||||||
nbtk_viewport_paint (self);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
nbtk_viewport_allocate (ClutterActor *self,
|
|
||||||
const ClutterActorBox *box,
|
|
||||||
ClutterAllocationFlags flags)
|
|
||||||
{
|
|
||||||
NbtkViewportPrivate *priv = NBTK_VIEWPORT (self)->priv;
|
|
||||||
ClutterActor *child;
|
|
||||||
ClutterActorBox natural_box;
|
|
||||||
gfloat natural_width, natural_height;
|
|
||||||
gfloat available_width, available_height;
|
|
||||||
|
|
||||||
/* Chain up. */
|
|
||||||
CLUTTER_ACTOR_CLASS (nbtk_viewport_parent_class)->
|
|
||||||
allocate (self, box, flags);
|
|
||||||
|
|
||||||
available_width = box->x2 - box->x1;
|
|
||||||
available_height = box->y2 - box->y1;
|
|
||||||
|
|
||||||
natural_box.x1 = 0;
|
|
||||||
natural_box.y1 = 0;
|
|
||||||
|
|
||||||
if (NULL != (child = get_child_and_natural_size (NBTK_VIEWPORT (self),
|
|
||||||
&natural_width,
|
|
||||||
&natural_height)))
|
|
||||||
{
|
|
||||||
natural_box.x2 = natural_width;
|
|
||||||
natural_box.y2 = natural_height;
|
|
||||||
clutter_actor_allocate (child, &natural_box, flags);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
natural_box.x2 = available_width;
|
|
||||||
natural_box.y2 = available_height;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Refresh adjustments */
|
|
||||||
if (priv->sync_adjustments)
|
|
||||||
{
|
|
||||||
gdouble prev_value;
|
|
||||||
|
|
||||||
if (priv->hadjustment)
|
|
||||||
{
|
|
||||||
g_object_set (G_OBJECT (priv->hadjustment),
|
|
||||||
"lower", 0.0,
|
|
||||||
"page-size", available_width,
|
|
||||||
"upper", natural_width,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
/* Make sure value is clamped */
|
|
||||||
prev_value = nbtk_adjustment_get_value (priv->hadjustment);
|
|
||||||
nbtk_adjustment_set_value (priv->hadjustment, prev_value);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (priv->vadjustment)
|
|
||||||
{
|
|
||||||
g_object_set (G_OBJECT (priv->vadjustment),
|
|
||||||
"lower", 0.0,
|
|
||||||
"page-size", available_height,
|
|
||||||
"upper", natural_height,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
prev_value = nbtk_adjustment_get_value (priv->vadjustment);
|
|
||||||
nbtk_adjustment_set_value (priv->vadjustment, prev_value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
nbtk_viewport_class_init (NbtkViewportClass *klass)
|
|
||||||
{
|
|
||||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
|
||||||
ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
|
|
||||||
|
|
||||||
g_type_class_add_private (klass, sizeof (NbtkViewportPrivate));
|
|
||||||
|
|
||||||
gobject_class->get_property = nbtk_viewport_get_property;
|
|
||||||
gobject_class->set_property = nbtk_viewport_set_property;
|
|
||||||
gobject_class->dispose = nbtk_viewport_dispose;
|
|
||||||
|
|
||||||
actor_class->paint = nbtk_viewport_paint;
|
|
||||||
actor_class->pick = nbtk_viewport_pick;
|
|
||||||
actor_class->allocate = nbtk_viewport_allocate;
|
|
||||||
|
|
||||||
g_object_class_install_property (gobject_class,
|
|
||||||
PROP_X_ORIGIN,
|
|
||||||
g_param_spec_int ("x-origin",
|
|
||||||
"X Origin",
|
|
||||||
"Origin's X coordinate in pixels",
|
|
||||||
-G_MAXINT, G_MAXINT,
|
|
||||||
0,
|
|
||||||
G_PARAM_READWRITE));
|
|
||||||
|
|
||||||
g_object_class_install_property (gobject_class,
|
|
||||||
PROP_Y_ORIGIN,
|
|
||||||
g_param_spec_int ("y-origin",
|
|
||||||
"Y Origin",
|
|
||||||
"Origin's Y coordinate in pixels",
|
|
||||||
-G_MAXINT, G_MAXINT,
|
|
||||||
0,
|
|
||||||
G_PARAM_READWRITE));
|
|
||||||
|
|
||||||
g_object_class_install_property (gobject_class,
|
|
||||||
PROP_Z_ORIGIN,
|
|
||||||
g_param_spec_int ("z-origin",
|
|
||||||
"Z Origin",
|
|
||||||
"Origin's Z coordinate in pixels",
|
|
||||||
-G_MAXINT, G_MAXINT,
|
|
||||||
0,
|
|
||||||
G_PARAM_READWRITE));
|
|
||||||
|
|
||||||
g_object_class_install_property (gobject_class,
|
|
||||||
PROP_SYNC_ADJUST,
|
|
||||||
g_param_spec_boolean ("sync-adjustments",
|
|
||||||
"Synchronise "
|
|
||||||
"adjustments",
|
|
||||||
"Whether to "
|
|
||||||
"synchronise "
|
|
||||||
"adjustments with "
|
|
||||||
"viewport size",
|
|
||||||
TRUE,
|
|
||||||
G_PARAM_READWRITE));
|
|
||||||
|
|
||||||
g_object_class_override_property (gobject_class,
|
|
||||||
PROP_HADJUST,
|
|
||||||
"hadjustment");
|
|
||||||
|
|
||||||
g_object_class_override_property (gobject_class,
|
|
||||||
PROP_VADJUST,
|
|
||||||
"vadjustment");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
hadjustment_value_notify_cb (NbtkAdjustment *adjustment,
|
|
||||||
GParamSpec *pspec,
|
|
||||||
NbtkViewport *viewport)
|
|
||||||
{
|
|
||||||
NbtkViewportPrivate *priv = viewport->priv;
|
|
||||||
gdouble value;
|
|
||||||
|
|
||||||
value = nbtk_adjustment_get_value (adjustment);
|
|
||||||
|
|
||||||
nbtk_viewport_set_originu (viewport,
|
|
||||||
(float) (value),
|
|
||||||
priv->y,
|
|
||||||
priv->z);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
vadjustment_value_notify_cb (NbtkAdjustment *adjustment, GParamSpec *arg1,
|
|
||||||
NbtkViewport *viewport)
|
|
||||||
{
|
|
||||||
NbtkViewportPrivate *priv = viewport->priv;
|
|
||||||
gdouble value;
|
|
||||||
|
|
||||||
value = nbtk_adjustment_get_value (adjustment);
|
|
||||||
|
|
||||||
nbtk_viewport_set_originu (viewport,
|
|
||||||
priv->x,
|
|
||||||
(float) (value),
|
|
||||||
priv->z);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
scrollable_set_adjustments (NbtkScrollable *scrollable,
|
|
||||||
NbtkAdjustment *hadjustment,
|
|
||||||
NbtkAdjustment *vadjustment)
|
|
||||||
{
|
|
||||||
NbtkViewportPrivate *priv = NBTK_VIEWPORT (scrollable)->priv;
|
|
||||||
|
|
||||||
if (hadjustment != priv->hadjustment)
|
|
||||||
{
|
|
||||||
if (priv->hadjustment)
|
|
||||||
{
|
|
||||||
g_signal_handlers_disconnect_by_func (priv->hadjustment,
|
|
||||||
hadjustment_value_notify_cb,
|
|
||||||
scrollable);
|
|
||||||
g_object_unref (priv->hadjustment);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hadjustment)
|
|
||||||
{
|
|
||||||
g_object_ref (hadjustment);
|
|
||||||
g_signal_connect (hadjustment, "notify::value",
|
|
||||||
G_CALLBACK (hadjustment_value_notify_cb),
|
|
||||||
scrollable);
|
|
||||||
}
|
|
||||||
|
|
||||||
priv->hadjustment = hadjustment;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vadjustment != priv->vadjustment)
|
|
||||||
{
|
|
||||||
if (priv->vadjustment)
|
|
||||||
{
|
|
||||||
g_signal_handlers_disconnect_by_func (priv->vadjustment,
|
|
||||||
vadjustment_value_notify_cb,
|
|
||||||
scrollable);
|
|
||||||
g_object_unref (priv->vadjustment);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vadjustment)
|
|
||||||
{
|
|
||||||
g_object_ref (vadjustment);
|
|
||||||
g_signal_connect (vadjustment, "notify::value",
|
|
||||||
G_CALLBACK (vadjustment_value_notify_cb),
|
|
||||||
scrollable);
|
|
||||||
}
|
|
||||||
|
|
||||||
priv->vadjustment = vadjustment;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
scrollable_get_adjustments (NbtkScrollable *scrollable,
|
|
||||||
NbtkAdjustment **hadjustment,
|
|
||||||
NbtkAdjustment **vadjustment)
|
|
||||||
{
|
|
||||||
NbtkViewportPrivate *priv;
|
|
||||||
ClutterActor *actor, *stage;
|
|
||||||
|
|
||||||
g_return_if_fail (NBTK_IS_VIEWPORT (scrollable));
|
|
||||||
|
|
||||||
priv = ((NbtkViewport *) scrollable)->priv;
|
|
||||||
|
|
||||||
actor = CLUTTER_ACTOR (scrollable);
|
|
||||||
stage = clutter_actor_get_stage (actor);
|
|
||||||
if (G_UNLIKELY (stage == NULL))
|
|
||||||
stage = clutter_stage_get_default ();
|
|
||||||
|
|
||||||
if (hadjustment)
|
|
||||||
{
|
|
||||||
if (priv->hadjustment)
|
|
||||||
*hadjustment = priv->hadjustment;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
NbtkAdjustment *adjustment;
|
|
||||||
gdouble width, stage_width, increment;
|
|
||||||
|
|
||||||
width = clutter_actor_get_width (actor);
|
|
||||||
stage_width = clutter_actor_get_width (stage);
|
|
||||||
increment = MAX (1.0, MIN (stage_width, width));
|
|
||||||
|
|
||||||
adjustment = nbtk_adjustment_new (priv->x,
|
|
||||||
0,
|
|
||||||
width,
|
|
||||||
1.0,
|
|
||||||
increment,
|
|
||||||
increment);
|
|
||||||
|
|
||||||
scrollable_set_adjustments (scrollable,
|
|
||||||
adjustment,
|
|
||||||
priv->vadjustment);
|
|
||||||
|
|
||||||
*hadjustment = adjustment;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vadjustment)
|
|
||||||
{
|
|
||||||
if (priv->vadjustment)
|
|
||||||
*vadjustment = priv->vadjustment;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
NbtkAdjustment *adjustment;
|
|
||||||
gdouble height, stage_height, increment;
|
|
||||||
|
|
||||||
height = clutter_actor_get_height (actor);
|
|
||||||
stage_height = clutter_actor_get_height (stage);
|
|
||||||
increment = MAX (1.0, MIN (stage_height, height));
|
|
||||||
|
|
||||||
adjustment = nbtk_adjustment_new (priv->y,
|
|
||||||
0,
|
|
||||||
height,
|
|
||||||
1.0,
|
|
||||||
increment,
|
|
||||||
increment);
|
|
||||||
|
|
||||||
scrollable_set_adjustments (scrollable,
|
|
||||||
priv->hadjustment,
|
|
||||||
adjustment);
|
|
||||||
|
|
||||||
*vadjustment = adjustment;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
scrollable_interface_init (NbtkScrollableInterface *iface)
|
|
||||||
{
|
|
||||||
iface->set_adjustments = scrollable_set_adjustments;
|
|
||||||
iface->get_adjustments = scrollable_get_adjustments;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
nbtk_viewport_init (NbtkViewport *self)
|
|
||||||
{
|
|
||||||
self->priv = VIEWPORT_PRIVATE (self);
|
|
||||||
|
|
||||||
self->priv->sync_adjustments = TRUE;
|
|
||||||
|
|
||||||
g_object_set (G_OBJECT (self), "reactive", FALSE, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
NbtkWidget *
|
|
||||||
nbtk_viewport_new (void)
|
|
||||||
{
|
|
||||||
return g_object_new (NBTK_TYPE_VIEWPORT, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
nbtk_viewport_set_originu (NbtkViewport *viewport,
|
|
||||||
gfloat x,
|
|
||||||
gfloat y,
|
|
||||||
gfloat z)
|
|
||||||
{
|
|
||||||
NbtkViewportPrivate *priv;
|
|
||||||
|
|
||||||
g_return_if_fail (NBTK_IS_VIEWPORT (viewport));
|
|
||||||
|
|
||||||
priv = viewport->priv;
|
|
||||||
|
|
||||||
g_object_freeze_notify (G_OBJECT (viewport));
|
|
||||||
|
|
||||||
if (x != priv->x)
|
|
||||||
{
|
|
||||||
priv->x = x;
|
|
||||||
g_object_notify (G_OBJECT (viewport), "x-origin");
|
|
||||||
|
|
||||||
if (priv->hadjustment)
|
|
||||||
nbtk_adjustment_set_value (priv->hadjustment,
|
|
||||||
(float) (x));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (y != priv->y)
|
|
||||||
{
|
|
||||||
priv->y = y;
|
|
||||||
g_object_notify (G_OBJECT (viewport), "y-origin");
|
|
||||||
|
|
||||||
if (priv->vadjustment)
|
|
||||||
nbtk_adjustment_set_value (priv->vadjustment,
|
|
||||||
(float) (y));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (z != priv->z)
|
|
||||||
{
|
|
||||||
priv->z = z;
|
|
||||||
g_object_notify (G_OBJECT (viewport), "z-origin");
|
|
||||||
}
|
|
||||||
|
|
||||||
g_object_thaw_notify (G_OBJECT (viewport));
|
|
||||||
|
|
||||||
clutter_actor_queue_redraw (CLUTTER_ACTOR (viewport));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
nbtk_viewport_set_origin (NbtkViewport *viewport,
|
|
||||||
gint x,
|
|
||||||
gint y,
|
|
||||||
gint z)
|
|
||||||
{
|
|
||||||
g_return_if_fail (NBTK_IS_VIEWPORT (viewport));
|
|
||||||
|
|
||||||
nbtk_viewport_set_originu (viewport,
|
|
||||||
(float) (x),
|
|
||||||
(float) (y),
|
|
||||||
(float) (z));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
nbtk_viewport_get_originu (NbtkViewport *viewport,
|
|
||||||
gfloat *x,
|
|
||||||
gfloat *y,
|
|
||||||
gfloat *z)
|
|
||||||
{
|
|
||||||
NbtkViewportPrivate *priv;
|
|
||||||
|
|
||||||
g_return_if_fail (NBTK_IS_VIEWPORT (viewport));
|
|
||||||
|
|
||||||
priv = viewport->priv;
|
|
||||||
|
|
||||||
if (x)
|
|
||||||
*x = priv->x;
|
|
||||||
|
|
||||||
if (y)
|
|
||||||
*y = priv->y;
|
|
||||||
|
|
||||||
if (z)
|
|
||||||
*z = priv->z;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
nbtk_viewport_get_origin (NbtkViewport *viewport,
|
|
||||||
gint *x,
|
|
||||||
gint *y,
|
|
||||||
gint *z)
|
|
||||||
{
|
|
||||||
NbtkViewportPrivate *priv;
|
|
||||||
|
|
||||||
g_return_if_fail (NBTK_IS_VIEWPORT (viewport));
|
|
||||||
|
|
||||||
priv = viewport->priv;
|
|
||||||
|
|
||||||
if (x)
|
|
||||||
*x = (int) priv->x;
|
|
||||||
|
|
||||||
if (y)
|
|
||||||
*y = (int) priv->y;
|
|
||||||
|
|
||||||
if (z)
|
|
||||||
*z = (int) priv->z;
|
|
||||||
}
|
|
@ -1,94 +0,0 @@
|
|||||||
/*
|
|
||||||
* nbtk-viewport.h: Viewport actor
|
|
||||||
*
|
|
||||||
* Copyright 2008 OpenedHand
|
|
||||||
* Copyright 2009 Intel Corporation.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms and conditions of the GNU Lesser General Public License,
|
|
||||||
* version 2.1, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope 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 program; if not, write to the Free Software Foundation,
|
|
||||||
* Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
* Boston, MA 02111-1307, USA.
|
|
||||||
*
|
|
||||||
* Written by: Chris Lord <chris@openedhand.com>
|
|
||||||
* Port to Nbtk by: Robert Staudinger <robsta@openedhand.com>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined(NBTK_H_INSIDE) && !defined(NBTK_COMPILATION)
|
|
||||||
#error "Only <nbtk/nbtk.h> can be included directly.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __NBTK_VIEWPORT_H__
|
|
||||||
#define __NBTK_VIEWPORT_H__
|
|
||||||
|
|
||||||
#include <clutter/clutter.h>
|
|
||||||
#include <nbtk/nbtk-bin.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
|
||||||
|
|
||||||
#define NBTK_TYPE_VIEWPORT (nbtk_viewport_get_type())
|
|
||||||
#define NBTK_VIEWPORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NBTK_TYPE_VIEWPORT, NbtkViewport))
|
|
||||||
#define NBTK_IS_VIEWPORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NBTK_TYPE_VIEWPORT))
|
|
||||||
#define NBTK_VIEWPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NBTK_TYPE_VIEWPORT, NbtkViewportClass))
|
|
||||||
#define NBTK_IS_VIEWPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NBTK_TYPE_VIEWPORT))
|
|
||||||
#define NBTK_VIEWPORT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NBTK_TYPE_VIEWPORT, NbtkViewportClass))
|
|
||||||
|
|
||||||
typedef struct _NbtkViewport NbtkViewport;
|
|
||||||
typedef struct _NbtkViewportPrivate NbtkViewportPrivate;
|
|
||||||
typedef struct _NbtkViewportClass NbtkViewportClass;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* NbtkViewport:
|
|
||||||
*
|
|
||||||
* The contents of this structure are private and should only be accessed
|
|
||||||
* through the public API.
|
|
||||||
*/
|
|
||||||
struct _NbtkViewport
|
|
||||||
{
|
|
||||||
/*< private >*/
|
|
||||||
NbtkBin parent;
|
|
||||||
|
|
||||||
NbtkViewportPrivate *priv;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _NbtkViewportClass
|
|
||||||
{
|
|
||||||
NbtkBinClass parent_class;
|
|
||||||
};
|
|
||||||
|
|
||||||
GType nbtk_viewport_get_type (void) G_GNUC_CONST;
|
|
||||||
|
|
||||||
NbtkWidget * nbtk_viewport_new (void);
|
|
||||||
|
|
||||||
void nbtk_viewport_set_originu (NbtkViewport *viewport,
|
|
||||||
gfloat x,
|
|
||||||
gfloat y,
|
|
||||||
gfloat z);
|
|
||||||
|
|
||||||
void nbtk_viewport_set_origin (NbtkViewport *viewport,
|
|
||||||
gint x,
|
|
||||||
gint y,
|
|
||||||
gint z);
|
|
||||||
|
|
||||||
void nbtk_viewport_get_originu (NbtkViewport *viewport,
|
|
||||||
gfloat *x,
|
|
||||||
gfloat *y,
|
|
||||||
gfloat *z);
|
|
||||||
|
|
||||||
void nbtk_viewport_get_origin (NbtkViewport *viewport,
|
|
||||||
gint *x,
|
|
||||||
gint *y,
|
|
||||||
gint *z);
|
|
||||||
|
|
||||||
G_END_DECLS
|
|
||||||
|
|
||||||
#endif /* __NBTK_VIEWPORT_H__ */
|
|
Loading…
Reference in New Issue
Block a user