123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- // 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}
|