aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/e-text.h
blob: e14199f16e5be4bdf89512c01de261e64c6c608b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/* EText - Text item for evolution.
 * Copyright (C) 2000 Helix Code, Inc.
 *
 * Author: Chris Lahey <clahey@umich.edu>
 *
 * A majority of code taken from:
 *
 * Text item type for GnomeCanvas widget
 *
 * GnomeCanvas is basically a port of the Tk toolkit's most excellent
 * canvas widget.  Tk is copyrighted by the Regents of the University
 * of California, Sun Microsystems, and other parties.
 *
 * Copyright (C) 1998 The Free Software Foundation
 *
 * Author: Federico Mena <federico@nuclecu.unam.mx> */

#ifndef E_TEXT_H
#define E_TEXT_H

#include <gnome.h>


BEGIN_GNOME_DECLS


/* Text item for the canvas.  Text items are positioned by an anchor point and an anchor direction.
 *
 * A clipping rectangle may be specified for the text.  The rectangle is anchored at the text's anchor
 * point, and is specified by clipping width and height parameters.  If the clipping rectangle is
 * enabled, it will clip the text.
 *
 * In addition, x and y offset values may be specified.  These specify an offset from the anchor
 * position.  If used in conjunction with the clipping rectangle, these could be used to implement
 * simple scrolling of the text within the clipping rectangle.
 *
 * The following object arguments are available:
 *
 * name         type            read/write  description
 * ------------------------------------------------------------------------------------------
 * text         string          RW      The string of the text label
 * x            double          RW      X coordinate of anchor point
 * y            double          RW      Y coordinate of anchor point
 * font         string          W       X logical font descriptor
 * fontset      string          W       X logical fontset descriptor
 * font_gdk     GdkFont*        RW      Pointer to a GdkFont
 * anchor       GtkAnchorType       RW      Anchor side for the text
 * justification    GtkJustification    RW      Justification for multiline text
 * fill_color       string          W       X color specification for text
 * fill_color_gdk   GdkColor*       RW      Pointer to an allocated GdkColor
 * fill_stipple     GdkBitmap*      RW      Stipple pattern for filling the text
 * clip_width       double          RW      Width of clip rectangle
 * clip_height      double          RW      Height of clip rectangle
 * clip         boolean         RW      Use clipping rectangle?
 * x_offset     double          RW      Horizontal offset distance from anchor position
 * y_offset     double          RW      Vertical offset distance from anchor position
 * text_width       double          R       Used to query the width of the rendered text
 * text_height      double          R       Used to query the rendered height of the text
 *
 * These are ignored in the AA version:
 * use_ellipsis         boolean                 RW              Whether to use ellipsises if text gets cut off.  Meaningless if clip == false.
 * ellipsis             string                  RW              The characters to use as ellipsis.  NULL = "...".
 */

#define E_TYPE_TEXT            (e_text_get_type ())
#define E_TEXT(obj)            (GTK_CHECK_CAST ((obj), E_TYPE_TEXT, EText))
#define E_TEXT_CLASS(klass)    (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_TEXT, ETextClass))
#define E_IS_TEXT(obj)         (GTK_CHECK_TYPE ((obj), E_TYPE_TEXT))
#define E_IS_TEXT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), E_TYPE_TEXT))


typedef struct _EText EText;
typedef struct _ETextClass ETextClass;
typedef struct _ETextSuckFont ETextSuckFont;
typedef struct _ETextSuckChar ETextSuckChar;

struct _ETextSuckChar {
    int     left_sb;
    int     right_sb;
    int     width;
    int     ascent;
    int     descent;
    int     bitmap_offset; /* in pixels */
};

struct _ETextSuckFont {
    guchar *bitmap;
    gint    bitmap_width;
    gint    bitmap_height;
    gint    ascent;
    ETextSuckChar chars[256];
};

struct _EText {
    GnomeCanvasItem item;

    char *text;         /* Text to display */
    gpointer lines;         /* Text split into lines (private field) */
    int num_lines;          /* Number of lines of text */

    double x, y;            /* Position at anchor */
    GdkFont *font;          /* Font for text */
    GtkAnchorType anchor;       /* Anchor side for text */
    GtkJustification justification; /* Justification for text */

    double clip_width;      /* Width of optional clip rectangle */
    double clip_height;     /* Height of optional clip rectangle */

    double xofs, yofs;      /* Text offset distance from anchor position */

    gulong pixel;           /* Fill color */
    GdkBitmap *stipple;     /* Stipple for text */
    GdkGC *gc;          /* GC for drawing text */

    int cx, cy;         /* Top-left canvas coordinates for text */
    int clip_cx, clip_cy;       /* Top-left canvas coordinates for clip rectangle */
    int clip_cwidth, clip_cheight;  /* Size of clip rectangle in pixels */
    int max_width;          /* Maximum width of text lines */
    int height;         /* Rendered text height in pixels */

    guint clip : 1;         /* Use clip rectangle? */

    /* Antialiased specific stuff follows */
    ETextSuckFont *suckfont; /* Sucked font */
    guint32 rgba;           /* RGBA color for text */
    double affine[6];               /* The item -> canvas affine */

    char *ellipsis;                 /* The ellipsis characters.  NULL = "...". */
    double ellipsis_width;          /* The width of the ellipsis. */
    gboolean use_ellipsis;          /* Whether to use the ellipsis. */
};

struct _ETextClass {
    GnomeCanvasItemClass parent_class;
};


/* Standard Gtk function */
GtkType e_text_get_type (void);


END_GNOME_DECLS

#endif