gtkscrolledwindow.h 8.62 KB
Newer Older
Cody Russell's avatar
Cody Russell committed
1
/* GTK - The GIMP Toolkit
Elliot Lee's avatar
Elliot Lee committed
2 3 4
 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
 *
 * This library is free software; you can redistribute it and/or
5
 * modify it under the terms of the GNU Lesser General Public
Elliot Lee's avatar
Elliot Lee committed
6 7 8 9 10 11
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12
 * Lesser General Public License for more details.
Elliot Lee's avatar
Elliot Lee committed
13
 *
14
 * You should have received a copy of the GNU Lesser General Public
Javier Jardón's avatar
Javier Jardón committed
15
 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
Elliot Lee's avatar
Elliot Lee committed
16
 */
17 18

/*
19
 * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
20 21
 * file for a list of people on the GTK+ Team.  See the ChangeLog
 * files for a list of changes.  These files are distributed with
22
 * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
23 24
 */

25 26 27
#ifndef __GTK_SCROLLED_WINDOW_H__
#define __GTK_SCROLLED_WINDOW_H__

28
#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
29 30 31
#error "Only <gtk/gtk.h> can be included directly."
#endif

32
#include <gtk/gtkbin.h>
Elliot Lee's avatar
Elliot Lee committed
33

34
G_BEGIN_DECLS
Elliot Lee's avatar
Elliot Lee committed
35 36


37
#define GTK_TYPE_SCROLLED_WINDOW            (gtk_scrolled_window_get_type ())
Manish Singh's avatar
Manish Singh committed
38 39 40 41 42
#define GTK_SCROLLED_WINDOW(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_SCROLLED_WINDOW, GtkScrolledWindow))
#define GTK_SCROLLED_WINDOW_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_SCROLLED_WINDOW, GtkScrolledWindowClass))
#define GTK_IS_SCROLLED_WINDOW(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_SCROLLED_WINDOW))
#define GTK_IS_SCROLLED_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_SCROLLED_WINDOW))
#define GTK_SCROLLED_WINDOW_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_SCROLLED_WINDOW, GtkScrolledWindowClass))
Tim Janik's avatar
Tim Janik committed
43

Elliot Lee's avatar
Elliot Lee committed
44

45 46 47
typedef struct _GtkScrolledWindow              GtkScrolledWindow;
typedef struct _GtkScrolledWindowPrivate       GtkScrolledWindowPrivate;
typedef struct _GtkScrolledWindowClass         GtkScrolledWindowClass;
Elliot Lee's avatar
Elliot Lee committed
48 49 50

struct _GtkScrolledWindow
{
51
  GtkBin container;
Elliot Lee's avatar
Elliot Lee committed
52

53
  GtkScrolledWindowPrivate *priv;
Elliot Lee's avatar
Elliot Lee committed
54 55
};

56 57 58 59 60 61 62 63 64
/**
 * GtkScrolledWindowClass:
 * @parent_class: The parent class.
 * @scrollbar_spacing: 
 * @scroll_child: Keybinding signal which gets emitted when a
 *    keybinding that scrolls is pressed.
 * @move_focus_out: Keybinding signal which gets emitted when focus is
 *    moved away from the scrolled window by a keybinding.
 */
Elliot Lee's avatar
Elliot Lee committed
65 66
struct _GtkScrolledWindowClass
{
67
  GtkBinClass parent_class;
68

69
  gint scrollbar_spacing;
70

71 72
  /*< public >*/

73 74 75 76 77 78 79
  /* Action signals for keybindings. Do not connect to these signals
   */

  /* Unfortunately, GtkScrollType is deficient in that there is
   * no horizontal/vertical variants for GTK_SCROLL_START/END,
   * so we have to add an additional boolean flag.
   */
80 81 82
  gboolean (*scroll_child) (GtkScrolledWindow *scrolled_window,
	  		    GtkScrollType      scroll,
			    gboolean           horizontal);
83 84 85

  void (* move_focus_out) (GtkScrolledWindow *scrolled_window,
			   GtkDirectionType   direction);
86

87 88
  /*< private >*/

89 90 91 92 93
  /* Padding for future expansion */
  void (*_gtk_reserved1) (void);
  void (*_gtk_reserved2) (void);
  void (*_gtk_reserved3) (void);
  void (*_gtk_reserved4) (void);
Elliot Lee's avatar
Elliot Lee committed
94 95 96
};


Matthias Clasen's avatar
Matthias Clasen committed
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
/**
 * GtkCornerType:
 * @GTK_CORNER_TOP_LEFT: Place the scrollbars on the right and bottom of the
 *  widget (default behaviour).
 * @GTK_CORNER_BOTTOM_LEFT: Place the scrollbars on the top and right of the
 *  widget.
 * @GTK_CORNER_TOP_RIGHT: Place the scrollbars on the left and bottom of the
 *  widget.
 * @GTK_CORNER_BOTTOM_RIGHT: Place the scrollbars on the top and left of the
 *  widget.
 *
 * Specifies which corner a child widget should be placed in when packed into
 * a #GtkScrolledWindow. This is effectively the opposite of where the scroll
 * bars are placed.
 */
typedef enum
{
  GTK_CORNER_TOP_LEFT,
  GTK_CORNER_BOTTOM_LEFT,
  GTK_CORNER_TOP_RIGHT,
  GTK_CORNER_BOTTOM_RIGHT
} GtkCornerType;


/**
 * GtkPolicyType:
123 124 125 126 127 128
 * @GTK_POLICY_ALWAYS: The scrollbar is always visible. The view size is
 *  independent of the content.
 * @GTK_POLICY_AUTOMATIC: The scrollbar will appear and disappear as necessary.
 *  For example, when all of a #GtkTreeView can not be seen.
 * @GTK_POLICY_NEVER: The scrollbar should never appear. In this mode the
 *  content determines the size.
129 130 131
 * @GTK_POLICY_EXTERNAL: Don't show a scrollbar, but don't force the
 *  size to follow the content. This can be used e.g. to make multiple
 *  scrolled windows share a scrollbar. Since: 3.16
Matthias Clasen's avatar
Matthias Clasen committed
132
 *
133 134
 * Determines how the size should be computed to achieve the one of the
 * visibility mode for the scrollbars.
Matthias Clasen's avatar
Matthias Clasen committed
135 136 137 138 139
 */
typedef enum
{
  GTK_POLICY_ALWAYS,
  GTK_POLICY_AUTOMATIC,
140 141
  GTK_POLICY_NEVER,
  GTK_POLICY_EXTERNAL
Matthias Clasen's avatar
Matthias Clasen committed
142 143 144
} GtkPolicyType;


145
GDK_AVAILABLE_IN_ALL
Manish Singh's avatar
Manish Singh committed
146
GType          gtk_scrolled_window_get_type          (void) G_GNUC_CONST;
147
GDK_AVAILABLE_IN_ALL
148 149
GtkWidget*     gtk_scrolled_window_new               (GtkAdjustment     *hadjustment,
						      GtkAdjustment     *vadjustment);
150
GDK_AVAILABLE_IN_ALL
151 152
void           gtk_scrolled_window_set_hadjustment   (GtkScrolledWindow *scrolled_window,
						      GtkAdjustment     *hadjustment);
153
GDK_AVAILABLE_IN_ALL
154
void           gtk_scrolled_window_set_vadjustment   (GtkScrolledWindow *scrolled_window,
155
						      GtkAdjustment     *vadjustment);
156
GDK_AVAILABLE_IN_ALL
157
GtkAdjustment* gtk_scrolled_window_get_hadjustment   (GtkScrolledWindow *scrolled_window);
158
GDK_AVAILABLE_IN_ALL
159
GtkAdjustment* gtk_scrolled_window_get_vadjustment   (GtkScrolledWindow *scrolled_window);
160
GDK_AVAILABLE_IN_ALL
161
GtkWidget*     gtk_scrolled_window_get_hscrollbar    (GtkScrolledWindow *scrolled_window);
162
GDK_AVAILABLE_IN_ALL
163
GtkWidget*     gtk_scrolled_window_get_vscrollbar    (GtkScrolledWindow *scrolled_window);
164
GDK_AVAILABLE_IN_ALL
165 166 167
void           gtk_scrolled_window_set_policy        (GtkScrolledWindow *scrolled_window,
						      GtkPolicyType      hscrollbar_policy,
						      GtkPolicyType      vscrollbar_policy);
168
GDK_AVAILABLE_IN_ALL
169 170
void           gtk_scrolled_window_get_policy        (GtkScrolledWindow *scrolled_window,
						      GtkPolicyType     *hscrollbar_policy,
171
						      GtkPolicyType     *vscrollbar_policy);
172
GDK_AVAILABLE_IN_ALL
173 174
void           gtk_scrolled_window_set_placement     (GtkScrolledWindow *scrolled_window,
						      GtkCornerType      window_placement);
175
GDK_AVAILABLE_IN_ALL
176 177
void           gtk_scrolled_window_unset_placement   (GtkScrolledWindow *scrolled_window);

178
GDK_AVAILABLE_IN_ALL
179
GtkCornerType  gtk_scrolled_window_get_placement     (GtkScrolledWindow *scrolled_window);
180
GDK_AVAILABLE_IN_ALL
181 182
void           gtk_scrolled_window_set_shadow_type   (GtkScrolledWindow *scrolled_window,
						      GtkShadowType      type);
183
GDK_AVAILABLE_IN_ALL
184
GtkShadowType  gtk_scrolled_window_get_shadow_type   (GtkScrolledWindow *scrolled_window);
185
GDK_DEPRECATED_IN_3_8_FOR(gtk_container_add)
186 187 188
void	       gtk_scrolled_window_add_with_viewport (GtkScrolledWindow *scrolled_window,
						      GtkWidget		*child);

189
GDK_AVAILABLE_IN_ALL
190
gint           gtk_scrolled_window_get_min_content_width  (GtkScrolledWindow *scrolled_window);
191
GDK_AVAILABLE_IN_ALL
192 193
void           gtk_scrolled_window_set_min_content_width  (GtkScrolledWindow *scrolled_window,
                                                           gint               width);
194
GDK_AVAILABLE_IN_ALL
195
gint           gtk_scrolled_window_get_min_content_height (GtkScrolledWindow *scrolled_window);
196
GDK_AVAILABLE_IN_ALL
197 198
void           gtk_scrolled_window_set_min_content_height (GtkScrolledWindow *scrolled_window,
                                                           gint               height);
199
GDK_AVAILABLE_IN_3_4
200 201
void           gtk_scrolled_window_set_kinetic_scrolling  (GtkScrolledWindow *scrolled_window,
                                                           gboolean           kinetic_scrolling);
202
GDK_AVAILABLE_IN_3_4
203
gboolean       gtk_scrolled_window_get_kinetic_scrolling  (GtkScrolledWindow *scrolled_window);
204 205

GDK_AVAILABLE_IN_3_4
206 207
void           gtk_scrolled_window_set_capture_button_press (GtkScrolledWindow *scrolled_window,
                                                             gboolean           capture_button_press);
208
GDK_AVAILABLE_IN_3_4
209 210 211 212 213 214 215
gboolean       gtk_scrolled_window_get_capture_button_press (GtkScrolledWindow *scrolled_window);

GDK_AVAILABLE_IN_3_16
void           gtk_scrolled_window_set_overlay_scrolling  (GtkScrolledWindow *scrolled_window,
                                                           gboolean           overlay_scrolling);
GDK_AVAILABLE_IN_3_16
gboolean       gtk_scrolled_window_get_overlay_scrolling (GtkScrolledWindow   *scrolled_window);
216

217 218

G_END_DECLS
Elliot Lee's avatar
Elliot Lee committed
219 220 221


#endif /* __GTK_SCROLLED_WINDOW_H__ */