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