X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtktextbtree.h;h=08662188483559283981abf810580d6f29919a2d;hb=dc331ccb171151d737112d8dc55b25709271d2c7;hp=aba6d5095ada2a5bb6e44421c28bef26a89421ea;hpb=a4762fbff4739fbf0373c5528eb3a9855aa9299b;p=~andy%2Fgtk diff --git a/gtk/gtktextbtree.h b/gtk/gtktextbtree.h index aba6d5095..086621884 100644 --- a/gtk/gtktextbtree.h +++ b/gtk/gtktextbtree.h @@ -1,5 +1,39 @@ -#ifndef GTK_TEXT_BTREE_H -#define GTK_TEXT_BTREE_H +/* GTK - The GIMP Toolkit + * gtktextbtree.h Copyright (C) 2000 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + */ + +/* + * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS + * file for a list of people on the GTK+ Team. See the ChangeLog + * files for a list of changes. These files are distributed with + * GTK+ at ftp://ftp.gtk.org/pub/gtk/. + */ + +#ifndef __GTK_TEXT_BTREE_H__ +#define __GTK_TEXT_BTREE_H__ + +#if 0 +#define DEBUG_VALIDATION_AND_SCROLLING +#endif + +#ifdef DEBUG_VALIDATION_AND_SCROLLING +#define DV(x) (x) +#else +#define DV(x) +#endif #include #include @@ -8,155 +42,175 @@ #include #include -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ +G_BEGIN_DECLS -GtkTextBTree *gtk_text_btree_new (GtkTextTagTable *table, - GtkTextBuffer *buffer); -void gtk_text_btree_ref (GtkTextBTree *tree); -void gtk_text_btree_unref (GtkTextBTree *tree); -GtkTextBuffer *gtk_text_btree_get_buffer (GtkTextBTree *tree); +GtkTextBTree *_gtk_text_btree_new (GtkTextTagTable *table, + GtkTextBuffer *buffer); +void _gtk_text_btree_ref (GtkTextBTree *tree); +void _gtk_text_btree_unref (GtkTextBTree *tree); +GtkTextBuffer *_gtk_text_btree_get_buffer (GtkTextBTree *tree); -guint gtk_text_btree_get_chars_changed_stamp (GtkTextBTree *tree); -guint gtk_text_btree_get_segments_changed_stamp (GtkTextBTree *tree); -void gtk_text_btree_segments_changed (GtkTextBTree *tree); +guint _gtk_text_btree_get_chars_changed_stamp (GtkTextBTree *tree); +guint _gtk_text_btree_get_segments_changed_stamp (GtkTextBTree *tree); +void _gtk_text_btree_segments_changed (GtkTextBTree *tree); +gboolean _gtk_text_btree_is_end (GtkTextBTree *tree, + GtkTextLine *line, + GtkTextLineSegment *seg, + int byte_index, + int char_offset); /* Indexable segment mutation */ -void gtk_text_btree_delete (GtkTextIter *start, - GtkTextIter *end); -void gtk_text_btree_insert (GtkTextIter *iter, - const gchar *text, - gint len); -void gtk_text_btree_insert_pixmap (GtkTextIter *iter, - GdkPixmap *pixmap, - GdkBitmap *mask); +void _gtk_text_btree_delete (GtkTextIter *start, + GtkTextIter *end); +void _gtk_text_btree_insert (GtkTextIter *iter, + const gchar *text, + gint len); +void _gtk_text_btree_insert_pixbuf (GtkTextIter *iter, + GdkPixbuf *pixbuf); +void _gtk_text_btree_insert_child_anchor (GtkTextIter *iter, + GtkTextChildAnchor *anchor); +void _gtk_text_btree_unregister_child_anchor (GtkTextChildAnchor *anchor); /* View stuff */ -GtkTextLine *gtk_text_btree_find_line_by_y (GtkTextBTree *tree, - gpointer view_id, - gint ypixel, - gint *line_top_y); -gint gtk_text_btree_find_line_top (GtkTextBTree *tree, - GtkTextLine *line, - gpointer view_id); -void gtk_text_btree_add_view (GtkTextBTree *tree, - GtkTextLayout *layout); -void gtk_text_btree_remove_view (GtkTextBTree *tree, - gpointer view_id); -void gtk_text_btree_invalidate_region (GtkTextBTree *tree, - const GtkTextIter *start, - const GtkTextIter *end); -void gtk_text_btree_get_view_size (GtkTextBTree *tree, - gpointer view_id, - gint *width, - gint *height); -gboolean gtk_text_btree_is_valid (GtkTextBTree *tree, - gpointer view_id); -gboolean gtk_text_btree_validate (GtkTextBTree *tree, - gpointer view_id, - gint max_pixels, - gint *y, - gint *old_height, - gint *new_height); -void gtk_text_btree_validate_line (GtkTextBTree *tree, - GtkTextLine *line, - gpointer view_id); +GtkTextLine *_gtk_text_btree_find_line_by_y (GtkTextBTree *tree, + gpointer view_id, + gint ypixel, + gint *line_top_y); +gint _gtk_text_btree_find_line_top (GtkTextBTree *tree, + GtkTextLine *line, + gpointer view_id); +void _gtk_text_btree_add_view (GtkTextBTree *tree, + GtkTextLayout *layout); +void _gtk_text_btree_remove_view (GtkTextBTree *tree, + gpointer view_id); +void _gtk_text_btree_invalidate_region (GtkTextBTree *tree, + const GtkTextIter *start, + const GtkTextIter *end, + gboolean cursors_only); +void _gtk_text_btree_get_view_size (GtkTextBTree *tree, + gpointer view_id, + gint *width, + gint *height); +gboolean _gtk_text_btree_is_valid (GtkTextBTree *tree, + gpointer view_id); +gboolean _gtk_text_btree_validate (GtkTextBTree *tree, + gpointer view_id, + gint max_pixels, + gint *y, + gint *old_height, + gint *new_height); +void _gtk_text_btree_validate_line (GtkTextBTree *tree, + GtkTextLine *line, + gpointer view_id); /* Tag */ -void gtk_text_btree_tag (const GtkTextIter *start, - const GtkTextIter *end, - GtkTextTag *tag, - gboolean apply); +void _gtk_text_btree_tag (const GtkTextIter *start, + const GtkTextIter *end, + GtkTextTag *tag, + gboolean apply); /* "Getters" */ -GtkTextLine * gtk_text_btree_get_line (GtkTextBTree *tree, - gint line_number, - gint *real_line_number); -GtkTextLine * gtk_text_btree_get_line_at_char (GtkTextBTree *tree, - gint char_index, - gint *line_start_index, - gint *real_char_index); -GtkTextTag** gtk_text_btree_get_tags (const GtkTextIter *iter, - gint *num_tags); -gchar *gtk_text_btree_get_text (const GtkTextIter *start, - const GtkTextIter *end, - gboolean include_hidden, - gboolean include_nonchars); -gint gtk_text_btree_line_count (GtkTextBTree *tree); -gint gtk_text_btree_char_count (GtkTextBTree *tree); -gboolean gtk_text_btree_char_is_invisible (const GtkTextIter *iter); +GtkTextLine * _gtk_text_btree_get_line (GtkTextBTree *tree, + gint line_number, + gint *real_line_number); +GtkTextLine * _gtk_text_btree_get_line_no_last (GtkTextBTree *tree, + gint line_number, + gint *real_line_number); +GtkTextLine * _gtk_text_btree_get_end_iter_line (GtkTextBTree *tree); +GtkTextLine * _gtk_text_btree_get_line_at_char (GtkTextBTree *tree, + gint char_index, + gint *line_start_index, + gint *real_char_index); +GtkTextTag** _gtk_text_btree_get_tags (const GtkTextIter *iter, + gint *num_tags); +gchar *_gtk_text_btree_get_text (const GtkTextIter *start, + const GtkTextIter *end, + gboolean include_hidden, + gboolean include_nonchars); +gint _gtk_text_btree_line_count (GtkTextBTree *tree); +gint _gtk_text_btree_char_count (GtkTextBTree *tree); +gboolean _gtk_text_btree_char_is_invisible (const GtkTextIter *iter); /* Get iterators (these are implemented in gtktextiter.c) */ -void gtk_text_btree_get_iter_at_char (GtkTextBTree *tree, - GtkTextIter *iter, - gint char_index); -void gtk_text_btree_get_iter_at_line_char (GtkTextBTree *tree, - GtkTextIter *iter, - gint line_number, - gint char_index); -void gtk_text_btree_get_iter_at_line_byte (GtkTextBTree *tree, - GtkTextIter *iter, - gint line_number, - gint byte_index); -gboolean gtk_text_btree_get_iter_from_string (GtkTextBTree *tree, - GtkTextIter *iter, - const gchar *string); -gboolean gtk_text_btree_get_iter_at_mark_name (GtkTextBTree *tree, - GtkTextIter *iter, - const gchar *mark_name); -void gtk_text_btree_get_iter_at_mark (GtkTextBTree *tree, - GtkTextIter *iter, - GtkTextMark *mark); -void gtk_text_btree_get_last_iter (GtkTextBTree *tree, - GtkTextIter *iter); -void gtk_text_btree_get_iter_at_line (GtkTextBTree *tree, - GtkTextIter *iter, - GtkTextLine *line, - gint byte_offset); -gboolean gtk_text_btree_get_iter_at_first_toggle (GtkTextBTree *tree, - GtkTextIter *iter, - GtkTextTag *tag); -gboolean gtk_text_btree_get_iter_at_last_toggle (GtkTextBTree *tree, - GtkTextIter *iter, - GtkTextTag *tag); +void _gtk_text_btree_get_iter_at_char (GtkTextBTree *tree, + GtkTextIter *iter, + gint char_index); +void _gtk_text_btree_get_iter_at_line_char (GtkTextBTree *tree, + GtkTextIter *iter, + gint line_number, + gint char_index); +void _gtk_text_btree_get_iter_at_line_byte (GtkTextBTree *tree, + GtkTextIter *iter, + gint line_number, + gint byte_index); +gboolean _gtk_text_btree_get_iter_from_string (GtkTextBTree *tree, + GtkTextIter *iter, + const gchar *string); +gboolean _gtk_text_btree_get_iter_at_mark_name (GtkTextBTree *tree, + GtkTextIter *iter, + const gchar *mark_name); +void _gtk_text_btree_get_iter_at_mark (GtkTextBTree *tree, + GtkTextIter *iter, + GtkTextMark *mark); +void _gtk_text_btree_get_end_iter (GtkTextBTree *tree, + GtkTextIter *iter); +void _gtk_text_btree_get_iter_at_line (GtkTextBTree *tree, + GtkTextIter *iter, + GtkTextLine *line, + gint byte_offset); +gboolean _gtk_text_btree_get_iter_at_first_toggle (GtkTextBTree *tree, + GtkTextIter *iter, + GtkTextTag *tag); +gboolean _gtk_text_btree_get_iter_at_last_toggle (GtkTextBTree *tree, + GtkTextIter *iter, + GtkTextTag *tag); + +void _gtk_text_btree_get_iter_at_child_anchor (GtkTextBTree *tree, + GtkTextIter *iter, + GtkTextChildAnchor *anchor); + /* Manipulate marks */ -GtkTextMark *gtk_text_btree_set_mark (GtkTextBTree *tree, - GtkTextMark *existing_mark, - const gchar *name, - gboolean left_gravity, - const GtkTextIter *index, - gboolean should_exist); -void gtk_text_btree_remove_mark_by_name (GtkTextBTree *tree, - const gchar *name); -void gtk_text_btree_remove_mark (GtkTextBTree *tree, - GtkTextMark *segment); -gboolean gtk_text_btree_get_selection_bounds (GtkTextBTree *tree, - GtkTextIter *start, - GtkTextIter *end); -void gtk_text_btree_place_cursor (GtkTextBTree *tree, - const GtkTextIter *where); -gboolean gtk_text_btree_mark_is_insert (GtkTextBTree *tree, - GtkTextMark *segment); -gboolean gtk_text_btree_mark_is_selection_bound (GtkTextBTree *tree, - GtkTextMark *segment); -GtkTextMark *gtk_text_btree_get_mark_by_name (GtkTextBTree *tree, - const gchar *name); -GtkTextLine * gtk_text_btree_first_could_contain_tag (GtkTextBTree *tree, - GtkTextTag *tag); -GtkTextLine * gtk_text_btree_last_could_contain_tag (GtkTextBTree *tree, - GtkTextTag *tag); +GtkTextMark *_gtk_text_btree_set_mark (GtkTextBTree *tree, + GtkTextMark *existing_mark, + const gchar *name, + gboolean left_gravity, + const GtkTextIter *index, + gboolean should_exist); +void _gtk_text_btree_remove_mark_by_name (GtkTextBTree *tree, + const gchar *name); +void _gtk_text_btree_remove_mark (GtkTextBTree *tree, + GtkTextMark *segment); +gboolean _gtk_text_btree_get_selection_bounds (GtkTextBTree *tree, + GtkTextIter *start, + GtkTextIter *end); +void _gtk_text_btree_place_cursor (GtkTextBTree *tree, + const GtkTextIter *where); +void _gtk_text_btree_select_range (GtkTextBTree *tree, + const GtkTextIter *ins, + const GtkTextIter *bound); +gboolean _gtk_text_btree_mark_is_insert (GtkTextBTree *tree, + GtkTextMark *segment); +gboolean _gtk_text_btree_mark_is_selection_bound (GtkTextBTree *tree, + GtkTextMark *segment); +GtkTextMark *_gtk_text_btree_get_insert (GtkTextBTree *tree); +GtkTextMark *_gtk_text_btree_get_selection_bound (GtkTextBTree *tree); +GtkTextMark *_gtk_text_btree_get_mark_by_name (GtkTextBTree *tree, + const gchar *name); +GtkTextLine * _gtk_text_btree_first_could_contain_tag (GtkTextBTree *tree, + GtkTextTag *tag); +GtkTextLine * _gtk_text_btree_last_could_contain_tag (GtkTextBTree *tree, + GtkTextTag *tag); /* Lines */ @@ -166,8 +220,8 @@ struct _GtkTextLineData { gpointer view_id; GtkTextLineData *next; gint height; - gint width : 24; - gint valid : 8; + signed int width : 24; + guint valid : 8; /* Actually a boolean */ }; /* @@ -178,100 +232,114 @@ struct _GtkTextLineData { */ struct _GtkTextLine { - GtkTextBTreeNode *parent; /* Pointer to parent node containing - * line. */ - GtkTextLine *next; /* Next in linked list of lines with + GtkTextBTreeNode *parent; /* Pointer to parent node containing + * line. */ + GtkTextLine *next; /* Next in linked list of lines with * same parent node in B-tree. NULL * means end of list. */ - GtkTextLineSegment *segments; /* First in ordered list of segments + GtkTextLineSegment *segments; /* First in ordered list of segments * that make up the line. */ GtkTextLineData *views; /* data stored here by views */ + guchar dir_strong; /* BiDi algo dir of line */ + guchar dir_propagated_back; /* BiDi algo dir of next line */ + guchar dir_propagated_forward; /* BiDi algo dir of prev line */ }; -gint gtk_text_line_get_number (GtkTextLine *line); -gboolean gtk_text_line_char_has_tag (GtkTextLine *line, - GtkTextBTree *tree, - gint char_in_line, - GtkTextTag *tag); -gboolean gtk_text_line_byte_has_tag (GtkTextLine *line, - GtkTextBTree *tree, - gint byte_in_line, - GtkTextTag *tag); -gboolean gtk_text_line_is_last (GtkTextLine *line); -GtkTextLine * gtk_text_line_next (GtkTextLine *line); -GtkTextLine * gtk_text_line_previous (GtkTextLine *line); -void gtk_text_line_add_data (GtkTextLine *line, - GtkTextLineData *data); -gpointer gtk_text_line_remove_data (GtkTextLine *line, - gpointer view_id); -gpointer gtk_text_line_get_data (GtkTextLine *line, - gpointer view_id); -void gtk_text_line_invalidate_wrap (GtkTextLine *line, - GtkTextLineData *ld); -gint gtk_text_line_char_count (GtkTextLine *line); -gint gtk_text_line_byte_count (GtkTextLine *line); -gint gtk_text_line_char_index (GtkTextLine *line); -GtkTextLineSegment *gtk_text_line_byte_to_segment (GtkTextLine *line, - gint byte_offset, - gint *seg_offset); -GtkTextLineSegment *gtk_text_line_char_to_segment (GtkTextLine *line, - gint char_offset, - gint *seg_offset); -void gtk_text_line_byte_locate (GtkTextLine *line, - gint byte_offset, - GtkTextLineSegment **segment, - GtkTextLineSegment **any_segment, - gint *seg_byte_offset, - gint *line_byte_offset); -void gtk_text_line_char_locate (GtkTextLine *line, - gint char_offset, - GtkTextLineSegment **segment, - GtkTextLineSegment **any_segment, - gint *seg_char_offset, - gint *line_char_offset); -void gtk_text_line_byte_to_char_offsets (GtkTextLine *line, - gint byte_offset, - gint *line_char_offset, - gint *seg_char_offset); -void gtk_text_line_char_to_byte_offsets (GtkTextLine *line, - gint char_offset, - gint *line_byte_offset, - gint *seg_byte_offset); -GtkTextLineSegment *gtk_text_line_byte_to_any_segment (GtkTextLine *line, - gint byte_offset, - gint *seg_offset); -GtkTextLineSegment *gtk_text_line_char_to_any_segment (GtkTextLine *line, - gint char_offset, - gint *seg_offset); -gint gtk_text_line_byte_to_char (GtkTextLine *line, - gint byte_offset); -gint gtk_text_line_char_to_byte (GtkTextLine *line, - gint char_offset); -GtkTextLine * gtk_text_line_next_could_contain_tag (GtkTextLine *line, - GtkTextBTree *tree, - GtkTextTag *tag); -GtkTextLine * gtk_text_line_previous_could_contain_tag (GtkTextLine *line, - GtkTextBTree *tree, - GtkTextTag *tag); - +gint _gtk_text_line_get_number (GtkTextLine *line); +gboolean _gtk_text_line_char_has_tag (GtkTextLine *line, + GtkTextBTree *tree, + gint char_in_line, + GtkTextTag *tag); +gboolean _gtk_text_line_byte_has_tag (GtkTextLine *line, + GtkTextBTree *tree, + gint byte_in_line, + GtkTextTag *tag); +gboolean _gtk_text_line_is_last (GtkTextLine *line, + GtkTextBTree *tree); +gboolean _gtk_text_line_contains_end_iter (GtkTextLine *line, + GtkTextBTree *tree); +GtkTextLine * _gtk_text_line_next (GtkTextLine *line); +GtkTextLine * _gtk_text_line_next_excluding_last (GtkTextLine *line); +GtkTextLine * _gtk_text_line_previous (GtkTextLine *line); +void _gtk_text_line_add_data (GtkTextLine *line, + GtkTextLineData *data); +gpointer _gtk_text_line_remove_data (GtkTextLine *line, + gpointer view_id); +gpointer _gtk_text_line_get_data (GtkTextLine *line, + gpointer view_id); +void _gtk_text_line_invalidate_wrap (GtkTextLine *line, + GtkTextLineData *ld); +gint _gtk_text_line_char_count (GtkTextLine *line); +gint _gtk_text_line_byte_count (GtkTextLine *line); +gint _gtk_text_line_char_index (GtkTextLine *line); +GtkTextLineSegment *_gtk_text_line_byte_to_segment (GtkTextLine *line, + gint byte_offset, + gint *seg_offset); +GtkTextLineSegment *_gtk_text_line_char_to_segment (GtkTextLine *line, + gint char_offset, + gint *seg_offset); +gboolean _gtk_text_line_byte_locate (GtkTextLine *line, + gint byte_offset, + GtkTextLineSegment **segment, + GtkTextLineSegment **any_segment, + gint *seg_byte_offset, + gint *line_byte_offset); +gboolean _gtk_text_line_char_locate (GtkTextLine *line, + gint char_offset, + GtkTextLineSegment **segment, + GtkTextLineSegment **any_segment, + gint *seg_char_offset, + gint *line_char_offset); +void _gtk_text_line_byte_to_char_offsets (GtkTextLine *line, + gint byte_offset, + gint *line_char_offset, + gint *seg_char_offset); +void _gtk_text_line_char_to_byte_offsets (GtkTextLine *line, + gint char_offset, + gint *line_byte_offset, + gint *seg_byte_offset); +GtkTextLineSegment *_gtk_text_line_byte_to_any_segment (GtkTextLine *line, + gint byte_offset, + gint *seg_offset); +GtkTextLineSegment *_gtk_text_line_char_to_any_segment (GtkTextLine *line, + gint char_offset, + gint *seg_offset); +gint _gtk_text_line_byte_to_char (GtkTextLine *line, + gint byte_offset); +gint _gtk_text_line_char_to_byte (GtkTextLine *line, + gint char_offset); +GtkTextLine * _gtk_text_line_next_could_contain_tag (GtkTextLine *line, + GtkTextBTree *tree, + GtkTextTag *tag); +GtkTextLine * _gtk_text_line_previous_could_contain_tag (GtkTextLine *line, + GtkTextBTree *tree, + GtkTextTag *tag); + +GtkTextLineData *_gtk_text_line_data_new (GtkTextLayout *layout, + GtkTextLine *line); /* Debug */ -void gtk_text_btree_check (GtkTextBTree *tree); -void gtk_text_btree_spew (GtkTextBTree *tree); -extern gboolean gtk_text_view_debug_btree; +void _gtk_text_btree_check (GtkTextBTree *tree); +void _gtk_text_btree_spew (GtkTextBTree *tree); +extern gboolean _gtk_text_view_debug_btree; /* ignore, exported only for gtktextsegment.c */ -void toggle_segment_check_func (GtkTextLineSegment *segPtr, - GtkTextLine *line); -void change_node_toggle_count (GtkTextBTreeNode *node, - GtkTextTagInfo *info, - gint delta); +void _gtk_toggle_segment_check_func (GtkTextLineSegment *segPtr, + GtkTextLine *line); +void _gtk_change_node_toggle_count (GtkTextBTreeNode *node, + GtkTextTagInfo *info, + gint delta); + +/* for gtktextmark.c */ +void _gtk_text_btree_release_mark_segment (GtkTextBTree *tree, + GtkTextLineSegment *segment); +/* for coordination with the tag table */ +void _gtk_text_btree_notify_will_remove_tag (GtkTextBTree *tree, + GtkTextTag *tag); -#ifdef __cplusplus -} -#endif /* __cplusplus */ +G_END_DECLS #endif