]> Pileus Git - ~andy/gtk/blob - gtk/gtktextview.h
fix indentation
[~andy/gtk] / gtk / gtktextview.h
1 #ifndef GTK_TEXT_VIEW_H
2 #define GTK_TEXT_VIEW_H
3
4 #include <gtk/gtkcontainer.h>
5 #include <gtk/gtkimcontext.h>
6 #include <gtk/gtktextbuffer.h>
7
8 #ifdef __cplusplus
9 extern "C" {
10 #endif /* __cplusplus */
11
12 #define GTK_TYPE_TEXT_VIEW             (gtk_text_view_get_type())
13 #define GTK_TEXT_VIEW(obj)             (GTK_CHECK_CAST ((obj), GTK_TYPE_TEXT_VIEW, GtkTextView))
14 #define GTK_TEXT_VIEW_CLASS(klass)     (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_TEXT_VIEW, GtkTextViewClass))
15 #define GTK_IS_TEXT_VIEW(obj)          (GTK_CHECK_TYPE ((obj), GTK_TYPE_TEXT_VIEW))
16 #define GTK_IS_TEXT_VIEW_CLASS(klass)  (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TEXT_VIEW))
17 #define GTK_TEXT_VIEW_GET_CLASS(obj)   (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_TEXT_VIEW, GtkTextViewClass))
18
19 typedef enum
20 {
21   GTK_TEXT_WINDOW_WIDGET,
22   GTK_TEXT_WINDOW_TEXT,
23   GTK_TEXT_WINDOW_LEFT,
24   GTK_TEXT_WINDOW_RIGHT,
25   GTK_TEXT_WINDOW_TOP,
26   GTK_TEXT_WINDOW_BOTTOM
27 } GtkTextWindowType;
28
29 typedef struct _GtkTextView GtkTextView;
30 typedef struct _GtkTextViewClass GtkTextViewClass;
31
32 /* Internal private type. */
33 typedef struct _GtkTextWindow GtkTextWindow;
34
35 struct _GtkTextView {
36   GtkContainer parent_instance;
37
38   struct _GtkTextLayout *layout;
39   GtkTextBuffer *buffer;
40
41   guint selection_drag_handler;
42   guint selection_drag_scan_timeout;
43   gint scrolling_accel_factor;
44
45   gboolean overwrite_mode;
46
47   GtkWrapMode wrap_mode;        /* Default wrap mode */
48
49   gboolean editable;            /* default editability */
50
51   gboolean cursor_visible;
52   
53   GtkTextWindow *text_window;
54   GtkTextWindow *left_window;
55   GtkTextWindow *right_window;
56   GtkTextWindow *top_window;
57   GtkTextWindow *bottom_window;
58   
59   GtkAdjustment *hadjustment;
60   GtkAdjustment *vadjustment;
61
62   gint xoffset;                 /* Offsets between widget coordinates and buffer coordinates */
63   gint yoffset;
64   gint width;                   /* Width and height of the buffer */
65   gint height;
66   
67   /* The virtual cursor position is normally the same as the
68    * actual (strong) cursor position, except in two circumstances:
69    *
70    * a) When the cursor is moved vertically with the keyboard
71    * b) When the text view is scrolled with the keyboard
72    *
73    * In case a), virtual_cursor_x is preserved, but not virtual_cursor_y
74    * In case b), both virtual_cursor_x and virtual_cursor_y are preserved.
75    */
76   gint virtual_cursor_x;           /* -1 means use actual cursor position */
77   gint virtual_cursor_y;           /* -1 means use actual cursor position */
78   
79   GtkTextMark *first_para_mark;    /* Mark at the beginning of the first onscreen paragraph */
80   gint first_para_pixels;          /* Offset of top of screen in the first onscreen paragraph */
81
82   GtkTextMark *dnd_mark;
83   guint blink_timeout;
84
85   guint first_validate_idle;            /* Idle to revalidate onscreen portion, runs before resize */
86   guint incremental_validate_idle;      /* Idle to revalidate offscreen portions, runs after redraw */
87
88   GtkIMContext *im_context;
89
90   gint drag_start_x;
91   gint drag_start_y;
92 };
93
94 struct _GtkTextViewClass {
95   GtkContainerClass parent_class;
96
97   /* These are all RUN_ACTION signals for keybindings */
98
99   /* move insertion point */
100   void (* move)        (GtkTextView *text_view, GtkMovementStep step, gint count, gboolean extend_selection);
101   /* move the "anchor" (what Emacs calls the mark) to the cursor position */
102   void (* set_anchor)  (GtkTextView *text_view);
103   /* Deletions */
104   void (* insert)      (GtkTextView *text_view, const gchar *str);
105   void (* delete)      (GtkTextView *text_view, GtkDeleteType type, gint count);
106   /* cut copy paste */
107   void (* cut_clipboard)   (GtkTextView *text_view);
108   void (* copy_clipboard)  (GtkTextView *text_view);
109   void (* paste_clipboard) (GtkTextView *text_view);
110   /* overwrite */
111   void (* toggle_overwrite) (GtkTextView *text_view);
112   void (* set_scroll_adjustments)   (GtkTextView    *text_view,
113                                      GtkAdjustment  *hadjustment,
114                                      GtkAdjustment  *vadjustment);
115 };
116
117 GtkType        gtk_text_view_get_type              (void) G_GNUC_CONST;
118 GtkWidget *    gtk_text_view_new                   (void);
119 GtkWidget *    gtk_text_view_new_with_buffer       (GtkTextBuffer *buffer);
120 void           gtk_text_view_set_buffer            (GtkTextView   *text_view,
121                                                     GtkTextBuffer *buffer);
122 GtkTextBuffer *gtk_text_view_get_buffer            (GtkTextView   *text_view);
123 gboolean       gtk_text_view_scroll_to_mark        (GtkTextView   *text_view,
124                                                     GtkTextMark   *mark,
125                                                     gint           mark_within_margin);
126 gboolean       gtk_text_view_move_mark_onscreen    (GtkTextView   *text_view,
127                                                     GtkTextMark   *mark);
128 gboolean       gtk_text_view_place_cursor_onscreen (GtkTextView   *text_view);
129
130 void           gtk_text_view_get_visible_rect      (GtkTextView   *text_view,
131                                                     GdkRectangle  *visible_rect);
132 void           gtk_text_view_set_wrap_mode         (GtkTextView   *text_view,
133                                                     GtkWrapMode    wrap_mode);
134 GtkWrapMode    gtk_text_view_get_wrap_mode         (GtkTextView   *text_view);
135
136 void           gtk_text_view_set_editable          (GtkTextView   *text_view,
137                                                     gboolean       setting);
138 gboolean       gtk_text_view_get_editable          (GtkTextView   *text_view);
139
140 void           gtk_text_view_set_cursor_visible    (GtkTextView   *text_view,
141                                                     gboolean       setting);
142 gboolean       gtk_text_view_get_cursor_visible    (GtkTextView   *text_view);
143
144 void           gtk_text_view_get_iter_location     (GtkTextView   *text_view,
145                                                     const GtkTextIter *iter,
146                                                     GdkRectangle  *location);
147 void           gtk_text_view_get_iter_at_location  (GtkTextView   *text_view,
148                                                     GtkTextIter   *iter,
149                                                     gint           x,
150                                                     gint           y);
151 void           gtk_text_view_get_line_yrange       (GtkTextView       *text_view,
152                                                     const GtkTextIter *iter,
153                                                     gint              *y,
154                                                     gint              *height);
155
156 void           gtk_text_view_get_line_at_y         (GtkTextView       *text_view,
157                                                     GtkTextIter       *target_iter,
158                                                     gint               y,
159                                                     gint              *line_top);
160
161 void gtk_text_view_buffer_to_window_coords (GtkTextView       *text_view,
162                                             GtkTextWindowType  win,
163                                             gint               buffer_x,
164                                             gint               buffer_y,
165                                             gint              *window_x,
166                                             gint              *window_y);
167 void gtk_text_view_window_to_buffer_coords (GtkTextView       *text_view,
168                                             GtkTextWindowType  win,
169                                             gint               window_x,
170                                             gint               window_y,
171                                             gint              *buffer_x,
172                                             gint              *buffer_y);
173
174 GdkWindow*        gtk_text_view_get_window      (GtkTextView       *text_view,
175                                                  GtkTextWindowType  win);
176 GtkTextWindowType gtk_text_view_get_window_type (GtkTextView       *text_view,
177                                                  GdkWindow         *window);
178
179 void gtk_text_view_set_border_window_size (GtkTextView       *text_view,
180                                            GtkTextWindowType  type,
181                                            gint               size);
182 void gtk_text_view_set_text_window_size   (GtkTextView       *text_view,
183                                            gint               width,
184                                            gint               height);
185
186
187 #ifdef __cplusplus
188 }
189 #endif /* __cplusplus */
190
191 #endif /* GTK_TEXT_VIEW_H */