2 #include <Xw_Extension.h>
4 /* ifdef then trace on */
6 #define TRACE_OPEN_IMAGE
10 XW_EXT_IMAGEDATA Xw_open_image (awindow,aimageinfo,width,height):
11 XW_EXT_WINDOW *awindow ;
12 XW_USERDATA *aimageinfo ; Image identifier
13 int width,height Image size in pixels
15 Open an Image in the same Window visual as defined
16 NOTE than this image can be filled with Xw_put_pixel
18 Returns The image extension address if Successful
19 returns NULL if BadAllocation
21 XW_STATUS Xw_close_image (aimage):
22 XW_EXT_IMAGEDATA *aimage Extended Image address
26 returns SUCCESS always
28 XW_EXT_IMAGEDATA* Xw_get_image_handle (awindow,aimageinfo):
29 XW_EXT_WINDOW *awindow ;
30 XW_USERDATA aimageinfo Image identifier
32 returns the Image handle associated to the image ID
33 or NULL if no image exist.
38 void* Xw_open_image (void *awindow,void *aimageinfo,int width,int height)
40 void* Xw_open_image (awindow,aimageinfo,width,height)
44 #endif /*XW_PROTOTYPE*/
46 XW_EXT_WINDOW *pwindow = (XW_EXT_WINDOW*)awindow;
47 XW_EXT_IMAGEDATA *pimage ;
48 XW_EXT_COLORMAP *pcolormap ;
53 if( !Xw_isdefine_window(pwindow) ) {
54 /*ERROR*Bad EXT_WINDOW Address*/
55 Xw_set_error(24,"Xw_open_image",pwindow) ;
75 /*ERROR*Unimplemented Image Visual depth*/
76 Xw_set_error(64,"Xw_open_image",&_DEPTH) ;
80 if( !(cdata = (char*) Xw_calloc(width*height,pad)) ) {
81 /*ERROR*XImage Allocation failed*/
82 Xw_set_error(60,"Xw_open_image",0) ;
86 if( !(pimage = Xw_add_imagedata_structure(sizeof(XW_EXT_IMAGEDATA))) )
89 pimage->pimageinfo = aimageinfo ;
90 pimage->pcolormap = pcolormap = _COLORMAP ;
91 _IIMAGE = XCreateImage(_CDISPLAY,_CVISUAL,_DEPTH,
92 ZPixmap,0,cdata,width,height,pad*8,width*pad) ;
94 /*ERROR*XImage Creation failed*/
95 Xw_set_error(62,"Xw_open_image",0) ;
96 Xw_del_imagedata_structure(pimage) ;
99 #ifdef TRACE_OPEN_IMAGE
100 if( Xw_get_trace() ) {
101 printf (" %lx = Xw_open_image(%lx,%lx,%d,%d)\n",(long ) pimage,(long ) pwindow,(long ) aimageinfo,
109 static XW_EXT_IMAGEDATA *PimageList =NULL ;
112 XW_EXT_IMAGEDATA* Xw_add_imagedata_structure(int size)
114 XW_EXT_IMAGEDATA* Xw_add_imagedata_structure(size)
116 #endif /*XW_PROTOTYPE*/
118 Create and Insert one Extended image structure in the
121 returns Extended image address if successful
122 or NULL if Bad Allocation
125 XW_EXT_IMAGEDATA *pimage ;
128 pimage = (XW_EXT_IMAGEDATA*) Xw_malloc(size) ;
131 pimage->type = IMAGE_TYPE ;
132 pimage->link = PimageList ;
133 PimageList = pimage ;
134 pimage->pcolormap = NULL ;
136 pimage->pximage = NULL ;
137 pimage->zximage = NULL ;
138 pimage->maxwindow = 0 ;
140 /*ERROR*EXT_IMAGE allocation failed*/
141 Xw_set_error(27,"Xw_open_image",0) ;
148 XW_STATUS Xw_close_image (void* aimage)
150 XW_STATUS Xw_close_image (aimage)
152 #endif /*XW_PROTOTYPE*/
154 XW_EXT_IMAGEDATA *pimage = (XW_EXT_IMAGEDATA*) aimage ;
156 Xw_del_imagedata_structure(pimage) ;
158 #ifdef TRACE_CLOSE_IMAGE
159 if( Xw_get_trace() ) {
160 printf (" Xw_close_image(%x)\n",pimage);
168 void* Xw_get_image_handle (void* awindow,void *aimageinfo)
170 void* Xw_get_image_handle (awindow,aimageinfo)
173 #endif /*XW_PROTOTYPE*/
175 #ifdef TRACE_OPEN_IMAGE
176 XW_EXT_WINDOW *pwindow = (XW_EXT_WINDOW*)awindow ;
178 XW_EXT_IMAGEDATA *pimage ;
180 for( pimage = PimageList ; pimage ;
181 pimage = (XW_EXT_IMAGEDATA*) pimage->link ) {
182 if( pimage->pimageinfo == aimageinfo ) break ;
185 #ifdef TRACE_OPEN_IMAGE
186 if( Xw_get_trace() ) {
187 printf (" %lx = Xw_get_image_handle(%lx,%lx)\n",(long ) pimage,(long ) pwindow,(long ) aimageinfo);
195 XW_STATUS Xw_del_imagedata_structure(XW_EXT_IMAGEDATA *aimage)
197 XW_STATUS Xw_del_imagedata_structure(aimage)
198 XW_EXT_IMAGEDATA *aimage;
199 #endif /*XW_PROTOTYPE*/
201 Remove the Extended image address from the Extended List and
202 Free the Extended Image
204 returns ERROR if the image address is not Found in the list
205 returns XW_SUCCESS if successful
208 XW_EXT_IMAGEDATA *pimage = aimage ;
211 if( !pimage ) return (XW_ERROR) ;
213 if( pimage->maxwindow ) --pimage->maxwindow ;
215 if( pimage->maxwindow ) {
218 if( _IIMAGE ) XDestroyImage(_IIMAGE) ;
219 if( _ZIMAGE ) XDestroyImage(_ZIMAGE) ;
220 if( pimage == PimageList ) {
221 PimageList = (XW_EXT_IMAGEDATA*) pimage->link ;
223 for( pimage = PimageList ; pimage ;
224 pimage = (XW_EXT_IMAGEDATA*) pimage->link ) {
225 if( pimage->link == aimage ) {
226 pimage->link = aimage->link ;
233 return (XW_SUCCESS) ;