* src/hildon-pannable-area.c: (hildon_pannable_area_refresh), (hildon_pannable_area_m...
[hildon] / src / hildon-pannable-area.h
1 /*
2  * This file is a part of hildon
3  *
4  * Copyright (C) 2008 Nokia Corporation, all rights reserved.
5  *
6  * Contact: Karl Lattimer <karl.lattimer@nokia.com>
7  *
8  * This widget is based on MokoFingerScroll from libmokoui
9  * OpenMoko Application Framework UI Library
10  * Authored by Chris Lord <chris@openedhand.com>
11  * Copyright (C) 2006-2007 OpenMoko Inc.
12  *
13  * This program is free software; you can redistribute it and/or modify
14  * it under the terms of the GNU Lesser Public License as published by
15  * the Free Software Foundation; version 2 of the license.
16  *
17  * This program is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20  * GNU Lesser Public License for more details.
21  *
22  */
23
24 #ifndef _HILDON_PANNABLE_AREA
25 #define _HILDON_PANNABLE_AREA
26
27 #include <gtk/gtk.h>
28
29 G_BEGIN_DECLS
30
31 #define                                         HILDON_TYPE_PANNABLE_AREA \
32                                                 hildon_pannable_area_get_type()
33
34 #define                                         HILDON_PANNABLE_AREA(obj) \
35                                                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
36                                                 HILDON_TYPE_PANNABLE_AREA, HildonPannableArea))
37
38 #define                                         HILDON_PANNABLE_AREA_CLASS(klass) \
39                                                 (G_TYPE_CHECK_CLASS_CAST ((klass), \
40                                                 HILDON_TYPE_PANNABLE_AREA, HildonPannableAreaClass))
41
42 #define                                         HILDON_IS_PANNABLE_AREA(obj) \
43                                                 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), HILDON_TYPE_PANNABLE_AREA))
44
45 #define                                         HILDON_IS_PANNABLE_AREA_CLASS(klass) \
46                                                 (G_TYPE_CHECK_CLASS_TYPE ((klass), HILDON_TYPE_PANNABLE_AREA))
47
48 #define                                         HILDON_PANNABLE_AREA_GET_CLASS(obj) \
49                                                 (G_TYPE_INSTANCE_GET_CLASS ((obj), \
50                                                 HILDON_TYPE_PANNABLE_AREA, HildonPannableAreaClass))
51
52 /**
53  * HildonPannableAreaMode:
54  * @HILDON_PANNABLE_AREA_MODE_PUSH: Areaing follows pointer
55  * @HILDON_PANNABLE_AREA_MODE_ACCEL: Areaing uses physics to "spin" the widget
56  * @HILDON_PANNABLE_AREA_MODE_AUTO: Automatically chooses between push and accel
57  * modes, depending on input.
58  *
59  * Used to change the behaviour of the pannable areaing
60  */
61 typedef enum {
62   HILDON_PANNABLE_AREA_MODE_PUSH,
63   HILDON_PANNABLE_AREA_MODE_ACCEL,
64   HILDON_PANNABLE_AREA_MODE_AUTO
65 } HildonPannableAreaMode;
66
67 /**
68  * HildonMovementMode:
69  * @HILDON_MOVEMENT_MODE_HORIZ:
70  * @HILDON_MOVEMENT_MODE_VERT:
71  * @HILDON_MOVEMENT_MODE_BOTH:
72  *
73  * Used to control the movement of the pannable, we can allow or
74  * disallow horizontal or vertical movement. This way the applications
75  * can control the movement using scroll_to and jump_to functions
76  */
77 typedef enum {
78   HILDON_MOVEMENT_MODE_HORIZ = 1 << 1,
79   HILDON_MOVEMENT_MODE_VERT = 1 << 2,
80   HILDON_MOVEMENT_MODE_BOTH = 0x000006
81 } HildonMovementMode;
82
83 /**
84  * HildonMovementDirection:
85  * @HILDON_MOVEMENT_UP:
86  * @HILDON_MOVEMENT_DOWN:
87  * @HILDON_MOVEMENT_LEFT:
88  * @HILDON_MOVEMENT_RIGHT:
89  *
90  * Used to point out the direction of the movement
91  */
92 typedef enum {
93   HILDON_MOVEMENT_UP,
94   HILDON_MOVEMENT_DOWN,
95   HILDON_MOVEMENT_LEFT,
96   HILDON_MOVEMENT_RIGHT
97 } HildonMovementDirection;
98
99 /**
100  * HildonPannableArea:
101  *
102  * HildonPannableArea has no publicly accessible fields
103  */
104 typedef struct                                  _HildonPannableArea HildonPannableArea;
105 typedef struct                                  _HildonPannableAreaClass HildonPannableAreaClass;
106
107 struct                                          _HildonPannableArea
108 {
109     GtkBin parent;
110 };
111
112 struct                                          _HildonPannableAreaClass
113 {
114     GtkBinClass parent_class;
115
116   void (* horizontal_movement) (HildonPannableArea *area,
117                                 HildonMovementDirection direction,
118                                 gdouble x, gdouble y);
119   void (* vertical_movement) (HildonPannableArea *area,
120                               HildonMovementDirection direction,
121                               gdouble x, gdouble y);
122 };
123
124 GType hildon_pannable_area_get_type             (void);
125
126 GtkWidget* hildon_pannable_area_new             (void);
127 GtkWidget* hildon_pannable_area_new_full        (gint mode, gboolean enabled,
128                                                  gdouble vel_min, gdouble vel_max,
129                                                  gdouble decel, guint sps);
130 void hildon_pannable_area_add_with_viewport     (HildonPannableArea *area,
131                                                  GtkWidget *child);
132 void hildon_pannable_area_scroll_to             (HildonPannableArea *area,
133                                                  const gint x, const gint y);
134 void hildon_pannable_area_jump_to               (HildonPannableArea *area,
135                                                  const gint x, const gint y);
136 void hildon_pannable_area_scroll_to_child       (HildonPannableArea *area,
137                                                  GtkWidget *child);
138 void hildon_pannable_area_jump_to_child         (HildonPannableArea *area,
139                                                  GtkWidget *child);
140 GtkWidget* hildon_pannable_get_child_widget_at  (HildonPannableArea *area,
141                                                  gdouble x, gdouble y);
142
143 G_END_DECLS
144
145 #endif /* _HILDON_PANNABLE_AREA */