ekg2  GIT master
xtext.h
Idź do dokumentacji tego pliku.
1 #ifndef __XTEXT_H__
2 #define __XTEXT_H__
3 
4 #include <gtk/gtkadjustment.h>
5 #ifdef USE_XFT
6 #include <X11/Xft/Xft.h>
7 #endif
8 
9 #ifdef USE_SHM
10 #include <X11/Xlib.h>
11 #include <sys/ipc.h>
12 #include <sys/shm.h>
13 #include <X11/extensions/XShm.h>
14 #endif
15 
16 #define GTK_TYPE_XTEXT (gtk_xtext_get_type ())
17 #define GTK_XTEXT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GTK_TYPE_XTEXT, GtkXText))
18 #define GTK_XTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_XTEXT, GtkXTextClass))
19 #define GTK_IS_XTEXT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GTK_TYPE_XTEXT))
20 #define GTK_IS_XTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_XTEXT))
21 #define GTK_XTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_XTEXT, GtkXTextClass))
22 
23 /* these match palette.h */
24 #define XTEXT_MIRC_COLS 32
25 #define XTEXT_COLS 37 /* 32 plus 5 for extra stuff below */
26 #define XTEXT_MARK_FG 32 /* for marking text */
27 #define XTEXT_MARK_BG 33
28 #define XTEXT_FG 34
29 #define XTEXT_BG 35
30 #define XTEXT_MARKER 36 /* for marker line */
31 
32 typedef struct _GtkXText GtkXText;
34 
35 typedef struct textentry textentry;
36 
37 typedef struct {
38  GtkXText *xtext; /* attached to this widget */
39 
40  gfloat old_value; /* last known adj->value */
43  guint16 grid_offset[256];
44 
45  textentry *last_ent_start; /* this basically describes the last rendered */
46  textentry *last_ent_end; /* selection. */
49 
51 
54  textentry *pagetop_ent; /* what's at xtext->adj->value */
55 
56  int num_lines;
57  int indent; /* position of separator (pixels) from left */
58 
60 
61  int window_width; /* window size when last rendered. */
63 
64  unsigned int time_stamp:1;
65  unsigned int scrollbar_down:1;
66  unsigned int needs_recalc:1;
67  unsigned int grid_dirty:1;
68  unsigned int marker_seen:1;
69  unsigned int reset_marker_pos:1;
70 } xtext_buffer;
71 
72 struct _GtkXText {
73  GtkWidget widget;
74 
78 
79 #ifdef USE_SHM
80  XShmSegmentInfo shminfo;
81 #endif
82 
83  GtkAdjustment *adj;
84  GdkPixmap *pixmap; /* 0 = use palette[19] */
85  GdkDrawable *draw_buf; /* points to ->window */
86  GdkCursor *hand_cursor;
87  GdkCursor *resize_cursor;
88 
89  int pixel_offset; /* amount of pixels the top line is chopped by */
90 
95 
96  int tint_red;
98  int tint_blue;
99 
100  GdkGC *bgc; /* backing pixmap */
101  GdkGC *fgc; /* text foreground color */
102  GdkGC *light_gc; /* sep bar */
103  GdkGC *dark_gc;
104  GdkGC *thin_gc;
105  GdkGC *marker_gc;
106  gulong palette[XTEXT_COLS];
107 
108  gint io_tag; /* for delayed refresh events */
109  gint add_io_tag; /* "" when adding new text */
110  gint scroll_tag; /* marking-scroll timeout */
111  gulong vc_signal_tag; /* signal handler for "value_changed" adj */
112 
113  int select_start_adj; /* the adj->value when the selection started */
118 
120 
121  int col_fore;
122  int col_back;
123 
124  int depth; /* gdk window depth */
125 
129 
130  guint16 fontwidth[128]; /* each char's width, only the ASCII ones */
131 
132 #ifdef USE_XFT
133  XftColor color[XTEXT_COLS];
134  XftColor *xft_fg;
135  XftColor *xft_bg; /* both point into color[20] */
136  XftDraw *xftdraw;
137  XftFont *font;
138  XftFont *ifont; /* italics */
139 #else
140  struct pangofont {
141  PangoFontDescription *font;
142  PangoFontDescription *ifont; /* italics */
143  int ascent;
144  int descent;
145  } *font, pango_font;
146  PangoLayout *layout;
147 #endif
148 
149  int fontsize;
150  int space_width; /* width (pixels) of the space " " character */
151  int stamp_width; /* width of "[88:88:88]" */
153 
154  unsigned char scratch_buffer[4096];
155 
156  void (*error_function) (int type);
157  int (*urlcheck_function) (GtkWidget *xtext, char *word, int len);
158 
159  int jump_out_offset; /* point at which to stop rendering */
160  int jump_in_offset; /* "" start rendering */
161 
162  int ts_x; /* ts origin for ->bgc GC */
163  int ts_y;
164 
165  int clip_x; /* clipping (x directions) */
166  int clip_x2; /* from x to x2 */
167 
168  int clip_y; /* clipping (y directions) */
169  int clip_y2; /* from y to y2 */
170 
171  /* current text states */
172  unsigned int bold:1;
173  unsigned int underline:1;
174  unsigned int italics:1;
175 
176  /* text parsing states */
177  unsigned int backcolor:1;
178 
179  /* various state information */
180  unsigned int moving_separator:1;
181  unsigned int word_or_line_select:1;
182  unsigned int button_down:1;
183  unsigned int hilighting:1;
184  unsigned int dont_render:1;
185  unsigned int dont_render2:1;
186  unsigned int cursor_hand:1;
187  unsigned int cursor_resize:1;
188  unsigned int skip_border_fills:1;
189  unsigned int skip_stamp:1;
190  unsigned int mark_stamp:1; /* Cut&Paste with stamps? */
191  unsigned int force_stamp:1; /* force redrawing it */
192  unsigned int render_hilights_only:1;
193  unsigned int in_hilight:1;
194  unsigned int un_hilight:1;
195  unsigned int recycle:1;
196  unsigned int avoid_trans:1;
197  unsigned int force_render:1;
198  unsigned int shm:1;
199 
200  /* settings/prefs */
201  unsigned int auto_indent:1;
202  unsigned int thinline:1;
203  unsigned int transparent:1;
204  unsigned int shaded:1;
205  unsigned int marker:1;
206  unsigned int separator:1;
207  unsigned int wordwrap:1;
208  unsigned int overdraw:1;
209 };
210 
212  GtkWidgetClass parent_class;
213  void (*word_click) (GtkXText * xtext, char *word, GdkEventButton * event);
214 };
215 
216 GtkWidget *gtk_xtext_new(GdkColor palette[], int separator);
218 int gtk_xtext_set_font(GtkXText * xtext, char *name);
219 void gtk_xtext_set_background(GtkXText * xtext, GdkPixmap * pixmap, gboolean trans);
220 void gtk_xtext_set_palette(GtkXText * xtext, GdkColor palette[]);
221 void gtk_xtext_clear(xtext_buffer * buf);
222 void gtk_xtext_refresh(GtkXText * xtext, int do_trans);
224 
225 typedef void (*GtkXTextForeach) (GtkXText * xtext, unsigned char *text, void *data);
226 
227 void gtk_xtext_set_error_function(GtkXText * xtext, void (*error_function) (int));
228 void gtk_xtext_set_indent(GtkXText * xtext, gboolean indent);
229 void gtk_xtext_set_max_indent(GtkXText * xtext, int max_auto_indent);
230 void gtk_xtext_set_max_lines(GtkXText * xtext, int max_lines);
231 void gtk_xtext_set_show_marker(GtkXText * xtext, gboolean show_marker);
232 void gtk_xtext_set_show_separator(GtkXText * xtext, gboolean show_separator);
233 void gtk_xtext_set_thin_separator(GtkXText * xtext, gboolean thin_separator);
234 void gtk_xtext_set_time_stamp(xtext_buffer * buf, gboolean timestamp);
235 void gtk_xtext_set_tint(GtkXText * xtext, int tint_red, int tint_green, int tint_blue);
237  int (*urlcheck_function) (GtkWidget *, char *, int));
238 void gtk_xtext_set_wordwrap(GtkXText * xtext, gboolean word_wrap);
239 
242 void gtk_xtext_buffer_show(GtkXText * xtext, xtext_buffer * buf, int render);
243 GType gtk_xtext_get_type(void);
244 
245 #endif
void gtk_xtext_buffer_show(GtkXText *xtext, xtext_buffer *buf, int render)
Definition: xtext.c:4107
int window_width
Definition: xtext.h:61
gfloat old_value
Definition: xtext.h:40
unsigned int skip_border_fills
Definition: xtext.h:188
xtext_buffer * orig_buffer
Definition: xtext.h:76
unsigned int underline
Definition: xtext.h:173
int tint_blue
Definition: xtext.h:98
int clip_y2
Definition: xtext.h:169
unsigned int overdraw
Definition: xtext.h:208
GdkGC * fgc
Definition: xtext.h:101
unsigned int force_render
Definition: xtext.h:197
int stamp_width
Definition: xtext.h:151
Definition: themes.h:36
unsigned int cursor_resize
Definition: xtext.h:187
int clip_x2
Definition: xtext.h:166
unsigned int render_hilights_only
Definition: xtext.h:192
unsigned int word_or_line_select
Definition: xtext.h:181
int last_win_x
Definition: xtext.h:91
void gtk_xtext_refresh(GtkXText *xtext, int do_trans)
Definition: xtext.c:3741
unsigned int marker_seen
Definition: xtext.h:68
int last_pixel_pos
Definition: xtext.h:50
unsigned int scrollbar_down
Definition: xtext.h:65
int last_offset_end
Definition: xtext.h:48
void gtk_xtext_set_indent(GtkXText *xtext, gboolean indent)
Definition: xtext.c:4042
int hilight_start
Definition: xtext.h:127
Definition: events.h:31
unsigned int recycle
Definition: xtext.h:195
GdkCursor * resize_cursor
Definition: xtext.h:87
int fontsize
Definition: xtext.h:149
GdkGC * light_gc
Definition: xtext.h:102
void gtk_xtext_set_max_indent(GtkXText *xtext, int max_auto_indent)
Definition: xtext.c:4047
void gtk_xtext_set_time_stamp(xtext_buffer *buf, gboolean timestamp)
Definition: xtext.c:4072
void gtk_xtext_set_show_marker(GtkXText *xtext, gboolean show_marker)
Definition: xtext.c:4057
void gtk_xtext_append_fstring(xtext_buffer *buf, const fstring_t *fstr)
Definition: xtext.c:3978
PangoFontDescription * ifont
Definition: xtext.h:142
gint scroll_tag
Definition: xtext.h:110
unsigned int dont_render2
Definition: xtext.h:185
GdkCursor * hand_cursor
Definition: xtext.h:86
unsigned int backcolor
Definition: xtext.h:177
GtkWidgetClass parent_class
Definition: xtext.h:212
unsigned int marker
Definition: xtext.h:205
GdkGC * bgc
Definition: xtext.h:100
GdkGC * dark_gc
Definition: xtext.h:103
gint16 indent
Definition: xtext.c:93
void gtk_xtext_set_max_lines(GtkXText *xtext, int max_lines)
Definition: xtext.c:4052
GtkWidget * gtk_xtext_new(GdkColor palette[], int separator)
Definition: xtext.c:696
int descent
Definition: xtext.h:144
int ts_x
Definition: xtext.h:162
int select_start_x
Definition: xtext.h:114
Definition: xtext.c:82
void gtk_xtext_set_error_function(GtkXText *xtext, void(*error_function)(int))
Definition: xtext.c:4037
unsigned int button_down
Definition: xtext.h:182
textentry * hilight_ent
Definition: xtext.h:126
GdkDrawable * draw_buf
Definition: xtext.h:85
int select_start_adj
Definition: xtext.h:113
int last_win_y
Definition: xtext.h:92
void gtk_xtext_clear(xtext_buffer *buf)
Definition: xtext.c:3812
int pagetop_line
Definition: xtext.h:52
void gtk_xtext_buffer_free(xtext_buffer *buf)
Definition: xtext.c:4187
textentry * text_last
Definition: xtext.h:42
int last_win_w
Definition: xtext.h:94
void gtk_xtext_reset_marker_pos(GtkXText *xtext)
Definition: xtext.c:4099
int jump_in_offset
Definition: xtext.h:160
unsigned int auto_indent
Definition: xtext.h:201
void gtk_xtext_set_palette(GtkXText *xtext, GdkColor palette[])
Definition: xtext.c:3285
int max_auto_indent
Definition: xtext.h:152
int window_height
Definition: xtext.h:62
unsigned int thinline
Definition: xtext.h:202
unsigned int mark_stamp
Definition: xtext.h:190
int space_width
Definition: xtext.h:150
Definition: xtext.h:211
int depth
Definition: xtext.h:124
int select_end_y
Definition: xtext.h:117
unsigned int skip_stamp
Definition: xtext.h:189
int ts_y
Definition: xtext.h:163
GtkWidget widget
Definition: xtext.h:73
void gtk_xtext_set_show_separator(GtkXText *xtext, gboolean show_separator)
Definition: xtext.c:4062
int clip_y
Definition: xtext.h:168
void gtk_xtext_set_thin_separator(GtkXText *xtext, gboolean thin_separator)
Definition: xtext.c:4067
void gtk_xtext_set_wordwrap(GtkXText *xtext, gboolean word_wrap)
Definition: xtext.c:4094
unsigned int bold
Definition: xtext.h:172
unsigned int hilighting
Definition: xtext.h:183
textentry * pagetop_ent
Definition: xtext.h:54
PangoLayout * layout
Definition: xtext.h:146
int col_back
Definition: xtext.h:122
int tint_green
Definition: xtext.h:97
int last_offset_start
Definition: xtext.h:47
unsigned int moving_separator
Definition: xtext.h:180
textentry * last_ent_end
Definition: xtext.h:46
GType gtk_xtext_get_type(void)
Definition: xtext.c:2146
int gtk_xtext_set_font(GtkXText *xtext, char *name)
Definition: xtext.c:3353
GtkAdjustment * adj
Definition: xtext.h:83
Definition: xtext.h:37
const char * name
Definition: remote.c:88
int jump_out_offset
Definition: xtext.h:159
unsigned int transparent
Definition: xtext.h:203
PangoFontDescription * font
Definition: xtext.h:141
unsigned int italics
Definition: xtext.h:174
unsigned int shaded
Definition: xtext.h:204
gint io_tag
Definition: xtext.h:108
unsigned int wordwrap
Definition: xtext.h:207
int col_fore
Definition: xtext.h:121
void gtk_xtext_set_urlcheck_function(GtkXText *xtext, int(*urlcheck_function)(GtkWidget *, char *, int))
Definition: xtext.c:4088
int pagetop_subline
Definition: xtext.h:53
unsigned int force_stamp
Definition: xtext.h:191
unsigned int cursor_hand
Definition: xtext.h:186
Definition: xtext.h:72
unsigned int needs_recalc
Definition: xtext.h:66
GdkGC * marker_gc
Definition: xtext.h:105
xtext_buffer * gtk_xtext_buffer_new(GtkXText *xtext)
Definition: xtext.c:4176
const char * timestamp(const char *format)
Definition: stuff.c:1684
unsigned int shm
Definition: xtext.h:198
unsigned int time_stamp
Definition: xtext.h:64
fstring_t * fstr
Definition: xtext.c:86
int pixel_offset
Definition: xtext.h:89
int tint_red
Definition: xtext.h:96
unsigned int dont_render
Definition: xtext.h:184
int select_end_x
Definition: xtext.h:116
GtkXText * xtext
Definition: xtext.h:38
int num_lines
Definition: xtext.h:56
GdkGC * thin_gc
Definition: xtext.h:104
unsigned int in_hilight
Definition: xtext.h:193
Definition: xtext.h:140
void gtk_xtext_set_tint(GtkXText *xtext, int tint_red, int tint_green, int tint_blue)
Definition: xtext.c:4077
unsigned int separator
Definition: xtext.h:206
void(* GtkXTextForeach)(GtkXText *xtext, unsigned char *text, void *data)
Definition: xtext.h:225
int ascent
Definition: xtext.h:143
unsigned int grid_dirty
Definition: xtext.h:67
textentry * marker_pos
Definition: xtext.h:59
xtext_buffer * buffer
Definition: xtext.h:75
unsigned int avoid_trans
Definition: xtext.h:196
GdkPixmap * pixmap
Definition: xtext.h:84
int hilight_end
Definition: xtext.h:128
void gtk_xtext_set_background(GtkXText *xtext, GdkPixmap *pixmap, gboolean trans)
Definition: xtext.c:3393
xtext_buffer * selection_buffer
Definition: xtext.h:77
int clip_x
Definition: xtext.h:165
unsigned int un_hilight
Definition: xtext.h:194
int last_win_h
Definition: xtext.h:93
textentry * text_first
Definition: xtext.h:41
int indent
Definition: xtext.h:57
gulong vc_signal_tag
Definition: xtext.h:111
int select_start_y
Definition: xtext.h:115
textentry * last_ent_start
Definition: xtext.h:45
unsigned int reset_marker_pos
Definition: xtext.h:69
#define XTEXT_COLS
Definition: xtext.h:25
gint add_io_tag
Definition: xtext.h:109
int max_lines
Definition: xtext.h:119