2009-02-27 Alberto Garcia <agarcia@igalia.com>
[hildon] / src / hildon-pannable-area.h
index cebcf8b..b118385 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright (C) 2008 Nokia Corporation, all rights reserved.
  *
- * Contact: Karl Lattimer <karl.lattimer@nokia.com>
+ * Contact: Rodrigo Novo <rodrigo.novo@nokia.com>
  *
  * This widget is based on MokoFingerScroll from libmokoui
  * OpenMoko Application Framework UI Library
@@ -24,7 +24,6 @@
 #ifndef _HILDON_PANNABLE_AREA
 #define _HILDON_PANNABLE_AREA
 
-#include <glib-object.h>
 #include <gtk/gtk.h>
 
 G_BEGIN_DECLS
@@ -50,17 +49,66 @@ G_BEGIN_DECLS
                                                 (G_TYPE_INSTANCE_GET_CLASS ((obj), \
                                                 HILDON_TYPE_PANNABLE_AREA, HildonPannableAreaClass))
 
-GType
-hildon_pannable_area_mode_get_type              (void) G_GNUC_CONST;
+/**
+ * HildonPannableAreaMode:
+ * @HILDON_PANNABLE_AREA_MODE_PUSH: Areaing follows pointer
+ * @HILDON_PANNABLE_AREA_MODE_ACCEL: Areaing uses physics to "spin" the widget
+ * @HILDON_PANNABLE_AREA_MODE_AUTO: Automatically chooses between push and accel
+ * modes, depending on input.
+ *
+ * Used to change the behaviour of the pannable areaing
+ */
+typedef enum {
+  HILDON_PANNABLE_AREA_MODE_PUSH,
+  HILDON_PANNABLE_AREA_MODE_ACCEL,
+  HILDON_PANNABLE_AREA_MODE_AUTO
+} HildonPannableAreaMode;
 
-#define                                         HILDON_TYPE_PANNABLE_AREA_MODE \
-                                                (hildon_pannable_area_mode_get_type())
+/**
+ * HildonMovementMode:
+ * @HILDON_MOVEMENT_MODE_HORIZ:
+ * @HILDON_MOVEMENT_MODE_VERT:
+ * @HILDON_MOVEMENT_MODE_BOTH:
+ *
+ * Used to control the movement of the pannable, we can allow or
+ * disallow horizontal or vertical movement. This way the applications
+ * can control the movement using scroll_to and jump_to functions
+ */
+typedef enum {
+  HILDON_MOVEMENT_MODE_HORIZ = 1 << 1,
+  HILDON_MOVEMENT_MODE_VERT = 1 << 2,
+  HILDON_MOVEMENT_MODE_BOTH = 0x000006
+} HildonMovementMode;
 
-GType
-hildon_pannable_area_indicator_mode_get_type    (void) G_GNUC_CONST;
+/**
+ * HildonMovementDirection:
+ * @HILDON_MOVEMENT_UP:
+ * @HILDON_MOVEMENT_DOWN:
+ * @HILDON_MOVEMENT_LEFT:
+ * @HILDON_MOVEMENT_RIGHT:
+ *
+ * Used to point out the direction of the movement
+ */
+typedef enum {
+  HILDON_MOVEMENT_UP,
+  HILDON_MOVEMENT_DOWN,
+  HILDON_MOVEMENT_LEFT,
+  HILDON_MOVEMENT_RIGHT
+} HildonMovementDirection;
 
-#define                                         HILDON_TYPE_PANNABLE_AREA_INDICATOR_MODE \
-                                                (hildon_pannable_area_indicator_mode_get_type())
+/**
+ * HildonSizeRequestPolicy:
+ * @HILDON_SIZE_REQUEST_MINIMUM: The minimum size the widget could use
+ * to paint itself
+ * @HILDON_SIZE_REQUEST_CHILDREN: The minimum size of the children of
+ * the widget
+ *
+ * Used to control the size request policy of the widget
+ */
+typedef enum {
+  HILDON_SIZE_REQUEST_MINIMUM,
+  HILDON_SIZE_REQUEST_CHILDREN
+} HildonSizeRequestPolicy;
 
 /**
  * HildonPannableArea:
@@ -69,37 +117,27 @@ hildon_pannable_area_indicator_mode_get_type    (void) G_GNUC_CONST;
  */
 typedef struct                                  _HildonPannableArea HildonPannableArea;
 typedef struct                                  _HildonPannableAreaClass HildonPannableAreaClass;
+typedef struct                                  _HildonPannableAreaPrivate HildonPannableAreaPrivate;
 
 struct                                          _HildonPannableArea
 {
     GtkBin parent;
+
+    /* private */
+    HildonPannableAreaPrivate *priv;
 };
 
 struct                                          _HildonPannableAreaClass
 {
     GtkBinClass parent_class;
-};
-
-/**
- * HildonPannableAreaMode:
- * @HILDON_PANNABLE_AREA_MODE_PUSH: Areaing follows pointer
- * @HILDON_PANNABLE_AREA_MODE_ACCEL: Areaing uses physics to "spin" the widget
- * @HILDON_PANNABLE_AREA_MODE_AUTO: Automatically chooses between push and accel
- * modes, depending on input.
- *
- * Used to change the behaviour of the pannable areaing
- */
-typedef enum {
-    HILDON_PANNABLE_AREA_MODE_PUSH,
-    HILDON_PANNABLE_AREA_MODE_ACCEL,
-    HILDON_PANNABLE_AREA_MODE_AUTO
-} HildonPannableAreaMode;
 
-typedef enum {
-    HILDON_PANNABLE_AREA_INDICATOR_MODE_AUTO,
-    HILDON_PANNABLE_AREA_INDICATOR_MODE_SHOW,
-    HILDON_PANNABLE_AREA_INDICATOR_MODE_HIDE
-} HildonPannableAreaIndicatorMode;
+  void (* horizontal_movement) (HildonPannableArea *area,
+                                HildonMovementDirection direction,
+                                gdouble x, gdouble y);
+  void (* vertical_movement) (HildonPannableArea *area,
+                              HildonMovementDirection direction,
+                              gdouble x, gdouble y);
+};
 
 GType hildon_pannable_area_get_type             (void);
 
@@ -109,8 +147,22 @@ GtkWidget* hildon_pannable_area_new_full        (gint mode, gboolean enabled,
                                                  gdouble decel, guint sps);
 void hildon_pannable_area_add_with_viewport     (HildonPannableArea *area,
                                                  GtkWidget *child);
+void hildon_pannable_area_scroll_to             (HildonPannableArea *area,
+                                                const gint x, const gint y);
+void hildon_pannable_area_jump_to               (HildonPannableArea *area,
+                                                const gint x, const gint y);
+void hildon_pannable_area_scroll_to_child       (HildonPannableArea *area,
+                                                GtkWidget *child);
+void hildon_pannable_area_jump_to_child         (HildonPannableArea *area,
+                                                 GtkWidget *child);
+GtkWidget* hildon_pannable_get_child_widget_at  (HildonPannableArea *area,
+                                                 gdouble x, gdouble y);
+HildonSizeRequestPolicy hildon_pannable_area_get_size_request_policy (HildonPannableArea *area);
+void hildon_pannable_area_set_size_request_policy (HildonPannableArea *area,
+                                                   HildonSizeRequestPolicy size_request_policy);
+GtkAdjustment* hildon_pannable_area_get_hadjustment (HildonPannableArea *area);
+GtkAdjustment* hildon_pannable_area_get_vadjustment (HildonPannableArea *area);
 
 G_END_DECLS
 
 #endif /* _HILDON_PANNABLE_AREA */
-