diff options
author | Matthias Clasen <mclasen@redhat.com> | 2022-10-05 22:59:51 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2022-10-05 23:01:28 -0400 |
commit | 7c5e1c61952a03d8bf45adb54e3121fd5473dcac (patch) | |
tree | 71588457d26843debe57251febb70f247c88a876 /gtk/gtktextsegmentprivate.h | |
parent | 8607312feff19b938a7113aa5ef1338005f1bb58 (diff) | |
download | gtk+-7c5e1c61952a03d8bf45adb54e3121fd5473dcac.tar.gz |
gtk: Rename some private headers
Improve the consistency of our private header
naming, by add 'private' to a bunch of them.
Diffstat (limited to 'gtk/gtktextsegmentprivate.h')
-rw-r--r-- | gtk/gtktextsegmentprivate.h | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/gtk/gtktextsegmentprivate.h b/gtk/gtktextsegmentprivate.h new file mode 100644 index 0000000000..7f59f28e99 --- /dev/null +++ b/gtk/gtktextsegmentprivate.h @@ -0,0 +1,172 @@ +/* GTK - The GIMP Toolkit + * gtktextsegment.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 <http://www.gnu.org/licenses/>. + */ + +/* + * 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_SEGMENT_PRIVATE_H__ +#define __GTK_TEXT_SEGMENT_PRIVATE_H__ + +#include <gtk/gtktexttag.h> +#include <gtk/gtktextiter.h> +#include <gtk/gtktextmarkprivate.h> +#include <gtk/gtktextchild.h> +#include <gtk/gtktextchildprivate.h> + +G_BEGIN_DECLS + +/* + * Segments: each line is divided into one or more segments, where each + * segment is one of several things, such as a group of characters, a + * tag toggle, a mark, or an embedded widget. Each segment starts with + * a standard header followed by a body that varies from type to type. + */ + +/* This header has the segment type, and two specific segments + (character and toggle segments) */ + +/* Information a BTree stores about a tag. */ +typedef struct _GtkTextTagInfo GtkTextTagInfo; +struct _GtkTextTagInfo { + GtkTextTag *tag; + GtkTextBTreeNode *tag_root; /* highest-level node containing the tag */ + int toggle_count; /* total toggles of this tag below tag_root */ +}; + +/* Body of a segment that toggles a tag on or off */ +struct _GtkTextToggleBody { + GtkTextTagInfo *info; /* Tag that starts or ends here. */ + gboolean inNodeCounts; /* TRUE means this toggle has been + * accounted for in node toggle + * counts; FALSE means it hasn't, yet. */ +}; + + +/* Class struct for segments */ + +/* Split seg at index, returning list of two new segments, and freeing seg */ +typedef GtkTextLineSegment* (*GtkTextSegSplitFunc) (GtkTextLineSegment *seg, + int index); + +/* Delete seg which is contained in line; if tree_gone, the tree is being + * freed in its entirety, which may matter for some reason (?) + * Return TRUE if the segment is not deleteable, e.g. a mark. + */ +typedef gboolean (*GtkTextSegDeleteFunc) (GtkTextLineSegment *seg, + GtkTextLine *line, + gboolean tree_gone); + +/* Called after segment structure of line changes, so segments can + * cleanup (e.g. merge with adjacent segments). Returns a segment list + * to replace the original segment list with. The line argument is + * the current line. + */ +typedef GtkTextLineSegment* (*GtkTextSegCleanupFunc) (GtkTextLineSegment *seg, + GtkTextLine *line); + +/* Called when a segment moves from one line to another. CleanupFunc is also + * called in that case, so many segments just use CleanupFunc, I'm not sure + * what’s up with that (this function may not be needed...) + */ +typedef void (*GtkTextSegLineChangeFunc) (GtkTextLineSegment *seg, + GtkTextLine *line); + +/* Called to do debug checks on the segment. */ +typedef void (*GtkTextSegCheckFunc) (GtkTextLineSegment *seg, + GtkTextLine *line); + +struct _GtkTextLineSegmentClass { + const char *name; /* Name of this kind of segment. */ + gboolean leftGravity; /* If a segment has zero size (e.g. a + * mark or tag toggle), does it + * attach to character to its left + * or right? 1 means left, 0 means + * right. */ + GtkTextSegSplitFunc splitFunc; /* Procedure to split large segment + * into two smaller ones. */ + GtkTextSegDeleteFunc deleteFunc; /* Procedure to call to delete + * segment. */ + GtkTextSegCleanupFunc cleanupFunc; /* After any change to a line, this + * procedure is invoked for all + * segments left in the line to + * perform any cleanup they wish + * (e.g. joining neighboring + * segments). */ + GtkTextSegLineChangeFunc lineChangeFunc; + /* Invoked when a segment is about + * to be moved from its current line + * to an earlier line because of + * a deletion. The line is that + * for the segment's old line. + * CleanupFunc will be invoked after + * the deletion is finished. */ + + GtkTextSegCheckFunc checkFunc; /* Called during consistency checks + * to check internal consistency of + * segment. */ +}; + +/* + * The data structure below defines line segments. + */ + +struct _GtkTextLineSegment { + const GtkTextLineSegmentClass *type; /* Pointer to record describing + * segment's type. */ + GtkTextLineSegment *next; /* Next in list of segments for this + * line, or NULL for end of list. */ + + int char_count; /* # of chars of index space occupied */ + + int byte_count; /* Size of this segment (# of bytes + * of index space it occupies). */ + union { + char chars[4]; /* Characters that make up character + * info. Actual length varies to + * hold as many characters as needed.*/ + GtkTextToggleBody toggle; /* Information about tag toggle. */ + GtkTextMarkBody mark; /* Information about mark. */ + GtkTextPaintable paintable; /* Child texture */ + GtkTextChildBody child; /* Child widget */ + } body; +}; + + +GtkTextLineSegment *gtk_text_line_segment_split (const GtkTextIter *iter); + +GtkTextLineSegment *_gtk_char_segment_new (const char *text, + guint len); +GtkTextLineSegment *_gtk_char_segment_new_from_two_strings (const char *text1, + guint len1, + guint chars1, + const char *text2, + guint len2, + guint chars2); +GtkTextLineSegment *_gtk_toggle_segment_new (GtkTextTagInfo *info, + gboolean on); + +void _gtk_toggle_segment_free (GtkTextLineSegment *seg); + +G_END_DECLS + +#endif + + |