ekg2
plugins/gtk/xtext.h
Idź do dokumentacji tego pliku.
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
 All Struktury Danych Pliki Funkcje Zmienne Definicje typów Wyliczenia Wartości wyliczeń Definicje