Initial revision
[silc.git] / apps / silcer / src / xtext.h
diff --git a/apps/silcer/src/xtext.h b/apps/silcer/src/xtext.h
new file mode 100644 (file)
index 0000000..d1b995a
--- /dev/null
@@ -0,0 +1,182 @@
+#ifndef __XTEXT_H__
+#define __XTEXT_H__
+
+#include <gdk/gdk.h>
+#include <gtk/gtkadjustment.h>
+#include <gtk/gtkwidget.h>
+#include <time.h>
+
+/*#define GTK_XTEXT(obj)          GTK_CHECK_CAST (obj, gtk_xtext_get_type (), GtkXText)*/
+#define GTK_XTEXT(obj) ((GtkXText*)obj)
+#define GTK_XTEXT_CLASS(klass)  GTK_CHECK_CLASS_CAST (klass, gtk_xtext_get_type (), GtkXTextClass)
+#define GTK_IS_XTEXT(obj)       GTK_CHECK_TYPE (obj, gtk_xtext_get_type ())
+
+#define FONT_1BYTE 0
+#define FONT_2BYTE 1
+#define FONT_SET 2
+
+#define ATTR_BOLD '\002'
+#define ATTR_COLOR '\003'
+#define ATTR_BEEP '\007'
+#define ATTR_RESET '\017'
+#define ATTR_REVERSE '\026'
+#define ATTR_ESCAPE '\033'
+#define ATTR_UNDERLINE '\037'
+
+typedef struct _GtkXText GtkXText;
+typedef struct _GtkXTextClass GtkXTextClass;
+
+typedef struct textentry
+{
+       struct textentry *next;
+       char *str;
+       int str_width;
+       time_t stamp;
+       short str_len;
+       short mark_start;
+       short mark_end;
+       short indent;
+       short lines_taken;
+       short left_len;
+}
+textentry;
+
+struct _GtkXText
+{
+       GtkWidget widget;
+
+       GtkAdjustment *adj;
+       gfloat old_value;                                       /* last known adj->value */
+       GdkPixmap *pixmap;                              /* 0 = use palette[19] */
+       GdkDrawable *draw_buf;                  /* points to ->window or ->tmp_pix */
+       GdkPixmap *tmp_pix;                             /* double buffer */
+       GdkCursor *hand_cursor;
+
+       int ts_orig_x;
+       int ts_orig_y;
+
+       int last_win_x;
+       int last_win_y;
+       int last_win_h;
+       int last_win_w;
+
+       int tint_red;
+       int tint_green;
+       int tint_blue;
+
+       GdkGC *bgc;                                               /* backing pixmap */
+       GdkGC *fgc;                                               /* text foreground color */
+       GdkGC *light_gc;                                  /* sep bar */
+       GdkGC *dark_gc;
+       gulong palette[20];
+
+       textentry *text_first;
+       textentry *text_last;
+
+       gint io_tag;                                      /* for delayed refresh events */
+       gint add_io_tag;                                  /* "" when adding new text */
+       gint scroll_tag;                                  /* marking-scroll timeout */
+
+       GdkFont *font;
+       int fontsize;
+       int fonttype;
+       guint16 fontwidth[256];           /* each char's width, only for FONT_1BYTE type */
+       int space_width;                                  /* width (pixels) of the space " " character */
+       int stamp_width;                                  /* width of "[88:88:88]" */
+
+       int indent;                                               /* position of separator (pixels) from left */
+       int max_auto_indent;
+
+       int select_start_adj;             /* the adj->value when the selection started */
+       int select_start_x;
+       int select_start_y;
+       int select_end_x;
+       int select_end_y;
+
+       textentry *last_ent_start;        /* this basically describes the last rendered */
+       textentry *last_ent_end;          /* selection. */
+       int last_offset_start;
+       int last_offset_end;
+
+       textentry *old_ent_start;
+       textentry *old_ent_end;
+
+       int num_lines;
+       int max_lines;
+
+       int pagetop_subline;
+       textentry *pagetop_ent;                 /* what's at xtext->adj->value */
+
+       int col_fore;
+       int col_back;
+
+       int depth;                                                /* gdk window depth */
+
+/*   int frozen;*/
+
+       char num[8];                                      /* for parsing mirc color */
+       int nc;                                                   /* offset into xtext->num */
+
+       textentry *hilight_ent;
+       int hilight_start;
+       int hilight_end;
+
+       short grid_offset[256];
+
+       GtkWidget *(*error_function) (char *text);
+       int (*urlcheck_function) (GtkXText * xtext, char *word);
+
+       unsigned char scratch_buffer[4096];
+
+       unsigned int fixed_width_font:1;
+       unsigned int double_buffer:1;
+       unsigned int auto_indent:1;
+       unsigned int moving_separator:1;
+       unsigned int time_stamp:1;
+       unsigned int scrollbar_down:1;
+       unsigned int word_or_line_select:1;
+       unsigned int color_paste:1;
+       unsigned int thinline:1;
+       unsigned int parsing_backcolor:1;
+       unsigned int parsing_color:1;
+       unsigned int backcolor:1;
+       unsigned int button_down:1;
+       unsigned int bold:1;
+       unsigned int underline:1;
+       unsigned int reverse:1;
+       unsigned int transparent:1;
+       unsigned int separator:1;
+       unsigned int shaded:1;
+       unsigned int wordwrap:1;
+       unsigned int dont_render:1;
+       unsigned int cursor_hand:1;
+       unsigned int skip_fills:1;
+       unsigned int skip_border_fills:1;
+       unsigned int do_underline_fills_only:1;
+};
+
+struct _GtkXTextClass
+{
+       GtkWidgetClass parent_class;
+       void (*word_click) (GtkXText * xtext, char *word, GdkEventButton * event);
+};
+
+GtkWidget *gtk_xtext_new (int indent, int separator);
+guint gtk_xtext_get_type (void);
+void gtk_xtext_append (GtkXText * xtext, char *text, int len);
+void gtk_xtext_append_indent (GtkXText * xtext,
+                                                                               char *left_text, int left_len,
+                                                                               char *right_text, int right_len);
+void gtk_xtext_set_font (GtkXText * xtext, GdkFont * font, char *name);
+void gtk_xtext_set_background (GtkXText * xtext, GdkPixmap * pixmap,
+                                                                                int trans, int shaded);
+void gtk_xtext_set_palette (GtkXText * xtext, GdkColor palette[]);
+void gtk_xtext_remove_lines (GtkXText * xtext, int lines, int refresh);
+gchar *gtk_xtext_get_chars (GtkXText * xtext);
+void gtk_xtext_refresh (GtkXText * xtext, int do_trans);
+void gtk_xtext_thaw (GtkXText * xtext);
+void gtk_xtext_freeze (GtkXText * xtext);
+void *gtk_xtext_search (GtkXText * xtext, char *text, void *start);
+char *gtk_xtext_strip_color (unsigned char *text, int len, char *outbuf, int *newlen);
+
+#endif