gtktext.pp 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. {
  2. $Id$
  3. }
  4. {****************************************************************************
  5. Interface
  6. ****************************************************************************}
  7. {$ifdef read_interface}
  8. type
  9. PGtkTextFont = pointer;
  10. PGtkPropertyMark = ^TGtkPropertyMark;
  11. TGtkPropertyMark = record
  12. theproperty : PGList;
  13. theoffset : guint;
  14. theindex : guint;
  15. end;
  16. PGtkText = ^TGtkText;
  17. TGtkText = record
  18. editable : TGtkEditable;
  19. text_area : PGdkWindow;
  20. hadj : PGtkAdjustment;
  21. vadj : PGtkAdjustment;
  22. gc : PGdkGC;
  23. line_wrap_bitmap : PGdkPixmap;
  24. line_arrow_bitmap : PGdkPixmap;
  25. text : record
  26. case longint of
  27. 0 : ( wc : PGdkWChar );
  28. 1 : ( ch : Pguchar );
  29. end;
  30. text_len : guint;
  31. gap_position : guint;
  32. gap_size : guint;
  33. text_end : guint;
  34. line_start_cache : PGList;
  35. first_line_start_index : guint;
  36. first_cut_pixels : guint;
  37. first_onscreen_hor_pixel : guint;
  38. first_onscreen_ver_pixel : guint;
  39. flag0 : {$ifdef win32}longint{$else}word{$endif};
  40. freeze_count : guint;
  41. text_properties : PGList;
  42. text_properties_end : PGList;
  43. point : TGtkPropertyMark;
  44. scratch_buffer : record
  45. case longint of
  46. 0 : ( wc : PGdkWChar );
  47. 1 : ( ch : Pguchar );
  48. end;
  49. scratch_buffer_len : guint;
  50. last_ver_value : gint;
  51. cursor_pos_x : gint;
  52. cursor_pos_y : gint;
  53. cursor_mark : TGtkPropertyMark;
  54. cursor_char : TGdkWChar;
  55. cursor_char_offset : gchar;
  56. cursor_virtual_x : gint;
  57. cursor_drawn_level : gint;
  58. current_line : PGList;
  59. tab_stops : PGList;
  60. default_tab_width : gint;
  61. current_font : PGtkTextFont;
  62. timer : gint;
  63. button : guint;
  64. bg_gc : PGdkGC;
  65. end;
  66. const
  67. bm_TGtkText_line_wrap = $1;
  68. bp_TGtkText_line_wrap = 0;
  69. bm_TGtkText_word_wrap = $2;
  70. bp_TGtkText_word_wrap = 1;
  71. bm_TGtkText_use_wchar = $4;
  72. bp_TGtkText_use_wchar = 2;
  73. function line_wrap(var a : TGtkText) : guint;
  74. procedure set_line_wrap(var a : TGtkText; __line_wrap : guint);
  75. function word_wrap(var a : TGtkText) : guint;
  76. procedure set_word_wrap(var a : TGtkText; __word_wrap : guint);
  77. function use_wchar(var a : TGtkText) : guint;
  78. procedure set_use_wchar(var a : TGtkText; __use_wchar : guint);
  79. type
  80. PGtkTextClass = ^TGtkTextClass;
  81. TGtkTextClass = record
  82. parent_class : TGtkEditableClass;
  83. set_scroll_adjustments : procedure (text:PGtkText; hadjustment:PGtkAdjustment; vadjustment:PGtkAdjustment);cdecl;
  84. end;
  85. Type
  86. GTK_TEXT=PGtkText;
  87. GTK_TEXT_CLASS=PGtkTextClass;
  88. function GTK_TEXT_INDEX(t:PGtkText; index:longint):char;
  89. function GTK_TEXT_TYPE:TGtkType;cdecl;external gtkdll name 'gtk_text_get_type';
  90. function GTK_IS_TEXT(obj:pointer):boolean;
  91. function GTK_IS_TEXT_CLASS(klass:pointer):boolean;
  92. function gtk_text_get_type:TGtkType;cdecl;external gtkdll name 'gtk_text_get_type';
  93. function gtk_text_new(hadj:PGtkAdjustment; vadj:PGtkAdjustment):PGtkWidget;cdecl;external gtkdll name 'gtk_text_new';
  94. procedure gtk_text_set_editable(text:PGtkText; editable:gboolean);cdecl;external gtkdll name 'gtk_text_set_editable';
  95. procedure gtk_text_set_word_wrap(text:PGtkText; word_wrap:gint);cdecl;external gtkdll name 'gtk_text_set_word_wrap';
  96. procedure gtk_text_set_line_wrap(text:PGtkText; line_wrap:gint);cdecl;external gtkdll name 'gtk_text_set_line_wrap';
  97. procedure gtk_text_set_adjustments(text:PGtkText; hadj:PGtkAdjustment; vadj:PGtkAdjustment);cdecl;external gtkdll name 'gtk_text_set_adjustments';
  98. procedure gtk_text_set_point(text:PGtkText; index:guint);cdecl;external gtkdll name 'gtk_text_set_point';
  99. function gtk_text_get_point(text:PGtkText):guint;cdecl;external gtkdll name 'gtk_text_get_point';
  100. function gtk_text_get_length(text:PGtkText):guint;cdecl;external gtkdll name 'gtk_text_get_length';
  101. procedure gtk_text_freeze(text:PGtkText);cdecl;external gtkdll name 'gtk_text_freeze';
  102. procedure gtk_text_thaw(text:PGtkText);cdecl;external gtkdll name 'gtk_text_thaw';
  103. procedure gtk_text_insert(text:PGtkText; font:PGdkFont; fore:PGdkColor; back:PGdkColor; chars:pchar; length:gint);cdecl;external gtkdll name 'gtk_text_insert';
  104. function gtk_text_backward_delete(text:PGtkText; nchars:guint):gint;cdecl;external gtkdll name 'gtk_text_backward_delete';
  105. function gtk_text_forward_delete(text:PGtkText; nchars:guint):gint;cdecl;external gtkdll name 'gtk_text_forward_delete';
  106. {$endif read_interface}
  107. {****************************************************************************
  108. Implementation
  109. ****************************************************************************}
  110. {$ifdef read_implementation}
  111. function line_wrap(var a : TGtkText) : guint;
  112. begin
  113. line_wrap:=(a.flag0 and bm_TGtkText_line_wrap) shr bp_TGtkText_line_wrap;
  114. end;
  115. procedure set_line_wrap(var a : TGtkText; __line_wrap : guint);
  116. begin
  117. a.flag0:=a.flag0 or ((__line_wrap shl bp_TGtkText_line_wrap) and bm_TGtkText_line_wrap);
  118. end;
  119. function word_wrap(var a : TGtkText) : guint;
  120. begin
  121. word_wrap:=(a.flag0 and bm_TGtkText_word_wrap) shr bp_TGtkText_word_wrap;
  122. end;
  123. procedure set_word_wrap(var a : TGtkText; __word_wrap : guint);
  124. begin
  125. a.flag0:=a.flag0 or ((__word_wrap shl bp_TGtkText_word_wrap) and bm_TGtkText_word_wrap);
  126. end;
  127. function use_wchar(var a : TGtkText) : guint;
  128. begin
  129. use_wchar:=(a.flag0 and bm_TGtkText_use_wchar) shr bp_TGtkText_use_wchar;
  130. end;
  131. procedure set_use_wchar(var a : TGtkText; __use_wchar : guint);
  132. begin
  133. a.flag0:=a.flag0 or ((__use_wchar shl bp_TGtkText_use_wchar) and bm_TGtkText_use_wchar);
  134. end;
  135. function GTK_TEXT_INDEX(t:PGtkText; index:longint):char;
  136. begin
  137. if use_wchar(t^)<>0 then
  138. begin
  139. if index<t^.gap_position then
  140. GTK_TEXT_INDEX:=char(TGdkWchar(t^.text.wc[index]))
  141. else
  142. GTK_TEXT_INDEX:=char(TGdkWchar(t^.text.wc[index+t^.gap_position]));
  143. end
  144. else
  145. begin
  146. if index<t^.gap_position then
  147. GTK_TEXT_INDEX:=t^.text.ch[index]
  148. else
  149. GTK_TEXT_INDEX:=t^.text.ch[index+t^.gap_position];
  150. end;
  151. end;
  152. function GTK_IS_TEXT(obj:pointer):boolean;
  153. begin
  154. GTK_IS_TEXT:=(obj<>nil) and GTK_IS_TEXT_CLASS(PGtkTypeObject(obj)^.klass);
  155. end;
  156. function GTK_IS_TEXT_CLASS(klass:pointer):boolean;
  157. begin
  158. GTK_IS_TEXT_CLASS:=(klass<>nil) and (PGtkTypeClass(klass)^.thetype=GTK_TEXT_TYPE);
  159. end;
  160. {$endif read_implementation}
  161. {
  162. $Log$
  163. Revision 1.3 2003-08-06 07:28:21 michael
  164. + Patch from Marc Weustinck to fix Win32 version
  165. Revision 1.2 2002/09/07 15:43:00 peter
  166. * old logs removed and tabs fixed
  167. Revision 1.1 2002/01/29 17:55:13 peter
  168. * splitted to base and extra
  169. }