2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7 % IIIII CCCC CCCC CCCC M M %
11 % IIIII CCCC CCCC CCCC M M %
13 % MagickCore X11 Compatibility Methods %
20 % Copyright 1999-2010 ImageMagick Studio LLC, a non-profit organization %
21 % dedicated to making software imaging solutions freely available. %
23 % You may not use this file except in compliance with the License. You may %
24 % obtain a copy of the License at %
26 % http://www.imagemagick.org/script/license.php %
28 % Unless required by applicable law or agreed to in writing, software %
29 % distributed under the License is distributed on an "AS IS" BASIS, %
30 % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %
31 % See the License for the specific language governing permissions and %
32 % limitations under the License. %
34 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
39 #include "magick/studio.h"
40 #if defined(MAGICKCORE_X11_DELEGATE)
41 #include "magick/xwindow-private.h"
43 #if defined(PRE_R6_ICCCM)
45 Compatibility methods for pre X11R6 ICCCM.
47 Status XInitImage(XImage *ximage)
60 Initialize the X image.
62 screen_format.depth=ximage->depth;
63 screen_format.bits_per_pixel=(int) ximage->bits_per_pixel;
64 display.byte_order=ximage->byte_order;
65 display.bitmap_unit=ximage->bitmap_unit;
66 display.bitmap_bit_order=ximage->bitmap_bit_order;
67 display.pixmap_format=(&screen_format);
69 created_ximage=XCreateImage(&display,(Visual *) NULL,ximage->depth,
70 ximage->format,ximage->xoffset,(char *) NULL,ximage->width,ximage->height,
71 ximage->bitmap_pad,ximage->bytes_per_line);
72 if (created_ximage == (XImage *) NULL)
74 target_ximage=(*ximage);
75 *ximage=(*created_ximage);
76 created_ximage->data=(char *) NULL;
77 XDestroyImage(created_ximage);
78 ximage->red_mask=target_ximage.red_mask;
79 ximage->green_mask=target_ximage.green_mask;
80 ximage->blue_mask=target_ximage.blue_mask;
85 #if defined(PRE_R5_ICCCM)
87 Compatibility methods for pre X11R5 ICCCM.
89 void XrmCombineDatabase(XrmDatabase source,XrmDatabase *target,
92 XrmMergeDatabases(source,target);
95 Status XrmCombineFileDatabase(const char *filename,XrmDatabase *target,
102 source=XrmGetFileDatabase(filename);
103 if (override == MagickFalse)
104 XrmMergeDatabases(source,target);
108 XrmDatabase XrmGetDatabase(Display *display)
113 char *XSetLocaleModifiers(char *modifiers)
115 return((char *) NULL);
118 Bool XSupportsLocale()
124 #if defined(PRE_R4_ICCCM)
126 Compatibility methods for pre X11R4 ICCCM.
128 XClassHint *XAllocClassHint)
130 return((XClassHint *) AcquireAlignedMemory(1,sizeof(XClassHint)));
133 XIconSize *XAllocIconSize)
135 return((XIconSize *) AcquireAlignedMemory(1,sizeof(XIconSize)));
138 XSizeHints *XAllocSizeHints)
140 return((XSizeHints *) AcquireAlignedMemory(1,sizeof(XSizeHints)));
143 Status XReconfigureWMWindow(Display *display,Window window,int screen_number,
144 unsigned int value_mask,XWindowChanges *values)
146 return(XConfigureWindow(display,window,value_mask,values));
149 XStandardColormap *XAllocStandardColormap)
151 return((XStandardColormap *) AcquireAlignedMemory(1,sizeof(XStandardColormap)));
154 XWMHints *XAllocWMHints)
156 return((XWMHints *) AcquireAlignedMemory(1,sizeof(XWMHints)));
159 Status XGetGCValues(Display *display,GC gc,unsigned long mask,
165 Status XGetRGBColormaps(Display *display,Window window,
166 XStandardColormap **colormap,int *count,Atom property)
169 return(XGetStandardColormap(display,window,*colormap,property));
172 Status XGetWMColormapWindows(Display *display,Window window,
173 Window **colormap_windows,int *number_windows)
188 property=XInternAtom(display,"WM_COLORMAP_WINDOWS",MagickFalse);
189 if (property == None)
192 Get the window property.
195 status=XGetWindowProperty(display,window,property,0L,1000000L,MagickFalse,
196 XA_WINDOW,&actual_type,&actual_format,&number_items,&leftover,
197 (unsigned char **) &data);
198 if (status != Success)
200 if ((actual_type != XA_WINDOW) || (actual_format != 32))
202 if (data != (Atom *) NULL)
203 XFree((char *) data);
206 *colormap_windows=(Window *) data;
207 *number_windows=(int) number_items;
211 Status XGetWMName(Display *display,Window window,XTextProperty *text_property)
216 if (XFetchName(display,window,&window_name) == 0)
218 text_property->value=(unsigned char *) window_name;
219 text_property->encoding=XA_STRING;
220 text_property->format=8;
221 text_property->nitems=strlen(window_name);
225 char *XResourceManagerString(Display *display)
227 return(display->xdefaults);
230 void XrmDestroyDatabase(XrmDatabase database)
234 void XSetWMIconName(Display *display,Window window,XTextProperty *property)
236 XSetIconName(display,window,property->value);
239 void XSetWMName(Display *display,Window window,XTextProperty *property)
241 XStoreName(display,window,property->value);
244 void XSetWMProperties(Display *display,Window window,
245 XTextProperty *window_name,XTextProperty *icon_name,char **argv,
246 int argc,XSizeHints *size_hints,XWMHints *manager_hints,
247 XClassHint *class_hint)
249 XSetStandardProperties(display,window,window_name->value,icon_name->value,
250 None,argv,argc,size_hints);
251 XSetWMHints(display,window,manager_hints);
252 XSetClassHint(display,window,class_hint);
255 Status XSetWMProtocols(Display *display,Window window,Atom *protocols,
261 wm_protocols=XInternAtom(display,"WM_PROTOCOLS",MagickFalse);
262 XChangeProperty(display,window,wm_protocols,XA_ATOM,32,PropModeReplace,
263 (unsigned char *) protocols,count);
267 int XStringListToTextProperty(char **argv,int argc,XTextProperty *property)
272 register unsigned int
279 for (i=0; i < (long) argc; i++)
280 number_bytes+=(unsigned int) ((argv[i] ? strlen(argv[i]) : 0)+1);
281 protocol.encoding=XA_STRING;
285 protocol.nitems=number_bytes-1;
287 if (number_bytes <= 0)
289 protocol.value=(unsigned char *) AcquireQuantumMemory(1UL,
290 sizeof(*protocol.value));
291 if (protocol.value == MagickFalse)
293 *protocol.value='\0';
300 buffer=(char *) AcquireQuantumMemory(number_bytes,sizeof(*buffer));
301 if (buffer == (char *) NULL)
303 protocol.value=(unsigned char *) buffer;
304 for (i=0; i < (long) argc; i++)
310 if (argument == MagickFalse)
314 (void) CopyMagickString(buffer,argument,MaxTextExtent);
315 buffer+=(strlen(argument)+1);
323 VisualID XVisualIDFromVisual(Visual *visual)
325 return(visual->visualid);
328 Status XWithdrawWindow(Display *display,Window window,int screen)
330 return(XUnmapWindow(display,window));
333 int XWMGeometry(Display *display,int screen,char *user_geometry,
334 char *default_geometry,unsigned int border_width,XSizeHints *size_hints,
335 int *x,int *y,int *width,int *height,int *gravity)
340 status=XGeometry(display,screen,user_geometry,default_geometry,border_width,
341 0,0,0,0,x,y,width,height);
342 *gravity=NorthWestGravity;