| /* |
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
| % % |
| % % |
| % % |
| % % |
| % IIIII CCCC CCCC CCCC M M % |
| % I C C C MM MM % |
| % I C C C M M M % |
| % I C C C M M % |
| % IIIII CCCC CCCC CCCC M M % |
| % % |
| % MagickCore X11 Compatibility Methods % |
| % % |
| % Software Design % |
| % John Cristy % |
| % December 1994 % |
| % % |
| % % |
| % Copyright 1999-2012 ImageMagick Studio LLC, a non-profit organization % |
| % dedicated to making software imaging solutions freely available. % |
| % % |
| % You may not use this file except in compliance with the License. You may % |
| % obtain a copy of the License at % |
| % % |
| % http://www.imagemagick.org/script/license.php % |
| % % |
| % Unless required by applicable law or agreed to in writing, software % |
| % distributed under the License is distributed on an "AS IS" BASIS, % |
| % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. % |
| % See the License for the specific language governing permissions and % |
| % limitations under the License. % |
| % % |
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
| % |
| % |
| */ |
| |
| #include "MagickCore/studio.h" |
| #if defined(MAGICKCORE_X11_DELEGATE) |
| #include "MagickCore/xwindow-private.h" |
| |
| #if defined(PRE_R6_ICCCM) |
| /* |
| Compatibility methods for pre X11R6 ICCCM. |
| */ |
| Status XInitImage(XImage *ximage) |
| { |
| Display |
| display; |
| |
| ScreenFormat |
| screen_format; |
| |
| XImage |
| *created_ximage, |
| target_ximage; |
| |
| /* |
| Initialize the X image. |
| */ |
| screen_format.depth=ximage->depth; |
| screen_format.bits_per_pixel=(int) ximage->bits_per_pixel; |
| display.byte_order=ximage->byte_order; |
| display.bitmap_unit=ximage->bitmap_unit; |
| display.bitmap_bit_order=ximage->bitmap_bit_order; |
| display.pixmap_format=(&screen_format); |
| display.nformats=1; |
| created_ximage=XCreateImage(&display,(Visual *) NULL,ximage->depth, |
| ximage->format,ximage->xoffset,(char *) NULL,ximage->width,ximage->height, |
| ximage->bitmap_pad,ximage->bytes_per_line); |
| if (created_ximage == (XImage *) NULL) |
| return(0); |
| target_ximage=(*ximage); |
| *ximage=(*created_ximage); |
| created_ximage->data=(char *) NULL; |
| XDestroyImage(created_ximage); |
| ximage->red_mask=target_ximage.red_mask; |
| ximage->green_mask=target_ximage.green_mask; |
| ximage->blue_mask=target_ximage.blue_mask; |
| return(1); |
| } |
| #endif |
| |
| #if defined(PRE_R5_ICCCM) |
| /* |
| Compatibility methods for pre X11R5 ICCCM. |
| */ |
| void XrmCombineDatabase(XrmDatabase source,XrmDatabase *target, |
| Bool override) |
| { |
| XrmMergeDatabases(source,target); |
| } |
| |
| Status XrmCombineFileDatabase(const char *filename,XrmDatabase *target, |
| Bool override) |
| { |
| XrmDatabase |
| *combined_database, |
| source; |
| |
| source=XrmGetFileDatabase(filename); |
| if (override == MagickFalse) |
| XrmMergeDatabases(source,target); |
| return(1); |
| } |
| |
| XrmDatabase XrmGetDatabase(Display *display) |
| { |
| return(display->db); |
| } |
| |
| char *XSetLocaleModifiers(char *modifiers) |
| { |
| return((char *) NULL); |
| } |
| |
| Bool XSupportsLocale() |
| { |
| return(0); |
| } |
| #endif |
| |
| #if defined(PRE_R4_ICCCM) |
| /* |
| Compatibility methods for pre X11R4 ICCCM. |
| */ |
| XClassHint *XAllocClassHint) |
| { |
| return((XClassHint *) AcquireMagickMemory(sizeof(XClassHint))); |
| } |
| |
| XIconSize *XAllocIconSize) |
| { |
| return((XIconSize *) AcquireMagickMemory(sizeof(XIconSize))); |
| } |
| |
| XSizeHints *XAllocSizeHints) |
| { |
| return((XSizeHints *) AcquireMagickMemory(sizeof(XSizeHints))); |
| } |
| |
| Status XReconfigureWMWindow(Display *display,Window window,int screen_number, |
| unsigned int value_mask,XWindowChanges *values) |
| { |
| return(XConfigureWindow(display,window,value_mask,values)); |
| } |
| |
| XStandardColormap *XAllocStandardColormap) |
| { |
| return((XStandardColormap *) AcquireMagickMemory(sizeof(XStandardColormap))); |
| } |
| |
| XWMHints *XAllocWMHints) |
| { |
| return((XWMHints *) AcquireMagickMemory(sizeof(XWMHints))); |
| } |
| |
| Status XGetGCValues(Display *display,GC gc,size_t mask, |
| XGCValues *values) |
| { |
| return(MagickTrue); |
| } |
| |
| Status XGetRGBColormaps(Display *display,Window window, |
| XStandardColormap **colormap,int *count,Atom property) |
| { |
| *count=1; |
| return(XGetStandardColormap(display,window,*colormap,property)); |
| } |
| |
| Status XGetWMColormapWindows(Display *display,Window window, |
| Window **colormap_windows,int *number_windows) |
| { |
| Atom |
| actual_type, |
| *data, |
| property; |
| |
| int |
| actual_format, |
| status; |
| |
| size_t |
| leftover, |
| number_items; |
| |
| property=XInternAtom(display,"WM_COLORMAP_WINDOWS",MagickFalse); |
| if (property == None) |
| return(MagickFalse); |
| /* |
| Get the window property. |
| */ |
| *data=(Atom) NULL; |
| status=XGetWindowProperty(display,window,property,0L,1000000L,MagickFalse, |
| XA_WINDOW,&actual_type,&actual_format,&number_items,&leftover, |
| (unsigned char **) &data); |
| if (status != Success) |
| return(MagickFalse); |
| if ((actual_type != XA_WINDOW) || (actual_format != 32)) |
| { |
| if (data != (Atom *) NULL) |
| XFree((char *) data); |
| return(MagickFalse); |
| } |
| *colormap_windows=(Window *) data; |
| *number_windows=(int) number_items; |
| return(MagickTrue); |
| } |
| |
| Status XGetWMName(Display *display,Window window,XTextProperty *text_property) |
| { |
| char |
| *window_name; |
| |
| if (XFetchName(display,window,&window_name) == 0) |
| return(MagickFalse); |
| text_property->value=(unsigned char *) window_name; |
| text_property->encoding=XA_STRING; |
| text_property->format=8; |
| text_property->nitems=strlen(window_name); |
| return(MagickTrue); |
| } |
| |
| char *XResourceManagerString(Display *display) |
| { |
| return(display->xdefaults); |
| } |
| |
| void XrmDestroyDatabase(XrmDatabase database) |
| { |
| } |
| |
| void XSetWMIconName(Display *display,Window window,XTextProperty *property) |
| { |
| XSetIconName(display,window,property->value); |
| } |
| |
| void XSetWMName(Display *display,Window window,XTextProperty *property) |
| { |
| XStoreName(display,window,property->value); |
| } |
| |
| void XSetWMProperties(Display *display,Window window, |
| XTextProperty *window_name,XTextProperty *icon_name,char **argv, |
| int argc,XSizeHints *size_hints,XWMHints *manager_hints, |
| XClassHint *class_hint) |
| { |
| XSetStandardProperties(display,window,window_name->value,icon_name->value, |
| None,argv,argc,size_hints); |
| XSetWMHints(display,window,manager_hints); |
| XSetClassHint(display,window,class_hint); |
| } |
| |
| Status XSetWMProtocols(Display *display,Window window,Atom *protocols, |
| int count) |
| { |
| Atom |
| wm_protocols; |
| |
| wm_protocols=XInternAtom(display,"WM_PROTOCOLS",MagickFalse); |
| XChangeProperty(display,window,wm_protocols,XA_ATOM,32,PropModeReplace, |
| (unsigned char *) protocols,count); |
| return(MagickTrue); |
| } |
| |
| int XStringListToTextProperty(char **argv,int argc,XTextProperty *property) |
| { |
| register int |
| i; |
| |
| register unsigned int |
| number_bytes; |
| |
| XTextProperty |
| protocol; |
| |
| number_bytes=0; |
| for (i=0; i < (ssize_t) argc; i++) |
| number_bytes+=(unsigned int) ((argv[i] ? strlen(argv[i]) : 0)+1); |
| protocol.encoding=XA_STRING; |
| protocol.format=8; |
| protocol.nitems=0; |
| if (number_bytes) |
| protocol.nitems=number_bytes-1; |
| protocol.value=NULL; |
| if (number_bytes <= 0) |
| { |
| protocol.value=(unsigned char *) AcquireQuantumMemory(1UL, |
| sizeof(*protocol.value)); |
| if (protocol.value == MagickFalse) |
| return(MagickFalse); |
| *protocol.value='\0'; |
| } |
| else |
| { |
| register char |
| *buffer; |
| |
| buffer=(char *) AcquireQuantumMemory(number_bytes,sizeof(*buffer)); |
| if (buffer == (char *) NULL) |
| return(MagickFalse); |
| protocol.value=(unsigned char *) buffer; |
| for (i=0; i < (ssize_t) argc; i++) |
| { |
| char |
| *argument; |
| |
| argument=argv[i]; |
| if (argument == MagickFalse) |
| *buffer++='\0'; |
| else |
| { |
| (void) CopyMagickString(buffer,argument,MaxTextExtent); |
| buffer+=(strlen(argument)+1); |
| } |
| } |
| } |
| *property=protocol; |
| return(MagickTrue); |
| } |
| |
| VisualID XVisualIDFromVisual(Visual *visual) |
| { |
| return(visual->visualid); |
| } |
| |
| Status XWithdrawWindow(Display *display,Window window,int screen) |
| { |
| return(XUnmapWindow(display,window)); |
| } |
| |
| int XWMGeometry(Display *display,int screen,char *user_geometry, |
| char *default_geometry,unsigned int border_width,XSizeHints *size_hints, |
| int *x,int *y,int *width,int *height,int *gravity) |
| { |
| int |
| status; |
| |
| status=XGeometry(display,screen,user_geometry,default_geometry,border_width, |
| 0,0,0,0,x,y,width,height); |
| *gravity=NorthWestGravity; |
| return(status); |
| } |
| #endif |
| |
| #endif |