1 /* 2 * This file is part of gtkD. 3 * 4 * gtkD is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU Lesser General Public License 6 * as published by the Free Software Foundation; either version 3 7 * of the License, or (at your option) any later version, with 8 * some exceptions, please read the COPYING file. 9 * 10 * gtkD is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public License 16 * along with gtkD; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA 18 */ 19 20 // generated automatically - do not change 21 // find conversion definition on APILookup.txt 22 // implement new conversion functionalities on the wrap.utils pakage 23 24 /* 25 * Conversion parameters: 26 * inFile = GtkSourceGutterRenderer.html 27 * outPack = gsv 28 * outFile = SourceGutterRenderer 29 * strct = GtkSourceGutterRenderer 30 * realStrct= 31 * ctorStrct= 32 * clss = SourceGutterRenderer 33 * interf = 34 * class Code: No 35 * interface Code: No 36 * template for: 37 * extend = GObject 38 * implements: 39 * prefixes: 40 * - gtk_source_gutter_renderer_ 41 * omit structs: 42 * omit prefixes: 43 * omit code: 44 * omit signals: 45 * imports: 46 * - cairo.Context 47 * - gdk.Event 48 * - gdk.RGBA 49 * - gtk.TextIter 50 * - gtk.TextView 51 * - gtk.Tooltip 52 * structWrap: 53 * - GdkEvent* -> Event 54 * - GdkRGBA* -> RGBA 55 * - GtkSourceGutterRenderer* -> SourceGutterRenderer 56 * - GtkTextIter* -> TextIter 57 * - GtkTextView* -> TextView 58 * - GtkTooltip* -> Tooltip 59 * - cairo_t* -> Context 60 * module aliases: 61 * local aliases: 62 * overrides: 63 */ 64 65 module gsv.SourceGutterRenderer; 66 67 public import gsvc.gsvtypes; 68 69 private import gsvc.gsv; 70 private import glib.ConstructionException; 71 private import gobject.ObjectG; 72 73 private import gobject.Signals; 74 public import gtkc.gdktypes; 75 private import cairo.Context; 76 private import gdk.Event; 77 private import gdk.RGBA; 78 private import gtk.TextIter; 79 private import gtk.TextView; 80 private import gtk.Tooltip; 81 82 83 private import gobject.ObjectG; 84 85 /** 86 */ 87 public class SourceGutterRenderer : ObjectG 88 { 89 90 /** the main Gtk struct */ 91 protected GtkSourceGutterRenderer* gtkSourceGutterRenderer; 92 93 94 /** Get the main Gtk struct */ 95 public GtkSourceGutterRenderer* getSourceGutterRendererStruct() 96 { 97 return gtkSourceGutterRenderer; 98 } 99 100 101 /** the main Gtk struct as a void* */ 102 protected override void* getStruct() 103 { 104 return cast(void*)gtkSourceGutterRenderer; 105 } 106 107 /** 108 * Sets our main struct and passes it to the parent class 109 */ 110 public this (GtkSourceGutterRenderer* gtkSourceGutterRenderer) 111 { 112 super(cast(GObject*)gtkSourceGutterRenderer); 113 this.gtkSourceGutterRenderer = gtkSourceGutterRenderer; 114 } 115 116 protected override void setStruct(GObject* obj) 117 { 118 super.setStruct(obj); 119 gtkSourceGutterRenderer = cast(GtkSourceGutterRenderer*)obj; 120 } 121 122 /** 123 */ 124 int[string] connectedSignals; 125 126 void delegate(TextIter, GdkRectangle*, Event, SourceGutterRenderer)[] onActivateListeners; 127 /** 128 * The ::activate signal is emitted when the renderer is 129 * activated. 130 */ 131 void addOnActivate(void delegate(TextIter, GdkRectangle*, Event, SourceGutterRenderer) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 132 { 133 if ( !("activate" in connectedSignals) ) 134 { 135 Signals.connectData( 136 getStruct(), 137 "activate", 138 cast(GCallback)&callBackActivate, 139 cast(void*)this, 140 null, 141 connectFlags); 142 connectedSignals["activate"] = 1; 143 } 144 onActivateListeners ~= dlg; 145 } 146 extern(C) static void callBackActivate(GtkSourceGutterRenderer* rendererStruct, GtkTextIter* iter, GdkRectangle* area, GdkEvent* event, SourceGutterRenderer _sourceGutterRenderer) 147 { 148 foreach ( void delegate(TextIter, GdkRectangle*, Event, SourceGutterRenderer) dlg ; _sourceGutterRenderer.onActivateListeners ) 149 { 150 dlg(ObjectG.getDObject!(TextIter)(iter), area, ObjectG.getDObject!(Event)(event), _sourceGutterRenderer); 151 } 152 } 153 154 bool delegate(TextIter, GdkRectangle*, Event, SourceGutterRenderer)[] onQueryActivatableListeners; 155 /** 156 * The ::query-activatable signal is emitted when the renderer 157 * can possibly be activated. 158 */ 159 void addOnQueryActivatable(bool delegate(TextIter, GdkRectangle*, Event, SourceGutterRenderer) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 160 { 161 if ( !("query-activatable" in connectedSignals) ) 162 { 163 Signals.connectData( 164 getStruct(), 165 "query-activatable", 166 cast(GCallback)&callBackQueryActivatable, 167 cast(void*)this, 168 null, 169 connectFlags); 170 connectedSignals["query-activatable"] = 1; 171 } 172 onQueryActivatableListeners ~= dlg; 173 } 174 extern(C) static gboolean callBackQueryActivatable(GtkSourceGutterRenderer* rendererStruct, GtkTextIter* iter, GdkRectangle* area, GdkEvent* event, SourceGutterRenderer _sourceGutterRenderer) 175 { 176 foreach ( bool delegate(TextIter, GdkRectangle*, Event, SourceGutterRenderer) dlg ; _sourceGutterRenderer.onQueryActivatableListeners ) 177 { 178 if ( dlg(ObjectG.getDObject!(TextIter)(iter), area, ObjectG.getDObject!(Event)(event), _sourceGutterRenderer) ) 179 { 180 return 1; 181 } 182 } 183 184 return 0; 185 } 186 187 void delegate(TextIter, TextIter, GtkSourceGutterRendererState, SourceGutterRenderer)[] onQueryDataListeners; 188 /** 189 * The ::query-data signal is emitted when the renderer needs 190 * to be filled with data just before a cell is drawn. This can 191 * be used by general renderer implementations to allow render 192 * data to be filled in externally. 193 */ 194 void addOnQueryData(void delegate(TextIter, TextIter, GtkSourceGutterRendererState, SourceGutterRenderer) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 195 { 196 if ( !("query-data" in connectedSignals) ) 197 { 198 Signals.connectData( 199 getStruct(), 200 "query-data", 201 cast(GCallback)&callBackQueryData, 202 cast(void*)this, 203 null, 204 connectFlags); 205 connectedSignals["query-data"] = 1; 206 } 207 onQueryDataListeners ~= dlg; 208 } 209 extern(C) static void callBackQueryData(GtkSourceGutterRenderer* rendererStruct, GtkTextIter* start, GtkTextIter* end, GtkSourceGutterRendererState state, SourceGutterRenderer _sourceGutterRenderer) 210 { 211 foreach ( void delegate(TextIter, TextIter, GtkSourceGutterRendererState, SourceGutterRenderer) dlg ; _sourceGutterRenderer.onQueryDataListeners ) 212 { 213 dlg(ObjectG.getDObject!(TextIter)(start), ObjectG.getDObject!(TextIter)(end), state, _sourceGutterRenderer); 214 } 215 } 216 217 bool delegate(TextIter, GdkRectangle*, gint, gint, Tooltip, SourceGutterRenderer)[] onQueryTooltipListeners; 218 /** 219 * The ::query-tooltip signal is emitted when the renderer can 220 * show a tooltip. 221 */ 222 void addOnQueryTooltip(bool delegate(TextIter, GdkRectangle*, gint, gint, Tooltip, SourceGutterRenderer) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 223 { 224 if ( !("query-tooltip" in connectedSignals) ) 225 { 226 Signals.connectData( 227 getStruct(), 228 "query-tooltip", 229 cast(GCallback)&callBackQueryTooltip, 230 cast(void*)this, 231 null, 232 connectFlags); 233 connectedSignals["query-tooltip"] = 1; 234 } 235 onQueryTooltipListeners ~= dlg; 236 } 237 extern(C) static gboolean callBackQueryTooltip(GtkSourceGutterRenderer* rendererStruct, GtkTextIter* iter, GdkRectangle* area, gint x, gint y, GtkTooltip* tooltip, SourceGutterRenderer _sourceGutterRenderer) 238 { 239 foreach ( bool delegate(TextIter, GdkRectangle*, gint, gint, Tooltip, SourceGutterRenderer) dlg ; _sourceGutterRenderer.onQueryTooltipListeners ) 240 { 241 if ( dlg(ObjectG.getDObject!(TextIter)(iter), area, x, y, ObjectG.getDObject!(Tooltip)(tooltip), _sourceGutterRenderer) ) 242 { 243 return 1; 244 } 245 } 246 247 return 0; 248 } 249 250 void delegate(SourceGutterRenderer)[] onQueueDrawListeners; 251 /** 252 * The ::queue-draw signal is emitted when the renderer needs 253 * to be redrawn. Use gtk_source_gutter_renderer_queue_draw() 254 * to emit this signal from an implementation of the 255 * GtkSourceGutterRenderer interface. 256 */ 257 void addOnQueueDraw(void delegate(SourceGutterRenderer) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 258 { 259 if ( !("queue-draw" in connectedSignals) ) 260 { 261 Signals.connectData( 262 getStruct(), 263 "queue-draw", 264 cast(GCallback)&callBackQueueDraw, 265 cast(void*)this, 266 null, 267 connectFlags); 268 connectedSignals["queue-draw"] = 1; 269 } 270 onQueueDrawListeners ~= dlg; 271 } 272 extern(C) static void callBackQueueDraw(GtkSourceGutterRenderer* rendererStruct, SourceGutterRenderer _sourceGutterRenderer) 273 { 274 foreach ( void delegate(SourceGutterRenderer) dlg ; _sourceGutterRenderer.onQueueDrawListeners ) 275 { 276 dlg(_sourceGutterRenderer); 277 } 278 } 279 280 281 /** 282 * Called when drawing a region begins. The region to be drawn is indicated 283 * by start and end. The purpose is to allow the implementation to precompute 284 * some state before the ::draw method is called for each cell. 285 * Params: 286 * cr = a cairo_t 287 * backgroundArea = a GdkRectangle 288 * cellArea = a GdkRectangle 289 * start = a GtkTextIter 290 * end = a GtkTextIter 291 */ 292 public void begin(Context cr, ref Rectangle backgroundArea, ref Rectangle cellArea, TextIter start, TextIter end) 293 { 294 // void gtk_source_gutter_renderer_begin (GtkSourceGutterRenderer *renderer, cairo_t *cr, GdkRectangle *background_area, GdkRectangle *cell_area, GtkTextIter *start, GtkTextIter *end); 295 gtk_source_gutter_renderer_begin(gtkSourceGutterRenderer, (cr is null) ? null : cr.getContextStruct(), &backgroundArea, &cellArea, (start is null) ? null : start.getTextIterStruct(), (end is null) ? null : end.getTextIterStruct()); 296 } 297 298 /** 299 * Main renderering method. Implementations should implement this method to 300 * draw onto the cairo context. The background_area indicates total area of 301 * the cell (without padding or margin) to be drawn. The cell_area indicates 302 * the area where content can be drawn (text, images, etc). 303 * The state argument indicates the current state of the renderer and should 304 * be taken into account to properly draw the different possible states 305 * (cursor, prelit, selected) if appropriate. 306 * Params: 307 * cr = the cairo render context 308 * backgroundArea = a GdkRectangle indicating the total area to be drawn 309 * cellArea = a GdkRectangle indicating the area to draw content 310 * start = a GtkTextIter 311 * end = a GtkTextIter 312 * state = a GtkSourceGutterRendererState 313 */ 314 public void draw(Context cr, ref Rectangle backgroundArea, ref Rectangle cellArea, TextIter start, TextIter end, GtkSourceGutterRendererState state) 315 { 316 // void gtk_source_gutter_renderer_draw (GtkSourceGutterRenderer *renderer, cairo_t *cr, GdkRectangle *background_area, GdkRectangle *cell_area, GtkTextIter *start, GtkTextIter *end, GtkSourceGutterRendererState state); 317 gtk_source_gutter_renderer_draw(gtkSourceGutterRenderer, (cr is null) ? null : cr.getContextStruct(), &backgroundArea, &cellArea, (start is null) ? null : start.getTextIterStruct(), (end is null) ? null : end.getTextIterStruct(), state); 318 } 319 320 /** 321 * Called when drawing a region of lines has ended. 322 */ 323 public void end() 324 { 325 // void gtk_source_gutter_renderer_end (GtkSourceGutterRenderer *renderer); 326 gtk_source_gutter_renderer_end(gtkSourceGutterRenderer); 327 } 328 329 /** 330 * Get the size of the renderer. 331 * Returns: the size of the renderer. 332 */ 333 public int getSize() 334 { 335 // gint gtk_source_gutter_renderer_get_size (GtkSourceGutterRenderer *renderer); 336 return gtk_source_gutter_renderer_get_size(gtkSourceGutterRenderer); 337 } 338 339 /** 340 * Sets the size of the renderer. A value of -1 specifies that the size 341 * is to be determined dynamically. 342 * Params: 343 * size = the size 344 */ 345 public void setSize(int size) 346 { 347 // void gtk_source_gutter_renderer_set_size (GtkSourceGutterRenderer *renderer, gint size); 348 gtk_source_gutter_renderer_set_size(gtkSourceGutterRenderer, size); 349 } 350 351 /** 352 * Set whether the gutter renderer is visible. 353 * Params: 354 * visible = the visibility 355 */ 356 public void setVisible(int visible) 357 { 358 // void gtk_source_gutter_renderer_set_visible (GtkSourceGutterRenderer *renderer, gboolean visible); 359 gtk_source_gutter_renderer_set_visible(gtkSourceGutterRenderer, visible); 360 } 361 362 /** 363 * Get whether the gutter renderer is visible. 364 * Returns: TRUE if the renderer is visible, FALSE otherwise 365 */ 366 public int getVisible() 367 { 368 // gboolean gtk_source_gutter_renderer_get_visible (GtkSourceGutterRenderer *renderer); 369 return gtk_source_gutter_renderer_get_visible(gtkSourceGutterRenderer); 370 } 371 372 /** 373 * Get the x-padding and y-padding of the gutter renderer. 374 * Params: 375 * xpad = return location for the x-padding (can be NULL). [out caller-allocates][allow-none] 376 * ypad = return location for the y-padding (can be NULL). [out caller-allocates][allow-none] 377 */ 378 public void getPadding(out int xpad, out int ypad) 379 { 380 // void gtk_source_gutter_renderer_get_padding (GtkSourceGutterRenderer *renderer, gint *xpad, gint *ypad); 381 gtk_source_gutter_renderer_get_padding(gtkSourceGutterRenderer, &xpad, &ypad); 382 } 383 384 /** 385 * Set the padding of the gutter renderer. Both xpad and ypad can be 386 * -1, which means the values will not be changed (this allows changing only 387 * one of the values). 388 * Params: 389 * xpad = the x-padding 390 * ypad = the y-padding 391 */ 392 public void setPadding(int xpad, int ypad) 393 { 394 // void gtk_source_gutter_renderer_set_padding (GtkSourceGutterRenderer *renderer, gint xpad, gint ypad); 395 gtk_source_gutter_renderer_set_padding(gtkSourceGutterRenderer, xpad, ypad); 396 } 397 398 /** 399 * Get the x-alignment and y-alignment of the gutter renderer. 400 * Params: 401 * xalign = return location for the x-alignment (can be NULL). [out caller-allocates][allow-none] 402 * yalign = return location for the y-alignment (can be NULL). [out caller-allocates][allow-none] 403 */ 404 public void getAlignment(out float xalign, out float yalign) 405 { 406 // void gtk_source_gutter_renderer_get_alignment (GtkSourceGutterRenderer *renderer, gfloat *xalign, gfloat *yalign); 407 gtk_source_gutter_renderer_get_alignment(gtkSourceGutterRenderer, &xalign, &yalign); 408 } 409 410 /** 411 * Set the alignment of the gutter renderer. Both xalign and yalign can be 412 * -1, which means the values will not be changed (this allows changing only 413 * one of the values). 414 * Params: 415 * xalign = the x-alignment 416 * yalign = the y-alignment 417 */ 418 public void setAlignment(float xalign, float yalign) 419 { 420 // void gtk_source_gutter_renderer_set_alignment (GtkSourceGutterRenderer *renderer, gfloat xalign, gfloat yalign); 421 gtk_source_gutter_renderer_set_alignment(gtkSourceGutterRenderer, xalign, yalign); 422 } 423 424 /** 425 * Set the alignment mode. The alignment mode describes the manner in which the 426 * renderer is aligned (see :xalign and :yalign). 427 * Params: 428 * mode = a GtkSourceGutterRendererAlignmentMode 429 */ 430 public void setAlignmentMode(GtkSourceGutterRendererAlignmentMode mode) 431 { 432 // void gtk_source_gutter_renderer_set_alignment_mode (GtkSourceGutterRenderer *renderer, GtkSourceGutterRendererAlignmentMode mode); 433 gtk_source_gutter_renderer_set_alignment_mode(gtkSourceGutterRenderer, mode); 434 } 435 436 /** 437 * Get the GtkTextWindowType associated with the gutter renderer. 438 * Returns: a GtkTextWindowType 439 */ 440 public GtkTextWindowType getWindowType() 441 { 442 // GtkTextWindowType gtk_source_gutter_renderer_get_window_type (GtkSourceGutterRenderer *renderer); 443 return gtk_source_gutter_renderer_get_window_type(gtkSourceGutterRenderer); 444 } 445 446 /** 447 * Get the view associated to the gutter renderer 448 * Returns: a GtkTextView. [transfer none] 449 */ 450 public TextView getView() 451 { 452 // GtkTextView * gtk_source_gutter_renderer_get_view (GtkSourceGutterRenderer *renderer); 453 auto p = gtk_source_gutter_renderer_get_view(gtkSourceGutterRenderer); 454 455 if(p is null) 456 { 457 return null; 458 } 459 460 return ObjectG.getDObject!(TextView)(cast(GtkTextView*) p); 461 } 462 463 /** 464 * Get the alignment mode. The alignment mode describes the manner in which the 465 * renderer is aligned (see :xalign and :yalign). 466 * Returns: a GtkSourceGutterRendererAlignmentMode 467 */ 468 public GtkSourceGutterRendererAlignmentMode getAlignmentMode() 469 { 470 // GtkSourceGutterRendererAlignmentMode gtk_source_gutter_renderer_get_alignment_mode (GtkSourceGutterRenderer *renderer); 471 return gtk_source_gutter_renderer_get_alignment_mode(gtkSourceGutterRenderer); 472 } 473 474 /** 475 * Get the background color of the renderer. 476 * Params: 477 * color = return value for a GdkRGBA. [out caller-allocates][allow-none] 478 * Returns: TRUE if the background color is set, FALSE otherwise 479 */ 480 public int getBackground(RGBA color) 481 { 482 // gboolean gtk_source_gutter_renderer_get_background (GtkSourceGutterRenderer *renderer, GdkRGBA *color); 483 return gtk_source_gutter_renderer_get_background(gtkSourceGutterRenderer, (color is null) ? null : color.getRGBAStruct()); 484 } 485 486 /** 487 * Set the background color of the renderer. If color is set to NULL, the 488 * renderer will not have a background color. 489 * Params: 490 * color = a GdkRGBA or NULL. [allow-none] 491 */ 492 public void setBackground(RGBA color) 493 { 494 // void gtk_source_gutter_renderer_set_background (GtkSourceGutterRenderer *renderer, const GdkRGBA *color); 495 gtk_source_gutter_renderer_set_background(gtkSourceGutterRenderer, (color is null) ? null : color.getRGBAStruct()); 496 } 497 498 /** 499 * Emits the ::activate signal of the renderer. This is called from 500 * GtkSourceGutter and should never have to be called manually. 501 * Params: 502 * iter = a GtkTextIter at the start of the line where the renderer is activated 503 * area = a GdkRectangle of the cell area where the renderer is activated 504 * event = the event that triggered the activation 505 */ 506 public void activate(TextIter iter, ref Rectangle area, Event event) 507 { 508 // void gtk_source_gutter_renderer_activate (GtkSourceGutterRenderer *renderer, GtkTextIter *iter, GdkRectangle *area, GdkEvent *event); 509 gtk_source_gutter_renderer_activate(gtkSourceGutterRenderer, (iter is null) ? null : iter.getTextIterStruct(), &area, (event is null) ? null : event.getEventStruct()); 510 } 511 512 /** 513 * Get whether the renderer is activatable at the location in event. This is 514 * called from GtkSourceGutter to determine whether a renderer is activatable 515 * using the mouse pointer. 516 * Params: 517 * iter = a GtkTextIter at the start of the line to be activated 518 * area = a GdkRectangle of the cell area to be activated 519 * event = the event that triggered the query 520 * Returns: TRUE if the renderer can be activated, FALSE otherwise 521 */ 522 public int queryActivatable(TextIter iter, ref Rectangle area, Event event) 523 { 524 // gboolean gtk_source_gutter_renderer_query_activatable (GtkSourceGutterRenderer *renderer, GtkTextIter *iter, GdkRectangle *area, GdkEvent *event); 525 return gtk_source_gutter_renderer_query_activatable(gtkSourceGutterRenderer, (iter is null) ? null : iter.getTextIterStruct(), &area, (event is null) ? null : event.getEventStruct()); 526 } 527 528 /** 529 * Emits the ::queue-draw signal of the renderer. Call this from an 530 * implementation to inform that the renderer has changed such that it needs 531 * to redraw. 532 */ 533 public void queueDraw() 534 { 535 // void gtk_source_gutter_renderer_queue_draw (GtkSourceGutterRenderer *renderer); 536 gtk_source_gutter_renderer_queue_draw(gtkSourceGutterRenderer); 537 } 538 539 /** 540 * Emits the ::query-tooltip signal. This function is called from 541 * GtkSourceGutter. Implementations can override the default signal handler 542 * or can connect to the signal externally. 543 * Params: 544 * iter = a GtkTextIter. 545 * area = a GdkRectangle. 546 * x = The x position of the tooltip. 547 * y = The y position of the tooltip. 548 * tooltip = a GtkTooltip. 549 * Returns: TRUE if the tooltip has been set, FALSE otherwise 550 */ 551 public int queryTooltip(TextIter iter, ref Rectangle area, int x, int y, Tooltip tooltip) 552 { 553 // gboolean gtk_source_gutter_renderer_query_tooltip (GtkSourceGutterRenderer *renderer, GtkTextIter *iter, GdkRectangle *area, gint x, gint y, GtkTooltip *tooltip); 554 return gtk_source_gutter_renderer_query_tooltip(gtkSourceGutterRenderer, (iter is null) ? null : iter.getTextIterStruct(), &area, x, y, (tooltip is null) ? null : tooltip.getTooltipStruct()); 555 } 556 557 /** 558 * Emit the ::query-data signal. This function is called to query for data 559 * just before rendering a cell. This is called from the GtkSourceGutter. 560 * Implementations can override the default signal handler or can connect 561 * a signal handler externally to the ::query-data signal. 562 * Params: 563 * start = a GtkTextIter. 564 * end = a GtkTextIter. 565 * state = a GtkSourceGutterRendererState. 566 */ 567 public void queryData(TextIter start, TextIter end, GtkSourceGutterRendererState state) 568 { 569 // void gtk_source_gutter_renderer_query_data (GtkSourceGutterRenderer *renderer, GtkTextIter *start, GtkTextIter *end, GtkSourceGutterRendererState state); 570 gtk_source_gutter_renderer_query_data(gtkSourceGutterRenderer, (start is null) ? null : start.getTextIterStruct(), (end is null) ? null : end.getTextIterStruct(), state); 571 } 572 }