diff options
Diffstat (limited to 'packages/gtk2/src/gtk+/gtk/gtktextsegment.inc')
-rw-r--r-- | packages/gtk2/src/gtk+/gtk/gtktextsegment.inc | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/packages/gtk2/src/gtk+/gtk/gtktextsegment.inc b/packages/gtk2/src/gtk+/gtk/gtktextsegment.inc new file mode 100644 index 0000000000..b16f9fdb43 --- /dev/null +++ b/packages/gtk2/src/gtk+/gtk/gtktextsegment.inc @@ -0,0 +1,149 @@ +// included by gtk2.pas + +{$IFDEF read_forward_definitions} +{$ENDIF read_forward_definitions} + +//------------------------------------------------------------------------------ + +{$IFDEF read_interface_types} + PGtkTextLineSegment = ^TGtkTextLineSegment; + PGtkTextLineSegmentClass = ^TGtkTextLineSegmentClass; + +{ + 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. } +{ highest-level node containing the tag } +{ total toggles of this tag below tag_root } + PGtkTextTagInfo = ^TGtkTextTagInfo; + TGtkTextTagInfo = record + tag : PGtkTextTag; + tag_root : PGtkTextBTreeNode; + toggle_count : gint; + end; + +{ Body of a segment that toggles a tag on or off } +{ Tag that starts or ends here. } +{ TRUE means this toggle has been + accounted for in node toggle + counts; FALSE means it hasn't, yet. } + PGtkTextToggleBody = ^TGtkTextToggleBody; + TGtkTextToggleBody = record + info : PGtkTextTagInfo; + inNodeCounts : gboolean; + end; + +{ + The data structure below defines line segments. + } +{ Pointer to record describing + segment's type. } +{ Next in list of segments for this + line, or NULL for theEnd of list. } +{ # of chars of index space occupied } +{ Size of this segment (# of bytes + of index space it occupies). } +{ Characters that make up character + info. Actual length varies to + hold as many characters as needed. } +{ Information about tag toggle. } +{ Information about mark. } +{ Child pixbuf } +{ Child widget } + TGtkTextLineSegment = record + _type : PGtkTextLineSegmentClass; + next : PGtkTextLineSegment; + char_count : longint; + byte_count : longint; + body : record + case longint of + 0 : ( chars : array[0..3] of char ); + 1 : ( toggle : TGtkTextToggleBody ); + 2 : ( mark : TGtkTextMarkBody ); + 3 : ( pixbuf : TGtkTextPixbuf ); + 4 : ( child : TGtkTextChildBody ); + end; + end; + + +{ Class struct for segments } +{ Split seg at index, returning list of two new segments, and freeing seg } + + PGtkTextSegSplitFunc = ^TGtkTextSegSplitFunc; + TGtkTextSegSplitFunc = TGtkTextLineSegment; +{ 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. + } + + TGtkTextSegDeleteFunc = function (seg:PGtkTextLineSegment; line:PGtkTextLine; tree_gone:gboolean):gboolean; cdecl; +{ 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. + } + + PGtkTextSegCleanupFunc = ^TGtkTextSegCleanupFunc; + TGtkTextSegCleanupFunc = TGtkTextLineSegment; +{ 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...) + } + + TGtkTextSegLineChangeFunc = procedure (seg:PGtkTextLineSegment; line:PGtkTextLine); cdecl; +{ Called to do debug checks on the segment. } + + TGtkTextSegCheckFunc = procedure (seg:PGtkTextLineSegment; line:PGtkTextLine); cdecl; +{ Name of this kind of segment. } +{ 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. } +{ Procedure to split large segment + into two smaller ones. } +{ Procedure to call to delete + segment. } +{ 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). } +{ 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. } +{ Called during consistency checks + to check internal consistency of + segment. } + TGtkTextLineSegmentClass = record + name : Pchar; + leftGravity : gboolean; + splitFunc : TGtkTextSegSplitFunc; + deleteFunc : TGtkTextSegDeleteFunc; + cleanupFunc : TGtkTextSegCleanupFunc; + lineChangeFunc : TGtkTextSegLineChangeFunc; + checkFunc : TGtkTextSegCheckFunc; + end; + +{$ENDIF read_interface_types} + +//------------------------------------------------------------------------------ + +{$IFDEF read_interface_rest} +function gtk_text_line_segment_split(iter:PGtkTextIter):PGtkTextLineSegment; cdecl; external gtklib; +function _gtk_char_segment_new(text:Pgchar; len:guint):PGtkTextLineSegment; cdecl; external gtklib; + +function _gtk_char_segment_new_from_two_strings(text1:Pgchar; len1:guint; text2:Pgchar; len2:guint):PGtkTextLineSegment; cdecl; external gtklib; +function _gtk_toggle_segment_new(info:PGtkTextTagInfo; StateOn:gboolean):PGtkTextLineSegment; cdecl; external gtklib; +{$ENDIF read_interface_rest} + |