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

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 1994 The Regents of the University of California.
  3. '" Copyright (c) 1994-1997 Sun Microsystems, Inc.
  4. '"
  5. '" See the file "license.terms" for information on usage and redistribution
  6. '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  7. '" 
  8. '" RCS: @(#) $Id: CrtImgType.3,v 1.6.2.1 2003/12/10 09:40:43 dkf Exp $
  9. '" 
  10. .so man.macros
  11. .TH Tk_CreateImageType 3 8.3 Tk "Tk Library Procedures"
  12. .BS
  13. .SH NAME
  14. Tk_CreateImageType, Tk_GetImageMasterData, Tk_InitImageArgs - define new kind of image
  15. .SH SYNOPSIS
  16. .nf
  17. fB#include <tk.h>fR
  18. .sp
  19. fBTk_CreateImageTypefR(fItypePtrfR)
  20. .sp
  21. .VS
  22. ClientData
  23. fBTk_GetImageMasterDatafR(fIinterp, name, typePtrPtrfR)
  24. .sp
  25. fBTk_InitImageArgsfR(fIinterp, argc, argvPtrfR)
  26. .SH ARGUMENTS
  27. .AS Tk_ImageType *typePtrPtr
  28. .AP Tk_ImageType *typePtr in
  29. Structure that defines the new type of image.
  30. Must be static: a
  31. pointer to this structure is retained by the image code.
  32. .AP Tcl_Interp *interp in
  33. Interpreter in which image was created.
  34. .AP "CONST char" *name in
  35. Name of existing image.
  36. .AP Tk_ImageType **typePtrPtr out
  37. Points to word in which to store a pointer to type information for
  38. the given image, if it exists.
  39. .AP int argc in
  40. Number of arguments
  41. .AP char ***argvPtr in/out
  42. Pointer to argument list
  43. .VE
  44. .BE
  45. .SH DESCRIPTION
  46. .PP
  47. fBTk_CreateImageTypefR is invoked to define a new kind of image.
  48. An image type corresponds to a particular value of the fItypefR
  49. argument for the fBimage createfR command.  There may exist
  50. any number of different image types, and new types may be defined
  51. dynamically by calling fBTk_CreateImageTypefR.
  52. For example, there might be one type for 2-color bitmaps,
  53. another for multi-color images, another for dithered images,
  54. another for video, and so on.
  55. .PP
  56. The code that implements a new image type is called an
  57. fIimage managerfR.
  58. It consists of a collection of procedures plus three different
  59. kinds of data structures.
  60. The first data structure is a Tk_ImageType structure, which contains
  61. the name of the image type and pointers to five procedures provided
  62. by the image manager to deal with images of this type:
  63. .CS
  64. typedef struct Tk_ImageType {
  65. char *fInamefR;
  66. Tk_ImageCreateProc *fIcreateProcfR;
  67. Tk_ImageGetProc *fIgetProcfR;
  68. Tk_ImageDisplayProc *fIdisplayProcfR;
  69. Tk_ImageFreeProc *fIfreeProcfR;
  70. Tk_ImageDeleteProc *fIdeleteProcfR;
  71. } Tk_ImageType;
  72. .CE
  73. The fields of this structure will be described in later subsections
  74. of this entry.
  75. .PP
  76. The second major data structure manipulated by an image manager
  77. is called an fIimage masterfR;  it contains overall information
  78. about a particular image, such as the values of the configuration
  79. options specified in an fBimage createfR command.
  80. There will usually be one of these structures for each
  81. invocation of the fBimage createfR command.
  82. .PP
  83. The third data structure related to images is an fIimage instancefR.
  84. There will usually be one of these structures for each usage of an
  85. image in a particular widget.
  86. It is possible for a single image to appear simultaneously
  87. in multiple widgets, or even multiple times in the same widget.
  88. Furthermore, different instances may be on different screens
  89. or displays.
  90. The image instance data structure describes things that may
  91. vary from instance to instance, such as colors and graphics
  92. contexts for redisplay.
  93. There is usually one instance structure for each fB-imagefR
  94. option specified for a widget or canvas item.
  95. .PP
  96. The following subsections describe the fields of a Tk_ImageType
  97. in more detail.
  98. .SH NAME
  99. .PP
  100. fItypePtr->namefR provides a name for the image type.
  101. Once fBTk_CreateImageTypefR returns, this name may be used
  102. in fBimage createfR commands to create images of the new
  103. type.
  104. If there already existed an image type by this name then
  105. the new image type replaces the old one.
  106. .SH PORTABILITY
  107. .PP
  108. In Tk 8.2 and earlier, the createProc below had a different
  109. signature. If you want to compile an image type using the
  110. old interface which should still run on all Tcl/Tk versions,
  111. compile it with the flag -DUSE_OLD_IMAGE. Further on, if
  112. you are using Stubs, you need to call the function
  113. Tk_InitImageArgs(interp, argc, &argv) first in your
  114. createProc. See below for a description of this function.
  115. .SH CREATEPROC
  116. fItypePtr->createProcfR provides the address of a procedure for
  117. Tk to call whenever fBimage createfR is invoked to create
  118. an image of the new type.
  119. fItypePtr->createProcfR must match the following prototype:
  120. .CS
  121. typedef int Tk_ImageCreateProc(
  122. Tcl_Interp *fIinterpfR,
  123. char *fInamefR,
  124. int fIobjcfR,
  125. Tcl_Obj *CONST fIobjvfR[],
  126. Tk_ImageType *fItypePtrfR,
  127. Tk_ImageMaster fImasterfR,
  128. ClientData *fImasterDataPtrfR);
  129. .CE
  130. The fIinterpfR argument is the interpreter in which the fBimagefR
  131. command was invoked, and fInamefR is the name for the new image,
  132. which was either specified explicitly in the fBimagefR command
  133. or generated automatically by the fBimagefR command.
  134. The fIobjcfR and fIobjvfR arguments describe all the configuration
  135. options for the new image (everything after the name argument to
  136. fBimagefR).
  137. The fImasterfR argument is a token that refers to Tk's information
  138. about this image;  the image manager must return this token to
  139. Tk when invoking the fBTk_ImageChangedfR procedure.
  140. Typically fIcreateProcfR will parse fIobjcfR and fIobjvfR
  141. and create an image master data structure for the new image.
  142. fIcreateProcfR may store an arbitrary one-word value at
  143. *fImasterDataPtrfR, which will be passed back to the
  144. image manager when other callbacks are invoked.
  145. Typically the value is a pointer to the master data
  146. structure for the image.
  147. .PP
  148. If fIcreateProcfR encounters an error, it should leave an error
  149. message in fIinterp->resultfR and return fBTCL_ERRORfR;  otherwise
  150. it should return fBTCL_OKfR.
  151. .PP
  152. fIcreateProcfR should call fBTk_ImageChangedfR in order to set the
  153. size of the image and request an initial redisplay.
  154. .SH GETPROC
  155. .PP
  156. fItypePtr->getProcfR is invoked by Tk whenever a widget
  157. calls fBTk_GetImagefR to use a particular image.
  158. This procedure must match the following prototype:
  159. .CS
  160. typedef ClientData Tk_ImageGetProc(
  161. Tk_Window fItkwinfR,
  162. ClientData fImasterDatafR);
  163. .CE
  164. The fItkwinfR argument identifies the window in which the
  165. image will be used and fImasterDatafR is the value
  166. returned by fIcreateProcfR when the image master was created.
  167. fIgetProcfR will usually create a data structure for the new
  168. instance, including such things as the resources needed to
  169. display the image in the given window.
  170. fIgetProcfR returns a one-word token for the instance, which
  171. is typically the address of the instance data structure.
  172. Tk will pass this value back to the image manager when invoking
  173. its fIdisplayProcfR and fIfreeProcfR procedures.
  174. .SH DISPLAYPROC
  175. .PP
  176. fItypePtr->displayProcfR is invoked by Tk whenever an image needs
  177. to be displayed (i.e., whenever a widget calls fBTk_RedrawImagefR).
  178. fIdisplayProcfR must match the following prototype:
  179. .CS
  180. typedef void Tk_ImageDisplayProc(
  181. ClientData fIinstanceDatafR,
  182. Display *fIdisplayfR,
  183. Drawable fIdrawablefR,
  184. int fIimageXfR,
  185. int fIimageYfR,
  186. int fIwidthfR,
  187. int fIheightfR,
  188. int fIdrawableXfR,
  189. int fIdrawableYfR);
  190. .CE
  191. The fIinstanceDatafR will be the same as the value returned by
  192. fIgetProcfR when the instance was created.
  193. fIdisplayfR and fIdrawablefR indicate where to display the
  194. image;  fIdrawablefR may be a pixmap rather than
  195. the window specified to fIgetProcfR (this is usually the case,
  196. since most widgets double-buffer their redisplay to get smoother
  197. visual effects).
  198. fIimageXfR, fIimageYfR, fIwidthfR, and fIheightfR
  199. identify the region of the image that must be redisplayed.
  200. This region will always be within the size of the image
  201. as specified in the most recent call to fBTk_ImageChangedfR.
  202. fIdrawableXfR and fIdrawableYfR indicate where in fIdrawablefR
  203. the image should be displayed;  fIdisplayProcfR should display
  204. the given region of the image so that point (fIimageXfR, fIimageYfR)
  205. in the image appears at (fIdrawableXfR, fIdrawableYfR) in fIdrawablefR.
  206. .SH FREEPROC
  207. .PP
  208. fItypePtr->freeProcfR contains the address of a procedure that
  209. Tk will invoke when an image instance is released (i.e., when
  210. fBTk_FreeImagefR is invoked).
  211. This can happen, for example, when a widget is deleted or a image item
  212. in a canvas is deleted, or when the image displayed in a widget or
  213. canvas item is changed.
  214. fIfreeProcfR must match the following prototype:
  215. .CS
  216. typedef void Tk_ImageFreeProc(
  217. ClientData fIinstanceDatafR,
  218. Display *fIdisplayfR);
  219. .CE
  220. The fIinstanceDatafR will be the same as the value returned by
  221. fIgetProcfR when the instance was created, and fIdisplayfR
  222. is the display containing the window for the instance.
  223. fIfreeProcfR should release any resources associated with the
  224. image instance, since the instance will never be used again.
  225. .SH DELETEPROC
  226. .PP
  227. fItypePtr->deleteProcfR is a procedure that Tk invokes when an
  228. image is being deleted (i.e. when the fBimage deletefR command
  229. is invoked).
  230. Before invoking fIdeleteProcfR Tk will invoke fIfreeProcfR for
  231. each of the image's instances.
  232. fIdeleteProcfR must match the following prototype:
  233. .CS
  234. typedef void Tk_ImageDeleteProc(
  235. ClientData fImasterDatafR);
  236. .CE
  237. The fImasterDatafR argument will be the same as the value
  238. stored in fI*masterDataPtrfR by fIcreateProcfR when the
  239. image was created.
  240. fIdeleteProcfR should release any resources associated with
  241. the image.
  242. .SH TK_GETIMAGEMASTERDATA
  243. .VS
  244. .PP
  245. The procedure fBTk_GetImageMasterDatafR may be invoked to retrieve
  246. information about an image.  For example, an image manager can use this
  247. procedure to locate its image master data for an image.
  248. If there exists an image named fInamefR
  249. in the interpreter given by fIinterpfR, then fI*typePtrPtrfR is
  250. filled in with type information for the image (the fItypePtrfR value
  251. passed to fBTk_CreateImageTypefR when the image type was registered)
  252. and the return value is the ClientData value returned by the
  253. fIcreateProcfR when the image was created (this is typically a
  254. pointer to the image master data structure).  If no such image exists
  255. then NULL is returned and NULL is stored at fI*typePtrPtrfR.
  256. .VE
  257. .SH TK_INITIMAGEARGS
  258. .VS
  259. .PP
  260. The function fBTk_InitImageArgsfR converts the arguments of the
  261. fBcreateProcfR from objects to strings when necessary. When
  262. not using stubs, not using the old interface, or running
  263. under an older (pre-8.3) Tk version, this function has no
  264. effect. This function makes porting older image handlers to
  265. the new interface a lot easier: After running this function,
  266. the arguments are guaranteed to be in string format, no
  267. matter how Tk deliverd them.
  268. .SH "SEE ALSO"
  269. Tk_ImageChanged, Tk_GetImage, Tk_FreeImage, Tk_RedrawImage, Tk_SizeOfImage
  270. .SH KEYWORDS
  271. image manager, image type, instance, master