CrtItemType.3
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:23k
源码类别:

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 1994-1995 Sun Microsystems, Inc.
  3. '"
  4. '" See the file "license.terms" for information on usage and redistribution
  5. '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  6. '" 
  7. '" RCS: @(#) $Id: CrtItemType.3,v 1.6 2000/07/25 21:14:34 jenglish Exp $
  8. '" 
  9. .so man.macros
  10. .TH Tk_CreateItemType 3 4.0 Tk "Tk Library Procedures"
  11. .BS
  12. .SH NAME
  13. Tk_CreateItemType, Tk_GetItemTypes - define new kind of canvas item
  14. .SH SYNOPSIS
  15. .nf
  16. fB#include <tk.h>fR
  17. .sp
  18. fBTk_CreateItemTypefR(fItypePtrfR)
  19. .sp
  20. Tk_ItemType *
  21. fBTk_GetItemTypesfR()
  22. .SH ARGUMENTS
  23. .AS Tk_ItemType *typePtr
  24. .AP Tk_ItemType *typePtr in
  25. Structure that defines the new type of canvas item.
  26. .BE
  27. .SH INTRODUCTION
  28. .PP
  29. fBTk_CreateItemTypefR is invoked to define a new kind of canvas item
  30. described by the fItypePtrfR argument.
  31. An item type corresponds to a particular value of the fItypefR
  32. argument to the fBcreatefR widget command for canvases, and
  33. the code that implements a canvas item type is called a fItype managerfR.
  34. Tk defines several built-in item types, such as fBrectanglefR
  35. and fBtextfR and fBimagefR, but fBTk_CreateItemTypefR
  36. allows additional item types to be defined.
  37. Once fBTk_CreateItemTypefR returns, the new item type may be used
  38. in new or existing canvas widgets just like the built-in item
  39. types.
  40. .PP
  41. fBTk_GetItemTypesfR returns a pointer to the first in the list
  42. of all item types currently defined for canvases.
  43. The entries in the list are linked together through their
  44. fInextPtrfR fields, with the end of the list marked by a
  45. NULL fInextPtrfR.
  46. .PP
  47. You may find it easier to understand the rest of this manual entry
  48. by looking at the code for an existing canvas item type such as
  49. bitmap (file tkCanvBmap.c) or text (tkCanvText.c).
  50. The easiest way to create a new type manager is to copy the code
  51. for an existing type and modify it for the new type.
  52. .PP
  53. Tk provides a number of utility procedures for the use of canvas
  54. type managers, such as fBTk_CanvasCoordsfR and fBTk_CanvasPsColorfR;
  55. these are described in separate manual entries.
  56. .SH "DATA STRUCTURES"
  57. .PP
  58. A type manager consists of a collection of procedures that provide a
  59. standard set of operations on items of that type.
  60. The type manager deals with three kinds of data
  61. structures.
  62. The first data structure is a Tk_ItemType; it contains
  63. information such as the name of the type and pointers to
  64. the standard procedures implemented by the type manager:
  65. .CS
  66. typedef struct Tk_ItemType {
  67. char *fInamefR;
  68. int fIitemSizefR;
  69. Tk_ItemCreateProc *fIcreateProcfR;
  70. Tk_ConfigSpec *fIconfigSpecsfR;
  71. Tk_ItemConfigureProc *fIconfigProcfR;
  72. Tk_ItemCoordProc *fIcoordProcfR;
  73. Tk_ItemDeleteProc *fIdeleteProcfR;
  74. Tk_ItemDisplayProc *fIdisplayProcfR;
  75. int fIalwaysRedrawfR;
  76. Tk_ItemPointProc *fIpointProcfR;
  77. Tk_ItemAreaProc *fIareaProcfR;
  78. Tk_ItemPostscriptProc *fIpostscriptProcfR;
  79. Tk_ItemScaleProc *fIscaleProcfR;
  80. Tk_ItemTranslateProc *fItranslateProcfR;
  81. Tk_ItemIndexProc *fIindexProcfR;
  82. Tk_ItemCursorProc *fIicursorProcfR;
  83. Tk_ItemSelectionProc *fIselectionProcfR;
  84. Tk_ItemInsertProc *fIinsertProcfR;
  85. Tk_ItemDCharsProc *fIdCharsProcfR;
  86. Tk_ItemType *fInextPtrfR;
  87. } Tk_ItemType;
  88. .CE
  89. .PP
  90. The fields of a Tk_ItemType structure are described in more detail
  91. later in this manual entry.
  92. When fBTk_CreateItemTypefR is called, its fItypePtrfR
  93. argument must point to a structure with all of the fields initialized
  94. except fInextPtrfR, which Tk sets to link all the types together
  95. into a list.
  96. The structure must be in permanent memory (either statically
  97. allocated or dynamically allocated but never freed);  Tk retains
  98. a pointer to this structure.
  99. .PP
  100. The second data structure manipulated by a type manager is an
  101. fIitem recordfR.
  102. For each item in a canvas there exists one item record.
  103. All of the items of a given type generally have item records with
  104. the same structure, but different types usually have different
  105. formats for their item records.
  106. The first part of each item record is a header with a standard structure
  107. defined by Tk via the type Tk_Item;  the rest of the item
  108. record is defined by the type manager.
  109. A type manager must define its item records with a Tk_Item as
  110. the first field.
  111. For example, the item record for bitmap items is defined as follows:
  112. .CS
  113. typedef struct BitmapItem {
  114. Tk_Item fIheaderfR;
  115. double fIxfR, fIyfR;
  116. Tk_Anchor fIanchorfR;
  117. Pixmap fIbitmapfR;
  118. XColor *fIfgColorfR;
  119. XColor *fIbgColorfR;
  120. GC fIgcfR;
  121. } BitmapItem;
  122. .CE
  123. The fIheaderfR substructure contains information used by Tk
  124. to manage the item, such as its identifier, its tags, its type,
  125. and its bounding box.
  126. The fields starting with fIxfR belong to the type manager:
  127. Tk will never read or write them.
  128. The type manager should not need to read or write any of the
  129. fields in the header except for four fields
  130. whose names are fIx1fR, fIy1fR, fIx2fR, and fIy2fR.
  131. These fields give a bounding box for the items using integer
  132. canvas coordinates:  the item should not cover any pixels
  133. with x-coordinate lower than fIx1fR or y-coordinate
  134. lower than fIy1fR, nor should it cover any pixels with
  135. x-coordinate greater than or equal to fIx2fR or y-coordinate
  136. greater than or equal to fIy2fR.
  137. It is up to the type manager to keep the bounding box up to
  138. date as the item is moved and reconfigured.
  139. .PP
  140. Whenever Tk calls a procedure in a type manager it passes in a pointer
  141. to an item record.
  142. The argument is always passed as a pointer to a Tk_Item;  the type
  143. manager will typically cast this into a pointer to its own specific
  144. type, such as BitmapItem.
  145. .PP
  146. The third data structure used by type managers has type
  147. Tk_Canvas;  it serves as an opaque handle for the canvas widget
  148. as a whole.
  149. Type managers need not know anything about the contents of this
  150. structure.
  151. A Tk_Canvas handle is typically passed in to the
  152. procedures of a type manager, and the type manager can pass the
  153. handle back to library procedures such as Tk_CanvasTkwin
  154. to fetch information about the canvas.
  155. .SH NAME
  156. .PP
  157. This section and the ones that follow describe each of the fields
  158. in a Tk_ItemType structure in detail.
  159. The fInamefR field provides a string name for the item type.
  160. Once fBTk_CreateImageTypefR returns, this name may be used
  161. in fBcreatefR widget commands to create items of the new
  162. type.
  163. If there already existed an item type by this name then
  164. the new item type replaces the old one.
  165. .SH ITEMSIZE
  166. fItypePtr->itemSizefR gives the size in bytes of item records
  167. of this type, including the Tk_Item header.
  168. Tk uses this size to allocate memory space for items of the type.
  169. All of the item records for a given type must have the same size.
  170. If variable length fields are needed for an item (such as a list
  171. of points for a polygon), the type manager can allocate a separate
  172. object of variable length and keep a pointer to it in the item record.
  173. .SH CREATEPROC
  174. .PP
  175. fItypePtr->createProcfR points to a procedure for
  176. Tk to call whenever a new item of this type is created.
  177. fItypePtr->createProcfR must match the following prototype:
  178. .CS
  179. typedef int Tk_ItemCreateProc(
  180. Tcl_Interp *fIinterpfR,
  181. Tk_Canvas fIcanvasfR,
  182. Tk_Item *fIitemPtrfR,
  183. int fIobjcfR,
  184. Tcl_Obj* CONST fIobjvfR);
  185. .CE
  186. The fIinterpfR argument is the interpreter in which the canvas's
  187. fBcreatefR widget command was invoked, and fIcanvasfR is a
  188. handle for the canvas widget.
  189. fIitemPtrfR is a pointer to a newly-allocated item of
  190. size fItypePtr->itemSizefR.
  191. Tk has already initialized the item's header (the first
  192. fBsizeof(Tk_ItemType)fR bytes).
  193. The fIobjcfR and fIobjvfR arguments describe all of the
  194. arguments to the fBcreatefR command after the fItypefR
  195. argument.
  196. For example, in the widget command
  197. .CS
  198. fB&.c create rectangle 10 20 50 50 -fill blackfR
  199. .CE
  200. fIobjcfR will be fB6fR and fIobjvfR[0] will contain the
  201. integer object fB10fR.
  202. .PP
  203. fIcreateProcfR should use fIobjcfR and fIobjvfR to initialize
  204. the type-specific parts of the item record and set an initial value
  205. for the bounding box in the item's header.
  206. It should return a standard Tcl completion code and leave an
  207. error message in fIinterp->resultfR if an error occurs.
  208. If an error occurs Tk will free the item record, so fIcreateProcfR
  209. must be sure to leave the item record in a clean state if it returns an error
  210. (e.g., it must free any additional memory that it allocated for
  211. the item).
  212. .SH CONFIGSPECS
  213. .PP
  214. Each type manager must provide a standard table describing its
  215. configuration options, in a form suitable for use with
  216. fBTk_ConfigureWidgetfR.
  217. This table will normally be used by fItypePtr->createProcfR
  218. and fItypePtr->configProcfR, but Tk also uses it directly
  219. to retrieve option information in the fBitemcgetfR and
  220. fBitemconfigurefR widget commands.
  221. fItypePtr->configSpecsfR must point to the configuration table
  222. for this type.
  223. Note: Tk provides a custom option type fBtk_CanvasTagsOptionfR
  224. for implementing the fB-tagsfR option;  see an existing type
  225. manager for an example of how to use it in fIconfigSpecsfR.
  226. .SH CONFIGPROC
  227. .PP
  228. fItypePtr->configProcfR is called by Tk whenever the
  229. fBitemconfigurefR widget command is invoked to change the
  230. configuration options for a canvas item.
  231. This procedure must match the following prototype:
  232. .CS
  233. typedef int Tk_ItemConfigureProc(
  234. Tcl_Interp *fIinterpfR,
  235. Tk_Canvas fIcanvasfR,
  236. Tk_Item *fIitemPtrfR,
  237. int fIobjcfR,
  238. Tcl_Obj* CONST fIobjvfR,
  239. int fIflagsfR);
  240. .CE
  241. The fIinterpfR objument identifies the interpreter in which the
  242. widget command was invoked,  fIcanvasfR is a handle for the canvas
  243. widget, and fIitemPtrfR is a pointer to the item being configured.
  244. fIobjcfR and fIobjvfR contain the configuration options.  For
  245. example, if the following command is invoked:
  246. .CS
  247. fB&.c itemconfigure 2 -fill red -outline blackfR
  248. .CE
  249. fIobjcfR is fB4fR and fIobjvfR contains the string objects fB-fillfR
  250. through fBblackfR.
  251. fIobjcfR will always be an even value.
  252. The  fIflagsfR argument contains flags to pass to fBTk_ConfigureWidgetfR;
  253. currently this value is always TK_CONFIG_ARGV_ONLY when Tk
  254. invokes fItypePtr->configProcfR, but the type manager's fIcreateProcfR
  255. procedure will usually invoke fIconfigProcfR with different flag values.
  256. .PP
  257. fItypePtr->configProcfR returns a standard Tcl completion code and
  258. leaves an error message in fIinterp->resultfR if an error occurs.
  259. It must update the item's bounding box to reflect the new configuration
  260. options.
  261. .SH COORDPROC
  262. .PP
  263. fItypePtr->coordProcfR is invoked by Tk to implement the fBcoordsfR
  264. widget command for an item.
  265. It must match the following prototype:
  266. .CS
  267. typedef int Tk_ItemCoordProc(
  268. Tcl_Interp *fIinterpfR,
  269. Tk_Canvas fIcanvasfR,
  270. Tk_Item *fIitemPtrfR,
  271. int fIobjcfR,
  272. Tcl_Obj* CONST fIobjvfR);
  273. .CE
  274. The arguments fIinterpfR, fIcanvasfR, and fIitemPtrfR
  275. all have the standard meanings, and fIobjcfR and fIobjvfR
  276. describe the coordinate arguments.
  277. For example, if the following widget command is invoked:
  278. .CS
  279. fB&.c coords 2 30 90fR
  280. .CE
  281. fIobjcfR will be fB2fR and fBobjvfR will contain the integer objects
  282. fB30fR and fB90fR.
  283. .PP
  284. The fIcoordProcfR procedure should process the new coordinates,
  285. update the item appropriately (e.g., it must reset the bounding
  286. box in the item's header), and return a standard Tcl completion
  287. code.
  288. If an error occurs, fIcoordProcfR must leave an error message in
  289. fIinterp->resultfR.
  290. .SH DELETEPROC
  291. .PP
  292. fItypePtr->deleteProcfR is invoked by Tk to delete an item
  293. and free any resources allocated to it.
  294. It must match the following prototype:
  295. .CS
  296. typedef void Tk_ItemDeleteProc(
  297. Tk_Canvas fIcanvasfR,
  298. Tk_Item *fIitemPtrfR,
  299. Display *fIdisplayfR);
  300. .CE
  301. The fIcanvasfR and fIitemPtrfR arguments have the usual
  302. interpretations, and fIdisplayfR identifies the X display containing
  303. the canvas.
  304. fIdeleteProcfR must free up any resources allocated for the item,
  305. so that Tk can free the item record.
  306. fIdeleteProcfR should not actually free the item record;  this will
  307. be done by Tk when fIdeleteProcfR returns.
  308. .SH "DISPLAYPROC AND ALWAYSREDRAW"
  309. .PP
  310. fItypePtr->displayProcfR is invoked by Tk to redraw an item
  311. on the screen.
  312. It must match the following prototype:
  313. .CS
  314. typedef void Tk_ItemDisplayProc(
  315. Tk_Canvas fIcanvasfR,
  316. Tk_Item *fIitemPtrfR,
  317. Display *fIdisplayfR,
  318. Drawable fIdstfR,
  319. int fIxfR,
  320. int fIyfR,
  321. int fIwidthfR,
  322. int fIheightfR);
  323. .CE
  324. The fIcanvasfR and fIitemPtrfR arguments have the usual meaning.
  325. fIdisplayfR identifies the display containing the canvas, and
  326. fIdstfR specifies a drawable in which the item should be rendered;
  327. typically this is an off-screen pixmap, which Tk will copy into
  328. the canvas's window once all relevant items have been drawn.
  329. fIxfR, fIyfR, fIwidthfR, and fIheightfR specify a rectangular
  330. region in canvas coordinates, which is the area to be redrawn;
  331. only information that overlaps this area needs to be redrawn.
  332. Tk will not call fIdisplayProcfR unless the item's bounding box
  333. overlaps the redraw area, but the type manager may wish to use
  334. the redraw area to optimize the redisplay of the item.
  335. .PP
  336. Because of scrolling and the use of off-screen pixmaps for
  337. double-buffered redisplay, the item's coordinates in fIdstfR
  338. will not necessarily be the same as those in the canvas.
  339. fIdisplayProcfR should call fBTk_CanvasDrawableCoordsfR
  340. to transform coordinates from those of the canvas to those
  341. of fIdstfR.
  342. .PP
  343. Normally an item's fIdisplayProcfR is only invoked if the item
  344. overlaps the area being displayed.
  345. However, if fItypePtr->alwaysRedrawfR has a non-zero value, then
  346. fIdisplayProcfR is invoked during every redisplay operation,
  347. even if the item doesn't overlap the area of redisplay.
  348. fIalwaysRedrawfR should normally be set to 0;  it is only
  349. set to 1 in special cases such as window items that need to be
  350. unmapped when they are off-screen.
  351. .SH POINTPROC
  352. .PP
  353. fItypePtr->pointProcfR is invoked by Tk to find out how close
  354. a given point is to a canvas item.
  355. Tk uses this procedure for purposes such as locating the item
  356. under the mouse or finding the closest item to a given point.
  357. The procedure must match the following prototype:
  358. .CS
  359. typedef double Tk_ItemPointProc(
  360. Tk_Canvas fIcanvasfR,
  361. Tk_Item *fIitemPtrfR,
  362. double *fIpointPtrfR);
  363. .CE
  364. fIcanvasfR and fIitemPtrfR have the usual meaning.
  365. fIpointPtrfR points to an array of two numbers giving
  366. the x and y coordinates of a point.
  367. fIpointProcfR must return a real value giving the distance
  368. from the point to the item, or 0 if the point lies inside
  369. the item.
  370. .SH AREAPROC
  371. .PP
  372. fItypePtr->areaProcfR is invoked by Tk to find out the relationship
  373. between an item and a rectangular area.
  374. It must match the following prototype:
  375. .CS
  376. typedef int Tk_ItemAreaProc(
  377. Tk_Canvas fIcanvasfR,
  378. Tk_Item *fIitemPtrfR,
  379. double *fIrectPtrfR);
  380. .CE
  381. fIcanvasfR and fIitemPtrfR have the usual meaning.
  382. fIrectPtrfR points to an array of four real numbers;
  383. the first two give the x and y coordinates of the upper left
  384. corner of a rectangle, and the second two give the x and y
  385. coordinates of the lower right corner.
  386. fIareaProcfR must return -1 if the item lies entirely outside
  387. the given area, 0 if it lies partially inside and partially
  388. outside the area, and 1 if it lies entirely inside the area.
  389. .SH POSTSCRIPTPROC
  390. .PP
  391. fItypePtr->postscriptProcfR is invoked by Tk to generate
  392. Postcript for an item during the fBpostscriptfR widget command.
  393. If the type manager is not capable of generating Postscript then
  394. fItypePtr->postscriptProcfR should be NULL.
  395. The procedure must match the following prototype:
  396. .CS
  397. typedef int Tk_ItemPostscriptProc(
  398. Tcl_Interp *fIinterpfR,
  399. Tk_Canvas fIcanvasfR,
  400. Tk_Item *fIitemPtrfR,
  401. int fIprepassfR);
  402. .CE
  403. The fIinterpfR, fIcanvasfR, and fIitemPtrfR arguments all have
  404. standard meanings;  fIprepassfR will be described below.
  405. If fIpostscriptProcfR completes successfully, it should append
  406. Postscript for the item to the information in fIinterp->resultfR
  407. (e.g. by calling fBTcl_AppendResultfR, not fBTcl_SetResultfR)
  408. and return TCL_OK.
  409. If an error occurs, fIpostscriptProcfR should clear the result
  410. and replace its contents with an error message;  then it should
  411. return TCL_ERROR.
  412. .PP
  413. Tk provides a collection of utility procedures to simplify
  414. fIpostscriptProcfR.
  415. For example, fBTk_CanvasPsColorfR will generate Postscript to set
  416. the current color to a given Tk color and fBTk_CanvasPsFontfR will
  417. set up font information.
  418. When generating Postscript, the type manager is free to change the
  419. graphics state of the Postscript interpreter, since Tk places
  420. fBgsavefR and fBgrestorefR commands around the Postscript for
  421. the item.
  422. The type manager can use canvas x coordinates directly in its Postscript,
  423. but it must call fBTk_CanvasPsYfR to convert y coordinates from
  424. the space of the canvas (where the origin is at the
  425. upper left) to the space of Postscript (where the origin is at the
  426. lower left).
  427. .PP
  428. In order to generate Postscript that complies with the Adobe Document
  429. Structuring Conventions, Tk actually generates Postscript in two passes.
  430. It calls each item's fIpostscriptProcfR in each pass.
  431. The only purpose of the first pass is to collect font information
  432. (which is done by fBTk_CanvasPsFontfR);  the actual Postscript is
  433. discarded.
  434. Tk sets the fIprepassfR argument to fIpostscriptProcfR to 1
  435. during the first pass;  the type manager can use fIprepassfR to skip
  436. all Postscript generation except for calls to fBTk_CanvasPsFontfR.
  437. During the second pass fIprepassfR will be 0, so the type manager
  438. must generate complete Postscript.
  439. .SH SCALEPROC
  440. fItypePtr->scaleProcfR is invoked by Tk to rescale a canvas item
  441. during the fBscalefR widget command.
  442. The procedure must match the following prototype:
  443. .CS
  444. typedef void Tk_ItemScaleProc(
  445. Tk_Canvas fIcanvasfR,
  446. Tk_Item *fIitemPtrfR,
  447. double fIoriginXfR,
  448. double fIoriginYfR,
  449. double fIscaleXfR,
  450. double fIscaleYfR);
  451. .CE
  452. The fIcanvasfR and fIitemPtrfR arguments have the usual meaning.
  453. fIoriginXfR and fIoriginYfR specify an origin relative to which
  454. the item is to be scaled, and fIscaleXfR and fIscaleYfR give the
  455. x and y scale factors.
  456. The item should adjust its coordinates so that a point in the item
  457. that used to have coordinates fIxfR and fIyfR will have new
  458. coordinates fIx'fR and fIy'fR, where
  459. .CS
  460. fIx' = originX  + scaleX*(x-originX)
  461. y' = originY + scaleY*(y-originY)fR
  462. .CE
  463. fIscaleProcfR must also update the bounding box in the item's
  464. header.
  465. .SH TRANSLATEPROC
  466. fItypePtr->translateProcfR is invoked by Tk to translate a canvas item
  467. during the fBmovefR widget command.
  468. The procedure must match the following prototype:
  469. .CS
  470. typedef void Tk_ItemTranslateProc(
  471. Tk_Canvas fIcanvasfR,
  472. Tk_Item *fIitemPtrfR,
  473. double fIdeltaXfR,
  474. double fIdeltaYfR);
  475. .CE
  476. The fIcanvasfR and fIitemPtrfR arguments have the usual meaning,
  477. and fIdeltaXfR and fIdeltaYfR give the amounts that should be
  478. added to each x and y coordinate within the item.
  479. The type manager should adjust the item's coordinates and
  480. update the bounding box in the item's header.
  481. .SH INDEXPROC
  482. fItypePtr->indexProcfR is invoked by Tk to translate a string
  483. index specification into a numerical index, for example during the
  484. fBindexfR widget command.
  485. It is only relevant for item types that support indexable text;
  486. fItypePtr->indexProcfR may be specified as NULL for non-textual
  487. item types.
  488. The procedure must match the following prototype:
  489. .CS
  490. typedef int Tk_ItemIndexProc(
  491. Tcl_Interp *fIinterpfR,
  492. Tk_Canvas fIcanvasfR,
  493. Tk_Item *fIitemPtrfR,
  494. char fIindexStringfR,
  495. int *fIindexPtrfR);
  496. .CE
  497. The fIinterpfR, fIcanvasfR, and fIitemPtrfR arguments all
  498. have the usual meaning.
  499. fIindexStringfR contains a textual description of an index,
  500. and fIindexPtrfR points to an integer value that should be
  501. filled in with a numerical index.
  502. It is up to the type manager to decide what forms of index
  503. are supported (e.g., numbers, fBinsertfR,  fBsel.firstfR,
  504. fBendfR, etc.).
  505. fIindexProcfR should return a Tcl completion code and set
  506. fIinterp->resultfR in the event of an error.
  507. .SH ICURSORPROC
  508. .PP
  509. fItypePtr->icursorProcfR is invoked by Tk during
  510. the fBicursorfR widget command to set the position of the
  511. insertion cursor in a textual item.
  512. It is only relevant for item types that support an insertion cursor;
  513. fItypePtr->icursorProcfR may be specified as NULL for item types
  514. that don't support an insertion cursor.
  515. The procedure must match the following prototype:
  516. .CS
  517. typedef void Tk_ItemCursorProc(
  518. Tk_Canvas fIcanvasfR,
  519. Tk_Item *fIitemPtrfR,
  520. int fIindexfR);
  521. .CE
  522. fIcanvasfR and fIitemPtrfR have the usual meanings, and
  523. fIindexfR is an index into the item's text, as returned by a
  524. previous call to fItypePtr->insertProcfR.
  525. The type manager should position the insertion cursor in the
  526. item just before the character given by fIindexfR.
  527. Whether or not to actually display the insertion cursor is
  528. determined by other information provided by fBTk_CanvasGetTextInfofR.
  529. .SH SELECTIONPROC
  530. .PP
  531. fItypePtr->selectionProcfR is invoked by Tk during selection
  532. retrievals;  it must return part or all of the selected text in
  533. the item (if any).
  534. It is only relevant for item types that support text;
  535. fItypePtr->selectionProcfR may be specified as NULL for non-textual
  536. item types.
  537. The procedure must match the following prototype:
  538. .CS
  539. typedef int Tk_ItemSelectionProc(
  540. Tk_Canvas fIcanvasfR,
  541. Tk_Item *fIitemPtrfR,
  542. int fIoffsetfR,
  543. char *fIbufferfR,
  544. int fImaxBytesfR);
  545. .CE
  546. fIcanvasfR and fIitemPtrfR have the usual meanings.
  547. fIoffsetfR is an offset in bytes into the selection where 0 refers
  548. to the first byte of the selection;  it identifies
  549. the first character that is to be returned in this call.
  550. fIbufferfR points to an area of memory in which to store the
  551. requested bytes, and fImaxBytesfR specifies the maximum number
  552. of bytes to return.
  553. fIselectionProcfR should extract up to fImaxBytesfR characters
  554. from the selection and copy them to fImaxBytesfR;  it should
  555. return a count of the number of bytes actually copied, which may
  556. be less than fImaxBytesfR if there aren't fIoffset+maxBytesfR bytes
  557. in the selection.
  558. .SH INSERTPROC
  559. .PP
  560. fItypePtr->insertProcfR is invoked by Tk during
  561. the fBinsertfR widget command to insert new text into a
  562. canvas item.
  563. It is only relevant for item types that support text;
  564. fItypePtr->insertProcfR may be specified as NULL for non-textual
  565. item types.
  566. The procedure must match the following prototype:
  567. .CS
  568. typedef void Tk_ItemInsertProc(
  569. Tk_Canvas fIcanvasfR,
  570. Tk_Item *fIitemPtrfR,
  571. int fIindexfR,
  572. char *fIstringfR);
  573. .CE
  574. fIcanvasfR and fIitemPtrfR have the usual meanings.
  575. fIindexfR is an index into the item's text, as returned by a
  576. previous call to fItypePtr->insertProcfR, and fIstringfR
  577. contains new text to insert just before the character given
  578. by fIindexfR.
  579. The type manager should insert the text and recompute the bounding
  580. box in the item's header.
  581. .SH DCHARSPROC
  582. .PP
  583. fItypePtr->dCharsProcfR is invoked by Tk during the fBdcharsfR
  584. widget command to delete a range of text from a canvas item.
  585. It is only relevant for item types that support text;
  586. fItypePtr->dCharsProcfR may be specified as NULL for non-textual
  587. item types.
  588. The procedure must match the following prototype:
  589. .CS
  590. typedef void Tk_ItemDCharsProc(
  591. Tk_Canvas fIcanvasfR,
  592. Tk_Item *fIitemPtrfR,
  593. int fIfirstfR,
  594. int fIlastfR);
  595. .CE
  596. fIcanvasfR and fIitemPtrfR have the usual meanings.
  597. fIfirstfR and fIlastfR give the indices of the first and last bytes
  598. to be deleted, as returned by previous calls to fItypePtr->indexProcfR.
  599. The type manager should delete the specified characters and update
  600. the bounding box in the item's header.
  601. .SH "SEE ALSO"
  602. Tk_CanvasPsY, Tk_CanvasTextInfo, Tk_CanvasTkwin
  603. .SH KEYWORDS
  604. canvas, focus, item type, selection, type manager