gtktexttag.h 5.76 KB
Newer Older
1 2 3
#ifndef GTK_TEXT_TAG_H
#define GTK_TEXT_TAG_H

4 5 6
#include <gtk/gtkobject.h>
#include <gdk/gdk.h>

7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

typedef struct _GtkTextIter GtkTextIter;
typedef struct _GtkTextBTreeNode GtkTextBTreeNode;
typedef struct _GtkTextTagTable GtkTextTagTable;
typedef struct _GtkTextTabArray GtkTextTabArray;

typedef enum {
  GTK_WRAPMODE_NONE,
  GTK_WRAPMODE_CHAR,
  GTK_WRAPMODE_WORD
} GtkWrapMode;

22
typedef struct _GtkTextAttributes GtkTextAttributes;
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54

#define GTK_TYPE_TEXT_TAG            (gtk_text_tag_get_type())
#define GTK_TEXT_TAG(obj)            (GTK_CHECK_CAST ((obj), GTK_TYPE_TEXT_TAG, GtkTextTag))
#define GTK_TEXT_TAG_CLASS(klass)    (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_TEXT_TAG, GtkTextTagClass))
#define GTK_IS_TEXT_TAG(obj)         (GTK_CHECK_TYPE ((obj), GTK_TYPE_TEXT_TAG))
#define GTK_IS_TEXT_TAG_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TEXT_TAG))
#define GTK_TEXT_TAG_GET_CLASS(obj)  (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_TEXT_TAG, GtkTextTagClass))

typedef struct _GtkTextTag GtkTextTag;
typedef struct _GtkTextTagClass GtkTextTagClass;

struct _GtkTextTag {
  GtkObject parent_instance;

  GtkTextTagTable *table;
  
  char *name;			/* Name of this tag.  This field is actually
				 * a pointer to the key from the entry in
				 * tkxt->tagTable, so it needn't be freed
				 * explicitly. */
  int priority;		/* Priority of this tag within widget.  0
                         * means lowest priority.  Exactly one tag
                         * has each integer value between 0 and
                         * numTags-1. */
  /*
   * Information for displaying text with this tag.  The information
   * belows acts as an override on information specified by lower-priority
   * tags.  If no value is specified, then the next-lower-priority tag
   * on the text determins the value.  The text widget itself provides
   * defaults if no tag specifies an override.
   */

55
  GtkTextAttributes *values;  
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
  
  /*
    Flags for whether a given value is set; if a value is unset, then
    this tag does not affect it.  */
  guint bg_color_set : 1;
  guint border_width_set : 1;
  guint relief_set : 1;
  guint bg_stipple_set : 1;
  guint fg_color_set : 1;
  guint font_set : 1;
  guint fg_stipple_set : 1;
  guint justify_set : 1;
  guint left_margin_set : 1;
  guint left_wrapped_line_margin_set : 1;
  guint offset_set : 1;
  guint overstrike_set : 1;
  guint right_margin_set : 1;
  guint pixels_above_lines_set : 1;
  guint pixels_below_lines_set : 1;
  guint pixels_inside_wrap_set : 1;
  guint tab_array_set : 1;
  guint underline_set : 1;
  guint wrap_mode_set : 1;
  guint bg_full_height_set : 1;
80
  guint invisible_set : 1;
81
  guint editable_set : 1;
82
  guint language_set : 1;
83 84 85 86 87 88 89 90 91 92 93 94 95 96
  guint pad1 : 1;
  guint pad2 : 1;
  guint pad3 : 1;
};

struct _GtkTextTagClass {
  GtkObjectClass parent_class;

  gint (* event) (GtkTextTag *tag,
                  GtkObject *event_object,         /* widget, canvas item, whatever */
                  GdkEvent *event,                 /* the event itself */
                  const GtkTextIter *iter);        /* location of event in buffer */
};

Elliot Lee's avatar
Elliot Lee committed
97
GtkType      gtk_text_tag_get_type     (void) G_GNUC_CONST;
98
GtkTextTag  *gtk_text_tag_new          (const gchar       *name);
99
gint         gtk_text_tag_get_priority (GtkTextTag        *tag);
100 101 102 103 104 105 106
void         gtk_text_tag_set_priority (GtkTextTag        *tag,
					gint               priority);
gint         gtk_text_tag_event        (GtkTextTag        *tag,
					GtkObject         *event_object,
					GdkEvent          *event,
					const GtkTextIter *iter);

107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
/*
 * Style object created by folding a set of tags together
 */

typedef struct _GtkTextAppearance GtkTextAppearance;

struct _GtkTextAppearance
{
  GdkColor bg_color;
  GdkColor fg_color;
  GdkBitmap *bg_stipple;
  GdkBitmap *fg_stipple;

  guint underline : 4;		/* PangoUnderline */
  guint overstrike : 1;

  /* Whether to use background-related values; this is irrelevant for
   * the values struct when in a tag, but is used for the composite
   * values struct; it's true if any of the tags being composited
   * had background stuff set. */
  guint draw_bg : 1;

  /* This is only used when we are actually laying out and rendering
   * a paragraph; not when a GtkTextAppearance is part of a
131
   * GtkTextAttributes.
132 133 134 135
   */
  guint inside_selection : 1;
};

136
struct _GtkTextAttributes
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
{
  guint refcount;

  GtkTextAppearance appearance;
  
  gint border_width;
  GtkShadowType relief;
  GtkJustification justify;
  GtkTextDirection direction;
  
  PangoFontDescription *font_desc;
  
  /* lMargin1 */
  gint left_margin;
  
  /* lMargin2 */
  gint left_wrapped_line_margin;

  /* super/subscript offset, can be negative */
  gint offset;
  
  gint right_margin;

  gint pixels_above_lines;

  gint pixels_below_lines;

  gint pixels_inside_wrap;

  GtkTextTabArray *tab_array;
  
  GtkWrapMode wrap_mode;	/* How to handle wrap-around for this tag.
				 * Must be GTK_WRAPMODE_CHAR,
				 * GTK_WRAPMODE_NONE, GTK_WRAPMODE_WORD
                                 */

  gchar *language;
  
  /* hide the text  */
  guint invisible : 1;

  /* Background is fit to full line height rather than
   * baseline +/- ascent/descent (font height) */
  guint bg_full_height : 1;
  
  /* can edit this text */
  guint editable : 1;

  /* colors are allocated etc. */
  guint realized : 1;

  guint pad1 : 1;
  guint pad2 : 1;
  guint pad3 : 1;
  guint pad4 : 1;
};

194 195 196 197 198
GtkTextAttributes  *gtk_text_attributes_new       (void);
void                gtk_text_attributes_copy      (GtkTextAttributes *src,
                                                   GtkTextAttributes *dest);
void                gtk_text_attributes_unref     (GtkTextAttributes *values);
void                gtk_text_attributes_ref       (GtkTextAttributes *values);
199 200


201 202 203 204 205 206
#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif