1/* GTK - The GIMP Toolkit
2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18/*
19 * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
20 * file for a list of people on the GTK+ Team. See the ChangeLog
21 * files for a list of changes. These files are distributed with
22 * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
23 */
24
25#ifndef __GTK_SCROLLED_WINDOW_H__
26#define __GTK_SCROLLED_WINDOW_H__
27
28#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
29#error "Only <gtk/gtk.h> can be included directly."
30#endif
31
32#include <gtk/gtkbin.h>
33
34G_BEGIN_DECLS
35
36
37#define GTK_TYPE_SCROLLED_WINDOW (gtk_scrolled_window_get_type ())
38#define GTK_SCROLLED_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_SCROLLED_WINDOW, GtkScrolledWindow))
39#define GTK_SCROLLED_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_SCROLLED_WINDOW, GtkScrolledWindowClass))
40#define GTK_IS_SCROLLED_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_SCROLLED_WINDOW))
41#define GTK_IS_SCROLLED_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_SCROLLED_WINDOW))
42#define GTK_SCROLLED_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_SCROLLED_WINDOW, GtkScrolledWindowClass))
43
44
45typedef struct _GtkScrolledWindow GtkScrolledWindow;
46typedef struct _GtkScrolledWindowPrivate GtkScrolledWindowPrivate;
47typedef struct _GtkScrolledWindowClass GtkScrolledWindowClass;
48
49struct _GtkScrolledWindow
50{
51 GtkBin container;
52
53 GtkScrolledWindowPrivate *priv;
54};
55
56/**
57 * GtkScrolledWindowClass:
58 * @parent_class: The parent class.
59 * @scrollbar_spacing:
60 * @scroll_child: Keybinding signal which gets emitted when a
61 * keybinding that scrolls is pressed.
62 * @move_focus_out: Keybinding signal which gets emitted when focus is
63 * moved away from the scrolled window by a keybinding.
64 */
65struct _GtkScrolledWindowClass
66{
67 GtkBinClass parent_class;
68
69 gint scrollbar_spacing;
70
71 /*< public >*/
72
73 /* Action signals for keybindings. Do not connect to these signals
74 */
75
76 /* Unfortunately, GtkScrollType is deficient in that there is
77 * no horizontal/vertical variants for GTK_SCROLL_START/END,
78 * so we have to add an additional boolean flag.
79 */
80 gboolean (*scroll_child) (GtkScrolledWindow *scrolled_window,
81 GtkScrollType scroll,
82 gboolean horizontal);
83
84 void (* move_focus_out) (GtkScrolledWindow *scrolled_window,
85 GtkDirectionType direction);
86
87 /*< private >*/
88
89 /* Padding for future expansion */
90 void (*_gtk_reserved1) (void);
91 void (*_gtk_reserved2) (void);
92 void (*_gtk_reserved3) (void);
93 void (*_gtk_reserved4) (void);
94};
95
96
97/**
98 * GtkCornerType:
99 * @GTK_CORNER_TOP_LEFT: Place the scrollbars on the right and bottom of the
100 * widget (default behaviour).
101 * @GTK_CORNER_BOTTOM_LEFT: Place the scrollbars on the top and right of the
102 * widget.
103 * @GTK_CORNER_TOP_RIGHT: Place the scrollbars on the left and bottom of the
104 * widget.
105 * @GTK_CORNER_BOTTOM_RIGHT: Place the scrollbars on the top and left of the
106 * widget.
107 *
108 * Specifies which corner a child widget should be placed in when packed into
109 * a #GtkScrolledWindow. This is effectively the opposite of where the scroll
110 * bars are placed.
111 */
112typedef enum
113{
114 GTK_CORNER_TOP_LEFT,
115 GTK_CORNER_BOTTOM_LEFT,
116 GTK_CORNER_TOP_RIGHT,
117 GTK_CORNER_BOTTOM_RIGHT
118} GtkCornerType;
119
120
121/**
122 * GtkPolicyType:
123 * @GTK_POLICY_ALWAYS: The scrollbar is always visible. The view size is
124 * independent of the content.
125 * @GTK_POLICY_AUTOMATIC: The scrollbar will appear and disappear as necessary.
126 * For example, when all of a #GtkTreeView can not be seen.
127 * @GTK_POLICY_NEVER: The scrollbar should never appear. In this mode the
128 * content determines the size.
129 * @GTK_POLICY_EXTERNAL: Don't show a scrollbar, but don't force the
130 * size to follow the content. This can be used e.g. to make multiple
131 * scrolled windows share a scrollbar. Since: 3.16
132 *
133 * Determines how the size should be computed to achieve the one of the
134 * visibility mode for the scrollbars.
135 */
136typedef enum
137{
138 GTK_POLICY_ALWAYS,
139 GTK_POLICY_AUTOMATIC,
140 GTK_POLICY_NEVER,
141 GTK_POLICY_EXTERNAL
142} GtkPolicyType;
143
144
145GDK_AVAILABLE_IN_ALL
146GType gtk_scrolled_window_get_type (void) G_GNUC_CONST;
147GDK_AVAILABLE_IN_ALL
148GtkWidget* gtk_scrolled_window_new (GtkAdjustment *hadjustment,
149 GtkAdjustment *vadjustment);
150GDK_AVAILABLE_IN_ALL
151void gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window,
152 GtkAdjustment *hadjustment);
153GDK_AVAILABLE_IN_ALL
154void gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window,
155 GtkAdjustment *vadjustment);
156GDK_AVAILABLE_IN_ALL
157GtkAdjustment* gtk_scrolled_window_get_hadjustment (GtkScrolledWindow *scrolled_window);
158GDK_AVAILABLE_IN_ALL
159GtkAdjustment* gtk_scrolled_window_get_vadjustment (GtkScrolledWindow *scrolled_window);
160GDK_AVAILABLE_IN_ALL
161GtkWidget* gtk_scrolled_window_get_hscrollbar (GtkScrolledWindow *scrolled_window);
162GDK_AVAILABLE_IN_ALL
163GtkWidget* gtk_scrolled_window_get_vscrollbar (GtkScrolledWindow *scrolled_window);
164GDK_AVAILABLE_IN_ALL
165void gtk_scrolled_window_set_policy (GtkScrolledWindow *scrolled_window,
166 GtkPolicyType hscrollbar_policy,
167 GtkPolicyType vscrollbar_policy);
168GDK_AVAILABLE_IN_ALL
169void gtk_scrolled_window_get_policy (GtkScrolledWindow *scrolled_window,
170 GtkPolicyType *hscrollbar_policy,
171 GtkPolicyType *vscrollbar_policy);
172GDK_AVAILABLE_IN_ALL
173void gtk_scrolled_window_set_placement (GtkScrolledWindow *scrolled_window,
174 GtkCornerType window_placement);
175GDK_AVAILABLE_IN_ALL
176void gtk_scrolled_window_unset_placement (GtkScrolledWindow *scrolled_window);
177
178GDK_AVAILABLE_IN_ALL
179GtkCornerType gtk_scrolled_window_get_placement (GtkScrolledWindow *scrolled_window);
180GDK_AVAILABLE_IN_ALL
181void gtk_scrolled_window_set_shadow_type (GtkScrolledWindow *scrolled_window,
182 GtkShadowType type);
183GDK_AVAILABLE_IN_ALL
184GtkShadowType gtk_scrolled_window_get_shadow_type (GtkScrolledWindow *scrolled_window);
185GDK_DEPRECATED_IN_3_8_FOR(gtk_container_add)
186void gtk_scrolled_window_add_with_viewport (GtkScrolledWindow *scrolled_window,
187 GtkWidget *child);
188
189GDK_AVAILABLE_IN_ALL
190gint gtk_scrolled_window_get_min_content_width (GtkScrolledWindow *scrolled_window);
191GDK_AVAILABLE_IN_ALL
192void gtk_scrolled_window_set_min_content_width (GtkScrolledWindow *scrolled_window,
193 gint width);
194GDK_AVAILABLE_IN_ALL
195gint gtk_scrolled_window_get_min_content_height (GtkScrolledWindow *scrolled_window);
196GDK_AVAILABLE_IN_ALL
197void gtk_scrolled_window_set_min_content_height (GtkScrolledWindow *scrolled_window,
198 gint height);
199GDK_AVAILABLE_IN_3_4
200void gtk_scrolled_window_set_kinetic_scrolling (GtkScrolledWindow *scrolled_window,
201 gboolean kinetic_scrolling);
202GDK_AVAILABLE_IN_3_4
203gboolean gtk_scrolled_window_get_kinetic_scrolling (GtkScrolledWindow *scrolled_window);
204
205GDK_AVAILABLE_IN_3_4
206void gtk_scrolled_window_set_capture_button_press (GtkScrolledWindow *scrolled_window,
207 gboolean capture_button_press);
208GDK_AVAILABLE_IN_3_4
209gboolean gtk_scrolled_window_get_capture_button_press (GtkScrolledWindow *scrolled_window);
210
211GDK_AVAILABLE_IN_3_16
212void gtk_scrolled_window_set_overlay_scrolling (GtkScrolledWindow *scrolled_window,
213 gboolean overlay_scrolling);
214GDK_AVAILABLE_IN_3_16
215gboolean gtk_scrolled_window_get_overlay_scrolling (GtkScrolledWindow *scrolled_window);
216
217GDK_AVAILABLE_IN_3_22
218void gtk_scrolled_window_set_max_content_width (GtkScrolledWindow *scrolled_window,
219 gint width);
220GDK_AVAILABLE_IN_3_22
221gint gtk_scrolled_window_get_max_content_width (GtkScrolledWindow *scrolled_window);
222
223GDK_AVAILABLE_IN_3_22
224void gtk_scrolled_window_set_max_content_height (GtkScrolledWindow *scrolled_window,
225 gint height);
226GDK_AVAILABLE_IN_3_22
227gint gtk_scrolled_window_get_max_content_height (GtkScrolledWindow *scrolled_window);
228
229GDK_AVAILABLE_IN_3_22
230void gtk_scrolled_window_set_propagate_natural_width (GtkScrolledWindow *scrolled_window,
231 gboolean propagate);
232GDK_AVAILABLE_IN_3_22
233gboolean gtk_scrolled_window_get_propagate_natural_width (GtkScrolledWindow *scrolled_window);
234
235GDK_AVAILABLE_IN_3_22
236void gtk_scrolled_window_set_propagate_natural_height (GtkScrolledWindow *scrolled_window,
237 gboolean propagate);
238GDK_AVAILABLE_IN_3_22
239gboolean gtk_scrolled_window_get_propagate_natural_height (GtkScrolledWindow *scrolled_window);
240
241G_END_DECLS
242
243
244#endif /* __GTK_SCROLLED_WINDOW_H__ */
245