ekg2
|
00001 #ifndef __XTEXT_H__ 00002 #define __XTEXT_H__ 00003 00004 #include <gtk/gtkadjustment.h> 00005 #ifdef USE_XFT 00006 #include <X11/Xft/Xft.h> 00007 #endif 00008 00009 #ifdef USE_SHM 00010 #include <X11/Xlib.h> 00011 #include <sys/ipc.h> 00012 #include <sys/shm.h> 00013 #include <X11/extensions/XShm.h> 00014 #endif 00015 00016 #define GTK_TYPE_XTEXT (gtk_xtext_get_type ()) 00017 #define GTK_XTEXT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GTK_TYPE_XTEXT, GtkXText)) 00018 #define GTK_XTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_XTEXT, GtkXTextClass)) 00019 #define GTK_IS_XTEXT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GTK_TYPE_XTEXT)) 00020 #define GTK_IS_XTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_XTEXT)) 00021 #define GTK_XTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_XTEXT, GtkXTextClass)) 00022 00023 /* these match palette.h */ 00024 #define XTEXT_MIRC_COLS 32 00025 #define XTEXT_COLS 37 /* 32 plus 5 for extra stuff below */ 00026 #define XTEXT_MARK_FG 32 /* for marking text */ 00027 #define XTEXT_MARK_BG 33 00028 #define XTEXT_FG 34 00029 #define XTEXT_BG 35 00030 #define XTEXT_MARKER 36 /* for marker line */ 00031 00032 typedef struct _GtkXText GtkXText; 00033 typedef struct _GtkXTextClass GtkXTextClass; 00034 00035 typedef struct textentry textentry; 00036 00037 typedef struct { 00038 GtkXText *xtext; /* attached to this widget */ 00039 00040 gfloat old_value; /* last known adj->value */ 00041 textentry *text_first; 00042 textentry *text_last; 00043 guint16 grid_offset[256]; 00044 00045 textentry *last_ent_start; /* this basically describes the last rendered */ 00046 textentry *last_ent_end; /* selection. */ 00047 int last_offset_start; 00048 int last_offset_end; 00049 00050 int last_pixel_pos; 00051 00052 int pagetop_line; 00053 int pagetop_subline; 00054 textentry *pagetop_ent; /* what's at xtext->adj->value */ 00055 00056 int num_lines; 00057 int indent; /* position of separator (pixels) from left */ 00058 00059 textentry *marker_pos; 00060 00061 int window_width; /* window size when last rendered. */ 00062 int window_height; 00063 00064 unsigned int time_stamp:1; 00065 unsigned int scrollbar_down:1; 00066 unsigned int needs_recalc:1; 00067 unsigned int grid_dirty:1; 00068 unsigned int marker_seen:1; 00069 unsigned int reset_marker_pos:1; 00070 } xtext_buffer; 00071 00072 struct _GtkXText { 00073 GtkWidget widget; 00074 00075 xtext_buffer *buffer; 00076 xtext_buffer *orig_buffer; 00077 xtext_buffer *selection_buffer; 00078 00079 #ifdef USE_SHM 00080 XShmSegmentInfo shminfo; 00081 #endif 00082 00083 GtkAdjustment *adj; 00084 GdkPixmap *pixmap; /* 0 = use palette[19] */ 00085 GdkDrawable *draw_buf; /* points to ->window */ 00086 GdkCursor *hand_cursor; 00087 GdkCursor *resize_cursor; 00088 00089 int pixel_offset; /* amount of pixels the top line is chopped by */ 00090 00091 int last_win_x; 00092 int last_win_y; 00093 int last_win_h; 00094 int last_win_w; 00095 00096 int tint_red; 00097 int tint_green; 00098 int tint_blue; 00099 00100 GdkGC *bgc; /* backing pixmap */ 00101 GdkGC *fgc; /* text foreground color */ 00102 GdkGC *light_gc; /* sep bar */ 00103 GdkGC *dark_gc; 00104 GdkGC *thin_gc; 00105 GdkGC *marker_gc; 00106 gulong palette[XTEXT_COLS]; 00107 00108 gint io_tag; /* for delayed refresh events */ 00109 gint add_io_tag; /* "" when adding new text */ 00110 gint scroll_tag; /* marking-scroll timeout */ 00111 gulong vc_signal_tag; /* signal handler for "value_changed" adj */ 00112 00113 int select_start_adj; /* the adj->value when the selection started */ 00114 int select_start_x; 00115 int select_start_y; 00116 int select_end_x; 00117 int select_end_y; 00118 00119 int max_lines; 00120 00121 int col_fore; 00122 int col_back; 00123 00124 int depth; /* gdk window depth */ 00125 00126 textentry *hilight_ent; 00127 int hilight_start; 00128 int hilight_end; 00129 00130 guint16 fontwidth[128]; /* each char's width, only the ASCII ones */ 00131 00132 #ifdef USE_XFT 00133 XftColor color[XTEXT_COLS]; 00134 XftColor *xft_fg; 00135 XftColor *xft_bg; /* both point into color[20] */ 00136 XftDraw *xftdraw; 00137 XftFont *font; 00138 XftFont *ifont; /* italics */ 00139 #else 00140 struct pangofont { 00141 PangoFontDescription *font; 00142 PangoFontDescription *ifont; /* italics */ 00143 int ascent; 00144 int descent; 00145 } *font, pango_font; 00146 PangoLayout *layout; 00147 #endif 00148 00149 int fontsize; 00150 int space_width; /* width (pixels) of the space " " character */ 00151 int stamp_width; /* width of "[88:88:88]" */ 00152 int max_auto_indent; 00153 00154 unsigned char scratch_buffer[4096]; 00155 00156 void (*error_function) (int type); 00157 int (*urlcheck_function) (GtkWidget *xtext, char *word, int len); 00158 00159 int jump_out_offset; /* point at which to stop rendering */ 00160 int jump_in_offset; /* "" start rendering */ 00161 00162 int ts_x; /* ts origin for ->bgc GC */ 00163 int ts_y; 00164 00165 int clip_x; /* clipping (x directions) */ 00166 int clip_x2; /* from x to x2 */ 00167 00168 int clip_y; /* clipping (y directions) */ 00169 int clip_y2; /* from y to y2 */ 00170 00171 /* current text states */ 00172 unsigned int bold:1; 00173 unsigned int underline:1; 00174 unsigned int italics:1; 00175 00176 /* text parsing states */ 00177 unsigned int backcolor:1; 00178 00179 /* various state information */ 00180 unsigned int moving_separator:1; 00181 unsigned int word_or_line_select:1; 00182 unsigned int button_down:1; 00183 unsigned int hilighting:1; 00184 unsigned int dont_render:1; 00185 unsigned int dont_render2:1; 00186 unsigned int cursor_hand:1; 00187 unsigned int cursor_resize:1; 00188 unsigned int skip_border_fills:1; 00189 unsigned int skip_stamp:1; 00190 unsigned int mark_stamp:1; /* Cut&Paste with stamps? */ 00191 unsigned int force_stamp:1; /* force redrawing it */ 00192 unsigned int render_hilights_only:1; 00193 unsigned int in_hilight:1; 00194 unsigned int un_hilight:1; 00195 unsigned int recycle:1; 00196 unsigned int avoid_trans:1; 00197 unsigned int force_render:1; 00198 unsigned int shm:1; 00199 00200 /* settings/prefs */ 00201 unsigned int auto_indent:1; 00202 unsigned int thinline:1; 00203 unsigned int transparent:1; 00204 unsigned int shaded:1; 00205 unsigned int marker:1; 00206 unsigned int separator:1; 00207 unsigned int wordwrap:1; 00208 unsigned int overdraw:1; 00209 }; 00210 00211 struct _GtkXTextClass { 00212 GtkWidgetClass parent_class; 00213 void (*word_click) (GtkXText * xtext, char *word, GdkEventButton * event); 00214 }; 00215 00216 GtkWidget *gtk_xtext_new(GdkColor palette[], int separator); 00217 void gtk_xtext_append_fstring(xtext_buffer *buf, fstring_t *fstr); 00218 int gtk_xtext_set_font(GtkXText * xtext, char *name); 00219 void gtk_xtext_set_background(GtkXText * xtext, GdkPixmap * pixmap, gboolean trans); 00220 void gtk_xtext_set_palette(GtkXText * xtext, GdkColor palette[]); 00221 void gtk_xtext_clear(xtext_buffer * buf); 00222 void gtk_xtext_refresh(GtkXText * xtext, int do_trans); 00223 void gtk_xtext_reset_marker_pos(GtkXText * xtext); 00224 00225 typedef void (*GtkXTextForeach) (GtkXText * xtext, unsigned char *text, void *data); 00226 00227 void gtk_xtext_set_error_function(GtkXText * xtext, void (*error_function) (int)); 00228 void gtk_xtext_set_indent(GtkXText * xtext, gboolean indent); 00229 void gtk_xtext_set_max_indent(GtkXText * xtext, int max_auto_indent); 00230 void gtk_xtext_set_max_lines(GtkXText * xtext, int max_lines); 00231 void gtk_xtext_set_show_marker(GtkXText * xtext, gboolean show_marker); 00232 void gtk_xtext_set_show_separator(GtkXText * xtext, gboolean show_separator); 00233 void gtk_xtext_set_thin_separator(GtkXText * xtext, gboolean thin_separator); 00234 void gtk_xtext_set_time_stamp(xtext_buffer * buf, gboolean timestamp); 00235 void gtk_xtext_set_tint(GtkXText * xtext, int tint_red, int tint_green, int tint_blue); 00236 void gtk_xtext_set_urlcheck_function(GtkXText * xtext, 00237 int (*urlcheck_function) (GtkWidget *, char *, int)); 00238 void gtk_xtext_set_wordwrap(GtkXText * xtext, gboolean word_wrap); 00239 00240 xtext_buffer *gtk_xtext_buffer_new(GtkXText * xtext); 00241 void gtk_xtext_buffer_free(xtext_buffer * buf); 00242 void gtk_xtext_buffer_show(GtkXText * xtext, xtext_buffer * buf, int render); 00243 GType gtk_xtext_get_type(void); 00244 00245 #endif