1 /* Dia -- an diagram creation/manipulation program
2  * Copyright (C) 1998 Alexander Larsson
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17  */
18 #ifndef TEXT_H
19 #define TEXT_H
20 
21 typedef enum {
22   TEXT_EDIT_START,
23   TEXT_EDIT_CHANGE,
24   TEXT_EDIT_END
25 } TextEditState;
26 
27 #include <glib.h>
28 #include "diatypes.h"
29 #include "textattr.h"
30 #include "focus.h"
31 #include "properties.h"
32 
33 #define USE_TEXTLINE_FOR_LINES
34 
35 struct _Text {
36   /** The object that owns this text. */
37   DiaObject *parent_object;
38   /* don't change these values directly, use the text_set* functions */
39 
40   /* Text data: */
41   int numlines;
42   TextLine **lines;
43 
44   /* Attributes: */
45   DiaFont *font;
46   real height;
47   Point position;
48   Color color;
49   Alignment alignment;
50 
51   /* Cursor pos: */
52   int cursor_pos;
53   int cursor_row;
54   Focus focus;
55 
56   /* Computed values:  */
57   real ascent; /* **average** ascent */
58   real descent; /* **average** descent */
59   real max_width;
60 };
61 
62 
63 /* makes an internal copy of the string */
64 Text *new_text(const char *string, DiaFont *font, real height,
65 	       Point *pos, Color *color, Alignment align);
66 void text_destroy(Text *text);
67 Text *text_copy(Text *text);
68 gchar *text_get_line(Text *text, int line);
69 char *text_get_string_copy(Text *text);
70 void text_set_string(Text *text, const char *string);
71 void text_set_height(Text *text, real height);
72 void text_set_font(Text *text, DiaFont *font);
73 void text_set_position(Text *text, Point *pos);
74 void text_set_color(Text *text, Color *col);
75 void text_set_alignment(Text *text, Alignment align);
76 real text_distance_from(Text *text, Point *point);
77 void text_calc_boundingbox(Text *text, Rectangle *box);
78 void text_draw(Text *text, DiaRenderer *renderer);
79 void text_set_cursor(Text *text, Point *clicked_point,
80 		     DiaRenderer *interactive_renderer);
81 void text_set_cursor_at_end( Text* text );
82 void text_grab_focus(Text *text, DiaObject *object);
83 int text_is_empty(Text *text);
84 int text_delete_all(Text *text, ObjectChange **change);
85 void text_get_attributes(Text *text, TextAttributes *attr);
86 void text_set_attributes(Text *text, TextAttributes *attr);
87 
88 real text_get_line_width(Text *text, int line_no);
89 int text_get_line_strlen(Text *text, int line_no);
90 real text_get_max_width(Text *text);
91 real text_get_ascent(Text *text);
92 real text_get_descent(Text *text);
93 
94 /** Exposing this is a hack, but currently GTK still captures the key
95  * events of insensitive clods^H^H^H^H^Hmenu items. LC 21/10 2007*/
96 gboolean text_delete_key_handler(Focus *focus, ObjectChange **change);
97 void data_add_text(AttributeNode attr, Text *text);
98 Text *data_text(AttributeNode attr);
99 
100 gboolean apply_textattr_properties(GPtrArray *props,
101                                    Text *text, const gchar *textname,
102                                    TextAttributes *attrs);
103 gboolean apply_textstr_properties(GPtrArray *props,
104                                   Text *text, const gchar *textname,
105                                   const gchar *str);
106 #endif /* TEXT_H */
107 
108 
109