xwindow.c revision 534d0a353b31242ce2f7b26c4eb4fe53f914d0f5
13ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 23ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 33ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 43ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 53ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 63ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X X W W IIIII N N DDDD OOO W W % 73ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X X W W I NN N D D O O W W % 83ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X W W I N N N D D O O W W % 93ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X X W W W I N NN D D O O W W W % 103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X X W W IIIII N N DDDD OOO W W % 113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MagickCore X11 Utility Methods % 143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Software Design % 163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% John Cristy % 173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% July 1992 % 183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2045ef08fd6a09813e4a8f5ddadf85ba9e0ec2cdc7cristy% Copyright 1999-2013 ImageMagick Studio LLC, a non-profit organization % 213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% dedicated to making software imaging solutions freely available. % 223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% You may not use this file except in compliance with the License. You may % 243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% obtain a copy of the License at % 253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% http://www.imagemagick.org/script/license.php % 273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Unless required by applicable law or agreed to in writing, software % 293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% distributed under the License is distributed on an "AS IS" BASIS, % 303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. % 313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% See the License for the specific language governing permissions and % 323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% limitations under the License. % 333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Include declarations. 413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 424c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/studio.h" 434c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/animate.h" 444c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/artifact.h" 454c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/blob.h" 464c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/cache.h" 474c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/client.h" 484c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/color.h" 494c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/color-private.h" 504c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/colormap.h" 514c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/composite.h" 52030436f8fc9854b6bb39f4d7593d9e70ff83a8cacristy#include "MagickCore/constitute.h" 534c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/display.h" 54c53413df5789700e14e1a67e6cc2716d1716a387cristy#include "MagickCore/distort.h" 554c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception.h" 564c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception-private.h" 574c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/geometry.h" 584c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/identify.h" 594c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/image.h" 604c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/image-private.h" 614c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/list.h" 624c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/locale_.h" 634c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/log.h" 644c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/magick.h" 654c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/memory_.h" 664c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/monitor.h" 672c5fc27ae5b613b7fb9fd69c12a47b99c7d4d471cristy#include "MagickCore/nt-base-private.h" 684c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/option.h" 694c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/pixel-accessor.h" 704c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/PreRvIcccm.h" 714c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/quantize.h" 724c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/quantum.h" 734c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/quantum-private.h" 744c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/resource_.h" 754c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/resize.h" 764c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/statistic.h" 774c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/string_.h" 784c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/string-private.h" 794c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/transform.h" 8063a81879d3568083e4ee4f78ebcae2bc831cb764cristy#include "MagickCore/token.h" 814c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/utility.h" 82d1dd6e4fefa0810b9893e6ac9418f79c97c1b39acristy#include "MagickCore/utility-private.h" 834c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/widget.h" 84bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristy#include "MagickCore/widget-private.h" 854c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/xwindow.h" 864c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/xwindow-private.h" 874c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/version.h" 883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(__BEOS__) 893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include <OS.h> 903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_X11_DELEGATE) 923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include <X11/Xproto.h> 933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include <X11/Xlocale.h> 943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICK_HAVE_POLL) 953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# include <sys/poll.h> 963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_SHARED_MEMORY) 983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_MACHINE_PARAM_H) 993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# include <machine/param.h> 1003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 1013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include <sys/ipc.h> 1023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include <sys/shm.h> 1033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include <X11/extensions/XShm.h> 1043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 1053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_SHAPE) 1063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include <X11/extensions/shape.h> 1073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 1083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy X defines. 1113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 112ce70c17bb6433add2eb069515a4f3105989e0662cristy#define XBlueGamma(color) ClampToQuantum(blue_gamma == 1.0 ? (double) \ 1133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (color) : ((pow(((double) QuantumScale*(color)),1.0/(double) blue_gamma)* \ 1143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy QuantumRange))) 1154c08aed51c5899665ade97263692328eea4af106cristy#define XGammaPacket(map,color) (size_t) (map->base_pixel+ \ 1167e9f233e6549b1e1856c1aa85b3f4dee8e9493facristy ((ScaleQuantumToShort(XRedGamma((color)->red))*map->red_max/65535L)* \ 1177e9f233e6549b1e1856c1aa85b3f4dee8e9493facristy map->red_mult)+ \ 1187e9f233e6549b1e1856c1aa85b3f4dee8e9493facristy ((ScaleQuantumToShort(XGreenGamma((color)->green))*map->green_max/65535L)* \ 1197e9f233e6549b1e1856c1aa85b3f4dee8e9493facristy map->green_mult)+ \ 1207e9f233e6549b1e1856c1aa85b3f4dee8e9493facristy ((ScaleQuantumToShort(XBlueGamma((color)->blue))*map->blue_max/65535L)* \ 1217e9f233e6549b1e1856c1aa85b3f4dee8e9493facristy map->blue_mult)) 1224c08aed51c5899665ade97263692328eea4af106cristy#define XGammaPixel(image,map,color) (size_t) (map->base_pixel+ \ 1234c08aed51c5899665ade97263692328eea4af106cristy ((ScaleQuantumToShort(XRedGamma(GetPixelRed(image,color)))*map->red_max/65535L)* \ 1244c08aed51c5899665ade97263692328eea4af106cristy map->red_mult)+ \ 1254c08aed51c5899665ade97263692328eea4af106cristy ((ScaleQuantumToShort(XGreenGamma(GetPixelGreen(image,color)))*map->green_max/65535L)* \ 1264c08aed51c5899665ade97263692328eea4af106cristy map->green_mult)+ \ 1274c08aed51c5899665ade97263692328eea4af106cristy ((ScaleQuantumToShort(XBlueGamma(GetPixelBlue(image,color)))*map->blue_max/65535L)* \ 1284c08aed51c5899665ade97263692328eea4af106cristy map->blue_mult)) 129ce70c17bb6433add2eb069515a4f3105989e0662cristy#define XGreenGamma(color) ClampToQuantum(green_gamma == 1.0 ? (double) \ 1303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (color) : ((pow(((double) QuantumScale*(color)),1.0/(double) green_gamma)* \ 1313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy QuantumRange))) 132ce70c17bb6433add2eb069515a4f3105989e0662cristy#define XRedGamma(color) ClampToQuantum(red_gamma == 1.0 ? (double) \ 1333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (color) : ((pow(((double) QuantumScale*(color)),1.0/(double) red_gamma)* \ 1343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy QuantumRange))) 135bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy#define XStandardPixel(map,color) (size_t) (map->base_pixel+ \ 1367e9f233e6549b1e1856c1aa85b3f4dee8e9493facristy (((color)->red*map->red_max/65535L)*map->red_mult)+ \ 1377e9f233e6549b1e1856c1aa85b3f4dee8e9493facristy (((color)->green*map->green_max/65535L)*map->green_mult)+ \ 1387e9f233e6549b1e1856c1aa85b3f4dee8e9493facristy (((color)->blue*map->blue_max/65535L)*map->blue_mult)) 1393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define AccentuateModulate ScaleCharToQuantum(80) 1413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define HighlightModulate ScaleCharToQuantum(125) 1423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define ShadowModulate ScaleCharToQuantum(135) 1433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define DepthModulate ScaleCharToQuantum(185) 1443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define TroughModulate ScaleCharToQuantum(110) 1453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define XLIB_ILLEGAL_ACCESS 1 1473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#undef ForgetGravity 1483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#undef NorthWestGravity 1493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#undef NorthGravity 1503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#undef NorthEastGravity 1513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#undef WestGravity 1523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#undef CenterGravity 1533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#undef EastGravity 1543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#undef SouthWestGravity 1553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#undef SouthGravity 1563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#undef SouthEastGravity 1573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#undef StaticGravity 1583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#undef index 1603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(hpux9) 1613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define XFD_SET int 1623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#else 1633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define XFD_SET fd_set 1643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 1653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Enumeration declarations. 1683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1693ed852eea50f9d4cd633efb8c2b054b8e33c253cristytypedef enum 1703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#undef DoRed 1723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DoRed = 0x0001, 1733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#undef DoGreen 1743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DoGreen = 0x0002, 1753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#undef DoBlue 1763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DoBlue = 0x0004, 1773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DoMatte = 0x0008 1783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} XColorFlags; 1793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Typedef declarations. 1823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1833ed852eea50f9d4cd633efb8c2b054b8e33c253cristytypedef struct _DiversityPacket 1843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Quantum 1863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy red, 1873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy green, 1883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy blue; 1893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned short 1913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy index; 1923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 193bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 1943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy count; 1953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} DiversityPacket; 1963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Constant declaractions. 1993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 2003ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic MagickBooleanType 2013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy xerror_alert = MagickFalse; 2023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 2043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Method prototypes. 2053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 2063ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic const char 2073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *XVisualClassName(const int); 2083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 209a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristystatic double 2103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy blue_gamma = 1.0, 2113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy green_gamma = 1.0, 2123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy red_gamma = 1.0; 2133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2143ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic MagickBooleanType 2153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XMakePixmap(Display *,const XResourceInfo *,XWindowInfo *); 2163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2173ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic void 2183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XMakeImageLSBFirst(const XResourceInfo *,const XWindowInfo *,Image *, 219e941a75fe8bf344bc5c06a7f74bb5173c87db115cristy XImage *,XImage *,ExceptionInfo *), 2203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XMakeImageMSBFirst(const XResourceInfo *,const XWindowInfo *,Image *, 221e941a75fe8bf344bc5c06a7f74bb5173c87db115cristy XImage *,XImage *,ExceptionInfo *); 2223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2233ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic Window 2243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSelectWindow(Display *,RectangleInfo *); 2253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 2273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% D e s t r o y X R e s o u r c e s % 2323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% DestroyXResources() destroys any X resources. 2383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the DestroyXResources method is: 2403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void DestroyXResources() 2423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 2443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 2463ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void DestroyXResources(void) 2473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 2483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 2493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 2503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 2523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_windows; 2533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindowInfo 2553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *magick_windows[MaxXWindows]; 2563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindows 2583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *windows; 2593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DestroyXWidget(); 2613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows=XSetWindows((XWindows *) ~0); 2623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((windows == (XWindows *) NULL) || (windows->display == (Display *) NULL)) 2633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 2643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_windows=0; 2653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[number_windows++]=(&windows->context); 2663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[number_windows++]=(&windows->group_leader); 2673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[number_windows++]=(&windows->backdrop); 2683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[number_windows++]=(&windows->icon); 2693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[number_windows++]=(&windows->image); 2703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[number_windows++]=(&windows->info); 2713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[number_windows++]=(&windows->magnify); 2723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[number_windows++]=(&windows->pan); 2733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[number_windows++]=(&windows->command); 2743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[number_windows++]=(&windows->widget); 2753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[number_windows++]=(&windows->popup); 2763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[number_windows++]=(&windows->context); 2773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < (int) number_windows; i++) 2783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (magick_windows[i]->mapped != MagickFalse) 2803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XWithdrawWindow(windows->display,magick_windows[i]->id, 2823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[i]->screen); 2833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[i]->mapped=MagickFalse; 2843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (magick_windows[i]->name != (char *) NULL) 2863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[i]->name=(char *) 2873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RelinquishMagickMemory(magick_windows[i]->name); 2883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (magick_windows[i]->icon_name != (char *) NULL) 2893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[i]->icon_name=(char *) 2903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RelinquishMagickMemory(magick_windows[i]->icon_name); 2913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (magick_windows[i]->cursor != (Cursor) NULL) 2923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreeCursor(windows->display,magick_windows[i]->cursor); 2943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[i]->cursor=(Cursor) NULL; 2953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (magick_windows[i]->busy_cursor != (Cursor) NULL) 2973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreeCursor(windows->display,magick_windows[i]->busy_cursor); 2993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[i]->busy_cursor=(Cursor) NULL; 3003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (magick_windows[i]->highlight_stipple != (Pixmap) NULL) 3023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreePixmap(windows->display, 3043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[i]->highlight_stipple); 3053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[i]->highlight_stipple=(Pixmap) NULL; 3063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (magick_windows[i]->shadow_stipple != (Pixmap) NULL) 3083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreePixmap(windows->display,magick_windows[i]->shadow_stipple); 3103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[i]->shadow_stipple=(Pixmap) NULL; 3113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (magick_windows[i]->ximage != (XImage *) NULL) 3133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDestroyImage(magick_windows[i]->ximage); 3153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[i]->ximage=(XImage *) NULL; 3163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (magick_windows[i]->pixmap != (Pixmap) NULL) 3183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreePixmap(windows->display,magick_windows[i]->pixmap); 3203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[i]->pixmap=(Pixmap) NULL; 3213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (magick_windows[i]->id != (Window) NULL) 3233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDestroyWindow(windows->display,magick_windows[i]->id); 3253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[i]->id=(Window) NULL; 3263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (magick_windows[i]->destroy != MagickFalse) 3283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (magick_windows[i]->image != (Image *) NULL) 3303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[i]->image=DestroyImage(magick_windows[i]->image); 3323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[i]->image=NewImageList(); 3333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (magick_windows[i]->matte_pixmap != (Pixmap) NULL) 3353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreePixmap(windows->display, 3373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[i]->matte_pixmap); 3383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[i]->matte_pixmap=(Pixmap) NULL; 3393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (magick_windows[i]->segment_info != (void *) NULL) 3423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_SHARED_MEMORY) 3443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XShmSegmentInfo 3453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *segment_info; 3463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy segment_info=(XShmSegmentInfo *) magick_windows[i]->segment_info; 3483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (segment_info != (XShmSegmentInfo *) NULL) 3493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (segment_info[0].shmid >= 0) 3503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (segment_info[0].shmaddr != NULL) 3523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) shmdt(segment_info[0].shmaddr); 3533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) shmctl(segment_info[0].shmid,IPC_RMID,0); 3543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy segment_info[0].shmaddr=NULL; 3553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy segment_info[0].shmid=(-1); 3563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 3583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magick_windows[i]->segment_info=(void *) 3593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RelinquishMagickMemory(magick_windows[i]->segment_info); 3603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->icon_resources=(XResourceInfo *) 3633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RelinquishMagickMemory(windows->icon_resources); 3643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->icon_pixel != (XPixelInfo *) NULL) 3653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 366f2faecf9facdbbb14fcba373365f9f691a9658e0cristy if (windows->icon_pixel->pixels != (unsigned long *) NULL) 367f2faecf9facdbbb14fcba373365f9f691a9658e0cristy windows->icon_pixel->pixels=(unsigned long *) 3683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RelinquishMagickMemory(windows->icon_pixel->pixels); 3693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->icon_pixel->annotate_context != (GC) NULL) 3703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFreeGC(windows->display,windows->icon_pixel->annotate_context); 3713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->icon_pixel=(XPixelInfo *) 3723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RelinquishMagickMemory(windows->icon_pixel); 3733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->pixel_info != (XPixelInfo *) NULL) 3753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 376f2faecf9facdbbb14fcba373365f9f691a9658e0cristy if (windows->pixel_info->pixels != (unsigned long *) NULL) 377f2faecf9facdbbb14fcba373365f9f691a9658e0cristy windows->pixel_info->pixels=(unsigned long *) 3783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RelinquishMagickMemory(windows->pixel_info->pixels); 3793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->pixel_info->annotate_context != (GC) NULL) 3803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFreeGC(windows->display,windows->pixel_info->annotate_context); 3813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->pixel_info->widget_context != (GC) NULL) 3823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFreeGC(windows->display,windows->pixel_info->widget_context); 3833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->pixel_info->highlight_context != (GC) NULL) 3843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFreeGC(windows->display,windows->pixel_info->highlight_context); 3853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->pixel_info=(XPixelInfo *) 3863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RelinquishMagickMemory(windows->pixel_info); 3873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->font_info != (XFontStruct *) NULL) 3893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFreeFont(windows->display,windows->font_info); 3913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->font_info=(XFontStruct *) NULL; 3923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->class_hints != (XClassHint *) NULL) 3943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 395c9cc4a7b1dd605daff0dd2e0b0e1c42f178871ddcristy if (windows->class_hints->res_name != (char *) NULL) 396c9cc4a7b1dd605daff0dd2e0b0e1c42f178871ddcristy windows->class_hints->res_name=DestroyString( 397c9cc4a7b1dd605daff0dd2e0b0e1c42f178871ddcristy windows->class_hints->res_name); 398c9cc4a7b1dd605daff0dd2e0b0e1c42f178871ddcristy if (windows->class_hints->res_class != (char *) NULL) 399c9cc4a7b1dd605daff0dd2e0b0e1c42f178871ddcristy windows->class_hints->res_class=DestroyString( 400c9cc4a7b1dd605daff0dd2e0b0e1c42f178871ddcristy windows->class_hints->res_class); 4013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFree(windows->class_hints); 4023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->class_hints=(XClassHint *) NULL; 4033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->manager_hints != (XWMHints *) NULL) 4053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFree(windows->manager_hints); 4073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->manager_hints=(XWMHints *) NULL; 4083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->map_info != (XStandardColormap *) NULL) 4103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFree(windows->map_info); 4123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->map_info=(XStandardColormap *) NULL; 4133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->icon_map != (XStandardColormap *) NULL) 4153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFree(windows->icon_map); 4173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->icon_map=(XStandardColormap *) NULL; 4183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->visual_info != (XVisualInfo *) NULL) 4203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFree(windows->visual_info); 4223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->visual_info=(XVisualInfo *) NULL; 4233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->icon_visual != (XVisualInfo *) NULL) 4253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFree(windows->icon_visual); 4273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->icon_visual=(XVisualInfo *) NULL; 4283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetWindows((XWindows *) NULL); 4303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 4333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X A n n o t a t e I m a g e % 4383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XAnnotateImage() annotates the image with text. 4443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XAnnotateImage method is: 4463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MagickBooleanType XAnnotateImage(Display *display, 4487c3af951210f34d3f244b31f06ee291e5be8ecb7cristy% const XPixelInfo *pixel,XAnnotateInfo *annotate_info,Image *image, 4497c3af951210f34d3f244b31f06ee291e5be8ecb7cristy% ExceptionInfo *exception) 4503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 4523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 4543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 4553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o pixel: Specifies a pointer to a XPixelInfo structure. 4573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o annotate_info: Specifies a pointer to a XAnnotateInfo structure. 4593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image: the image. 4613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4627c3af951210f34d3f244b31f06ee291e5be8ecb7cristy% o exception: return any errors or warnings in this structure. 4637c3af951210f34d3f244b31f06ee291e5be8ecb7cristy% 4643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 465bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate MagickBooleanType XAnnotateImage(Display *display, 4667c3af951210f34d3f244b31f06ee291e5be8ecb7cristy const XPixelInfo *pixel,XAnnotateInfo *annotate_info,Image *image, 4677c3af951210f34d3f244b31f06ee291e5be8ecb7cristy ExceptionInfo *exception) 4683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 469c57f694b2d04975a0e501613e34368c464708c19cristy CacheView 470c57f694b2d04975a0e501613e34368c464708c19cristy *annotate_view; 471c57f694b2d04975a0e501613e34368c464708c19cristy 4723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy GC 4733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy annotate_context; 4743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 4763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *annotate_image; 4773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 4793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x, 4803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y; 4813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 482b0a657e13c4aefba39c51292005427b47277869dcristy PixelTrait 483b0a657e13c4aefba39c51292005427b47277869dcristy alpha_trait; 4843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Pixmap 4863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy annotate_pixmap; 4873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 4893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy depth, 4903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height, 4913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width; 4923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window 4943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy root_window; 4953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGCValues 4973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy context_values; 4983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XImage 5003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *annotate_ximage; 5013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize annotated image. 5043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 5053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 5063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 5073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(pixel != (XPixelInfo *) NULL); 5083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(annotate_info != (XAnnotateInfo *) NULL); 5093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image != (Image *) NULL); 5103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize annotated pixmap. 5123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 5133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy root_window=XRootWindow(display,XDefaultScreen(display)); 5143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy depth=(unsigned int) XDefaultDepth(display,XDefaultScreen(display)); 5153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy annotate_pixmap=XCreatePixmap(display,root_window,annotate_info->width, 5163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy annotate_info->height,depth); 5173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (annotate_pixmap == (Pixmap) NULL) 5183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 5193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize graphics info. 5213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 5223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy context_values.background=0; 523bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy context_values.foreground=(size_t) (~0); 5243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy context_values.font=annotate_info->font_info->fid; 525c57f694b2d04975a0e501613e34368c464708c19cristy annotate_context=XCreateGC(display,root_window,(unsigned long) 526c57f694b2d04975a0e501613e34368c464708c19cristy (GCBackground | GCFont | GCForeground),&context_values); 5273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (annotate_context == (GC) NULL) 5283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 5293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw text to pixmap. 5313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 5323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawImageString(display,annotate_pixmap,annotate_context,0, 5333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) annotate_info->font_info->ascent,annotate_info->text, 5343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) strlen(annotate_info->text)); 5353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreeGC(display,annotate_context); 5363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize annotated X image. 5383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 5393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy annotate_ximage=XGetImage(display,annotate_pixmap,0,0,annotate_info->width, 5403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy annotate_info->height,AllPlanes,ZPixmap); 5413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (annotate_ximage == (XImage *) NULL) 5423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 5433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreePixmap(display,annotate_pixmap); 5443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize annotated image. 5463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 5476710d8414f0ed06e4eaf9346366be72e2b4719efcristy annotate_image=AcquireImage((ImageInfo *) NULL,exception); 5483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (annotate_image == (Image *) NULL) 5493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 5503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy annotate_image->columns=annotate_info->width; 5513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy annotate_image->rows=annotate_info->height; 5523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Transfer annotated X image to image. 5543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 5553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=(unsigned int) image->columns; 5563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) image->rows; 5573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=0; 5583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=0; 5593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XParseGeometry(annotate_info->geometry,&x,&y,&width,&height); 560f05d4947caf1bc27fbec041eb37c474a80c83c0bcristy (void) GetOneVirtualPixelInfo(image,UndefinedVirtualPixelMethod,(ssize_t) x, 561f05d4947caf1bc27fbec041eb37c474a80c83c0bcristy (ssize_t) y,&annotate_image->background_color,exception); 5623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (annotate_info->stencil == ForegroundStencil) 5638a46d827a124555f0c48fb2368ec1bba8e079ab6cristy annotate_image->alpha_trait=BlendPixelTrait; 5646f5395df39e037392db46729f9aab05f2a9a428fcristy annotate_view=AcquireAuthenticCacheView(annotate_image,exception); 5653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) annotate_image->rows; y++) 5663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 567c57f694b2d04975a0e501613e34368c464708c19cristy register int 5683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 5693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5704c08aed51c5899665ade97263692328eea4af106cristy register Quantum 571c47d1f8ecfe7d04f0f003cca0fe175658bbf0fb2cristy *restrict q; 5723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 573c57f694b2d04975a0e501613e34368c464708c19cristy q=GetCacheViewAuthenticPixels(annotate_view,0,(ssize_t) y, 574c57f694b2d04975a0e501613e34368c464708c19cristy annotate_image->columns,1,exception); 575acd2ed254c18c254a0ab5aafa06d1645e5d079d8cristy if (q == (Quantum *) NULL) 5763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 577c57f694b2d04975a0e501613e34368c464708c19cristy for (x=0; x < (int) annotate_image->columns; x++) 5783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 5794c08aed51c5899665ade97263692328eea4af106cristy SetPixelAlpha(annotate_image,OpaqueAlpha,q); 5803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (XGetPixel(annotate_ximage,x,y) == 0) 5813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 5823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set this pixel to the background color. 5843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 5854c08aed51c5899665ade97263692328eea4af106cristy SetPixelRed(annotate_image,ScaleShortToQuantum( 5864c08aed51c5899665ade97263692328eea4af106cristy pixel->box_color.red),q); 5874c08aed51c5899665ade97263692328eea4af106cristy SetPixelGreen(annotate_image,ScaleShortToQuantum( 5884c08aed51c5899665ade97263692328eea4af106cristy pixel->box_color.green),q); 5894c08aed51c5899665ade97263692328eea4af106cristy SetPixelBlue(annotate_image,ScaleShortToQuantum( 5904c08aed51c5899665ade97263692328eea4af106cristy pixel->box_color.blue),q); 5913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((annotate_info->stencil == ForegroundStencil) || 5923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (annotate_info->stencil == OpaqueStencil)) 5934c08aed51c5899665ade97263692328eea4af106cristy SetPixelAlpha(annotate_image,TransparentAlpha,q); 5943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 5963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 5973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set this pixel to the pen color. 5993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 6004c08aed51c5899665ade97263692328eea4af106cristy SetPixelRed(annotate_image,ScaleShortToQuantum( 6014c08aed51c5899665ade97263692328eea4af106cristy pixel->pen_color.red),q); 6024c08aed51c5899665ade97263692328eea4af106cristy SetPixelGreen(annotate_image,ScaleShortToQuantum( 6034c08aed51c5899665ade97263692328eea4af106cristy pixel->pen_color.green),q); 6044c08aed51c5899665ade97263692328eea4af106cristy SetPixelBlue(annotate_image,ScaleShortToQuantum( 6054c08aed51c5899665ade97263692328eea4af106cristy pixel->pen_color.blue),q); 6063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (annotate_info->stencil == BackgroundStencil) 6074c08aed51c5899665ade97263692328eea4af106cristy SetPixelAlpha(annotate_image,TransparentAlpha,q); 6083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 609ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(annotate_image); 6103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 611c57f694b2d04975a0e501613e34368c464708c19cristy if (SyncCacheViewAuthenticPixels(annotate_view,exception) == MagickFalse) 6123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 6133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 614c57f694b2d04975a0e501613e34368c464708c19cristy annotate_view=DestroyCacheView(annotate_view); 6153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDestroyImage(annotate_ximage); 6163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 6173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine annotate geometry. 6183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 6193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XParseGeometry(annotate_info->geometry,&x,&y,&width,&height); 6203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((width != (unsigned int) annotate_image->columns) || 6213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (height != (unsigned int) annotate_image->rows)) 6223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 6243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image_geometry[MaxTextExtent]; 6253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 6273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Scale image. 6283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 629b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(image_geometry,MaxTextExtent,"%ux%u", 6303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width,height); 631e941a75fe8bf344bc5c06a7f74bb5173c87db115cristy (void) TransformImage(&annotate_image,(char *) NULL,image_geometry, 632e941a75fe8bf344bc5c06a7f74bb5173c87db115cristy exception); 6333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (annotate_info->degrees != 0.0) 6353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 6373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *rotate_image; 6383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 6403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy rotations; 6413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 642a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 6433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy normalized_degrees; 6443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 6463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Rotate image. 6473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 6486710d8414f0ed06e4eaf9346366be72e2b4719efcristy rotate_image=RotateImage(annotate_image,annotate_info->degrees,exception); 6493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (rotate_image == (Image *) NULL) 6503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 6513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy annotate_image=DestroyImage(annotate_image); 6523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy annotate_image=rotate_image; 6533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 6543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Annotation is relative to the degree of rotation. 6553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 6563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy normalized_degrees=annotate_info->degrees; 6573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (normalized_degrees < -45.0) 6583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy normalized_degrees+=360.0; 6593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (rotations=0; normalized_degrees > 45.0; rotations++) 6603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy normalized_degrees-=90.0; 6613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (rotations % 4) 6623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 6643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 0: 6653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 6663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 1: 6673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 6693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Rotate 90 degrees. 6703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 6713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x-=(int) annotate_image->columns/2; 6723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y+=(int) annotate_image->columns/2; 6733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 6743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 2: 6763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 6783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Rotate 180 degrees. 6793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 6803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=x-(int) annotate_image->columns; 6813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 6823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 3: 6843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 6863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Rotate 270 degrees. 6873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 6883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=x-(int) annotate_image->columns/2; 6893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=y-(int) (annotate_image->rows-(annotate_image->columns/2)); 6903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 6913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 6953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Composite text onto the image. 6963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 6973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XParseGeometry(annotate_info->geometry,&x,&y,&width,&height); 698b0a657e13c4aefba39c51292005427b47277869dcristy alpha_trait=image->alpha_trait; 699feb3e9695150978a5d2372d3fe2f60466a7c8066cristy (void) CompositeImage(image,annotate_image, 700b0a657e13c4aefba39c51292005427b47277869dcristy annotate_image->alpha_trait == BlendPixelTrait ? OverCompositeOp : 701b0a657e13c4aefba39c51292005427b47277869dcristy CopyCompositeOp,MagickTrue,(ssize_t) x,(ssize_t) y,exception); 702b0a657e13c4aefba39c51292005427b47277869dcristy image->alpha_trait=alpha_trait; 7033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy annotate_image=DestroyImage(annotate_image); 7043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 7053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 7063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 7083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X B e s t F o n t % 7133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XBestFont() returns the "best" font. "Best" is defined as a font specified 7193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% in the X resource database or a font such that the text width displayed 7203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% with the font does not exceed the specified maximum width. 7213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XBestFont method is: 7233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XFontStruct *XBestFont(Display *display, 7253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const XResourceInfo *resource_info,const MagickBooleanType text_font) 7263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 7283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o font: XBestFont returns a pointer to a XFontStruct structure. 7303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 7323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 7333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o resource_info: Specifies a pointer to a X11 XResourceInfo structure. 7353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o text_font: True is font should be mono-spaced (typewriter style). 7373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 7393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7403ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic char **FontToList(char *font) 7413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 7423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 7433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **fontlist; 7443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 7463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p, 7473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 7483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 7503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 7513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 7533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fonts; 7543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (font == (char *) NULL) 7563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char **) NULL); 7573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 7583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert string to an ASCII list. 7593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 7603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fonts=1U; 7613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=font; *p != '\0'; p++) 7623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((*p == ':') || (*p == ';') || (*p == ',')) 7633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fonts++; 7643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fontlist=(char **) AcquireQuantumMemory((size_t) fonts+1UL,sizeof(*fontlist)); 7653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (fontlist == (char **) NULL) 7663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(ResourceLimitError,"MemoryAllocationFailed", 7683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font); 7693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char **) NULL); 7703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=font; 7723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < (int) fonts; i++) 7733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (q=p; *q != '\0'; q++) 7753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((*q == ':') || (*q == ';') || (*q == ',')) 7763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 7773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fontlist[i]=(char *) AcquireQuantumMemory((size_t) (q-p)+1UL, 7783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*fontlist[i])); 7793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (fontlist[i] == (char *) NULL) 7803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(ResourceLimitError,"MemoryAllocationFailed", 7823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font); 7833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char **) NULL); 7843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(fontlist[i],p,(size_t) (q-p+1)); 7863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=q+1; 7873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fontlist[i]=(char *) NULL; 7893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(fontlist); 7903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 7913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 792bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate XFontStruct *XBestFont(Display *display, 7933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const XResourceInfo *resource_info,const MagickBooleanType text_font) 7943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 7953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static const char 7963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *Fonts[]= 7973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "-*-helvetica-medium-r-normal--12-*-*-*-*-*-iso8859-1", 7993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "-*-arial-medium-r-normal--12-*-*-*-*-*-iso8859-1", 8003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "-*-helvetica-medium-r-normal--12-*-*-*-*-*-iso8859-15", 8013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "-*-arial-medium-r-normal--12-*-*-*-*-*-iso8859-15", 8023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*", 8033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "-*-arial-medium-r-normal--12-*-*-*-*-*-*-*", 8043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "variable", 8053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "fixed", 8063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) NULL 8073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }, 8083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *TextFonts[]= 8093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 8103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "-*-courier-medium-r-normal-*-12-*-*-*-*-*-iso8859-1", 8113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "-*-courier-medium-r-normal-*-12-*-*-*-*-*-iso8859-15", 8123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "-*-fixed-medium-r-normal-*-12-*-*-*-*-*-*-*", 8133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "fixed", 8143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) NULL 8153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }; 8163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 8183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *font_name; 8193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 8213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **p; 8223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFontStruct 8243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *font_info; 8253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_info=(XFontStruct *) NULL; 8273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_name=resource_info->font; 8283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text_font != MagickFalse) 8293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_name=resource_info->text_font; 8303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((font_name != (char *) NULL) && (*font_name != '\0')) 8313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 8323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 8333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **fontlist; 8343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 8363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 8373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 8393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Load preferred font specified in the X resource database. 8403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 8413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fontlist=FontToList(font_name); 8423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (fontlist != (char **) NULL) 8433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 8443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; fontlist[i] != (char *) NULL; i++) 8453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 8463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (font_info == (XFontStruct *) NULL) 8473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_info=XLoadQueryFont(display,fontlist[i]); 8483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fontlist[i]=DestroyString(fontlist[i]); 8493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fontlist=(char **) RelinquishMagickMemory(fontlist); 8513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (font_info == (XFontStruct *) NULL) 8533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerError,"UnableToLoadFont",font_name); 8543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 8563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Load fonts from list of fonts until one is found. 8573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 8583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=Fonts; 8593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text_font != MagickFalse) 8603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=TextFonts; 8613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (XDisplayHeight(display,XDefaultScreen(display)) >= 748) 8623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 8633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (*p != (char *) NULL) 8643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 8653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (font_info != (XFontStruct *) NULL) 8663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 8673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_info=XLoadQueryFont(display,(char *) *p); 8683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 8693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(font_info); 8713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 8723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 8743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X B e s t I c o n S i z e % 8793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XBestIconSize() returns the "best" icon size. "Best" is defined as an icon 8853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% size that maintains the aspect ratio of the image. If the window manager 8863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% has preferred icon sizes, one of the preferred sizes is used. 8873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XBestIconSize method is: 8893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XBestIconSize(Display *display,XWindowInfo *window,Image *image) 8913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 8933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 8953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 8963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image: the image. 8983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 900bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XBestIconSize(Display *display,XWindowInfo *window, 9013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image *image) 9023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 9033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 9043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i, 9053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_sizes; 9063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 907a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 9083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scale_factor; 9093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 9113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height, 9123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy icon_height, 9133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy icon_width, 9143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width; 9153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window 9173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy root_window; 9183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XIconSize 9203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *icon_size, 9213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *size_list; 9223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 9243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine if the window manager has specified preferred icon sizes. 9253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 9263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 9273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 9283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(window != (XWindowInfo *) NULL); 9293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image != (Image *) NULL); 9303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->width=MaxIconSize; 9313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->height=MaxIconSize; 9323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy icon_size=(XIconSize *) NULL; 9333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_sizes=0; 9343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy root_window=XRootWindow(display,window->screen); 9353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (XGetIconSizes(display,root_window,&size_list,&number_sizes) != 0) 9363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((number_sizes > 0) && (size_list != (XIconSize *) NULL)) 9373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy icon_size=size_list; 9383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (icon_size == (XIconSize *) NULL) 9393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 9413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window manager does not restrict icon size. 9423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 9433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy icon_size=XAllocIconSize(); 9443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (icon_size == (XIconSize *) NULL) 9453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(ResourceLimitError, 9473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "MemoryAllocationFailed",image->filename); 9483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 9493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy icon_size->min_width=1; 9513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy icon_size->max_width=MaxIconSize; 9523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy icon_size->min_height=1; 9533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy icon_size->max_height=MaxIconSize; 9543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy icon_size->width_inc=1; 9553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy icon_size->height_inc=1; 9563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 9583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine aspect ratio of image. 9593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 9603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=(unsigned int) image->columns; 9613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) image->rows; 9623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i=0; 9633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->crop_geometry) 9643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XParseGeometry(window->crop_geometry,&i,&i,&width,&height); 9653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 9663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Look for an icon size that maintains the aspect ratio of image. 9673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 968a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy scale_factor=(double) icon_size->max_width/width; 969a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy if (scale_factor > ((double) icon_size->max_height/height)) 970a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy scale_factor=(double) icon_size->max_height/height; 9713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy icon_width=(unsigned int) icon_size->min_width; 9723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((int) icon_width < icon_size->max_width) 9733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (icon_width >= (unsigned int) (scale_factor*width+0.5)) 9753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 9763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy icon_width+=icon_size->width_inc; 9773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy icon_height=(unsigned int) icon_size->min_height; 9793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((int) icon_height < icon_size->max_height) 9803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (icon_height >= (unsigned int) (scale_factor*height+0.5)) 9823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 9833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy icon_height+=icon_size->height_inc; 9843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) icon_size); 9863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->width=icon_width; 9873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->height=icon_height; 9883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 9893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 9913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X B e s t P i x e l % 9963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XBestPixel() returns a pixel from an array of pixels that is closest to the 10023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% requested color. If the color array is NULL, the colors are obtained from 10033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% the X server. 10043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XBestPixel method is: 10063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XBestPixel(Display *display,const Colormap colormap,XColor *colors, 10083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% unsigned int number_colors,XColor *color) 10093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 10113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o pixel: XBestPixel returns the pixel value closest to the requested 10133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% color. 10143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 10163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 10173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o colormap: Specifies the ID of the X server colormap. 10193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o colors: Specifies an array of XColor structures. 10213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o number_colors: Specifies the number of XColor structures in the 10233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% color definition array. 10243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o color: Specifies the desired RGB value to find in the colors array. 10263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1028bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XBestPixel(Display *display,const Colormap colormap, 10293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XColor *colors,unsigned int number_colors,XColor *color) 10303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 10313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 10323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy query_server; 10333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10344c08aed51c5899665ade97263692328eea4af106cristy PixelInfo 10353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel; 10363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1037a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 10383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy min_distance; 10393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1040a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy register double 10413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy distance; 10423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 10443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i, 10453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j; 10463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 10483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 10493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 10513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Find closest representation for the requested RGB color. 10523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 10533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 10543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 10553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(color != (XColor *) NULL); 10563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XAllocColor(display,colormap,color); 10573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != False) 10583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 10593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy query_server=colors == (XColor *) NULL ? MagickTrue : MagickFalse; 10603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (query_server != MagickFalse) 10613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 10633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Read X server colormap. 10643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 10653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colors=(XColor *) AcquireQuantumMemory(number_colors,sizeof(*colors)); 10663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (colors == (XColor *) NULL) 10673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(ResourceLimitError, 10693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "MemoryAllocationFailed","..."); 10703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 10713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < (int) number_colors; i++) 1073bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy colors[i].pixel=(size_t) i; 10743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (number_colors > 256) 10753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_colors=256; 10763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XQueryColors(display,colormap,colors,(int) number_colors); 10773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1078a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy min_distance=3.0*((double) QuantumRange+1.0)*((double) 10793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy QuantumRange+1.0); 10803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j=0; 10813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < (int) number_colors; i++) 10823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1083a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel.red=colors[i].red-(double) color->red; 10843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy distance=pixel.red*pixel.red; 10853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (distance > min_distance) 10863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 1087a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel.green=colors[i].green-(double) color->green; 10883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy distance+=pixel.green*pixel.green; 10893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (distance > min_distance) 10903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 1091a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel.blue=colors[i].blue-(double) color->blue; 10923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy distance+=pixel.blue*pixel.blue; 10933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (distance > min_distance) 10943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 10953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy min_distance=distance; 10963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color->pixel=colors[i].pixel; 10973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j=i; 10983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XAllocColor(display,colormap,&colors[j]); 11003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (query_server != MagickFalse) 11013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colors=(XColor *) RelinquishMagickMemory(colors); 11023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 11033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 11053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X B e s t V i s u a l I n f o % 11103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XBestVisualInfo() returns visual information for a visual that is the "best" 11163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% the server supports. "Best" is defined as: 11173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1. Restrict the visual list to those supported by the default screen. 11193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2. If a visual type is specified, restrict the visual list to those of 11213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% that type. 11223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3. If a map type is specified, choose the visual that matches the id 11243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% specified by the Standard Colormap. 11253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4 From the list of visuals, choose one that can display the most 11273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% simultaneous colors. If more than one visual can display the same 11283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% number of simultaneous colors, one is chosen based on a rank. 11293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XBestVisualInfo method is: 11313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XVisualInfo *XBestVisualInfo(Display *display, 11333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XStandardColormap *map_info,XResourceInfo *resource_info) 11343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 11363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o visual_info: XBestVisualInfo returns a pointer to a X11 XVisualInfo 11383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% structure. 11393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 11413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 11423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o map_info: If map_type is specified, this structure is initialized 11443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% with info from the Standard Colormap. 11453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o resource_info: Specifies a pointer to a X11 XResourceInfo structure. 11473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 11493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11503ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic inline int MagickMax(const int x,const int y) 11513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 11523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (x > y) 11533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(x); 11543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(y); 11553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 11563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1157bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristystatic inline size_t MagickMin(const unsigned int x, 11583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const unsigned int y) 11593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 11603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (x < y) 11613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(x); 11623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(y); 11633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 11643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1165bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate XVisualInfo *XBestVisualInfo(Display *display, 11663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XStandardColormap *map_info,XResourceInfo *resource_info) 11673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 11683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define MaxStandardColormaps 7 11693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define XVisualColormapSize(visual_info) MagickMin((unsigned int) (\ 11703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (visual_info->klass == TrueColor) || (visual_info->klass == DirectColor) ? \ 11713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_info->red_mask | visual_info->green_mask | visual_info->blue_mask : \ 11723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) visual_info->colormap_size),1U << visual_info->depth) 11733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 11753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *map_type, 11763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *visual_type; 11773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1178c57f694b2d04975a0e501613e34368c464708c19cristy int 1179c57f694b2d04975a0e501613e34368c464708c19cristy visual_mask; 1180c57f694b2d04975a0e501613e34368c464708c19cristy 11813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 11823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 11833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11848891f9ce489d3e61399b60436ea6c62f5ed9b887cristy size_t 11858891f9ce489d3e61399b60436ea6c62f5ed9b887cristy one; 11868891f9ce489d3e61399b60436ea6c62f5ed9b887cristy 11873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static int 11883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_visuals; 11893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static XVisualInfo 11913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_template; 11923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XVisualInfo 11943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *visual_info, 11953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *visual_list; 11963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 11983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Restrict visual search by screen number. 11993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 12003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 12013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 12023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(map_info != (XStandardColormap *) NULL); 12033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(resource_info != (XResourceInfo *) NULL); 12043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_type=resource_info->map_type; 12053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_type=resource_info->visual_type; 12063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_mask=VisualScreenMask; 12073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_template.screen=XDefaultScreen(display); 12083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_template.depth=XDefaultDepth(display,XDefaultScreen(display)); 12098891f9ce489d3e61399b60436ea6c62f5ed9b887cristy one=1; 12103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((resource_info->immutable != MagickFalse) && (resource_info->colors != 0)) 12118891f9ce489d3e61399b60436ea6c62f5ed9b887cristy if (resource_info->colors <= (one << (size_t) visual_template.depth)) 12123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_mask|=VisualDepthMask; 12133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (visual_type != (char *) NULL) 12143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 12163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Restrict visual search by class or visual id. 12173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 12183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare("staticgray",visual_type) == 0) 12193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_mask|=VisualClassMask; 12213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_template.klass=StaticGray; 12223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 12233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 12243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare("grayscale",visual_type) == 0) 12253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_mask|=VisualClassMask; 12273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_template.klass=GrayScale; 12283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 12293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 12303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare("staticcolor",visual_type) == 0) 12313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_mask|=VisualClassMask; 12333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_template.klass=StaticColor; 12343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 12353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 12363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare("pseudocolor",visual_type) == 0) 12373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_mask|=VisualClassMask; 12393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_template.klass=PseudoColor; 12403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 12413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 12423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare("truecolor",visual_type) == 0) 12433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_mask|=VisualClassMask; 12453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_template.klass=TrueColor; 12463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 12473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 12483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare("directcolor",visual_type) == 0) 12493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_mask|=VisualClassMask; 12513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_template.klass=DirectColor; 12523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 12533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 12543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare("default",visual_type) == 0) 12553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_mask|=VisualIDMask; 12573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_template.visualid=XVisualIDFromVisual( 12583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDefaultVisual(display,XDefaultScreen(display))); 12593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 12603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 12613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (isdigit((int) ((unsigned char) *visual_type)) != 0) 12623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_mask|=VisualIDMask; 12643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_template.visualid= 12653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy strtol(visual_type,(char **) NULL,0); 12663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 12673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 12683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerError, 12693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "UnrecognizedVisualSpecifier",visual_type); 12703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 12713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 12723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Get all visuals that meet our criteria so far. 12733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 12743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_visuals=0; 12753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_list=XGetVisualInfo(display,visual_mask,&visual_template, 12763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &number_visuals); 12773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_mask=VisualScreenMask | VisualIDMask; 12783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((number_visuals == 0) || (visual_list == (XVisualInfo *) NULL)) 12793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 12813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Failed to get visual; try using the default visual. 12823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 12833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerWarning,"UnableToGetVisual", 12843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_type); 12853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_template.visualid=XVisualIDFromVisual(XDefaultVisual(display, 12863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDefaultScreen(display))); 12873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_list=XGetVisualInfo(display,visual_mask,&visual_template, 12883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &number_visuals); 12893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((number_visuals == 0) || (visual_list == (XVisualInfo *) NULL)) 12903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((XVisualInfo *) NULL); 12913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerWarning,"UsingDefaultVisual", 12923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XVisualClassName(visual_list->klass)); 12933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 12943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->color_recovery=MagickFalse; 12953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((map_info != (XStandardColormap *) NULL) && (map_type != (char *) NULL)) 12963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 12973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Atom 12983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_property; 12993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 13013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_name[MaxTextExtent]; 13023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 13043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j, 13053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_maps; 13063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 13083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 13093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window 13113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy root_window; 13123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XStandardColormap 13143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *map_list; 13153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 13173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Choose a visual associated with a standard colormap. 13183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 13193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy root_window=XRootWindow(display,XDefaultScreen(display)); 13203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=False; 13213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(map_type,"list") != 0) 13223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 13243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User specified Standard Colormap. 13253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 1326b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString((char *) map_name,MaxTextExtent, 13273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "RGB_%s_MAP",map_type); 13283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy LocaleUpper(map_name); 13293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_property=XInternAtom(display,(char *) map_name,MagickTrue); 13303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (map_property != (Atom) NULL) 13313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XGetRGBColormaps(display,root_window,&map_list,&number_maps, 13323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_property); 13333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 13353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static const char 13373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *colormap[MaxStandardColormaps]= 13383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "_HP_RGB_SMOOTH_MAP_LIST", 13403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "RGB_BEST_MAP", 13413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "RGB_DEFAULT_MAP", 13423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "RGB_GRAY_MAP", 13433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "RGB_RED_MAP", 13443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "RGB_GREEN_MAP", 13453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "RGB_BLUE_MAP", 13463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }; 13473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 13493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Choose a standard colormap from a list. 13503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 13513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < MaxStandardColormaps; i++) 13523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_property=XInternAtom(display,(char *) colormap[i],MagickTrue); 13543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (map_property == (Atom) NULL) 13553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 13563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XGetRGBColormaps(display,root_window,&map_list,&number_maps, 13573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_property); 13583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != False) 13593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 13603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->color_recovery=i == 0 ? MagickTrue : MagickFalse; 13623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == False) 13643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerError,"UnableToGetStandardColormap", 13663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_type); 13673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((XVisualInfo *) NULL); 13683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 13703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Search all Standard Colormaps and visuals for ids that match. 13713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 13723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *map_info=map_list[0]; 13733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if !defined(PRE_R4_ICCCM) 13743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_template.visualid=XVisualIDFromVisual(visual_list[0].visual); 13753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < number_maps; i++) 13763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (j=0; j < number_visuals; j++) 13773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (map_list[i].visualid == 13783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XVisualIDFromVisual(visual_list[j].visual)) 13793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *map_info=map_list[i]; 13813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_template.visualid=XVisualIDFromVisual( 13823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_list[j].visual); 13833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 13843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (map_info->visualid != visual_template.visualid) 13863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerError, 13883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "UnableToMatchVisualToStandardColormap",map_type); 13893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((XVisualInfo *) NULL); 13903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 13923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (map_info->colormap == (Colormap) NULL) 13933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerError, 13953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "StandardColormapIsNotInitialized",map_type); 13963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((XVisualInfo *) NULL); 13973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) map_list); 13993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 14003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 14013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 14023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static const unsigned int 14033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy rank[]= 14043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 14053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy StaticGray, 14063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy GrayScale, 14073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy StaticColor, 14083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DirectColor, 14093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy TrueColor, 14103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy PseudoColor 14113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }; 14123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 14133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XVisualInfo 14143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 14153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 14163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 14173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Pick one visual that displays the most simultaneous colors. 14183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 14193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_info=visual_list; 14203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=visual_list; 14213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=1; i < number_visuals; i++) 14223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 14233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 14243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (XVisualColormapSize(p) > XVisualColormapSize(visual_info)) 14253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_info=p; 14263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 14273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (XVisualColormapSize(p) == XVisualColormapSize(visual_info)) 14283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (rank[p->klass] > rank[visual_info->klass]) 14293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_info=p; 14303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 14313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_template.visualid=XVisualIDFromVisual(visual_info->visual); 14323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 14333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) visual_list); 14343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 14353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Retrieve only one visual by its screen & id number. 14363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 14373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_info=XGetVisualInfo(display,visual_mask,&visual_template, 14383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &number_visuals); 14393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((number_visuals == 0) || (visual_info == (XVisualInfo *) NULL)) 14403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((XVisualInfo *) NULL); 14413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(visual_info); 14423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 14433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 14443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 14453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 14463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X C h e c k D e f i n e C u r s o r % 14503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 14543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XCheckDefineCursor() prevents cursor changes on the root window. 14563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XXCheckDefineCursor method is: 14583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XCheckDefineCursor(display,window,cursor) 14603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 14623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 14643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 14653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: the window. 14673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o cursor: the cursor. 14693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1471bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate int XCheckDefineCursor(Display *display,Window window, 14723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Cursor cursor) 14733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 14743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 14753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 14763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window == XRootWindow(display,XDefaultScreen(display))) 14773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(0); 14783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(XDefineCursor(display,window,cursor)); 14793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 14803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 14813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 14823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 14833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X C h e c k R e f r e s h W i n d o w s % 14873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 14913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XCheckRefreshWindows() checks the X server for exposure events for a 14933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% particular window and updates the areassociated with the exposure event. 14943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XCheckRefreshWindows method is: 14963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XCheckRefreshWindows(Display *display,XWindows *windows) 14983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 15003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 15023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 15033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o windows: Specifies a pointer to a XWindows structure. 15053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1507bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XCheckRefreshWindows(Display *display,XWindows *windows) 15083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 15093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window 15103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id; 15113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 15123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEvent 15133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event; 15143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 15153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 15163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 15173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(windows != (XWindows *) NULL); 15183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDelay(display,SuspendTime); 15193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id=windows->command.id; 15203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (XCheckTypedWindowEvent(display,id,Expose,&event) != MagickFalse) 15213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCommandWidget(display,windows,(char const **) NULL,&event); 15223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id=windows->image.id; 15233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (XCheckTypedWindowEvent(display,id,Expose,&event) != MagickFalse) 15243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XRefreshWindow(display,&windows->image,&event); 15253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDelay(display,SuspendTime << 1); 15263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id=windows->command.id; 15273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (XCheckTypedWindowEvent(display,id,Expose,&event) != MagickFalse) 15283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCommandWidget(display,windows,(char const **) NULL,&event); 15293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id=windows->image.id; 15303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (XCheckTypedWindowEvent(display,id,Expose,&event) != MagickFalse) 15313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XRefreshWindow(display,&windows->image,&event); 15323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 15333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 15343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 15353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 15363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X C l i e n t M e s s a g e % 15403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 15443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XClientMessage() sends a reason to a window with XSendEvent. The reason is 15463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% initialized with a particular protocol type and atom. 15473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XClientMessage function is: 15493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XClientMessage(display,window,protocol,reason,timestamp) 15513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 15533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a pointer to the Display structure; returned from 15553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 15563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a Window structure. 15583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o protocol: Specifies an atom value. 15603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o reason: Specifies an atom value which is the reason to send. 15623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o timestamp: Specifies a value of type Time. 15643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1566bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XClientMessage(Display *display,const Window window, 15673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const Atom protocol,const Atom reason,const Time timestamp) 15683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 15693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XClientMessageEvent 15703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy client_event; 15713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 15723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 15733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy client_event.type=ClientMessage; 15743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy client_event.window=window; 15753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy client_event.message_type=protocol; 15763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy client_event.format=32; 1577c57f694b2d04975a0e501613e34368c464708c19cristy client_event.data.l[0]=(long) reason; 1578c57f694b2d04975a0e501613e34368c464708c19cristy client_event.data.l[1]=(long) timestamp; 15793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSendEvent(display,window,MagickFalse,NoEventMask,(XEvent *) &client_event); 15803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 15813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 15823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 15833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 15843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ X C l i e n t W i n d o w % 15883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 15923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XClientWindow() finds a window, at or below the specified window, which has 15943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% a WM_STATE property. If such a window is found, it is returned, otherwise 15953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% the argument window is returned. 15963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XClientWindow function is: 15983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% client_window=XClientWindow(display,target_window) 16003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 16023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o client_window: XClientWindow returns a window, at or below the specified 16043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% window, which has a WM_STATE property otherwise the argument 16053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% target_window is returned. 16063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a pointer to the Display structure; returned from 16083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 16093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o target_window: Specifies the window to find a WM_STATE property. 16113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 16133ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic Window XClientWindow(Display *display,Window target_window) 16143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 16153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Atom 16163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state, 16173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy type; 16183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 16203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy format; 16213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 16233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 16243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned char 16263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *data; 16273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1628f2faecf9facdbbb14fcba373365f9f691a9658e0cristy unsigned long 16293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy after, 16303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_items; 16313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window 16333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy client_window; 16343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 16363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 16373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state=XInternAtom(display,"WM_STATE",MagickTrue); 16383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state == (Atom) NULL) 16393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(target_window); 16403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy type=(Atom) NULL; 16413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XGetWindowProperty(display,target_window,state,0L,0L,MagickFalse, 16423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (Atom) AnyPropertyType,&type,&format,&number_items,&after,&data); 16433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((status == Success) && (type != (Atom) NULL)) 16443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(target_window); 16453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy client_window=XWindowByProperty(display,target_window,state); 16463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (client_window == (Window) NULL) 16473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(target_window); 16483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(client_window); 16493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 16503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 16523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1656f34a145c545cb86152ad42a787f6d5fffea6b77ccristy+ X C o m p o n e n t T e r m i n u s % 1657f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% % 1658f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% % 1659f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% % 1660f34a145c545cb86152ad42a787f6d5fffea6b77ccristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1661f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% 1662f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% XComponentTerminus() destroys the module component. 1663f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% 1664f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% The format of the XComponentTerminus method is: 1665f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% 1666f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% XComponentTerminus(void) 1667f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% 1668f34a145c545cb86152ad42a787f6d5fffea6b77ccristy*/ 16695ff4eaf57b3cd47d0371f204f865cbba614674a0cristyMagickPrivate void XComponentTerminus(void) 1670f34a145c545cb86152ad42a787f6d5fffea6b77ccristy{ 1671f34a145c545cb86152ad42a787f6d5fffea6b77ccristy DestroyXResources(); 1672f34a145c545cb86152ad42a787f6d5fffea6b77ccristy} 1673f34a145c545cb86152ad42a787f6d5fffea6b77ccristy 1674f34a145c545cb86152ad42a787f6d5fffea6b77ccristy/* 1675f34a145c545cb86152ad42a787f6d5fffea6b77ccristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1676f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% % 1677f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% % 1678f34a145c545cb86152ad42a787f6d5fffea6b77ccristy% % 16793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X C o n f i g u r e I m a g e C o l o r m a p % 16803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 16833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XConfigureImageColormap() creates a new X colormap. 16863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XConfigureImageColormap method is: 16883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XConfigureImageColormap(Display *display, 16906710d8414f0ed06e4eaf9346366be72e2b4719efcristy% XResourceInfo *resource_info,XWindows *windows,Image *image, 16916710d8414f0ed06e4eaf9346366be72e2b4719efcristy% ExceptionInfo *exception) 16923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 16943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 16963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 16973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o resource_info: Specifies a pointer to a X11 XResourceInfo structure. 16993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o windows: Specifies a pointer to a XWindows structure. 17013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image: the image. 17033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17046710d8414f0ed06e4eaf9346366be72e2b4719efcristy% o exception: return any errors or warnings in this structure. 17056710d8414f0ed06e4eaf9346366be72e2b4719efcristy% 17063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1707bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XConfigureImageColormap(Display *display, 17086710d8414f0ed06e4eaf9346366be72e2b4719efcristy XResourceInfo *resource_info,XWindows *windows,Image *image, 17096710d8414f0ed06e4eaf9346366be72e2b4719efcristy ExceptionInfo *exception) 17103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 17113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Colormap 17123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colormap; 17133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 17153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Make standard colormap. 17163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 17173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetCursorState(display,windows,MagickTrue); 17183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XCheckRefreshWindows(display,windows); 17193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XMakeStandardColormap(display,windows->visual_info,resource_info,image, 17206710d8414f0ed06e4eaf9346366be72e2b4719efcristy windows->map_info,windows->pixel_info,exception); 17213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colormap=windows->map_info->colormap; 17223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetWindowColormap(display,windows->image.id,colormap); 17233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetWindowColormap(display,windows->command.id,colormap); 17243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetWindowColormap(display,windows->widget.id,colormap); 17253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->magnify.mapped != MagickFalse) 17263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetWindowColormap(display,windows->magnify.id,colormap); 17273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->pan.mapped != MagickFalse) 17283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetWindowColormap(display,windows->pan.id,colormap); 17293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetCursorState(display,windows,MagickFalse); 17303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XClientMessage(display,windows->image.id,windows->im_protocols, 17313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->im_update_colormap,CurrentTime); 17323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 17333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 17353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X C o n s t r a i n W i n d o w P o s i t i o n % 17403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XConstrainWindowPosition() assures a window is positioned within the X 17463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% server boundaries. 17473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XConstrainWindowPosition method is: 17493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XConstrainWindowPosition(Display *display,XWindowInfo *window_info) 17513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 17533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a pointer to the Display structure; returned from 17553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 17563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window_info: Specifies a pointer to a XWindowInfo structure. 17583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1760bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XConstrainWindowPosition(Display *display, 17613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindowInfo *window_info) 17623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 17633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 17643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy limit; 17653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 17673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 17683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(window_info != (XWindowInfo *) NULL); 17693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy limit=XDisplayWidth(display,window_info->screen)-window_info->width; 17703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->x < 0) 17713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->x=0; 17723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 17733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->x > (int) limit) 17743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->x=(int) limit; 17753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy limit=XDisplayHeight(display,window_info->screen)-window_info->height; 17763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->y < 0) 17773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->y=0; 17783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 17793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->y > limit) 17803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->y=limit; 17813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 17823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 17843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X D e l a y % 17893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 17923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDelay() suspends program execution for the number of milliseconds 17953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% specified. 17963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the Delay method is: 17983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1799bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% void XDelay(Display *display,const size_t milliseconds) 18003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 18023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a pointer to the Display structure; returned from 18043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 18053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o milliseconds: Specifies the number of milliseconds to delay before 18073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% returning. 18083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1810bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XDelay(Display *display,const size_t milliseconds) 18113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 18123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 18133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFlush(display); 1814a21afdefe277667f7821fa90decc1f15a167eacfcristy MagickDelay(milliseconds); 18153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 18163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 18173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 18183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 18193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X D e s t r o y R e s o u r c e I n f o % 18233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 18273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDestroyResourceInfo() frees memory associated with the XResourceInfo 18293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% structure. 18303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XDestroyResourceInfo method is: 18323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XDestroyResourceInfo(XResourceInfo *resource_info) 18343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 18363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o resource_info: Specifies a pointer to a X11 XResourceInfo structure. 18383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 18403ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void XDestroyResourceInfo(XResourceInfo *resource_info) 18413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 18423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (resource_info->image_geometry != (char *) NULL) 18433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->image_geometry=(char *) 18443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RelinquishMagickMemory(resource_info->image_geometry); 18453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (resource_info->quantize_info != (QuantizeInfo *) NULL) 18463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->quantize_info=DestroyQuantizeInfo( 18473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->quantize_info); 18483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (resource_info->client_name != (char *) NULL) 18493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->client_name=(char *) 18503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RelinquishMagickMemory(resource_info->client_name); 18513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (resource_info->name != (char *) NULL) 18523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->name=DestroyString(resource_info->name); 18533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(resource_info,0,sizeof(*resource_info)); 18543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 18553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 18563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 18573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 18583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X D e s t r o y W i n d o w C o l o r s % 18623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 18653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 18663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDestroyWindowColors() frees X11 color resources previously saved on a 18683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% window by XRetainWindowColors or programs like xsetroot. 18693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XDestroyWindowColors method is: 18713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XDestroyWindowColors(Display *display,Window window) 18733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 18753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 18773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 18783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a Window structure. 18803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 18813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1882bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XDestroyWindowColors(Display *display,Window window) 18833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 18843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Atom 18853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy property, 18863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy type; 18873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 18883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 18893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy format; 18903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 18913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 18923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 18933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 18943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned char 18953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *data; 18963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1897f2faecf9facdbbb14fcba373365f9f691a9658e0cristy unsigned long 18983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy after, 18993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 19003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 19013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 19023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy If there are previous resources on the root window, destroy them. 19033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 19043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 19053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 19063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy property=XInternAtom(display,"_XSETROOT_ID",MagickFalse); 19073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (property == (Atom) NULL) 19083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 19093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerError,"UnableToCreateProperty", 19103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "_XSETROOT_ID"); 19113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 19123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 19133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XGetWindowProperty(display,window,property,0L,1L,MagickTrue, 19143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (Atom) AnyPropertyType,&type,&format,&length,&after,&data); 19153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != Success) 19163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 19173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((type == XA_PIXMAP) && (format == 32) && (length == 1) && (after == 0)) 19183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 19193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XKillClient(display,(XID) (*((Pixmap *) data))); 19203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDeleteProperty(display,window,property); 19213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 19223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (type != None) 19233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) data); 19243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 19253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 19263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 19273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 19283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X D i s p l a y I m a g e I n f o % 19323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 19353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 19363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDisplayImageInfo() displays information about an X image. 19383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XDisplayImageInfo method is: 19403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XDisplayImageInfo(Display *display, 19423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const XResourceInfo *resource_info,XWindows *windows,Image *undo_image, 19436710d8414f0ed06e4eaf9346366be72e2b4719efcristy% Image *image,ExceptionInfo *exception) 19443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 19463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 19483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 19493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o resource_info: Specifies a pointer to a X11 XResourceInfo structure. 19513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o windows: Specifies a pointer to a XWindows structure. 19533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o undo_image: the undo image. 19553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image: the image. 19573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19586710d8414f0ed06e4eaf9346366be72e2b4719efcristy% o exception: return any errors or warnings in this structure. 19596710d8414f0ed06e4eaf9346366be72e2b4719efcristy% 19603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1961bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XDisplayImageInfo(Display *display, 19623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const XResourceInfo *resource_info,XWindows *windows,Image *undo_image, 19636710d8414f0ed06e4eaf9346366be72e2b4719efcristy Image *image,ExceptionInfo *exception) 19643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 19653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 19663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy filename[MaxTextExtent], 19673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *text, 19683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **textlist; 19693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 19703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy FILE 19713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *file; 19723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 19733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 19743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unique_file; 19753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1976bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 19773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 19783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1979bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 19803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_pixels; 19813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 19829d314ff2c17a77996c05413c2013880387e50f0ecristy ssize_t 19839d314ff2c17a77996c05413c2013880387e50f0ecristy bytes; 19849d314ff2c17a77996c05413c2013880387e50f0ecristy 19859d314ff2c17a77996c05413c2013880387e50f0ecristy unsigned int 19869d314ff2c17a77996c05413c2013880387e50f0ecristy levels; 19879d314ff2c17a77996c05413c2013880387e50f0ecristy 19883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 19893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Write info about the X server to a file. 19903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 19913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 19923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(resource_info != (XResourceInfo *) NULL); 19933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(windows != (XWindows *) NULL); 19943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image != (Image *) NULL); 19953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image->debug) 19963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); 19973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy file=(FILE *) NULL; 19983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unique_file=AcquireUniqueFileResource(filename); 19993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (unique_file != -1) 20003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy file=fdopen(unique_file,"w"); 20013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((unique_file == -1) || (file == (FILE *) NULL)) 20023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XNoticeWidget(display,windows,"Unable to display image info",filename); 20043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 20053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (resource_info->gamma_correct != MagickFalse) 20073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (resource_info->display_gamma != (char *) NULL) 2008b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file,"Display\n gamma: %s\n\n", 20093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->display_gamma); 20103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 20113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Write info about the X image to a file. 20123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 2013b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file,"X\n visual: %s\n", 20143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XVisualClassName((int) windows->image.storage_class)); 2015b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file," depth: %d\n",windows->image.ximage->depth); 20163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->visual_info->colormap_size != 0) 2017b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file," colormap size: %d\n", 20183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->visual_info->colormap_size); 20193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (resource_info->colormap== SharedColormap) 2020b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file," colormap type: Shared\n"); 20213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 2022b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file," colormap type: Private\n"); 20231e604812fad85bb96f757a2393015ae3d061c39acristy (void) FormatLocaleFile(file," geometry: %dx%d\n", 20241e604812fad85bb96f757a2393015ae3d061c39acristy windows->image.ximage->width,windows->image.ximage->height); 20253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->image.crop_geometry != (char *) NULL) 20261e604812fad85bb96f757a2393015ae3d061c39acristy (void) FormatLocaleFile(file," crop geometry: %s\n", 20271e604812fad85bb96f757a2393015ae3d061c39acristy windows->image.crop_geometry); 20283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->image.pixmap == (Pixmap) NULL) 2029b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file," type: X Image\n"); 20303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 2031b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file," type: Pixmap\n"); 20323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->image.shape != MagickFalse) 2033b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file," non-rectangular shape: True\n"); 20343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 2035b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file," non-rectangular shape: False\n"); 20363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->image.shared_memory != MagickFalse) 2037b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file," shared memory: True\n"); 20383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 2039b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file," shared memory: False\n"); 2040b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file,"\n"); 20413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (resource_info->font != (char *) NULL) 2042b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file,"Font: %s\n\n",resource_info->font); 20433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (resource_info->text_font != (char *) NULL) 2044b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file,"Text font: %s\n\n",resource_info->text_font); 20453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 20463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Write info about the undo cache to a file. 20473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 20483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bytes=0; 20493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (levels=0; undo_image != (Image *) NULL; levels++) 20503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_pixels=undo_image->list->columns*undo_image->list->rows; 2052101ab708b0574518ac5715da4d3915400e9df79acristy bytes+=number_pixels*sizeof(PixelInfo); 20533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy undo_image=GetPreviousImageInList(undo_image); 20543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2055b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file,"Undo Edit Cache\n levels: %u\n",levels); 20561e604812fad85bb96f757a2393015ae3d061c39acristy (void) FormatLocaleFile(file," bytes: %.20gmb\n",(double) 20571e604812fad85bb96f757a2393015ae3d061c39acristy ((bytes+(1 << 19)) >> 20)); 2058b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleFile(file," limit: %.20gmb\n\n",(double) 2059f2faecf9facdbbb14fcba373365f9f691a9658e0cristy resource_info->undo_cache); 20603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 20613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Write info about the image to a file. 20623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 20636710d8414f0ed06e4eaf9346366be72e2b4719efcristy (void) IdentifyImage(image,file,MagickTrue,exception); 20643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) fclose(file); 20656710d8414f0ed06e4eaf9346366be72e2b4719efcristy text=FileToString(filename,~0,exception); 20663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) RelinquishUniqueFileResource(filename); 20673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text == (char *) NULL) 20683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XNoticeWidget(display,windows,"MemoryAllocationFailed", 20703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "UnableToDisplayImageInfo"); 20713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 20723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy textlist=StringToList(text); 20743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (textlist != (char **) NULL) 20753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 20773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy title[MaxTextExtent]; 20783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 20793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 20803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Display information about the image in the Text View widget. 20813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 20823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XWithdrawWindow(display,windows->info.id,windows->info.screen); 2083b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(title,MaxTextExtent,"Image Info: %s", 20843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image->filename); 20853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XTextViewWidget(display,resource_info,windows,MagickTrue,title, 20863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char const **) textlist); 20873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; textlist[i] != (char *) NULL; i++) 20883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy textlist[i]=DestroyString(textlist[i]); 20893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy textlist=(char **) RelinquishMagickMemory(textlist); 20903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text=DestroyString(text); 20923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 20933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 20943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 20953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 20963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 20973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 20983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 20993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ X D i t h e r I m a g e % 21003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 21013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 21023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 21033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 21043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDitherImage() dithers the reference image as required by the HP Color 21063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Recovery algorithm. The color values are quantized to 3 bits of red and 21073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% green, and 2 bits of blue (3/3/2) and can be used as indices into a 8-bit X 21083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% standard colormap. 21093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XDitherImage method is: 21113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21126710d8414f0ed06e4eaf9346366be72e2b4719efcristy% void XDitherImage(Image *image,XImage *ximage,ExceptionInfo *exception) 21133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 21153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image: the image. 21173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o ximage: Specifies a pointer to a XImage structure; returned from 21193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XCreateImage. 21203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 21216710d8414f0ed06e4eaf9346366be72e2b4719efcristy% o exception: return any errors or warnings in this structure. 21226710d8414f0ed06e4eaf9346366be72e2b4719efcristy% 21233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 21246710d8414f0ed06e4eaf9346366be72e2b4719efcristystatic void XDitherImage(Image *image,XImage *ximage,ExceptionInfo *exception) 21253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 21263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static const short int 21273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dither_red[2][16]= 21283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy {-16, 4, -1, 11,-14, 6, -3, 9,-15, 5, -2, 10,-13, 7, -4, 8}, 21303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15, -5, 0,-12, 13, -7, 2,-10, 14, -6, 1,-11, 12, -8, 3, -9} 21313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }, 21323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dither_green[2][16]= 21333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 11,-15, 7, -3, 8,-14, 4, -2, 10,-16, 6, -4, 9,-13, 5, -1}, 21353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy {-12, 14, -8, 2, -9, 13, -5, 1,-11, 15, -7, 3,-10, 12, -6, 0} 21363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }, 21373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dither_blue[2][16]= 21383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { -3, 9,-13, 7, -1, 11,-15, 5, -4, 8,-14, 6, -2, 10,-16, 4}, 21403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2,-10, 12, -8, 0,-12, 14, -6, 3, -9, 13, -7, 1,-11, 15, -5} 21413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }; 21423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2143c57f694b2d04975a0e501613e34368c464708c19cristy CacheView 2144c57f694b2d04975a0e501613e34368c464708c19cristy *image_view; 21453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 21463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 2147c57f694b2d04975a0e501613e34368c464708c19cristy value, 21483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y; 21493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2150101ab708b0574518ac5715da4d3915400e9df79acristy PixelInfo 2151c57f694b2d04975a0e501613e34368c464708c19cristy color; 21523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 21533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 21543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 21553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 21564c08aed51c5899665ade97263692328eea4af106cristy register const Quantum 21573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 21583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 21593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 21603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i, 21613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j, 21623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 21633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 21643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 21653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scanline_pad; 21663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2167bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register size_t 21683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel; 21693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 21703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned char 21713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *blue_map[2][16], 21723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *green_map[2][16], 21733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *red_map[2][16]; 21743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 21753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 21763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Allocate and initialize dither maps. 21773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 21783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < 2; i++) 21793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (j=0; j < 16; j++) 21803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy red_map[i][j]=(unsigned char *) AcquireQuantumMemory(256UL, 21823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*red_map)); 21833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy green_map[i][j]=(unsigned char *) AcquireQuantumMemory(256UL, 21843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*green_map)); 21853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy blue_map[i][j]=(unsigned char *) AcquireQuantumMemory(256UL, 21863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*blue_map)); 21873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((red_map[i][j] == (unsigned char *) NULL) || 21883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (green_map[i][j] == (unsigned char *) NULL) || 21893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (blue_map[i][j] == (unsigned char *) NULL)) 21903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(ResourceLimitError, 21923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "MemoryAllocationFailed",image->filename); 21933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 21943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 21973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize dither tables. 21983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 21993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < 2; i++) 22003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (j=0; j < 16; j++) 22013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=0; x < 256; x++) 22023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 22033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy value=x-16; 22043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (x < 48) 22053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy value=x/2+8; 22063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy value+=dither_red[i][j]; 22073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy red_map[i][j][x]=(unsigned char) 22083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((value < 0) ? 0 : (value > 255) ? 255 : value); 22093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy value=x-16; 22103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (x < 48) 22113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy value=x/2+8; 22123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy value+=dither_green[i][j]; 22133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy green_map[i][j][x]=(unsigned char) 22143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((value < 0) ? 0 : (value > 255) ? 255 : value); 22153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy value=x-32; 22163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (x < 112) 22173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy value=x/2+24; 2218bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy value+=((size_t) dither_blue[i][j] << 1); 22193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy blue_map[i][j][x]=(unsigned char) 22203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((value < 0) ? 0 : (value > 255) ? 255 : value); 22213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 22223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 22233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Dither image. 22243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 22253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scanline_pad=(unsigned int) (ximage->bytes_per_line- 2226bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy ((size_t) (ximage->width*ximage->bits_per_pixel) >> 3)); 22273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i=0; 22283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j=0; 22293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=ximage->data; 223046ff2676b1044ea4101ac7a59b83289cd8f6cfdacristy image_view=AcquireVirtualCacheView(image,exception); 22313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) image->rows; y++) 22323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2233c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(image_view,0,(ssize_t) y,image->columns,1, 22346710d8414f0ed06e4eaf9346366be72e2b4719efcristy exception); 22354c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 22363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 22373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=0; x < (int) image->columns; x++) 22383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2239ada285ba46bd3b79ab9321bbd1e617c6551b1e33cristy color.red=(double) ClampToQuantum((double) (red_map[i][j][ 2240e42f658533644aecb733785ffd91b286d6778deacristy (int) ScaleQuantumToChar(GetPixelRed(image,p))] << 8)); 2241ada285ba46bd3b79ab9321bbd1e617c6551b1e33cristy color.green=(double) ClampToQuantum((double) (green_map[i][j][ 2242e42f658533644aecb733785ffd91b286d6778deacristy (int) ScaleQuantumToChar(GetPixelGreen(image,p))] << 8)); 2243ada285ba46bd3b79ab9321bbd1e617c6551b1e33cristy color.blue=(double) ClampToQuantum((double) (blue_map[i][j][ 2244e42f658533644aecb733785ffd91b286d6778deacristy (int) ScaleQuantumToChar(GetPixelBlue(image,p))] << 8)); 2245bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy pixel=(size_t) (((size_t) color.red & 0xe0) | 2246bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy (((size_t) color.green & 0xe0) >> 3) | 2247bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy (((size_t) color.blue & 0xc0) >> 6)); 22483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=(char) pixel; 2249ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 22503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j++; 22513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (j == 16) 22523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j=0; 22533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 22543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 22553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i++; 22563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (i == 2) 22573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i=0; 22583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2259c57f694b2d04975a0e501613e34368c464708c19cristy image_view=DestroyCacheView(image_view); 22603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 22613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Free allocated memory. 22623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 22633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < 2; i++) 22643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (j=0; j < 16; j++) 22653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 22663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy green_map[i][j]=(unsigned char *) RelinquishMagickMemory(green_map[i][j]); 22673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy blue_map[i][j]=(unsigned char *) RelinquishMagickMemory(blue_map[i][j]); 22683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy red_map[i][j]=(unsigned char *) RelinquishMagickMemory(red_map[i][j]); 22693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 22703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 22713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 22723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 22733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 22743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X D r a w I m a g e % 22783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 22813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 22823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDrawImage() draws a line on the image. 22843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XDrawImage method is: 22863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22876710d8414f0ed06e4eaf9346366be72e2b4719efcristy% MagickBooleanType XDrawImage(Display *display,const XPixelInfo *pixel, 22886710d8414f0ed06e4eaf9346366be72e2b4719efcristy% XDrawInfo *draw_info,Image *image,ExceptionInfo *exception) 22893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 22913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 22933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 22943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o pixel: Specifies a pointer to a XPixelInfo structure. 22963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o draw_info: Specifies a pointer to a XDrawInfo structure. 22983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 22993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image: the image. 23003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 23016710d8414f0ed06e4eaf9346366be72e2b4719efcristy% o exception: return any errors or warnings in this structure. 23026710d8414f0ed06e4eaf9346366be72e2b4719efcristy% 23033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 2304bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate MagickBooleanType XDrawImage(Display *display, 23056710d8414f0ed06e4eaf9346366be72e2b4719efcristy const XPixelInfo *pixel,XDrawInfo *draw_info,Image *image, 23066710d8414f0ed06e4eaf9346366be72e2b4719efcristy ExceptionInfo *exception) 23073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 2308c57f694b2d04975a0e501613e34368c464708c19cristy CacheView 2309c57f694b2d04975a0e501613e34368c464708c19cristy *draw_view; 2310c57f694b2d04975a0e501613e34368c464708c19cristy 23113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy GC 23123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy draw_context; 23133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 23143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 23153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *draw_image; 23163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 23173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 23183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x, 23193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y; 23203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2321b0a657e13c4aefba39c51292005427b47277869dcristy PixelTrait 2322b0a657e13c4aefba39c51292005427b47277869dcristy alpha_trait; 23233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 23243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Pixmap 23253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy draw_pixmap; 23263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 23273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 23283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy depth, 23293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height, 23303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width; 23313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 23323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window 23333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy root_window; 23343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 23353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGCValues 23363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy context_values; 23373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 23383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XImage 23393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *draw_ximage; 23403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 23413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 23423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize drawd image. 23433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 23443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 23453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(pixel != (XPixelInfo *) NULL); 23463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(draw_info != (XDrawInfo *) NULL); 23473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image != (Image *) NULL); 23483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image->debug != MagickFalse) 23493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 23503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 23513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize drawd pixmap. 23523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 23533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy root_window=XRootWindow(display,XDefaultScreen(display)); 23543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy depth=(unsigned int) XDefaultDepth(display,XDefaultScreen(display)); 23553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy draw_pixmap=XCreatePixmap(display,root_window,draw_info->width, 23563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy draw_info->height,depth); 23573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (draw_pixmap == (Pixmap) NULL) 23583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 23593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 23603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize graphics info. 23613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 2362bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy context_values.background=(size_t) (~0); 23633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy context_values.foreground=0; 23643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy context_values.line_width=(int) draw_info->line_width; 2365bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy draw_context=XCreateGC(display,root_window,(size_t) 23663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (GCBackground | GCForeground | GCLineWidth),&context_values); 23673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (draw_context == (GC) NULL) 23683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 23693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 23703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Clear pixmap. 23713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 23723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillRectangle(display,draw_pixmap,draw_context,0,0,draw_info->width, 23733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy draw_info->height); 23743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 23753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw line to pixmap. 23763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 23773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetBackground(display,draw_context,0); 2378bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy (void) XSetForeground(display,draw_context,(size_t) (~0)); 2379dd05bebf92311ac0db88ae24d6a6862a4729e8a5cristy if (draw_info->stipple != (Pixmap) NULL) 2380dd05bebf92311ac0db88ae24d6a6862a4729e8a5cristy { 2381dd05bebf92311ac0db88ae24d6a6862a4729e8a5cristy (void) XSetFillStyle(display,draw_context,FillOpaqueStippled); 2382dd05bebf92311ac0db88ae24d6a6862a4729e8a5cristy (void) XSetStipple(display,draw_context,draw_info->stipple); 2383dd05bebf92311ac0db88ae24d6a6862a4729e8a5cristy } 23843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (draw_info->element) 23853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case PointElement: 23873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 23883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawLines(display,draw_pixmap,draw_context, 23903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy draw_info->coordinate_info,(int) draw_info->number_coordinates, 23913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy CoordModeOrigin); 23923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 23933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case LineElement: 23953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawLine(display,draw_pixmap,draw_context,draw_info->line_info.x1, 23973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy draw_info->line_info.y1,draw_info->line_info.x2, 23983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy draw_info->line_info.y2); 23993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 24013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case RectangleElement: 24023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 24033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawRectangle(display,draw_pixmap,draw_context, 24043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) draw_info->rectangle_info.x,(int) draw_info->rectangle_info.y, 24053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) draw_info->rectangle_info.width, 24063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) draw_info->rectangle_info.height); 24073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 24093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case FillRectangleElement: 24103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 24113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillRectangle(display,draw_pixmap,draw_context, 24123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) draw_info->rectangle_info.x,(int) draw_info->rectangle_info.y, 24133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) draw_info->rectangle_info.width, 24143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) draw_info->rectangle_info.height); 24153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 24173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case CircleElement: 24183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case EllipseElement: 24193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 24203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawArc(display,draw_pixmap,draw_context, 24213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) draw_info->rectangle_info.x,(int) draw_info->rectangle_info.y, 24223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) draw_info->rectangle_info.width, 24233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) draw_info->rectangle_info.height,0,360*64); 24243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 24263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case FillCircleElement: 24273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case FillEllipseElement: 24283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 24293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillArc(display,draw_pixmap,draw_context, 24303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) draw_info->rectangle_info.x,(int) draw_info->rectangle_info.y, 24313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) draw_info->rectangle_info.width, 24323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) draw_info->rectangle_info.height,0,360*64); 24333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 24353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case PolygonElement: 24363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 24373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XPoint 24383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *coordinate_info; 24393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 24403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy coordinate_info=draw_info->coordinate_info; 24413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawLines(display,draw_pixmap,draw_context,coordinate_info, 24423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) draw_info->number_coordinates,CoordModeOrigin); 24433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawLine(display,draw_pixmap,draw_context, 24443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy coordinate_info[draw_info->number_coordinates-1].x, 24453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy coordinate_info[draw_info->number_coordinates-1].y, 24463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy coordinate_info[0].x,coordinate_info[0].y); 24473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 24493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case FillPolygonElement: 24503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 24513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillPolygon(display,draw_pixmap,draw_context, 24523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy draw_info->coordinate_info,(int) draw_info->number_coordinates,Complex, 24533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy CoordModeOrigin); 24543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 24563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 24573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreeGC(display,draw_context); 24583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 24593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize X image. 24603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 24613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy draw_ximage=XGetImage(display,draw_pixmap,0,0,draw_info->width, 24623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy draw_info->height,AllPlanes,ZPixmap); 24633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (draw_ximage == (XImage *) NULL) 24643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 24653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreePixmap(display,draw_pixmap); 24663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 24673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize draw image. 24683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 24696710d8414f0ed06e4eaf9346366be72e2b4719efcristy draw_image=AcquireImage((ImageInfo *) NULL,exception); 24703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (draw_image == (Image *) NULL) 24713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 24723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy draw_image->columns=draw_info->width; 24733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy draw_image->rows=draw_info->height; 24743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 24753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Transfer drawn X image to image. 24763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 24773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=(unsigned int) image->columns; 24783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) image->rows; 24793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=0; 24803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=0; 24813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XParseGeometry(draw_info->geometry,&x,&y,&width,&height); 2482f05d4947caf1bc27fbec041eb37c474a80c83c0bcristy (void) GetOneVirtualPixelInfo(image,UndefinedVirtualPixelMethod,(ssize_t) x, 2483f05d4947caf1bc27fbec041eb37c474a80c83c0bcristy (ssize_t) y,&draw_image->background_color,exception); 24846710d8414f0ed06e4eaf9346366be72e2b4719efcristy if (SetImageStorageClass(draw_image,DirectClass,exception) == MagickFalse) 24853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 24868a46d827a124555f0c48fb2368ec1bba8e079ab6cristy draw_image->alpha_trait=BlendPixelTrait; 24876f5395df39e037392db46729f9aab05f2a9a428fcristy draw_view=AcquireAuthenticCacheView(draw_image,exception); 24883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) draw_image->rows; y++) 24893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2490c57f694b2d04975a0e501613e34368c464708c19cristy register int 24913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 24923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 24934c08aed51c5899665ade97263692328eea4af106cristy register Quantum 2494c47d1f8ecfe7d04f0f003cca0fe175658bbf0fb2cristy *restrict q; 24953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2496c57f694b2d04975a0e501613e34368c464708c19cristy q=QueueCacheViewAuthenticPixels(draw_view,0,(ssize_t) y,draw_image->columns, 2497c57f694b2d04975a0e501613e34368c464708c19cristy 1,exception); 2498acd2ed254c18c254a0ab5aafa06d1645e5d079d8cristy if (q == (Quantum *) NULL) 24993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 2500c57f694b2d04975a0e501613e34368c464708c19cristy for (x=0; x < (int) draw_image->columns; x++) 25013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 25023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (XGetPixel(draw_ximage,x,y) == 0) 25033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 25043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 25053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set this pixel to the background color. 25063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 2507803640d20a6a664315eddfff6f8531d0c5e0871dcristy SetPixelInfoPixel(draw_image,&draw_image->background_color,q); 25087676158e6c207e287beb252c9837d565863c3328cristy SetPixelAlpha(draw_image,(Quantum) (draw_info->stencil == 25094c08aed51c5899665ade97263692328eea4af106cristy OpaqueStencil ? TransparentAlpha : OpaqueAlpha),q); 25103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 25123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 25133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 25143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set this pixel to the pen color. 25153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 25164c08aed51c5899665ade97263692328eea4af106cristy SetPixelRed(draw_image,ScaleShortToQuantum( 25174c08aed51c5899665ade97263692328eea4af106cristy pixel->pen_color.red),q); 25184c08aed51c5899665ade97263692328eea4af106cristy SetPixelGreen(draw_image,ScaleShortToQuantum( 25194c08aed51c5899665ade97263692328eea4af106cristy pixel->pen_color.green),q); 25204c08aed51c5899665ade97263692328eea4af106cristy SetPixelBlue(draw_image,ScaleShortToQuantum( 25214c08aed51c5899665ade97263692328eea4af106cristy pixel->pen_color.blue),q); 25224c08aed51c5899665ade97263692328eea4af106cristy SetPixelAlpha(draw_image,(Quantum) (draw_info->stencil == 25234c08aed51c5899665ade97263692328eea4af106cristy OpaqueStencil ? OpaqueAlpha : TransparentAlpha),q); 25243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2525ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(draw_image); 25263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2527c57f694b2d04975a0e501613e34368c464708c19cristy if (SyncCacheViewAuthenticPixels(draw_view,exception) == MagickFalse) 25283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 25293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2530c57f694b2d04975a0e501613e34368c464708c19cristy draw_view=DestroyCacheView(draw_view); 25313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDestroyImage(draw_ximage); 25323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 25333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine draw geometry. 25343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 25353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XParseGeometry(draw_info->geometry,&x,&y,&width,&height); 25363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((width != (unsigned int) draw_image->columns) || 25373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (height != (unsigned int) draw_image->rows)) 25383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 25393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 25403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image_geometry[MaxTextExtent]; 25413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 25423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 25433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Scale image. 25443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 2545b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(image_geometry,MaxTextExtent,"%ux%u", 25463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width,height); 2547e941a75fe8bf344bc5c06a7f74bb5173c87db115cristy (void) TransformImage(&draw_image,(char *) NULL,image_geometry, 2548e941a75fe8bf344bc5c06a7f74bb5173c87db115cristy exception); 25493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (draw_info->degrees != 0.0) 25513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 25523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 25533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *rotate_image; 25543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 25553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 25563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy rotations; 25573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2558a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 25593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy normalized_degrees; 25603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 25613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 25623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Rotate image. 25633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 25646710d8414f0ed06e4eaf9346366be72e2b4719efcristy rotate_image=RotateImage(draw_image,draw_info->degrees,exception); 25653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (rotate_image == (Image *) NULL) 25663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 25673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy draw_image=DestroyImage(draw_image); 25683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy draw_image=rotate_image; 25693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 25703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Annotation is relative to the degree of rotation. 25713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 25723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy normalized_degrees=draw_info->degrees; 25733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (normalized_degrees < -45.0) 25743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy normalized_degrees+=360.0; 25753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (rotations=0; normalized_degrees > 45.0; rotations++) 25763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy normalized_degrees-=90.0; 25773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (rotations % 4) 25783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 25793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 25803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 0: 25813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 25823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 1: 25833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 25843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 25853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Rotate 90 degrees. 25863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 25873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=x-(int) draw_image->columns/2; 25883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=y+(int) draw_image->columns/2; 25893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 25903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 2: 25923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 25933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 25943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Rotate 180 degrees. 25953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 25963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=x-(int) draw_image->columns; 25973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 25983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 3: 26003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 26013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 26023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Rotate 270 degrees. 26033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 26043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=x-(int) draw_image->columns/2; 26053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=y-(int) (draw_image->rows-(draw_image->columns/2)); 26063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 26073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 26083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 26093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 26103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 26113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Composite text onto the image. 26123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 26136f5395df39e037392db46729f9aab05f2a9a428fcristy draw_view=AcquireAuthenticCacheView(draw_image,exception); 26143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) draw_image->rows; y++) 26153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2616c57f694b2d04975a0e501613e34368c464708c19cristy register int 26173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 26183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 26194c08aed51c5899665ade97263692328eea4af106cristy register Quantum 2620c47d1f8ecfe7d04f0f003cca0fe175658bbf0fb2cristy *restrict q; 26213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2622c57f694b2d04975a0e501613e34368c464708c19cristy q=GetCacheViewAuthenticPixels(draw_view,0,(ssize_t) y,draw_image->columns,1, 2623c57f694b2d04975a0e501613e34368c464708c19cristy exception); 2624acd2ed254c18c254a0ab5aafa06d1645e5d079d8cristy if (q == (Quantum *) NULL) 26253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 2626c57f694b2d04975a0e501613e34368c464708c19cristy for (x=0; x < (int) draw_image->columns; x++) 26273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 26284c08aed51c5899665ade97263692328eea4af106cristy if (GetPixelAlpha(image,q) != TransparentAlpha) 26294c08aed51c5899665ade97263692328eea4af106cristy SetPixelAlpha(draw_image,OpaqueAlpha,q); 2630ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(draw_image); 26313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2632c57f694b2d04975a0e501613e34368c464708c19cristy if (SyncCacheViewAuthenticPixels(draw_view,exception) == MagickFalse) 26333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 26343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2635c57f694b2d04975a0e501613e34368c464708c19cristy draw_view=DestroyCacheView(draw_view); 26363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XParseGeometry(draw_info->geometry,&x,&y,&width,&height); 26373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (draw_info->stencil == TransparentStencil) 263839172408bad7ef2ef00a815fa9abf9979e7857cbcristy (void) CompositeImage(image,draw_image,CopyAlphaCompositeOp,MagickTrue, 2639feb3e9695150978a5d2372d3fe2f60466a7c8066cristy (ssize_t) x,(ssize_t) y,exception); 26403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 26413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2642b0a657e13c4aefba39c51292005427b47277869dcristy alpha_trait=image->alpha_trait; 264339172408bad7ef2ef00a815fa9abf9979e7857cbcristy (void) CompositeImage(image,draw_image,OverCompositeOp,MagickTrue, 2644feb3e9695150978a5d2372d3fe2f60466a7c8066cristy (ssize_t) x,(ssize_t) y,exception); 2645b0a657e13c4aefba39c51292005427b47277869dcristy image->alpha_trait=alpha_trait; 26463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 26473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy draw_image=DestroyImage(draw_image); 26483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 26493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 26503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 26513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 26523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 26533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 26543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 26553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 26563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X E r r o r % 26573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 26583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 26593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 26603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 26613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 26623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XError() ignores BadWindow errors for XQueryTree and XGetWindowAttributes, 26633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% and ignores BadDrawable errors for XGetGeometry, and ignores BadValue errors 2664bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristy% for XQueryColor. It returns MagickFalse in those cases. Otherwise it 2665bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristy% returns True. 26663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 26673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XError function is: 26683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2669bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristy% int XError(display,error) 26703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 26713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 26723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 26733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a pointer to the Display structure; returned from 26743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 26753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 26763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o error: Specifies the error event. 26773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 26783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 26793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 26803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(__cplusplus) || defined(c_plusplus) 26813ed852eea50f9d4cd633efb8c2b054b8e33c253cristyextern "C" { 26823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 26833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 26843ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport int XError(Display *display,XErrorEvent *error) 26853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 26863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 26873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 26883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(error != (XErrorEvent *) NULL); 26893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy xerror_alert=MagickTrue; 26903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (error->request_code) 26913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 26923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case X_GetGeometry: 26933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 26943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((int) error->error_code == BadDrawable) 26953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 26963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 26973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 26983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case X_GetWindowAttributes: 26993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case X_QueryTree: 27003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 27013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((int) error->error_code == BadWindow) 27023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 27033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 27043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 27053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case X_QueryColors: 27063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 27073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((int) error->error_code == BadValue) 27083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 27093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 27103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 27113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 27123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 27133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 27143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 27153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(__cplusplus) || defined(c_plusplus) 27163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 27173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 27183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 27193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 27203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 27213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 27223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 27233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 27243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X F r e e R e s o u r c e s % 27253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 27263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 27273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 27283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 27293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 27303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XFreeResources() frees X11 resources. 27313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 27323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XFreeResources method is: 27333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 27343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XFreeResources(Display *display,XVisualInfo *visual_info, 27353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XStandardColormap *map_info,XPixelInfo *pixel,XFontStruct *font_info, 27363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XResourceInfo *resource_info,XWindowInfo *window_info) 27373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% resource_info,window_info) 27383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 27393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 27403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 27413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 27423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 27433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 27443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o visual_info: Specifies a pointer to a X11 XVisualInfo structure; 27453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% returned from XGetVisualInfo. 27463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 27473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o map_info: If map_type is specified, this structure is initialized 27483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% with info from the Standard Colormap. 27493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 27503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o pixel: Specifies a pointer to a XPixelInfo structure. 27513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 27523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o font_info: Specifies a pointer to a XFontStruct structure. 27533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 27543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o resource_info: Specifies a pointer to a X11 XResourceInfo structure. 27553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 27563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window_info: Specifies a pointer to a X11 XWindowInfo structure. 27573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 27583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 2759bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XFreeResources(Display *display,XVisualInfo *visual_info, 27603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XStandardColormap *map_info,XPixelInfo *pixel,XFontStruct *font_info, 27613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XResourceInfo *resource_info,XWindowInfo *window_info) 27623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 27633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 27643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 27653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(resource_info != (XResourceInfo *) NULL); 27663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info != (XWindowInfo *) NULL) 27673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 27683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 27693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Free X image. 27703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 27713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->ximage != (XImage *) NULL) 27723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDestroyImage(window_info->ximage); 27733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->id != (Window) NULL) 27743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 27753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 27763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Free destroy window and free cursors. 27773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 27783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->id != XRootWindow(display,visual_info->screen)) 27793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDestroyWindow(display,window_info->id); 27803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->annotate_context != (GC) NULL) 27813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreeGC(display,window_info->annotate_context); 27823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->highlight_context != (GC) NULL) 27833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreeGC(display,window_info->highlight_context); 27843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->widget_context != (GC) NULL) 27853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreeGC(display,window_info->widget_context); 27863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->cursor != (Cursor) NULL) 27873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreeCursor(display,window_info->cursor); 27883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->cursor=(Cursor) NULL; 27893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->busy_cursor != (Cursor) NULL) 27903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreeCursor(display,window_info->busy_cursor); 27913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->busy_cursor=(Cursor) NULL; 27923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 27933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 27943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 27953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Free font. 27963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 27973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (font_info != (XFontStruct *) NULL) 2798aafc19213cef0b96cd237edb693a33fd1a2466eacristy { 2799aafc19213cef0b96cd237edb693a33fd1a2466eacristy (void) XFreeFont(display,font_info); 2800aafc19213cef0b96cd237edb693a33fd1a2466eacristy font_info=(XFontStruct *) NULL; 2801aafc19213cef0b96cd237edb693a33fd1a2466eacristy } 28023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (map_info != (XStandardColormap *) NULL) 28033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 28043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 28053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Free X Standard Colormap. 28063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 28073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (resource_info->map_type == (char *) NULL) 28083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreeStandardColormap(display,visual_info,map_info,pixel); 28093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) map_info); 28103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 28113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 28123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Free X visual info. 28133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 28143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (visual_info != (XVisualInfo *) NULL) 28153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) visual_info); 28163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (resource_info->close_server != MagickFalse) 28173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCloseDisplay(display); 28183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 28193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 28203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 28213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 28223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 28233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 28243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 28253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X F r e e S t a n d a r d C o l o r m a p % 28263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 28273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 28283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 28293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 28303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 28313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XFreeStandardColormap() frees an X11 colormap. 28323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 28333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XFreeStandardColormap method is: 28343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 28353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XFreeStandardColormap(Display *display, 28363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const XVisualInfo *visual_info,XStandardColormap *map_info, 28373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XPixelInfo *pixel) 28383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 28393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 28403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 28413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 28423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 28433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 28443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o visual_info: Specifies a pointer to a X11 XVisualInfo structure; 28453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% returned from XGetVisualInfo. 28463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 28473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o map_info: If map_type is specified, this structure is initialized 28483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% with info from the Standard Colormap. 28493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 28503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o pixel: Specifies a pointer to a XPixelInfo structure. 28513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 28523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 2853bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XFreeStandardColormap(Display *display, 28543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const XVisualInfo *visual_info,XStandardColormap *map_info,XPixelInfo *pixel) 28553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 28563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 28573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Free colormap. 28583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 28593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 28603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 28613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(visual_info != (XVisualInfo *) NULL); 28623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(map_info != (XStandardColormap *) NULL); 28633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFlush(display); 28643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (map_info->colormap != (Colormap) NULL) 28653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 28663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (map_info->colormap != XDefaultColormap(display,visual_info->screen)) 28673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreeColormap(display,map_info->colormap); 28683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 28693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (pixel != (XPixelInfo *) NULL) 28703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((visual_info->klass != TrueColor) && 28713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (visual_info->klass != DirectColor)) 28723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreeColors(display,map_info->colormap,pixel->pixels, 28733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) pixel->colors,0); 28743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 28753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_info->colormap=(Colormap) NULL; 28763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (pixel != (XPixelInfo *) NULL) 28773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2878f2faecf9facdbbb14fcba373365f9f691a9658e0cristy if (pixel->pixels != (unsigned long *) NULL) 2879f2faecf9facdbbb14fcba373365f9f691a9658e0cristy pixel->pixels=(unsigned long *) RelinquishMagickMemory(pixel->pixels); 2880f2faecf9facdbbb14fcba373365f9f691a9658e0cristy pixel->pixels=(unsigned long *) NULL; 28813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 28823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 28833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 28843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 28853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 28863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 28873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 28883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 28893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X G e t A n n o t a t e I n f o % 28903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 28913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 28923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 28933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 28943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 28953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XGetAnnotateInfo() initializes the AnnotateInfo structure. 28963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 28973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XGetAnnotateInfo method is: 28983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 28993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XGetAnnotateInfo(XAnnotateInfo *annotate_info) 29003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 29013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 29023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 29033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o annotate_info: Specifies a pointer to a XAnnotateInfo structure. 29043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 29053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 2906bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XGetAnnotateInfo(XAnnotateInfo *annotate_info) 29073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 29083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 29093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize annotate structure. 29103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 29113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 29123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(annotate_info != (XAnnotateInfo *) NULL); 29133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy annotate_info->x=0; 29143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy annotate_info->y=0; 29153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy annotate_info->width=0; 29163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy annotate_info->height=0; 29173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy annotate_info->stencil=ForegroundStencil; 29183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy annotate_info->degrees=0.0; 29193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy annotate_info->font_info=(XFontStruct *) NULL; 29203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy annotate_info->text=(char *) NULL; 29213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *annotate_info->geometry='\0'; 29223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy annotate_info->previous=(XAnnotateInfo *) NULL; 29233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy annotate_info->next=(XAnnotateInfo *) NULL; 29243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSupportsLocale(); 29253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetLocaleModifiers(""); 29263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 29273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 29283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 29293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 29303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 29313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 29323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 29333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X G e t M a p I n f o % 29343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 29353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 29363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 29373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 29383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 29393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XGetMapInfo() initializes the XStandardColormap structure. 29403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 29413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XStandardColormap method is: 29423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 29433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XGetMapInfo(const XVisualInfo *visual_info,const Colormap colormap, 29443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XStandardColormap *map_info) 29453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 29463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 29473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 29483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o colormap: Specifies the ID of the X server colormap. 29493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 29503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o visual_info: Specifies a pointer to a X11 XVisualInfo structure; 29513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% returned from XGetVisualInfo. 29523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 29533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o map_info: Specifies a pointer to a X11 XStandardColormap structure. 29543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 29553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 2956bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XGetMapInfo(const XVisualInfo *visual_info, 29573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const Colormap colormap,XStandardColormap *map_info) 29583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 29593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 29603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize map info. 29613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 29623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 29633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(visual_info != (XVisualInfo *) NULL); 29643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(map_info != (XStandardColormap *) NULL); 29653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_info->colormap=colormap; 29663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_info->red_max=visual_info->red_mask; 2967bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy map_info->red_mult=(size_t) (map_info->red_max != 0 ? 1 : 0); 29683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (map_info->red_max != 0) 29693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((map_info->red_max & 0x01) == 0) 29703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 29713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_info->red_max>>=1; 29723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_info->red_mult<<=1; 29733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 29743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_info->green_max=visual_info->green_mask; 2975bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy map_info->green_mult=(size_t) (map_info->green_max != 0 ? 1 : 0); 29763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (map_info->green_max != 0) 29773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((map_info->green_max & 0x01) == 0) 29783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 29793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_info->green_max>>=1; 29803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_info->green_mult<<=1; 29813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 29823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_info->blue_max=visual_info->blue_mask; 2983bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy map_info->blue_mult=(size_t) (map_info->blue_max != 0 ? 1 : 0); 29843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (map_info->blue_max != 0) 29853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((map_info->blue_max & 0x01) == 0) 29863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 29873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_info->blue_max>>=1; 29883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_info->blue_mult<<=1; 29893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 29903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_info->base_pixel=0; 29913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 29923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 29933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 29943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 29953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 29963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 29973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 29983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X G e t P i x e l I n f o % 29993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 30003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 30013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 30023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 30033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3004101ab708b0574518ac5715da4d3915400e9df79acristy% XGetPixelInfo() initializes the PixelInfo structure. 30053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 30064c08aed51c5899665ade97263692328eea4af106cristy% The format of the XGetPixelInfo method is: 30073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 30084c08aed51c5899665ade97263692328eea4af106cristy% void XGetPixelInfo(Display *display,const XVisualInfo *visual_info, 30093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const XStandardColormap *map_info,const XResourceInfo *resource_info, 30103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Image *image,XPixelInfo *pixel) 30113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% pixel) 30123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 30133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 30143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 30153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 30163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 30173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 30183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o visual_info: Specifies a pointer to a X11 XVisualInfo structure; 30193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% returned from XGetVisualInfo. 30203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 30213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o map_info: If map_type is specified, this structure is initialized 30223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% with info from the Standard Colormap. 30233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 30243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o resource_info: Specifies a pointer to a X11 XResourceInfo structure. 30253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 30263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image: the image. 30273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 30283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o pixel: Specifies a pointer to a XPixelInfo structure. 30293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 30303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 3031bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XGetPixelInfo(Display *display, 30323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const XVisualInfo *visual_info,const XStandardColormap *map_info, 30333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const XResourceInfo *resource_info,Image *image,XPixelInfo *pixel) 30343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 30353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static const char 30363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *PenColors[MaxNumberPens]= 30373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 30383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "#000000000000", /* black */ 30393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "#00000000ffff", /* blue */ 30403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "#0000ffffffff", /* cyan */ 30413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "#0000ffff0000", /* green */ 30423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "#bdbdbdbdbdbd", /* gray */ 30433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "#ffff00000000", /* red */ 30443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "#ffff0000ffff", /* magenta */ 30453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "#ffffffff0000", /* yellow */ 30463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "#ffffffffffff", /* white */ 30473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "#bdbdbdbdbdbd", /* gray */ 30483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "#bdbdbdbdbdbd" /* gray */ 30493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }; 30503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 30513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Colormap 30523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colormap; 30533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3054bcdf567d7dc3c69162ca349e41d43741faed2043cristy extern const char 3055bcdf567d7dc3c69162ca349e41d43741faed2043cristy BorderColor[], 3056bcdf567d7dc3c69162ca349e41d43741faed2043cristy ForegroundColor[]; 3057bcdf567d7dc3c69162ca349e41d43741faed2043cristy 3058bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 30593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 30603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 30613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 30623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 30633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 30643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 30653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy packets; 30663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 30673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 30683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize pixel info. 30693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 30703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 30713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 30723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(visual_info != (XVisualInfo *) NULL); 30733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(map_info != (XStandardColormap *) NULL); 30743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(resource_info != (XResourceInfo *) NULL); 30753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(pixel != (XPixelInfo *) NULL); 30763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->colors=0; 30773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image != (Image *) NULL) 30783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image->storage_class == PseudoClass) 3079c57f694b2d04975a0e501613e34368c464708c19cristy pixel->colors=(ssize_t) image->colors; 30803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy packets=(unsigned int) 30813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickMax((int) pixel->colors,visual_info->colormap_size)+MaxNumberPens; 3082f2faecf9facdbbb14fcba373365f9f691a9658e0cristy if (pixel->pixels != (unsigned long *) NULL) 3083f2faecf9facdbbb14fcba373365f9f691a9658e0cristy pixel->pixels=(unsigned long *) RelinquishMagickMemory(pixel->pixels); 3084f2faecf9facdbbb14fcba373365f9f691a9658e0cristy pixel->pixels=(unsigned long *) AcquireQuantumMemory(packets, 30853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(pixel->pixels)); 3086f2faecf9facdbbb14fcba373365f9f691a9658e0cristy if (pixel->pixels == (unsigned long *) NULL) 30873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(ResourceLimitFatalError,"UnableToGetPixelInfo", 30883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image->filename); 30893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 30903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set foreground color. 30913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 30923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colormap=map_info->colormap; 30933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XParseColor(display,colormap,(char *) ForegroundColor, 30943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &pixel->foreground_color); 30953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XParseColor(display,colormap,resource_info->foreground_color, 30963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &pixel->foreground_color); 30973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == False) 30983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerError,"ColorIsNotKnownToServer", 30993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->foreground_color); 31003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->foreground_color.pixel= 31013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XStandardPixel(map_info,&pixel->foreground_color); 31023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->foreground_color.flags=(char) (DoRed | DoGreen | DoBlue); 31033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 31043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set background color. 31053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 31063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XParseColor(display,colormap,"#d6d6d6d6d6d6",&pixel->background_color); 31073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XParseColor(display,colormap,resource_info->background_color, 31083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &pixel->background_color); 31093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == False) 31103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerError,"ColorIsNotKnownToServer", 31113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->background_color); 31123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->background_color.pixel= 31133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XStandardPixel(map_info,&pixel->background_color); 31143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->background_color.flags=(char) (DoRed | DoGreen | DoBlue); 31153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 31163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set border color. 31173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 31183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XParseColor(display,colormap,(char *) BorderColor, 31193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &pixel->border_color); 31203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XParseColor(display,colormap,resource_info->border_color, 31213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &pixel->border_color); 31223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == False) 31233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerError,"ColorIsNotKnownToServer", 31243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->border_color); 31253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->border_color.pixel=XStandardPixel(map_info,&pixel->border_color); 31263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->border_color.flags=(char) (DoRed | DoGreen | DoBlue); 31273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 31283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set matte color. 31293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 31303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->matte_color=pixel->background_color; 31313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (resource_info->matte_color != (char *) NULL) 31323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 31333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 31343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Matte color is specified as a X resource or command line argument. 31353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 31363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XParseColor(display,colormap,resource_info->matte_color, 31373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &pixel->matte_color); 31383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == False) 31393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerError,"ColorIsNotKnownToServer", 31403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->matte_color); 31413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->matte_color.pixel=XStandardPixel(map_info,&pixel->matte_color); 31423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->matte_color.flags=(char) (DoRed | DoGreen | DoBlue); 31433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 31443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 31453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set highlight color. 31463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 31473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->highlight_color.red=(unsigned short) (( 31483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->matte_color.red*ScaleQuantumToShort(HighlightModulate))/65535L+ 31493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (ScaleQuantumToShort((Quantum) (QuantumRange-HighlightModulate)))); 31503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->highlight_color.green=(unsigned short) (( 31513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->matte_color.green*ScaleQuantumToShort(HighlightModulate))/65535L+ 31523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (ScaleQuantumToShort((Quantum) (QuantumRange-HighlightModulate)))); 31533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->highlight_color.blue=(unsigned short) (( 31543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->matte_color.blue*ScaleQuantumToShort(HighlightModulate))/65535L+ 31553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (ScaleQuantumToShort((Quantum) (QuantumRange-HighlightModulate)))); 31563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->highlight_color.pixel= 31573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XStandardPixel(map_info,&pixel->highlight_color); 31583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->highlight_color.flags=(char) (DoRed | DoGreen | DoBlue); 31593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 31603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set shadow color. 31613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 3162a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel->shadow_color.red=(unsigned short) (((double) 31633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->matte_color.red*ScaleQuantumToShort(ShadowModulate))/65535L); 3164a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel->shadow_color.green=(unsigned short) (((double) 31653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->matte_color.green*ScaleQuantumToShort(ShadowModulate))/65535L); 3166a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel->shadow_color.blue=(unsigned short) (((double) 31673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->matte_color.blue*ScaleQuantumToShort(ShadowModulate))/65535L); 31683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->shadow_color.pixel=XStandardPixel(map_info,&pixel->shadow_color); 31693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->shadow_color.flags=(char) (DoRed | DoGreen | DoBlue); 31703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 31713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set depth color. 31723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 3173a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel->depth_color.red=(unsigned short) (((double) 31743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->matte_color.red*ScaleQuantumToShort(DepthModulate))/65535L); 3175a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel->depth_color.green=(unsigned short) (((double) 31763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->matte_color.green*ScaleQuantumToShort(DepthModulate))/65535L); 3177a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel->depth_color.blue=(unsigned short) (((double) 31783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->matte_color.blue*ScaleQuantumToShort(DepthModulate))/65535L); 31793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->depth_color.pixel=XStandardPixel(map_info,&pixel->depth_color); 31803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->depth_color.flags=(char) (DoRed | DoGreen | DoBlue); 31813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 31823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set trough color. 31833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 3184a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel->trough_color.red=(unsigned short) (((double) 31853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->matte_color.red*ScaleQuantumToShort(TroughModulate))/65535L); 3186a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel->trough_color.green=(unsigned short) (((double) 31873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->matte_color.green*ScaleQuantumToShort(TroughModulate))/65535L); 3188a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel->trough_color.blue=(unsigned short) (((double) 31893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->matte_color.blue*ScaleQuantumToShort(TroughModulate))/65535L); 31903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->trough_color.pixel=XStandardPixel(map_info,&pixel->trough_color); 31913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->trough_color.flags=(char) (DoRed | DoGreen | DoBlue); 31923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 31933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set pen color. 31943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 31953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < MaxNumberPens; i++) 31963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 31973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XParseColor(display,colormap,(char *) PenColors[i], 31983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &pixel->pen_colors[i]); 31993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XParseColor(display,colormap,resource_info->pen_colors[i], 32003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &pixel->pen_colors[i]); 32013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == False) 32023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerError,"ColorIsNotKnownToServer", 32033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->pen_colors[i]); 32043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->pen_colors[i].pixel=XStandardPixel(map_info,&pixel->pen_colors[i]); 32053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->pen_colors[i].flags=(char) (DoRed | DoGreen | DoBlue); 32063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 32073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->box_color=pixel->background_color; 32083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->pen_color=pixel->foreground_color; 32093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->box_index=0; 32103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->pen_index=1; 32113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image != (Image *) NULL) 32123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 32133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((resource_info->gamma_correct != MagickFalse) && 32143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (image->gamma != 0.0)) 32153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 32163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy GeometryInfo 32173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy geometry_info; 32183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 32193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickStatusType 32203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy flags; 32213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 32223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 32233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize map relative to display and image gamma. 32243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 32253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy flags=ParseGeometry(resource_info->display_gamma,&geometry_info); 32263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy red_gamma=geometry_info.rho; 32273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy green_gamma=geometry_info.sigma; 32283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((flags & SigmaValue) == 0) 32293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy green_gamma=red_gamma; 32303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy blue_gamma=geometry_info.xi; 32313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((flags & XiValue) == 0) 32323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy blue_gamma=red_gamma; 32333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy red_gamma*=image->gamma; 32343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy green_gamma*=image->gamma; 32353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy blue_gamma*=image->gamma; 32363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 32373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image->storage_class == PseudoClass) 32383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 32393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 32403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize pixel array for images of type PseudoClass. 32413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 3242bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) image->colors; i++) 32434c08aed51c5899665ade97263692328eea4af106cristy pixel->pixels[i]=XGammaPacket(map_info,image->colormap+i); 32443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < MaxNumberPens; i++) 32453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->pixels[image->colors+i]=pixel->pen_colors[i].pixel; 32463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->colors+=MaxNumberPens; 32473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 32483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 32493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 32503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 32513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 32523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 32533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 32543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 32553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 32563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X G e t R e s o u r c e C l a s s % 32573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 32583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 32593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 32603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 32613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 32623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XGetResourceClass() queries the X server for the specified resource name or 32633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% class. If the resource name or class is not defined in the database, the 32643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% supplied default value is returned. 32653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 32663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XGetResourceClass method is: 32673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 32683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *XGetResourceClass(XrmDatabase database,const char *client_name, 32693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *keyword,char *resource_default) 32703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 32713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 32723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 32733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o database: Specifies a resource database; returned from 32743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XrmGetStringDatabase. 32753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 32763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o client_name: Specifies the application name used to retrieve resource 32773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% info from the X server database. 32783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 32793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o keyword: Specifies the keyword of the value being retrieved. 32803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 32813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o resource_default: Specifies the default value to return if the query 32823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% fails to find the specified keyword/class. 32833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 32843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 32853ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *XGetResourceClass(XrmDatabase database, 32863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *client_name,const char *keyword,char *resource_default) 32873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 32883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 32893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_class[MaxTextExtent], 32903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_name[MaxTextExtent]; 32913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 32923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static char 32933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *resource_type; 32943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 32953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 32963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 32973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 32983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XrmValue 32993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_value; 33003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 33013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (database == (XrmDatabase) NULL) 33023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(resource_default); 33033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *resource_name='\0'; 33043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *resource_class='\0'; 33053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (keyword != (char *) NULL) 33063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 33073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 33083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy c, 33093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy k; 33103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 33113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 33123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize resource keyword and class. 33133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 3314b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(resource_name,MaxTextExtent,"%s.%s", 33153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy client_name,keyword); 33163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy c=(int) (*client_name); 33173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((c >= XK_a) && (c <= XK_z)) 33183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy c-=(XK_a-XK_A); 33193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 33203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((c >= XK_agrave) && (c <= XK_odiaeresis)) 33213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy c-=(XK_agrave-XK_Agrave); 33223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 33233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((c >= XK_oslash) && (c <= XK_thorn)) 33243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy c-=(XK_oslash-XK_Ooblique); 33253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy k=(int) (*keyword); 33263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((k >= XK_a) && (k <= XK_z)) 33273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy k-=(XK_a-XK_A); 33283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 33293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((k >= XK_agrave) && (k <= XK_odiaeresis)) 33303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy k-=(XK_agrave-XK_Agrave); 33313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 33323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((k >= XK_oslash) && (k <= XK_thorn)) 33333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy k-=(XK_oslash-XK_Ooblique); 3334b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(resource_class,MaxTextExtent,"%c%s.%c%s",c, 33353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy client_name+1,k,keyword+1); 33363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 33373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XrmGetResource(database,resource_name,resource_class,&resource_type, 33383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &resource_value); 33393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == False) 33403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(resource_default); 33413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(resource_value.addr); 33423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 33433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 33443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 33453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 33463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 33473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 33483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 33493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X G e t R e s o u r c e D a t a b a s e % 33503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 33513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 33523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 33533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 33543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 33553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XGetResourceDatabase() creates a new resource database and initializes it. 33563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 33573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XGetResourceDatabase method is: 33583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 33593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XrmDatabase XGetResourceDatabase(Display *display, 33603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *client_name) 33613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 33623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 33633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 33643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o database: XGetResourceDatabase() returns the database after it is 33653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% initialized. 33663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 33673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 33683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 33693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 33703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o client_name: Specifies the application name used to retrieve resource 33713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% info from the X server database. 33723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 33733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 33743ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport XrmDatabase XGetResourceDatabase(Display *display, 33753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *client_name) 33763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 33773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 33783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy filename[MaxTextExtent]; 33793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 33803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 33813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy c; 33823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 33833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register const char 33843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 33853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 33863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XrmDatabase 33873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_database, 33883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy server_database; 33893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 33903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (display == (Display *) NULL) 33913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((XrmDatabase) NULL); 33923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(client_name != (char *) NULL); 33933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 33943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize resource database. 33953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 33963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XrmInitialize(); 33973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XGetDefault(display,(char *) client_name,"dummy"); 33983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_database=XrmGetDatabase(display); 33993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 34003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Combine application database. 34013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 34023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (client_name != (char *) NULL) 34033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 34043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 34053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Get basename of client. 34063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 34073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=client_name+(strlen(client_name)-1); 34083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((p > client_name) && (*p != '/')) 34093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p--; 34103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*p == '/') 34113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy client_name=p+1; 34123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 34133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy c=(int) (*client_name); 34143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((c >= XK_a) && (c <= XK_z)) 34153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy c-=(XK_a-XK_A); 34163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 34173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((c >= XK_agrave) && (c <= XK_odiaeresis)) 34183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy c-=(XK_agrave-XK_Agrave); 34193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 34203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((c >= XK_oslash) && (c <= XK_thorn)) 34213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy c-=(XK_oslash-XK_Ooblique); 34223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(X11_APPLICATION_PATH) 3423b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(filename,MaxTextExtent,"%s%c%s", 34243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy X11_APPLICATION_PATH,c,client_name+1); 34253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XrmCombineFileDatabase(filename,&resource_database,MagickFalse); 34263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 34273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (XResourceManagerString(display) != (char *) NULL) 34283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 34293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 34303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Combine server database. 34313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 34323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy server_database=XrmGetStringDatabase(XResourceManagerString(display)); 34333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XrmCombineDatabase(server_database,&resource_database,MagickFalse); 34343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 34353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 34363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Merge user preferences database. 34373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 34383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(X11_PREFERENCES_PATH) 3439b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(filename,MaxTextExtent,"%s%src", 34403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy X11_PREFERENCES_PATH,client_name); 34413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ExpandFilename(filename); 34423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XrmCombineFileDatabase(filename,&resource_database,MagickFalse); 34433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 34443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(resource_database); 34453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 34463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 34473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 34483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 34493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 34503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 34513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 34523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X G e t R e s o u r c e I n f o % 34533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 34543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 34553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 34563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 34573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 34583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XGetResourceInfo(image_info,) initializes the ResourceInfo structure. 34593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 34603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XGetResourceInfo method is: 34613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 34623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XGetResourceInfo(const ImageInfo *image_info,XrmDatabase database, 34633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *client_name,XResourceInfo *resource_info) 34643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 34653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 34663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 34673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image_info: the image info. 34683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 34693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o database: Specifies a resource database; returned from 34703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XrmGetStringDatabase. 34713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 34723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o client_name: Specifies the application name used to retrieve 34733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% resource info from the X server database. 34743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 34753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o resource_info: Specifies a pointer to a X11 XResourceInfo structure. 34763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 34773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 34783ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void XGetResourceInfo(const ImageInfo *image_info, 34793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XrmDatabase database,const char *client_name,XResourceInfo *resource_info) 34803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 34813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 348200976d8abcff7a3bc7b986b8105dde8d091dee61cristy *directory, 34833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *resource_value; 34843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3485bcdf567d7dc3c69162ca349e41d43741faed2043cristy extern const char 3486bcdf567d7dc3c69162ca349e41d43741faed2043cristy BorderColor[], 3487bcdf567d7dc3c69162ca349e41d43741faed2043cristy ForegroundColor[]; 3488bcdf567d7dc3c69162ca349e41d43741faed2043cristy 34893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 34903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize resource info fields. 34913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 34923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 34933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(resource_info != (XResourceInfo *) NULL); 34943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(resource_info,0,sizeof(*resource_info)); 34953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->resource_database=database; 34963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->image_info=(ImageInfo *) image_info; 34973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) SetImageInfoProgressMonitor(resource_info->image_info, 34983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XMagickProgressMonitor,(void *) NULL); 34993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->quantize_info=CloneQuantizeInfo((QuantizeInfo *) NULL); 35003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->close_server=MagickTrue; 35013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->client_name=AcquireString(client_name); 35023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_value=XGetResourceClass(database,client_name,"backdrop", 35033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "False"); 35046f2013165d72f7d8ef5f66bb9453126d88113809anthony resource_info->backdrop=IsStringTrue(resource_value); 35053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->background_color=XGetResourceInstance(database,client_name, 35063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "background",(char *) "#d6d6d6d6d6d6"); 35073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->border_color=XGetResourceInstance(database,client_name, 35083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "borderColor",BorderColor); 35093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_value=XGetResourceClass(database,client_name,"borderWidth", 35103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "2"); 351100976d8abcff7a3bc7b986b8105dde8d091dee61cristy resource_info->border_width=(unsigned int) StringToUnsignedLong( 351200976d8abcff7a3bc7b986b8105dde8d091dee61cristy resource_value); 35133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_value=XGetResourceClass(database,client_name,"colormap", 35143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "shared"); 35153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->colormap=UndefinedColormap; 35163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare("private",resource_value) == 0) 35173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->colormap=PrivateColormap; 35183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare("shared",resource_value) == 0) 35193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->colormap=SharedColormap; 35203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (resource_info->colormap == UndefinedColormap) 35213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(OptionError,"UnrecognizedColormapType", 35223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_value); 35233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_value=XGetResourceClass(database,client_name, 35243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "colorRecovery",(char *) "False"); 35256f2013165d72f7d8ef5f66bb9453126d88113809anthony resource_info->color_recovery=IsStringTrue(resource_value); 35263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_value=XGetResourceClass(database,client_name,"confirmExit", 35273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "False"); 35286f2013165d72f7d8ef5f66bb9453126d88113809anthony resource_info->confirm_exit=IsStringTrue(resource_value); 35293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_value=XGetResourceClass(database,client_name,"confirmEdit", 35303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "False"); 35316f2013165d72f7d8ef5f66bb9453126d88113809anthony resource_info->confirm_edit=IsStringTrue(resource_value); 3532ba0c32599a8e592fffab86dd9b8ee367ca573c22cristy resource_value=XGetResourceClass(database,client_name,"delay",(char *) "1"); 3533e27293e706ca05b6b121e9512a83b16f7ad887f2cristy resource_info->delay=(unsigned int) StringToUnsignedLong(resource_value); 35343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->display_gamma=XGetResourceClass(database,client_name, 35353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "displayGamma",(char *) "2.2"); 35363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_value=XGetResourceClass(database,client_name,"displayWarnings", 35373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "True"); 35386f2013165d72f7d8ef5f66bb9453126d88113809anthony resource_info->display_warnings=IsStringTrue(resource_value); 35393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->font=XGetResourceClass(database,client_name,"font", 35403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) NULL); 35413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->font=XGetResourceClass(database,client_name,"fontList", 35423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->font); 35433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->font_name[0]=XGetResourceClass(database,client_name,"font1", 35443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "fixed"); 35453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->font_name[1]=XGetResourceClass(database,client_name,"font2", 35463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "variable"); 35473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->font_name[2]=XGetResourceClass(database,client_name,"font3", 35483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "5x8"); 35493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->font_name[3]=XGetResourceClass(database,client_name,"font4", 35503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "6x10"); 35513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->font_name[4]=XGetResourceClass(database,client_name,"font5", 35523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "7x13bold"); 35533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->font_name[5]=XGetResourceClass(database,client_name,"font6", 35543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "8x13bold"); 35553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->font_name[6]=XGetResourceClass(database,client_name,"font7", 35563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "9x15bold"); 35573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->font_name[7]=XGetResourceClass(database,client_name,"font8", 35583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "10x20"); 35593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->font_name[8]=XGetResourceClass(database,client_name,"font9", 35603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "12x24"); 35613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->font_name[9]=XGetResourceClass(database,client_name,"font0", 35623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "fixed"); 35633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->font_name[10]=XGetResourceClass(database,client_name,"font0", 35643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "fixed"); 35653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->foreground_color=XGetResourceInstance(database,client_name, 35663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "foreground",ForegroundColor); 35673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_value=XGetResourceClass(database,client_name,"gammaCorrect", 35688bc259be59a7cde483c27474125272a7d65c5744cristy (char *) "False"); 35696f2013165d72f7d8ef5f66bb9453126d88113809anthony resource_info->gamma_correct=IsStringTrue(resource_value); 35703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->image_geometry=ConstantString(XGetResourceClass(database, 35713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy client_name,"geometry",(char *) NULL)); 35723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_value=XGetResourceClass(database,client_name,"gravity", 35733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "Center"); 3574042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy resource_info->gravity=(GravityType) ParseCommandOption(MagickGravityOptions, 35753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickFalse,resource_value); 357600976d8abcff7a3bc7b986b8105dde8d091dee61cristy directory=getcwd(resource_info->home_directory,MaxTextExtent); 357700976d8abcff7a3bc7b986b8105dde8d091dee61cristy (void) directory; 35783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->icon_geometry=XGetResourceClass(database,client_name, 35793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "iconGeometry",(char *) NULL); 35803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_value=XGetResourceClass(database,client_name,"iconic", 35813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "False"); 35826f2013165d72f7d8ef5f66bb9453126d88113809anthony resource_info->iconic=IsStringTrue(resource_value); 35833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_value=XGetResourceClass(database,client_name,"immutable", 35843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy LocaleCompare(client_name,"PerlMagick") == 0 ? (char *) "True" : 35853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "False"); 35866f2013165d72f7d8ef5f66bb9453126d88113809anthony resource_info->immutable=IsStringTrue(resource_value); 35873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_value=XGetResourceClass(database,client_name,"magnify", 35883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "3"); 3589e27293e706ca05b6b121e9512a83b16f7ad887f2cristy resource_info->magnify=(unsigned int) StringToUnsignedLong(resource_value); 35903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->map_type=XGetResourceClass(database,client_name,"map", 35913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) NULL); 35923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->matte_color=XGetResourceInstance(database,client_name, 35933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "mattecolor",(char *) NULL); 35943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->name=ConstantString(XGetResourceClass(database,client_name, 35953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "name",(char *) NULL)); 35963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->pen_colors[0]=XGetResourceClass(database,client_name,"pen1", 35973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "black"); 35983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->pen_colors[1]=XGetResourceClass(database,client_name,"pen2", 35993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "blue"); 36003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->pen_colors[2]=XGetResourceClass(database,client_name,"pen3", 36013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "cyan"); 36023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->pen_colors[3]=XGetResourceClass(database,client_name,"pen4", 36033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "green"); 36043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->pen_colors[4]=XGetResourceClass(database,client_name,"pen5", 36053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "gray"); 36063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->pen_colors[5]=XGetResourceClass(database,client_name,"pen6", 36073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "red"); 36083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->pen_colors[6]=XGetResourceClass(database,client_name,"pen7", 36093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "magenta"); 36103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->pen_colors[7]=XGetResourceClass(database,client_name,"pen8", 36113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "yellow"); 36123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->pen_colors[8]=XGetResourceClass(database,client_name,"pen9", 36133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "white"); 36143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->pen_colors[9]=XGetResourceClass(database,client_name,"pen0", 36153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "gray"); 36163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->pen_colors[10]=XGetResourceClass(database,client_name,"pen0", 36173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "gray"); 36183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_value=XGetResourceClass(database,client_name,"pause",(char *) "0"); 3619e27293e706ca05b6b121e9512a83b16f7ad887f2cristy resource_info->pause=(unsigned int) StringToUnsignedLong(resource_value); 36203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_value=XGetResourceClass(database,client_name,"quantum",(char *) "1"); 3621f2f2727f17ecbb23d902f70bb98f81faabc92dbdcristy resource_info->quantum=StringToLong(resource_value); 36223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->text_font=XGetResourceClass(database,client_name,(char *) 36233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "font",(char *) "fixed"); 36243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->text_font=XGetResourceClass(database,client_name, 36253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "textFontList",resource_info->text_font); 36263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->title=XGetResourceClass(database,client_name,"title", 36273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) NULL); 36283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_value=XGetResourceClass(database,client_name,"undoCache", 362992befbd6a0f0f642bd44c58fdd32e3e073f6f141cristy (char *) "256"); 3630e27293e706ca05b6b121e9512a83b16f7ad887f2cristy resource_info->undo_cache=(unsigned int) StringToUnsignedLong(resource_value); 36313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_value=XGetResourceClass(database,client_name,"update", 36323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "False"); 36336f2013165d72f7d8ef5f66bb9453126d88113809anthony resource_info->update=IsStringTrue(resource_value); 36343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_value=XGetResourceClass(database,client_name,"usePixmap", 36353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "True"); 36366f2013165d72f7d8ef5f66bb9453126d88113809anthony resource_info->use_pixmap=IsStringTrue(resource_value); 36373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_value=XGetResourceClass(database,client_name,"sharedMemory", 36383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) "True"); 36396f2013165d72f7d8ef5f66bb9453126d88113809anthony resource_info->use_shared_memory=IsStringTrue(resource_value); 36403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->visual_type=XGetResourceClass(database,client_name,"visual", 36413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) NULL); 36423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->window_group=XGetResourceClass(database,client_name, 36433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "windowGroup",(char *) NULL); 36443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->window_id=XGetResourceClass(database,client_name,"window", 36453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) NULL); 36463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->write_filename=XGetResourceClass(database,client_name, 36473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "writeFilename",(char *) NULL); 36483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 36493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 36503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 36513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 36523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 36533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 36543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 36553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X G e t R e s o u r c e I n s t a n c e % 36563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 36573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 36583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 36593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 36603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 36613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XGetResourceInstance() queries the X server for the specified resource name. 36623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% If the resource name is not defined in the database, the supplied default 36633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% value is returned. 36643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 36653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XGetResourceInstance method is: 36663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 36673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *XGetResourceInstance(XrmDatabase database,const char *client_name, 36683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *keyword,const char *resource_default) 36693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 36703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 36713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 36723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o database: Specifies a resource database; returned from 36733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XrmGetStringDatabase. 36743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 36753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o client_name: Specifies the application name used to retrieve 36763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% resource info from the X server database. 36773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 36783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o keyword: Specifies the keyword of the value being retrieved. 36793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 36803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o resource_default: Specifies the default value to return if the query 36813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% fails to find the specified keyword/class. 36823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 36833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 36843ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *XGetResourceInstance(XrmDatabase database, 36853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *client_name,const char *keyword,const char *resource_default) 36863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 36873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 36883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *resource_type, 36893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_name[MaxTextExtent]; 36903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 36913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 36923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 36933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 36943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XrmValue 36953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_value; 36963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 36973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (database == (XrmDatabase) NULL) 36983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char *) resource_default); 36993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *resource_name='\0'; 37003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (keyword != (char *) NULL) 3701b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(resource_name,MaxTextExtent,"%s.%s",client_name, 37023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy keyword); 37033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XrmGetResource(database,resource_name,"ImageMagick",&resource_type, 37043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &resource_value); 37053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == False) 37063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((char *) resource_default); 37073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(resource_value.addr); 37083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 37093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 37103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 37113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 37123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 37133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 37143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 37153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X G e t S c r e e n D e n s i t y % 37163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 37173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 37183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 37193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 37203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 37213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XGetScreenDensity() returns the density of the X server screen in 37223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% dots-per-inch. 37233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 37243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XGetScreenDensity method is: 37253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 37263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *XGetScreenDensity(Display *display) 37273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 37283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 37293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 37303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o density: XGetScreenDensity() returns the density of the X screen in 37313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% dots-per-inch. 37323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 37333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 37343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 37353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 37363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 37373ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport char *XGetScreenDensity(Display *display) 37383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 37393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 37403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy density[MaxTextExtent]; 37413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 37423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy double 37433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x_density, 37443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y_density; 37453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 37463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 37473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set density as determined by screen size. 37483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 37493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x_density=((((double) DisplayWidth(display,XDefaultScreen(display)))*25.4)/ 37503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((double) DisplayWidthMM(display,XDefaultScreen(display)))); 37513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y_density=((((double) DisplayHeight(display,XDefaultScreen(display)))*25.4)/ 37523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((double) DisplayHeightMM(display,XDefaultScreen(display)))); 3753b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(density,MaxTextExtent,"%gx%g",x_density, 37548cd5b3193212b4aebce08c4e7afbb66b09778029cristy y_density); 37553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(GetPageGeometry(density)); 37563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 37573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 37583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 37593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 37603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 37613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 37623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 37633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ X G e t S u b w i n d o w % 37643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 37653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 37663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 37673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 37683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 37693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XGetSubwindow() returns the subwindow of a window chosen the user with the 37703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% pointer and a button press. 37713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 37723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XGetSubwindow method is: 37733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 37743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Window XGetSubwindow(Display *display,Window window,int x,int y) 37753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 37763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 37773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 37783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o subwindow: XGetSubwindow() returns NULL if no subwindow is found 37793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% otherwise the subwindow is returned. 37803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 37813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 37823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 37833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 37843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a Window. 37853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 37863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o x: the x coordinate of the pointer relative to the origin of the 37873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% window. 37883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 37893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o y: the y coordinate of the pointer relative to the origin of the 37903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% window. 37913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 37923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 37933ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic Window XGetSubwindow(Display *display,Window window,int x,int y) 37943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 37953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 37963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x_offset, 37973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y_offset; 37983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 37993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 38003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 38013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 38023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window 38033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy source_window, 38043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target_window; 38053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 38063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 38073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy source_window=XRootWindow(display,XDefaultScreen(display)); 38083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window == (Window) NULL) 38093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(source_window); 38103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target_window=window; 38113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for ( ; ; ) 38123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 38133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XTranslateCoordinates(display,source_window,window,x,y, 38143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &x_offset,&y_offset,&target_window); 38153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != True) 38163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 38173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (target_window == (Window) NULL) 38183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 38193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy source_window=window; 38203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window=target_window; 38213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=x_offset; 38223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=y_offset; 38233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 38243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (target_window == (Window) NULL) 38253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target_window=window; 38263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(target_window); 38273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 38283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 38293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 38303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 38313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 38323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 38333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 38343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X G e t W i n d o w C o l o r % 38353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 38363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 38373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 38383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 38393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 38403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XGetWindowColor() returns the color of a pixel interactively chosen from the 38413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X server. 38423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 38433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XGetWindowColor method is: 38443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 38453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MagickBooleanType XGetWindowColor(Display *display,XWindows *windows, 38466710d8414f0ed06e4eaf9346366be72e2b4719efcristy% char *name,ExceptionInfo *exception) 38473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 38483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 38493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 38503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 38513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 38523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 38533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o windows: Specifies a pointer to a XWindows structure. 38543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 38553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o name: the name of the color if found in the X Color Database is 38563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% returned in this character string. 38573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 38586710d8414f0ed06e4eaf9346366be72e2b4719efcristy% o exception: return any errors or warnings in this structure. 38596710d8414f0ed06e4eaf9346366be72e2b4719efcristy% 38603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 3861bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate MagickBooleanType XGetWindowColor(Display *display, 38626710d8414f0ed06e4eaf9346366be72e2b4719efcristy XWindows *windows,char *name,ExceptionInfo *exception) 38633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 38643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 38653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x, 38663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y; 38673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3868101ab708b0574518ac5715da4d3915400e9df79acristy PixelInfo 38693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel; 38703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 38713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RectangleInfo 38723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info; 38733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 38743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 38753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 38763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 38773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window 38783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy child, 38793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy client_window, 38803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy root_window, 38813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target_window; 38823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 38833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XColor 38843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color; 38853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 38863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XImage 38873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *ximage; 38883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 38893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindowAttributes 38903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_attributes; 38913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 38923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 38933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Choose a pixel from the X server. 38943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 38953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 38963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(name != (char *) NULL); 38973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",name); 38983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *name='\0'; 38993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target_window=XSelectWindow(display,&crop_info); 39003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (target_window == (Window) NULL) 39013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 39023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy root_window=XRootWindow(display,XDefaultScreen(display)); 39033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy client_window=target_window; 39043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (target_window != root_window) 39053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 39063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 39073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy d; 39083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 39093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 39103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Get client window. 39113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 39123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XGetGeometry(display,target_window,&root_window,&x,&x,&d,&d,&d,&d); 39133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != False) 39143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 39153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy client_window=XClientWindow(display,target_window); 39163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target_window=client_window; 39173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 39183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 39193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 39203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Verify window is viewable. 39213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 39223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XGetWindowAttributes(display,target_window,&window_attributes); 39233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((status == False) || (window_attributes.map_state != IsViewable)) 39243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 39253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 39263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Get window X image. 39273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 39283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XTranslateCoordinates(display,root_window,target_window, 39293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) crop_info.x,(int) crop_info.y,&x,&y,&child); 39303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage=XGetImage(display,target_window,x,y,1,1,AllPlanes,ZPixmap); 39313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (ximage == (XImage *) NULL) 39323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 39333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.pixel=XGetPixel(ximage,0,0); 39343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDestroyImage(ximage); 39353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 39363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Match color against the color database. 39373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 39383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XQueryColor(display,window_attributes.colormap,&color); 3939e42f658533644aecb733785ffd91b286d6778deacristy pixel.red=(double) ScaleShortToQuantum(color.red); 3940e42f658533644aecb733785ffd91b286d6778deacristy pixel.green=(double) ScaleShortToQuantum(color.green); 3941e42f658533644aecb733785ffd91b286d6778deacristy pixel.blue=(double) ScaleShortToQuantum(color.blue); 39424c08aed51c5899665ade97263692328eea4af106cristy pixel.alpha=OpaqueAlpha; 39433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) QueryColorname(windows->image.image,&pixel,X11Compliance,name, 39446710d8414f0ed06e4eaf9346366be72e2b4719efcristy exception); 39453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 39463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 39473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 39483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 39493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 39503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 39513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 39523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 39533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ X G e t W i n d o w I m a g e % 39543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 39553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 39563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 39573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 39583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 39593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XGetWindowImage() reads an image from the target X window and returns it. 39603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XGetWindowImage() optionally descends the window hierarchy and overlays the 39613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% target image with each child image in an optimized fashion. Any child 39623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% window that have the same visual, colormap, and are contained by its parent 39633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% are exempted. 39643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 39653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XGetWindowImage method is: 39663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 39673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Image *XGetWindowImage(Display *display,const Window window, 39686710d8414f0ed06e4eaf9346366be72e2b4719efcristy% const unsigned int borders,const unsigned int level, 39696710d8414f0ed06e4eaf9346366be72e2b4719efcristy% ExceptionInfo *exception) 39703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 39713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 39723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 39733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 39743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 39753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 39763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies the window to obtain the image from. 39773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 39783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o borders: Specifies whether borders pixels are to be saved with 39793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% the image. 39803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 39813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o level: Specifies an unsigned integer representing the level of 39823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% decent in the window hierarchy. This value must be zero or one on 39833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% the initial call to XGetWindowImage. A value of zero returns after 39843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% one call. A value of one causes the function to descend the window 39853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% hierarchy and overlay the target image with each subwindow image. 39863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 39876710d8414f0ed06e4eaf9346366be72e2b4719efcristy% o exception: return any errors or warnings in this structure. 39886710d8414f0ed06e4eaf9346366be72e2b4719efcristy% 39893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 39903ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic Image *XGetWindowImage(Display *display,const Window window, 39916710d8414f0ed06e4eaf9346366be72e2b4719efcristy const unsigned int borders,const unsigned int level,ExceptionInfo *exception) 39923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 39933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy typedef struct _ColormapInfo 39943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 39953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Colormap 39963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colormap; 39973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 39983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XColor 39993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *colors; 40003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 40013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy struct _ColormapInfo 40023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *next; 40033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } ColormapInfo; 40043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 40053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy typedef struct _WindowInfo 40063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 40073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window 40083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window, 40093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy parent; 40103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 40113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Visual 40123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *visual; 40133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 40143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Colormap 40153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colormap; 40163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 40173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSegment 40183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bounds; 40193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 40203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RectangleInfo 40213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info; 40223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } WindowInfo; 40233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 40243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 40253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy display_height, 40263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy display_width, 40273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id, 40283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x_offset, 40293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y_offset; 40303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 40314c08aed51c5899665ade97263692328eea4af106cristy Quantum 40324c08aed51c5899665ade97263692328eea4af106cristy index; 40334c08aed51c5899665ade97263692328eea4af106cristy 40343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RectangleInfo 40353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info; 40363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 40373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 40383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 40393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 40403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static ColormapInfo 40413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *colormap_info = (ColormapInfo *) NULL; 40423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 40433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static int 40443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy max_windows = 0, 40453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_windows = 0; 40463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 40473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static WindowInfo 40483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *window_info; 40493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 40503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 40513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 40523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 40533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window 40543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy child, 40553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy root_window; 40563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 40573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindowAttributes 40583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_attributes; 40593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 40603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 40613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Verify window is viewable. 40623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 40633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 40643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 40653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XGetWindowAttributes(display,window,&window_attributes); 40663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((status == False) || (window_attributes.map_state != IsViewable)) 40673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((Image *) NULL); 40683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 40693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Cropping rectangle is relative to root window. 40703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 40713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy root_window=XRootWindow(display,XDefaultScreen(display)); 40723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XTranslateCoordinates(display,window,root_window,0,0,&x_offset, 40733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &y_offset,&child); 4074bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy crop_info.x=(ssize_t) x_offset; 4075bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy crop_info.y=(ssize_t) y_offset; 4076bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy crop_info.width=(size_t) window_attributes.width; 4077bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy crop_info.height=(size_t) window_attributes.height; 40783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (borders != MagickFalse) 40793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 40803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 40813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Include border in image. 40823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 4083bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy crop_info.x-=(ssize_t) window_attributes.border_width; 4084bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy crop_info.y-=(ssize_t) window_attributes.border_width; 4085bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy crop_info.width+=(size_t) (window_attributes.border_width << 1); 4086bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy crop_info.height+=(size_t) (window_attributes.border_width << 1); 40873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 40883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 40893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Crop to root window. 40903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 40913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (crop_info.x < 0) 40923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 40933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.width+=crop_info.x; 40943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.x=0; 40953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 40963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (crop_info.y < 0) 40973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 40983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.height+=crop_info.y; 40993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.y=0; 41003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 41013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy display_width=XDisplayWidth(display,XDefaultScreen(display)); 41023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((int) (crop_info.x+crop_info.width) > display_width) 4103bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy crop_info.width=(size_t) (display_width-crop_info.x); 41043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy display_height=XDisplayHeight(display,XDefaultScreen(display)); 41053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((int) (crop_info.y+crop_info.height) > display_height) 4106bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy crop_info.height=(size_t) (display_height-crop_info.y); 41073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 41083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize window info attributes. 41093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 41103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (number_windows >= max_windows) 41113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 41123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 41133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Allocate or resize window info buffer. 41143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 41153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy max_windows+=1024; 41163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info == (WindowInfo *) NULL) 41173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info=(WindowInfo *) AcquireQuantumMemory((size_t) max_windows, 41183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*window_info)); 41193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 41203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info=(WindowInfo *) ResizeQuantumMemory(window_info,(size_t) 41213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy max_windows,sizeof(*window_info)); 41223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 41233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info == (WindowInfo *) NULL) 41243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 41253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(ResourceLimitError, 41263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "MemoryAllocationFailed","..."); 41273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((Image *) NULL); 41283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 41293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id=number_windows++; 41303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info[id].window=window; 41313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info[id].visual=window_attributes.visual; 41323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info[id].colormap=window_attributes.colormap; 41333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info[id].bounds.x1=(short) crop_info.x; 41343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info[id].bounds.y1=(short) crop_info.y; 41353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info[id].bounds.x2=(short) (crop_info.x+(int) crop_info.width-1); 41363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info[id].bounds.y2=(short) (crop_info.y+(int) crop_info.height-1); 41373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.x-=x_offset; 41383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.y-=y_offset; 41393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info[id].crop_info=crop_info; 41403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (level != 0) 41413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 41423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 41433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_children; 41443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 41453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window 41463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *children; 41473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 41483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 41493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Descend the window hierarchy. 41503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 41513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XQueryTree(display,window,&root_window,&window_info[id].parent, 41523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &children,&number_children); 41533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < id; i++) 41543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((window_info[i].window == window_info[id].parent) && 41553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (window_info[i].visual == window_info[id].visual) && 41563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (window_info[i].colormap == window_info[id].colormap)) 41573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 415864057b049640be82cf952fa3e01282917270850ecristy if ((window_info[id].bounds.x1 < window_info[i].bounds.x1) || 415964057b049640be82cf952fa3e01282917270850ecristy (window_info[id].bounds.x2 > window_info[i].bounds.x2) || 416064057b049640be82cf952fa3e01282917270850ecristy (window_info[id].bounds.y1 < window_info[i].bounds.y1) || 416164057b049640be82cf952fa3e01282917270850ecristy (window_info[id].bounds.y2 > window_info[i].bounds.y2)) 41623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 41633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 41643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Eliminate windows not circumscribed by their parent. 41653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 41663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_windows--; 41673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 41683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 41693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 41703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((status == True) && (number_children != 0)) 41713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 41723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < (int) number_children; i++) 41736710d8414f0ed06e4eaf9346366be72e2b4719efcristy (void) XGetWindowImage(display,children[i],MagickFalse,level+1, 41746710d8414f0ed06e4eaf9346366be72e2b4719efcristy exception); 41753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) children); 41763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 41773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 41783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (level <= 1) 41793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4180c57f694b2d04975a0e501613e34368c464708c19cristy CacheView 4181c57f694b2d04975a0e501613e34368c464708c19cristy *composite_view; 4182c57f694b2d04975a0e501613e34368c464708c19cristy 41833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColormapInfo 41843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *next; 41853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 41863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 41873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *composite_image, 41883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *image; 41893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 41903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 41913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y; 41923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 41933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 41943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy import; 41953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 41963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 41973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j, 41983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 41993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 42004c08aed51c5899665ade97263692328eea4af106cristy register Quantum 4201c47d1f8ecfe7d04f0f003cca0fe175658bbf0fb2cristy *restrict q; 42023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4203bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register size_t 42043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel; 42053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 42063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 42073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_colors; 42083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 42093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XColor 42103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *colors; 42113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 42123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XImage 42133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *ximage; 42143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 42153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 42163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Get X image for each window in the list. 42173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 42183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image=NewImageList(); 42193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (id=0; id < number_windows; id++) 42203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 42213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 42223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Does target window intersect top level window? 42233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 42243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy import= 42253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((window_info[id].bounds.x2 >= window_info[0].bounds.x1) && 42263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (window_info[id].bounds.x1 <= window_info[0].bounds.x2) && 42273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (window_info[id].bounds.y2 >= window_info[0].bounds.y1) && 42283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (window_info[id].bounds.y1 <= window_info[0].bounds.y2)) ? 42293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickTrue : MagickFalse; 42303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 42313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Is target window contained by another window with the same colormap? 42323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 42333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (j=0; j < id; j++) 42343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((window_info[id].visual == window_info[j].visual) && 42353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (window_info[id].colormap == window_info[j].colormap)) 42363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 423764057b049640be82cf952fa3e01282917270850ecristy if ((window_info[id].bounds.x1 >= window_info[j].bounds.x1) && 423864057b049640be82cf952fa3e01282917270850ecristy (window_info[id].bounds.x2 <= window_info[j].bounds.x2) && 423964057b049640be82cf952fa3e01282917270850ecristy (window_info[id].bounds.y1 >= window_info[j].bounds.y1) && 424064057b049640be82cf952fa3e01282917270850ecristy (window_info[id].bounds.y2 <= window_info[j].bounds.y2)) 42413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy import=MagickFalse; 42423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 42433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (import == MagickFalse) 42443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 42453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 42463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Get X image. 42473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 42483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage=XGetImage(display,window_info[id].window,(int) 42493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info[id].crop_info.x,(int) window_info[id].crop_info.y, 42503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) window_info[id].crop_info.width,(unsigned int) 42513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info[id].crop_info.height,AllPlanes,ZPixmap); 42523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (ximage == (XImage *) NULL) 42533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 42543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 42553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize window colormap. 42563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 42573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_colors=0; 42583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colors=(XColor *) NULL; 42593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info[id].colormap != (Colormap) NULL) 42603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 42613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColormapInfo 42623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 42633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 42643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 42653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Search colormap list for window colormap. 42663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 42673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_colors=(unsigned int) window_info[id].visual->map_entries; 42683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (p=colormap_info; p != (ColormapInfo *) NULL; p=p->next) 42693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (p->colormap == window_info[id].colormap) 42703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 42713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (p == (ColormapInfo *) NULL) 42723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 42733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 42743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Get the window colormap. 42753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 42763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colors=(XColor *) AcquireQuantumMemory(number_colors, 42773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*colors)); 42783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (colors == (XColor *) NULL) 42793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 42803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDestroyImage(ximage); 42813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((Image *) NULL); 42823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 42833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((window_info[id].visual->klass != DirectColor) && 42843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (window_info[id].visual->klass != TrueColor)) 42853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < (int) number_colors; i++) 42863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4287bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy colors[i].pixel=(size_t) i; 42883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colors[i].pad='\0'; 42893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 42903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 42913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4292bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 42933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy blue, 42943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy blue_bit, 42953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy green, 42963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy green_bit, 42973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy red, 42983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy red_bit; 42993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 43003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 43013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DirectColor or TrueColor visual. 43023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 43033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy red=0; 43043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy green=0; 43053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy blue=0; 43063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy red_bit=window_info[id].visual->red_mask & 43073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (~(window_info[id].visual->red_mask)+1); 43083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy green_bit=window_info[id].visual->green_mask & 43093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (~(window_info[id].visual->green_mask)+1); 43103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy blue_bit=window_info[id].visual->blue_mask & 43113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (~(window_info[id].visual->blue_mask)+1); 43123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < (int) number_colors; i++) 43133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 43148891f9ce489d3e61399b60436ea6c62f5ed9b887cristy colors[i].pixel=(unsigned long) (red | green | blue); 43153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colors[i].pad='\0'; 43163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy red+=red_bit; 43173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (red > window_info[id].visual->red_mask) 43183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy red=0; 43193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy green+=green_bit; 43203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (green > window_info[id].visual->green_mask) 43213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy green=0; 43223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy blue+=blue_bit; 43233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (blue > window_info[id].visual->blue_mask) 43243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy blue=0; 43253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 43263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 43273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XQueryColors(display,window_info[id].colormap,colors, 43283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) number_colors); 43293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 43303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Append colormap to colormap list. 43313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 433273bd4a51b419e914565bdf204bf1540dc4c8ee26cristy p=(ColormapInfo *) AcquireMagickMemory(sizeof(*p)); 43333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (p == (ColormapInfo *) NULL) 43343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((Image *) NULL); 43353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p->colormap=window_info[id].colormap; 43363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p->colors=colors; 43373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p->next=colormap_info; 43383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colormap_info=p; 43393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 43403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colors=p->colors; 43413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 43423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 43433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Allocate image structure. 43443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 43456710d8414f0ed06e4eaf9346366be72e2b4719efcristy composite_image=AcquireImage((ImageInfo *) NULL,exception); 43463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (composite_image == (Image *) NULL) 43473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 43483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDestroyImage(ximage); 43493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((Image *) NULL); 43503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 43513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 43523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert X image to MIFF format. 43533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 43543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((window_info[id].visual->klass != TrueColor) && 43553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (window_info[id].visual->klass != DirectColor)) 43563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy composite_image->storage_class=PseudoClass; 4357bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy composite_image->columns=(size_t) ximage->width; 4358bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy composite_image->rows=(size_t) ximage->height; 435946ff2676b1044ea4101ac7a59b83289cd8f6cfdacristy composite_view=AcquireAuthenticCacheView(composite_image,exception); 43603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (composite_image->storage_class) 43613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 43623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case DirectClass: 43633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 43643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4365bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register size_t 43663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color, 43673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy index; 43683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4369bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 43703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy blue_mask, 43713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy blue_shift, 43723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy green_mask, 43733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy green_shift, 43743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy red_mask, 43753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy red_shift; 43763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 43773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 43783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine shift and mask for red, green, and blue. 43793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 43803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy red_mask=window_info[id].visual->red_mask; 43813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy red_shift=0; 43823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((red_mask != 0) && ((red_mask & 0x01) == 0)) 43833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 43843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy red_mask>>=1; 43853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy red_shift++; 43863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 43873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy green_mask=window_info[id].visual->green_mask; 43883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy green_shift=0; 43893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((green_mask != 0) && ((green_mask & 0x01) == 0)) 43903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 43913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy green_mask>>=1; 43923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy green_shift++; 43933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 43943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy blue_mask=window_info[id].visual->blue_mask; 43953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy blue_shift=0; 43963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((blue_mask != 0) && ((blue_mask & 0x01) == 0)) 43973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 43983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy blue_mask>>=1; 43993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy blue_shift++; 44003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 44013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 44023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert X image to DirectClass packets. 44033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 44043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((number_colors != 0) && 44053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (window_info[id].visual->klass == DirectColor)) 44063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) composite_image->rows; y++) 44073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4408c57f694b2d04975a0e501613e34368c464708c19cristy q=QueueCacheViewAuthenticPixels(composite_view,0,(ssize_t) y, 44093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy composite_image->columns,1,exception); 4410acd2ed254c18c254a0ab5aafa06d1645e5d079d8cristy if (q == (Quantum *) NULL) 44113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 44123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=0; x < (int) composite_image->columns; x++) 44133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 44143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel=XGetPixel(ximage,x,y); 44153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy index=(pixel >> red_shift) & red_mask; 44164c08aed51c5899665ade97263692328eea4af106cristy SetPixelRed(composite_image, 44174c08aed51c5899665ade97263692328eea4af106cristy ScaleShortToQuantum(colors[index].red),q); 44183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy index=(pixel >> green_shift) & green_mask; 44194c08aed51c5899665ade97263692328eea4af106cristy SetPixelGreen(composite_image, 44204c08aed51c5899665ade97263692328eea4af106cristy ScaleShortToQuantum(colors[index].green),q); 44213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy index=(pixel >> blue_shift) & blue_mask; 44224c08aed51c5899665ade97263692328eea4af106cristy SetPixelBlue(composite_image, 44234c08aed51c5899665ade97263692328eea4af106cristy ScaleShortToQuantum(colors[index].blue),q); 4424ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(composite_image); 44253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 44260b1a797184d12984eb55d950fb5f532298d9fd0fcristy status=SyncCacheViewAuthenticPixels(composite_view,exception); 44270b1a797184d12984eb55d950fb5f532298d9fd0fcristy if (status == MagickFalse) 44283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 44293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 44303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 44313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) composite_image->rows; y++) 44323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4433c57f694b2d04975a0e501613e34368c464708c19cristy q=QueueCacheViewAuthenticPixels(composite_view,0,(ssize_t) y, 44343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy composite_image->columns,1,exception); 4435acd2ed254c18c254a0ab5aafa06d1645e5d079d8cristy if (q == (Quantum *) NULL) 44363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 44373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=0; x < (int) composite_image->columns; x++) 44383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 44393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel=XGetPixel(ximage,x,y); 44403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color=(pixel >> red_shift) & red_mask; 44413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color=(65535UL*color)/red_mask; 44424c08aed51c5899665ade97263692328eea4af106cristy SetPixelRed(composite_image, 44434c08aed51c5899665ade97263692328eea4af106cristy ScaleShortToQuantum((unsigned short) color),q); 44443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color=(pixel >> green_shift) & green_mask; 44453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color=(65535UL*color)/green_mask; 44464c08aed51c5899665ade97263692328eea4af106cristy SetPixelGreen(composite_image, 44474c08aed51c5899665ade97263692328eea4af106cristy ScaleShortToQuantum((unsigned short) color),q); 44483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color=(pixel >> blue_shift) & blue_mask; 44493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color=(65535UL*color)/blue_mask; 44504c08aed51c5899665ade97263692328eea4af106cristy SetPixelBlue(composite_image, 44514c08aed51c5899665ade97263692328eea4af106cristy ScaleShortToQuantum((unsigned short) color),q); 4452ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(composite_image); 44533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 44540b1a797184d12984eb55d950fb5f532298d9fd0fcristy status=SyncCacheViewAuthenticPixels(composite_view,exception); 44550b1a797184d12984eb55d950fb5f532298d9fd0fcristy if (status == MagickFalse) 44563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 44573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 44583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 44593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 44603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case PseudoClass: 44613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 44623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 44633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Create colormap. 44643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 44650b1a797184d12984eb55d950fb5f532298d9fd0fcristy status=AcquireImageColormap(composite_image,number_colors, 44660b1a797184d12984eb55d950fb5f532298d9fd0fcristy exception); 44670b1a797184d12984eb55d950fb5f532298d9fd0fcristy if (status == MagickFalse) 44683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 44693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDestroyImage(ximage); 44703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy composite_image=DestroyImage(composite_image); 44713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((Image *) NULL); 44723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 44733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < (int) composite_image->colors; i++) 44743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4475e42f658533644aecb733785ffd91b286d6778deacristy composite_image->colormap[colors[i].pixel].red=(double) 44763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ScaleShortToQuantum(colors[i].red); 4477e42f658533644aecb733785ffd91b286d6778deacristy composite_image->colormap[colors[i].pixel].green=(double) 44783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ScaleShortToQuantum(colors[i].green); 4479e42f658533644aecb733785ffd91b286d6778deacristy composite_image->colormap[colors[i].pixel].blue=(double) 44803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ScaleShortToQuantum(colors[i].blue); 44813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 44823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 44833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert X image to PseudoClass packets. 44843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 44853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) composite_image->rows; y++) 44863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4487c57f694b2d04975a0e501613e34368c464708c19cristy q=QueueCacheViewAuthenticPixels(composite_view,0,(ssize_t) y, 4488c57f694b2d04975a0e501613e34368c464708c19cristy composite_image->columns,1,exception); 4489acd2ed254c18c254a0ab5aafa06d1645e5d079d8cristy if (q == (Quantum *) NULL) 44903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 44913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=0; x < (int) composite_image->columns; x++) 44923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 44934c08aed51c5899665ade97263692328eea4af106cristy index=(Quantum) XGetPixel(ximage,x,y); 44944c08aed51c5899665ade97263692328eea4af106cristy SetPixelIndex(composite_image,index,q); 4495803640d20a6a664315eddfff6f8531d0c5e0871dcristy SetPixelInfoPixel(composite_image, 44964c08aed51c5899665ade97263692328eea4af106cristy composite_image->colormap+(ssize_t) index,q); 4497ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(composite_image); 44983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 44990b1a797184d12984eb55d950fb5f532298d9fd0fcristy status=SyncCacheViewAuthenticPixels(composite_view,exception); 45000b1a797184d12984eb55d950fb5f532298d9fd0fcristy if (status == MagickFalse) 45013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 45023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 45033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 45043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 45053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4506c57f694b2d04975a0e501613e34368c464708c19cristy composite_view=DestroyCacheView(composite_view); 45073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDestroyImage(ximage); 45083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image == (Image *) NULL) 45093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 45103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image=composite_image; 45113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 45123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 45133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 45143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Composite any children in back-to-front order. 45153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 45163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XTranslateCoordinates(display,window_info[id].window,window,0,0, 45173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &x_offset,&y_offset,&child); 45183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x_offset-=(int) crop_info.x; 45193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (x_offset < 0) 45203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x_offset=0; 45213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y_offset-=(int) crop_info.y; 45223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (y_offset < 0) 45233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y_offset=0; 452439172408bad7ef2ef00a815fa9abf9979e7857cbcristy (void) CompositeImage(image,composite_image,CopyCompositeOp,MagickTrue, 4525feb3e9695150978a5d2372d3fe2f60466a7c8066cristy (ssize_t) x_offset,(ssize_t) y_offset,exception); 45265f257b2f02bdd982d9bbfe612f5bb1711608590ccristy composite_image=DestroyImage(composite_image); 45273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 45283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 45293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Relinquish resources. 45303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 45313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (colormap_info != (ColormapInfo *) NULL) 45323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 45333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy next=colormap_info->next; 4534e941a75fe8bf344bc5c06a7f74bb5173c87db115cristy colormap_info->colors=(XColor *) RelinquishMagickMemory( 4535e941a75fe8bf344bc5c06a7f74bb5173c87db115cristy colormap_info->colors); 45363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colormap_info=(ColormapInfo *) RelinquishMagickMemory(colormap_info); 45373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colormap_info=next; 45383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 45393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 45403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Relinquish resources and restore initial state. 45413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 45423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info=(WindowInfo *) RelinquishMagickMemory(window_info); 45433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy max_windows=0; 45443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_windows=0; 45453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colormap_info=(ColormapInfo *) NULL; 45463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(image); 45473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 45483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((Image *) NULL); 45493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 45503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 45513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 45523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 45533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 45543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 45553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 45563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X G e t W i n d o w I n f o % 45573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 45583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 45593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 45603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 45613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 45623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XGetWindowInfo() initializes the XWindowInfo structure. 45633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 45643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XGetWindowInfo method is: 45653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 45663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XGetWindowInfo(Display *display,XVisualInfo *visual_info, 45673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XStandardColormap *map_info,XPixelInfo *pixel,XFontStruct *font_info, 45683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XResourceInfo *resource_info,XWindowInfo *window) 45693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% resource_info,window) 45703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 45713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 45723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 45733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 45743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 45753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 45763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o visual_info: Specifies a pointer to a X11 XVisualInfo structure; 45773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% returned from XGetVisualInfo. 45783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 45793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o map_info: If map_type is specified, this structure is initialized 45803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% with info from the Standard Colormap. 45813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 45823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o pixel: Specifies a pointer to a XPixelInfo structure. 45833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 45843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o font_info: Specifies a pointer to a XFontStruct structure. 45853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 45863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o resource_info: Specifies a pointer to a X11 XResourceInfo structure. 45873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 45883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 4589bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XGetWindowInfo(Display *display,XVisualInfo *visual_info, 45903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XStandardColormap *map_info,XPixelInfo *pixel,XFontStruct *font_info, 45913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XResourceInfo *resource_info,XWindowInfo *window) 45923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 45933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 45943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize window info. 45953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 45963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 45973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 45983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(visual_info != (XVisualInfo *) NULL); 45993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(map_info != (XStandardColormap *) NULL); 46003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(pixel != (XPixelInfo *) NULL); 46013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(resource_info != (XResourceInfo *) NULL); 46023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(window != (XWindowInfo *) NULL); 46033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->id != (Window) NULL) 46043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 46053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->cursor != (Cursor) NULL) 46063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreeCursor(display,window->cursor); 46073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->busy_cursor != (Cursor) NULL) 46083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreeCursor(display,window->busy_cursor); 46093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->highlight_stipple != (Pixmap) NULL) 46103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreePixmap(display,window->highlight_stipple); 46113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->shadow_stipple != (Pixmap) NULL) 46123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreePixmap(display,window->shadow_stipple); 46133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->name == (char *) NULL) 46143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->name=AcquireString(""); 46153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->icon_name == (char *) NULL) 46163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->icon_name=AcquireString(""); 46173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 46183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 46193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 46203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 46213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize these attributes just once. 46223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 46233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->id=(Window) NULL; 46243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->name == (char *) NULL) 46253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->name=AcquireString(""); 46263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->icon_name == (char *) NULL) 46273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->icon_name=AcquireString(""); 46283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->x=XDisplayWidth(display,visual_info->screen) >> 1; 46293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->y=XDisplayWidth(display,visual_info->screen) >> 1; 46303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->ximage=(XImage *) NULL; 46313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->matte_image=(XImage *) NULL; 46323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->pixmap=(Pixmap) NULL; 46333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->matte_pixmap=(Pixmap) NULL; 46343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->mapped=MagickFalse; 46353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->stasis=MagickFalse; 46363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->shared_memory=MagickTrue; 46373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->segment_info=(void *) NULL; 46383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_SHARED_MEMORY) 46393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 46403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XShmSegmentInfo 46413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *segment_info; 46423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 46433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->segment_info == (void *) NULL) 46443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->segment_info=AcquireQuantumMemory(2,sizeof(*segment_info)); 46453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy segment_info=(XShmSegmentInfo *) window->segment_info; 46463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy segment_info[0].shmid=(-1); 46473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy segment_info[0].shmaddr=(char *) NULL; 46483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy segment_info[1].shmid=(-1); 46493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy segment_info[1].shmaddr=(char *) NULL; 46503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 46513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 46523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 46533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 46543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize these attributes every time function is called. 46553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 46563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->screen=visual_info->screen; 46573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->root=XRootWindow(display,visual_info->screen); 46583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->visual=visual_info->visual; 46593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->storage_class=(unsigned int) visual_info->klass; 46603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->depth=(unsigned int) visual_info->depth; 46613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->visual_info=visual_info; 46623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->map_info=map_info; 46633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->pixel_info=pixel; 46643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->font_info=font_info; 46653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->cursor=XCreateFontCursor(display,XC_left_ptr); 46663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->busy_cursor=XCreateFontCursor(display,XC_watch); 46673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->geometry=(char *) NULL; 46683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->icon_geometry=(char *) NULL; 46693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (resource_info->icon_geometry != (char *) NULL) 46703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CloneString(&window->icon_geometry,resource_info->icon_geometry); 46713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->crop_geometry=(char *) NULL; 4672bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy window->flags=(size_t) PSize; 46733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->width=1; 46743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->height=1; 46753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->min_width=1; 46763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->min_height=1; 46773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->width_inc=1; 46783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->height_inc=1; 46793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->border_width=resource_info->border_width; 46803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->annotate_context=pixel->annotate_context; 46813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->highlight_context=pixel->highlight_context; 46823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->widget_context=pixel->widget_context; 46833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->shadow_stipple=(Pixmap) NULL; 46843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->highlight_stipple=(Pixmap) NULL; 46853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->use_pixmap=MagickTrue; 46863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->immutable=MagickFalse; 46873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->shape=MagickFalse; 46883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->data=0; 4689c57f694b2d04975a0e501613e34368c464708c19cristy window->mask=(int) (CWBackingStore | CWBackPixel | CWBackPixmap | 46903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy CWBitGravity | CWBorderPixel | CWColormap | CWCursor | CWDontPropagate | 46913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy CWEventMask | CWOverrideRedirect | CWSaveUnder | CWWinGravity); 46923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->attributes.background_pixel=pixel->background_color.pixel; 46933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->attributes.background_pixmap=(Pixmap) NULL; 46943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->attributes.bit_gravity=ForgetGravity; 46953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->attributes.backing_store=WhenMapped; 46963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->attributes.save_under=MagickTrue; 46973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->attributes.border_pixel=pixel->border_color.pixel; 46983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->attributes.colormap=map_info->colormap; 46993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->attributes.cursor=window->cursor; 47003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->attributes.do_not_propagate_mask=NoEventMask; 47013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->attributes.event_mask=NoEventMask; 47023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->attributes.override_redirect=MagickFalse; 47033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->attributes.win_gravity=NorthWestGravity; 47043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->orphan=MagickFalse; 47053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 47063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 47073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 47083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 47093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 47103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 47113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 47123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X H i g h l i g h t E l l i p s e % 47133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 47143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 47153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 47163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 47173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 47183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XHighlightEllipse() puts a border on the X server around a region defined by 47193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% highlight_info. 47203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 47213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XHighlightEllipse method is: 47223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 47233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XHighlightEllipse(Display *display,Window window, 47243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% GC annotate_context,const RectangleInfo *highlight_info) 47253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 47263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 47273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 47283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 47293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 47303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 47313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a Window structure. 47323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 47333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o annotate_context: Specifies a pointer to a GC structure. 47343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 47353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o highlight_info: Specifies a pointer to a RectangleInfo structure. It 47363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% contains the extents of any highlighting rectangle. 47373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 47383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 4739bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XHighlightEllipse(Display *display,Window window, 47403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy GC annotate_context,const RectangleInfo *highlight_info) 47413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 47423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 47433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 47443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(window != (Window) NULL); 47453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(annotate_context != (GC) NULL); 47463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(highlight_info != (RectangleInfo *) NULL); 47473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((highlight_info->width < 4) || (highlight_info->height < 4)) 47483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 47493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawArc(display,window,annotate_context,(int) highlight_info->x, 47503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) highlight_info->y,(unsigned int) highlight_info->width-1, 47513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) highlight_info->height-1,0,360*64); 47523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawArc(display,window,annotate_context,(int) highlight_info->x+1, 47533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) highlight_info->y+1,(unsigned int) highlight_info->width-3, 47543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) highlight_info->height-3,0,360*64); 47553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 47563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 47573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 47583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 47593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 47603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 47613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 47623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X H i g h l i g h t L i n e % 47633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 47643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 47653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 47663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 47673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 47683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XHighlightLine() puts a border on the X server around a region defined by 47693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% highlight_info. 47703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 47713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XHighlightLine method is: 47723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 47733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XHighlightLine(Display *display,Window window,GC annotate_context, 47743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const XSegment *highlight_info) 47753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 47763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 47773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 47783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 47793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 47803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 47813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a Window structure. 47823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 47833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o annotate_context: Specifies a pointer to a GC structure. 47843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 47853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o highlight_info: Specifies a pointer to a RectangleInfo structure. It 47863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% contains the extents of any highlighting rectangle. 47873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 47883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 4789bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XHighlightLine(Display *display,Window window, 47903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy GC annotate_context,const XSegment *highlight_info) 47913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 47923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 47933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 47943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(window != (Window) NULL); 47953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(annotate_context != (GC) NULL); 47963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(highlight_info != (XSegment *) NULL); 47973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawLine(display,window,annotate_context,highlight_info->x1, 47983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy highlight_info->y1,highlight_info->x2,highlight_info->y2); 47993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 48003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 48013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 48023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 48033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 48043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 48053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 48063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X H i g h l i g h t R e c t a n g l e % 48073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 48083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 48093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 48103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 48113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 48123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XHighlightRectangle() puts a border on the X server around a region defined 48133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% by highlight_info. 48143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 48153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XHighlightRectangle method is: 48163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 48173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XHighlightRectangle(Display *display,Window window, 48183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% GC annotate_context,const RectangleInfo *highlight_info) 48193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 48203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 48213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 48223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 48233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 48243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 48253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a Window structure. 48263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 48273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o annotate_context: Specifies a pointer to a GC structure. 48283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 48293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o highlight_info: Specifies a pointer to a RectangleInfo structure. It 48303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% contains the extents of any highlighting rectangle. 48313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 48323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 4833bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XHighlightRectangle(Display *display,Window window, 48343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy GC annotate_context,const RectangleInfo *highlight_info) 48353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 48363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 48373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 48383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(window != (Window) NULL); 48393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(annotate_context != (GC) NULL); 48403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(highlight_info != (RectangleInfo *) NULL); 48413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((highlight_info->width < 4) || (highlight_info->height < 4)) 48423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 48433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawRectangle(display,window,annotate_context,(int) highlight_info->x, 48443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) highlight_info->y,(unsigned int) highlight_info->width-1, 48453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) highlight_info->height-1); 48463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawRectangle(display,window,annotate_context,(int) highlight_info->x+ 48473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1,(int) highlight_info->y+1,(unsigned int) highlight_info->width-3, 48483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) highlight_info->height-3); 48493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 48503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 48513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 48523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 48533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 48543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 48553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 48563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X I m p o r t I m a g e % 48573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 48583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 48593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 48603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 48613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 48623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XImportImage() reads an image from an X window. 48633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 48643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XImportImage method is: 48653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 48666710d8414f0ed06e4eaf9346366be72e2b4719efcristy% Image *XImportImage(const ImageInfo *image_info,XImportInfo *ximage_info, 48676710d8414f0ed06e4eaf9346366be72e2b4719efcristy% ExceptionInfo *exception) 48683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 48693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 48703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 48713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image_info: the image info. 48723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 48733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o ximage_info: Specifies a pointer to an XImportInfo structure. 48743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 48756710d8414f0ed06e4eaf9346366be72e2b4719efcristy% o exception: return any errors or warnings in this structure. 48766710d8414f0ed06e4eaf9346366be72e2b4719efcristy% 48773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 48783ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport Image *XImportImage(const ImageInfo *image_info, 48796710d8414f0ed06e4eaf9346366be72e2b4719efcristy XImportInfo *ximage_info,ExceptionInfo *exception) 48803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 48813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Colormap 48823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *colormaps; 48833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 48843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Display 48853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *display; 48863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 48873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 48883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *image; 48893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 48903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 48913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_colormaps, 48923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_windows, 48933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 48943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 48953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RectangleInfo 48963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info; 48973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 48983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 48993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 49003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 49013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window 49023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *children, 49033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy client, 49043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy prior_target, 49053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy root, 49063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target; 49073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 49083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XTextProperty 49093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_name; 49103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 49113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 49123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Open X server connection. 49133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 49143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image_info != (const ImageInfo *) NULL); 49153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image_info->signature == MagickSignature); 49163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image_info->debug != MagickFalse) 49173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s", 49183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image_info->filename); 49193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(ximage_info != (XImportInfo *) NULL); 49203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy display=XOpenDisplay(image_info->server_name); 49213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (display == (Display *) NULL) 49223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 49233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerError,"UnableToOpenXServer", 49243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDisplayName(image_info->server_name)); 49253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((Image *) NULL); 49263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 49273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 49283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set our forgiving exception handler. 49293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 49303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetErrorHandler(XError); 49313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 49323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Select target window. 49333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 49343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.x=0; 49353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.y=0; 49363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.width=0; 49373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.height=0; 49383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy root=XRootWindow(display,XDefaultScreen(display)); 49393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target=(Window) NULL; 49403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((image_info->filename != (char *) NULL) && 49413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*image_info->filename != '\0')) 49423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 49433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(image_info->filename,"root") == 0) 49443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target=root; 49453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 49463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 49473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 49483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Select window by ID or name. 49493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 49503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (isdigit((unsigned char) *image_info->filename) != 0) 49513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target=XWindowByID(display,root,(Window) 49523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy strtol(image_info->filename,(char **) NULL,0)); 49533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (target == (Window) NULL) 49543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target=XWindowByName(display,root,image_info->filename); 49553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (target == (Window) NULL) 49563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerError, 49573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "NoWindowWithSpecifiedIDExists",image_info->filename); 49583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 49593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 49603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 49613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy If target window is not defined, interactively select one. 49623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 49633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy prior_target=target; 49643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (target == (Window) NULL) 49653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target=XSelectWindow(display,&crop_info); 49663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (target == (Window) NULL) 49673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerError,"UnableToReadXWindowImage", 49683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image_info->filename); 49693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy client=target; /* obsolete */ 49703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (target != root) 49713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 49723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 49733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy d; 49743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 49753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XGetGeometry(display,target,&root,&x,&x,&d,&d,&d,&d); 49763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != False) 49773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 49783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for ( ; ; ) 49793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 49803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window 49813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy parent; 49823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 49833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 49843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Find window manager frame. 49853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 49863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XQueryTree(display,target,&root,&parent,&children,&d); 49873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((status != False) && (children != (Window *) NULL)) 49883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((char *) children); 49893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((status == False) || (parent == (Window) NULL) || 49903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (parent == root)) 49913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 49923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target=parent; 49933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 49943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 49953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Get client window. 49963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 49973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy client=XClientWindow(display,target); 49983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (ximage_info->frame == MagickFalse) 49993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target=client; 50003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((ximage_info->frame == MagickFalse) && 50013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (prior_target != MagickFalse)) 50023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target=prior_target; 50033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 50043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 50053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (ximage_info->screen) 50063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 50073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 50083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y; 50093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 50103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window 50113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy child; 50123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 50133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindowAttributes 50143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_attributes; 50153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 50163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 50173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Obtain window image directly from screen. 50183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 50193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XGetWindowAttributes(display,target,&window_attributes); 50203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == False) 50213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 50223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerError, 50233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "UnableToReadXWindowAttributes",image_info->filename); 50243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCloseDisplay(display); 50253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((Image *) NULL); 50263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 50273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XTranslateCoordinates(display,target,root,0,0,&x,&y,&child); 5028c57f694b2d04975a0e501613e34368c464708c19cristy crop_info.x=(ssize_t) x; 5029c57f694b2d04975a0e501613e34368c464708c19cristy crop_info.y=(ssize_t) y; 5030bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy crop_info.width=(size_t) window_attributes.width; 5031bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy crop_info.height=(size_t) window_attributes.height; 5032553743c2f2d6c29405dcfab6390a1c505c79fececristy if (ximage_info->borders != 0) 50333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 50343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 50353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Include border in image. 50363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 50373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.x-=window_attributes.border_width; 50383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.y-=window_attributes.border_width; 50393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.width+=window_attributes.border_width << 1; 50403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.height+=window_attributes.border_width << 1; 50413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 50423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target=root; 50433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 50443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 50453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy If WM_COLORMAP_WINDOWS property is set or multiple colormaps, descend. 50463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 50473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_windows=0; 50483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XGetWMColormapWindows(display,target,&children,&number_windows); 50493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((status == True) && (number_windows > 0)) 50503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 50513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage_info->descend=MagickTrue; 50523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree ((char *) children); 50533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 50543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colormaps=XListInstalledColormaps(display,target,&number_colormaps); 50553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (number_colormaps > 0) 50563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 50573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (number_colormaps > 1) 50583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage_info->descend=MagickTrue; 50593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((char *) colormaps); 50603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 50613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 50623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Alert the user not to alter the screen. 50633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 50643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (ximage_info->silent == MagickFalse) 50653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XBell(display,0); 50663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 50673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Get image by window id. 50683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 50693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XGrabServer(display); 50703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image=XGetWindowImage(display,target,ximage_info->borders, 50716710d8414f0ed06e4eaf9346366be72e2b4719efcristy ximage_info->descend ? 1U : 0U,exception); 50723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XUngrabServer(display); 50733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image == (Image *) NULL) 50743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerError,"UnableToReadXWindowImage", 50753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image_info->filename) 50763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 50773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 50783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(image->filename,image_info->filename, 50793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MaxTextExtent); 50803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((crop_info.width != 0) && (crop_info.height != 0)) 50813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 50823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 50833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *clone_image, 50843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *crop_image; 50853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 50863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 50873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Crop image as defined by the cropping rectangle. 50883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 50896710d8414f0ed06e4eaf9346366be72e2b4719efcristy clone_image=CloneImage(image,0,0,MagickTrue,exception); 50903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (clone_image != (Image *) NULL) 50913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 50926710d8414f0ed06e4eaf9346366be72e2b4719efcristy crop_image=CropImage(clone_image,&crop_info,exception); 50933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (crop_image != (Image *) NULL) 50943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 50953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image=DestroyImage(image); 50963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image=crop_image; 50973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 50983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 50993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 51003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XGetWMName(display,target,&window_name); 51013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == True) 51023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 51033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((image_info->filename != (char *) NULL) && 51043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (*image_info->filename == '\0')) 51053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(image->filename,(char *) window_name.value, 51063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (size_t) window_name.nitems+1); 51073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) window_name.value); 51083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 51093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 51103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (ximage_info->silent == MagickFalse) 51113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 51123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 51133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Alert the user we're done. 51143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 51153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XBell(display,0); 51163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XBell(display,0); 51173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 51183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCloseDisplay(display); 51193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(image); 51203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 51213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 51223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 51233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 51243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 51253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 51263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 51273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X I n i t i a l i z e W i n d o w s % 51283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 51293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 51303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 51313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 51323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 51333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XInitializeWindows() initializes the XWindows structure. 51343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 51353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XInitializeWindows method is: 51363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 51373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XWindows *XInitializeWindows(Display *display, 51383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XResourceInfo *resource_info) 51393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 51403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 51413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 51423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o windows: XInitializeWindows returns a pointer to a XWindows structure. 51433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 51443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 51453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 51463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 51473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o resource_info: Specifies a pointer to a X11 XResourceInfo structure. 51483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 51493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 5150bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate XWindows *XInitializeWindows(Display *display, 51513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XResourceInfo *resource_info) 51523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 51533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window 51543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy root_window; 51553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 51563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindows 51573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *windows; 51583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 51593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 51603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Allocate windows structure. 51613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 516273bd4a51b419e914565bdf204bf1540dc4c8ee26cristy windows=(XWindows *) AcquireMagickMemory(sizeof(*windows)); 51633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows == (XWindows *) NULL) 51643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 51653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerFatalError,"MemoryAllocationFailed", 51663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "..."); 51673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((XWindows *) NULL); 51683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 51693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(windows,0,sizeof(*windows)); 51703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->pixel_info=(XPixelInfo *) AcquireMagickMemory( 51713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*windows->pixel_info)); 51723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->icon_pixel=(XPixelInfo *) AcquireMagickMemory( 51733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*windows->icon_pixel)); 51743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->icon_resources=(XResourceInfo *) AcquireMagickMemory( 51753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*windows->icon_resources)); 51763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((windows->pixel_info == (XPixelInfo *) NULL) || 51773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (windows->icon_pixel == (XPixelInfo *) NULL) || 51783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (windows->icon_resources == (XResourceInfo *) NULL)) 51793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 51803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerFatalError,"MemoryAllocationFailed", 51813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "..."); 51823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((XWindows *) NULL); 51833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 51843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 51853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize windows structure. 51863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 51873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->display=display; 51883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->wm_protocols=XInternAtom(display,"WM_PROTOCOLS",MagickFalse); 51893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->wm_delete_window=XInternAtom(display,"WM_DELETE_WINDOW",MagickFalse); 51903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->wm_take_focus=XInternAtom(display,"WM_TAKE_FOCUS",MagickFalse); 51913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->im_protocols=XInternAtom(display,"IM_PROTOCOLS",MagickFalse); 51923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->im_remote_command= 51933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XInternAtom(display,"IM_REMOTE_COMMAND",MagickFalse); 51943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->im_update_widget=XInternAtom(display,"IM_UPDATE_WIDGET",MagickFalse); 51953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->im_update_colormap= 51963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XInternAtom(display,"IM_UPDATE_COLORMAP",MagickFalse); 51973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->im_former_image=XInternAtom(display,"IM_FORMER_IMAGE",MagickFalse); 51983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->im_next_image=XInternAtom(display,"IM_NEXT_IMAGE",MagickFalse); 51993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->im_retain_colors=XInternAtom(display,"IM_RETAIN_COLORS",MagickFalse); 52003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->im_exit=XInternAtom(display,"IM_EXIT",MagickFalse); 52013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->dnd_protocols=XInternAtom(display,"DndProtocol",MagickFalse); 52020157aeadef2fce908277168097a160a8f15a6952cristy#if defined(MAGICKCORE_WINDOWS_SUPPORT) 52033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSynchronize(display,IsWindows95()); 52043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 52053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (IsEventLogging()) 52063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 52073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSynchronize(display,MagickTrue); 52083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(),"Version: %s", 5209bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy GetMagickVersion((size_t *) NULL)); 52103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(),"Protocols:"); 52113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(), 52123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " Window Manager: 0x%lx",windows->wm_protocols); 52133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(), 52143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " delete window: 0x%lx",windows->wm_delete_window); 52153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule()," take focus: 0x%lx", 52163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->wm_take_focus); 52173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule()," ImageMagick: 0x%lx", 52183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->im_protocols); 52193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(), 52203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " remote command: 0x%lx",windows->im_remote_command); 52213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(), 52223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " update widget: 0x%lx",windows->im_update_widget); 52233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(), 52243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " update colormap: 0x%lx",windows->im_update_colormap); 52253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(), 52263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " former image: 0x%lx",windows->im_former_image); 52273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule()," next image: 0x%lx", 52283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->im_next_image); 52293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(), 52303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " retain colors: 0x%lx",windows->im_retain_colors); 52313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule()," exit: 0x%lx", 52323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->im_exit); 52333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule()," Drag and Drop: 0x%lx", 52343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->dnd_protocols); 52353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 52363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 52373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Allocate standard colormap. 52383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 52393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->map_info=XAllocStandardColormap(); 52403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->icon_map=XAllocStandardColormap(); 52413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((windows->map_info == (XStandardColormap *) NULL) || 52423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (windows->icon_map == (XStandardColormap *) NULL)) 52433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(ResourceLimitFatalError, 52443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "MemoryAllocationFailed","..."); 52453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->map_info->colormap=(Colormap) NULL; 52463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->icon_map->colormap=(Colormap) NULL; 5247f2faecf9facdbbb14fcba373365f9f691a9658e0cristy windows->pixel_info->pixels=(unsigned long *) NULL; 52483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->pixel_info->annotate_context=(GC) NULL; 52493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->pixel_info->highlight_context=(GC) NULL; 52503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->pixel_info->widget_context=(GC) NULL; 52513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->font_info=(XFontStruct *) NULL; 52523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->icon_pixel->annotate_context=(GC) NULL; 5253f2faecf9facdbbb14fcba373365f9f691a9658e0cristy windows->icon_pixel->pixels=(unsigned long *) NULL; 52543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 52553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Allocate visual. 52563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 52573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *windows->icon_resources=(*resource_info); 52583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->icon_resources->visual_type=(char *) "default"; 52593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->icon_resources->colormap=SharedColormap; 52603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->visual_info= 52613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XBestVisualInfo(display,windows->map_info,resource_info); 52623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->icon_visual= 52633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XBestVisualInfo(display,windows->icon_map,windows->icon_resources); 52643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((windows->visual_info == (XVisualInfo *) NULL) || 52653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (windows->icon_visual == (XVisualInfo *) NULL)) 52663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerFatalError,"UnableToGetVisual", 52673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->visual_type); 52683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (IsEventLogging()) 52693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 52703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(),"Visual:"); 52713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule()," visual id: 0x%lx", 52723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->visual_info->visualid); 52733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule()," class: %s", 52743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XVisualClassName(windows->visual_info->klass)); 52753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule()," depth: %d planes", 52763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->visual_info->depth); 52773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(), 52783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " size of colormap: %d entries",windows->visual_info->colormap_size); 52793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(), 52803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " red, green, blue masks: 0x%lx 0x%lx 0x%lx", 52813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->visual_info->red_mask,windows->visual_info->green_mask, 52823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->visual_info->blue_mask); 52833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(), 52843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " significant bits in color: %d bits", 52853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->visual_info->bits_per_rgb); 52863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 52873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 52883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Allocate class and manager hints. 52893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 52903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->class_hints=XAllocClassHint(); 52913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->manager_hints=XAllocWMHints(); 52923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((windows->class_hints == (XClassHint *) NULL) || 52933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (windows->manager_hints == (XWMHints *) NULL)) 52943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(ResourceLimitFatalError, 52953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "MemoryAllocationFailed","..."); 52963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 52973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine group leader if we have one. 52983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 52993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy root_window=XRootWindow(display,windows->visual_info->screen); 53003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->group_leader.id=(Window) NULL; 53013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (resource_info->window_group != (char *) NULL) 53023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 53033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (isdigit((unsigned char) *resource_info->window_group) != 0) 53043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->group_leader.id=XWindowByID(display,root_window,(Window) 53053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy strtol((char *) resource_info->window_group,(char **) NULL,0)); 53063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->group_leader.id == (Window) NULL) 53073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->group_leader.id= 53083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindowByName(display,root_window,resource_info->window_group); 53093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 53103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(windows); 53113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 53123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 53133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 53143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 53153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 53163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 53173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 53183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X M a k e C u r s o r % 53193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 53203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 53213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 53223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 53233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 53243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XMakeCursor() creates a crosshairs X11 cursor. 53253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 53263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XMakeCursor method is: 53273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 53283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Cursor XMakeCursor(Display *display,Window window,Colormap colormap, 53293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *background_color,char *foreground_color) 53303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 53313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 53323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 53333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 53343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 53353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 53363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies the ID of the window for which the cursor is 53373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% assigned. 53383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 53393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o colormap: Specifies the ID of the colormap from which the background 53403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% and foreground color will be retrieved. 53413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 53423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o background_color: Specifies the color to use for the cursor background. 53433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 53443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o foreground_color: Specifies the color to use for the cursor foreground. 53453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 53463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 5347bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate Cursor XMakeCursor(Display *display,Window window, 53483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Colormap colormap,char *background_color,char *foreground_color) 53493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 53503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define scope_height 17 53513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define scope_x_hot 8 53523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define scope_y_hot 8 53533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define scope_width 17 53543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 53553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static const unsigned char 53563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scope_bits[] = 53573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 53583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x80, 0x03, 0x00, 0x80, 0x02, 0x00, 0x80, 0x02, 0x00, 0x80, 0x02, 53593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x80, 0x02, 0x00, 0x80, 0x02, 0x00, 0x80, 0x02, 0x00, 0x7f, 53603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xfc, 0x01, 0x01, 0x00, 0x01, 0x7f, 0xfc, 0x01, 0x80, 0x02, 0x00, 53613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x80, 0x02, 0x00, 0x80, 0x02, 0x00, 0x80, 0x02, 0x00, 0x80, 0x02, 53623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x80, 0x02, 0x00, 0x80, 0x03, 0x00 53633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }, 53643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scope_mask_bits[] = 53653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 53663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xc0, 0x07, 0x00, 0xc0, 0x07, 0x00, 0xc0, 0x06, 0x00, 0xc0, 0x06, 53673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0xc0, 0x06, 0x00, 0xc0, 0x06, 0x00, 0xff, 0xfe, 0x01, 0x7f, 53683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xfc, 0x01, 0x03, 0x80, 0x01, 0x7f, 0xfc, 0x01, 0xff, 0xfe, 0x01, 53693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xc0, 0x06, 0x00, 0xc0, 0x06, 0x00, 0xc0, 0x06, 0x00, 0xc0, 0x06, 53703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0xc0, 0x07, 0x00, 0xc0, 0x07, 0x00 53713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }; 53723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 53733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Cursor 53743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cursor; 53753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 53763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Pixmap 53773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mask, 53783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy source; 53793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 53803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XColor 53813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy background, 53823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy foreground; 53833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 53843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 53853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(window != (Window) NULL); 53863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(colormap != (Colormap) NULL); 53873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(background_color != (char *) NULL); 53883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(foreground_color != (char *) NULL); 53893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",background_color); 53903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy source=XCreateBitmapFromData(display,window,(char *) scope_bits,scope_width, 53913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scope_height); 53923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mask=XCreateBitmapFromData(display,window,(char *) scope_mask_bits, 53933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scope_width,scope_height); 53943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((source == (Pixmap) NULL) || (mask == (Pixmap) NULL)) 53953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 53963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerError,"UnableToCreatePixmap","..."); 53973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((Cursor) NULL); 53983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 53993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XParseColor(display,colormap,background_color,&background); 54003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XParseColor(display,colormap,foreground_color,&foreground); 54013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cursor=XCreatePixmapCursor(display,source,mask,&foreground,&background, 54023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scope_x_hot,scope_y_hot); 54033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreePixmap(display,source); 54043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreePixmap(display,mask); 54053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(cursor); 54063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 54073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 54083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 54093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 54103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 54113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 54123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 54133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X M a k e I m a g e % 54143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 54153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 54163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 54173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 54183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 54193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XMakeImage() creates an X11 image. If the image size differs from the X11 54203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% image size, the image is first resized. 54213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 54223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XMakeImage method is: 54233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 54243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MagickBooleanType XMakeImage(Display *display, 54253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const XResourceInfo *resource_info,XWindowInfo *window,Image *image, 5426051718b74ad68f8584cdac01d0192974ec777f1bcristy% unsigned int width,unsigned int height,ExceptionInfo *exception) 54273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 54283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 54293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 54303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 54313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 54323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 54333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o resource_info: Specifies a pointer to a X11 XResourceInfo structure. 54343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 54353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a XWindowInfo structure. 54363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 54373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image: the image. 54383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 54393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o width: Specifies the width in pixels of the rectangular area to 54403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% display. 54413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 54423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o height: Specifies the height in pixels of the rectangular area to 54433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% display. 54443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5445051718b74ad68f8584cdac01d0192974ec777f1bcristy% o exception: return any errors or warnings in this structure. 5446051718b74ad68f8584cdac01d0192974ec777f1bcristy% 54473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 5448bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate MagickBooleanType XMakeImage(Display *display, 54493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const XResourceInfo *resource_info,XWindowInfo *window,Image *image, 5450051718b74ad68f8584cdac01d0192974ec777f1bcristy unsigned int width,unsigned int height,ExceptionInfo *exception) 54513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 54523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define CheckOverflowException(length,width,height) \ 54533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (((height) != 0) && ((length)/((size_t) height) != ((size_t) width))) 54543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 54553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 54563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy depth, 54573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy format; 54583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 54593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 54603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 54613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 54623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XImage 54633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *matte_image, 54643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *ximage; 54653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 54663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 54673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 54683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(resource_info != (XResourceInfo *) NULL); 54693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(window != (XWindowInfo *) NULL); 54703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(width != 0); 54713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(height != 0); 54723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((window->width == 0) || (window->height == 0)) 54733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 54743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 54753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Apply user transforms to the image. 54763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 54773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckDefineCursor(display,window->id,window->busy_cursor); 54783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFlush(display); 54793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy depth=(int) window->depth; 54803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->destroy) 54813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->image=DestroyImage(window->image); 54823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->image=image; 54833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->destroy=MagickFalse; 54843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->image != (Image *) NULL) 54853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 54863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->crop_geometry != (char *) NULL) 54873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 54883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 54893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *crop_image; 54903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 54913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RectangleInfo 54923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info; 54933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 54943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 54953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Crop image. 54963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 54973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->image->page.x=0; 54983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->image->page.y=0; 54993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ParsePageGeometry(window->image,window->crop_geometry, 55006710d8414f0ed06e4eaf9346366be72e2b4719efcristy &crop_info,exception); 55016710d8414f0ed06e4eaf9346366be72e2b4719efcristy crop_image=CropImage(window->image,&crop_info,exception); 55023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (crop_image != (Image *) NULL) 55033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 55043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->image != image) 55053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->image=DestroyImage(window->image); 55063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->image=crop_image; 55073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->destroy=MagickTrue; 55083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 55093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 55103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((width != (unsigned int) window->image->columns) || 55113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (height != (unsigned int) window->image->rows)) 55123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 55133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 55143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *resize_image; 55153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 55163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 55173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Resize image. 55183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 55193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resize_image=NewImageList(); 55203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->pixel_info->colors != 0) 55216710d8414f0ed06e4eaf9346366be72e2b4719efcristy resize_image=SampleImage(window->image,width,height,exception); 55223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 55236710d8414f0ed06e4eaf9346366be72e2b4719efcristy resize_image=ThumbnailImage(window->image,width,height,exception); 55243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (resize_image != (Image *) NULL) 55253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 55263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->image != image) 55273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->image=DestroyImage(window->image); 55283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->image=resize_image; 55293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->destroy=MagickTrue; 55303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 55313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 55323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=(unsigned int) window->image->columns; 5533bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy assert((size_t) width == window->image->columns); 55343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) window->image->rows; 5535bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy assert((size_t) height == window->image->rows); 55363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 55373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 55383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Create X image. 55393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 55403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage=(XImage *) NULL; 55413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy format=(depth == 1) ? XYBitmap : ZPixmap; 55423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_SHARED_MEMORY) 55433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->shared_memory != MagickFalse) 55443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 55453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XShmSegmentInfo 55463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *segment_info; 55473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 55483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy segment_info=(XShmSegmentInfo *) window->segment_info; 55493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy segment_info[1].shmid=(-1); 55503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy segment_info[1].shmaddr=(char *) NULL; 55513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage=XShmCreateImage(display,window->visual,(unsigned int) depth,format, 55523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) NULL,&segment_info[1],width,height); 55533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (ximage == (XImage *) NULL) 55543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->shared_memory=MagickFalse; 55553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=(size_t) ximage->bytes_per_line*ximage->height; 55563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (CheckOverflowException(length,ximage->bytes_per_line,ximage->height)) 55573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->shared_memory=MagickFalse; 55583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->shared_memory != MagickFalse) 55593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy segment_info[1].shmid=shmget(IPC_PRIVATE,length,IPC_CREAT | 0777); 55603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->shared_memory != MagickFalse) 55613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy segment_info[1].shmaddr=(char *) shmat(segment_info[1].shmid,0,0); 55623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (segment_info[1].shmid < 0) 55633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->shared_memory=MagickFalse; 55643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->shared_memory != MagickFalse) 55653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) shmctl(segment_info[1].shmid,IPC_RMID,0); 55663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 55673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 55683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (ximage != (XImage *) NULL) 55693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDestroyImage(ximage); 55703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage=(XImage *) NULL; 55713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (segment_info[1].shmaddr) 55723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 55733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) shmdt(segment_info[1].shmaddr); 55743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy segment_info[1].shmaddr=(char *) NULL; 55753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 55763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (segment_info[1].shmid >= 0) 55773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 55783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) shmctl(segment_info[1].shmid,IPC_RMID,0); 55793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy segment_info[1].shmid=(-1); 55803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 55813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 55823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 55833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 55843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 55853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Allocate X image pixel data. 55863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 55873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_SHARED_MEMORY) 55883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->shared_memory) 55893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 55903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 55913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 55923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 55933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XShmSegmentInfo 55943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *segment_info; 55953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 55963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSync(display,MagickFalse); 55973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy xerror_alert=MagickFalse; 55983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy segment_info=(XShmSegmentInfo *) window->segment_info; 55993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage->data=segment_info[1].shmaddr; 56003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy segment_info[1].readOnly=MagickFalse; 56013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XShmAttach(display,&segment_info[1]); 56023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != False) 56033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSync(display,MagickFalse); 56043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((status == False) || (xerror_alert != MagickFalse)) 56053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 56063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->shared_memory=MagickFalse; 56073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != False) 56083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XShmDetach(display,&segment_info[1]); 56093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (ximage != (XImage *) NULL) 56103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 56113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage->data=NULL; 56123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDestroyImage(ximage); 56133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage=(XImage *) NULL; 56143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 56153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (segment_info[1].shmid >= 0) 56163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 56173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (segment_info[1].shmaddr != NULL) 56183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) shmdt(segment_info[1].shmaddr); 56193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) shmctl(segment_info[1].shmid,IPC_RMID,0); 56203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy segment_info[1].shmid=(-1); 56213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy segment_info[1].shmaddr=(char *) NULL; 56223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 56233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 56243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 56253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 56263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->shared_memory == MagickFalse) 56273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage=XCreateImage(display,window->visual,(unsigned int) depth,format,0, 56283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) NULL,width,height,XBitmapPad(display),0); 56293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (ximage == (XImage *) NULL) 56303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 56313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 56323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Unable to create X image. 56333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 56343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckDefineCursor(display,window->id,window->cursor); 56353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 56363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 56373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=(size_t) ximage->bytes_per_line*ximage->height; 56383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (IsEventLogging()) 56393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 56403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(),"XImage:"); 56413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule()," width, height: %dx%d", 56423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage->width,ximage->height); 56433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule()," format: %d", 56443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage->format); 56453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule()," byte order: %d", 56463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage->byte_order); 56473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(), 56483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " bitmap unit, bit order, pad: %d %d %d",ximage->bitmap_unit, 56493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage->bitmap_bit_order,ximage->bitmap_pad); 56503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule()," depth: %d", 56513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage->depth); 56523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule()," bytes per line: %d", 56533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage->bytes_per_line); 56543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule()," bits per pixel: %d", 56553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage->bits_per_pixel); 56563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(), 56573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " red, green, blue masks: 0x%lx 0x%lx 0x%lx",ximage->red_mask, 56583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage->green_mask,ximage->blue_mask); 56593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 56603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->shared_memory == MagickFalse) 56613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 56623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (ximage->format != XYBitmap) 56633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage->data=(char *) AcquireQuantumMemory((size_t) 56643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage->bytes_per_line,(size_t) ximage->height); 56653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 56663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage->data=(char *) AcquireQuantumMemory((size_t) 56673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage->bytes_per_line*ximage->depth,(size_t) ximage->height); 56683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 56693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (ximage->data == (char *) NULL) 56703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 56713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 56723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Unable to allocate pixel data. 56733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 56743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDestroyImage(ximage); 56753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage=(XImage *) NULL; 56763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckDefineCursor(display,window->id,window->cursor); 56773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 56783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 56793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->ximage != (XImage *) NULL) 56803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 56813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 56823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Destroy previous X image. 56833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 56843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=(size_t) window->ximage->bytes_per_line*window->ximage->height; 56853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_SHARED_MEMORY) 56863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->segment_info != (XShmSegmentInfo *) NULL) 56873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 56883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XShmSegmentInfo 56893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *segment_info; 56903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 56913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy segment_info=(XShmSegmentInfo *) window->segment_info; 56923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (segment_info[0].shmid >= 0) 56933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 56943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSync(display,MagickFalse); 56953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XShmDetach(display,&segment_info[0]); 56963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSync(display,MagickFalse); 56973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (segment_info[0].shmaddr != (char *) NULL) 56983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) shmdt(segment_info[0].shmaddr); 56993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) shmctl(segment_info[0].shmid,IPC_RMID,0); 57003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy segment_info[0].shmid=(-1); 57013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy segment_info[0].shmaddr=(char *) NULL; 57023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->ximage->data=(char *) NULL; 57033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 57043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 57053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 57063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->ximage->data != (char *) NULL) 57073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy free(window->ximage->data); 57083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->ximage->data=(char *) NULL; 57093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDestroyImage(window->ximage); 57103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->ximage=(XImage *) NULL; 57113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 57123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_SHARED_MEMORY) 57133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->segment_info != (XShmSegmentInfo *) NULL) 57143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 57153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XShmSegmentInfo 57163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *segment_info; 57173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 57183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy segment_info=(XShmSegmentInfo *) window->segment_info; 57193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy segment_info[0]=segment_info[1]; 57203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 57213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 57223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->ximage=ximage; 57233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy matte_image=(XImage *) NULL; 57243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((window->shape != MagickFalse) && (window->image != (Image *) NULL)) 57258a46d827a124555f0c48fb2368ec1bba8e079ab6cristy if ((window->image->alpha_trait == BlendPixelTrait) && 5726c57f694b2d04975a0e501613e34368c464708c19cristy ((int) width <= XDisplayWidth(display,window->screen)) && 5727c57f694b2d04975a0e501613e34368c464708c19cristy ((int) height <= XDisplayHeight(display,window->screen))) 57283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 57293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 57303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Create matte image. 57313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 57323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy matte_image=XCreateImage(display,window->visual,1,XYBitmap,0, 57333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) NULL,width,height,XBitmapPad(display),0); 57343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (IsEventLogging()) 57353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 57363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(),"Matte Image:"); 57373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(), 57383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " width, height: %dx%d",matte_image->width,matte_image->height); 57393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 57403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (matte_image != (XImage *) NULL) 57413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 57423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 57433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Allocate matte image pixel data. 57443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 57453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy matte_image->data=(char *) AcquireQuantumMemory((size_t) 57463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy matte_image->bytes_per_line*matte_image->depth, 57473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (size_t) matte_image->height); 57483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (matte_image->data == (char *) NULL) 57493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 57503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDestroyImage(matte_image); 57513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy matte_image=(XImage *) NULL; 57523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 57533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 57543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 57553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->matte_image != (XImage *) NULL) 57563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 57573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 57583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Free matte image. 57593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 57603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->matte_image->data != (char *) NULL) 57613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy free(window->matte_image->data); 57623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->matte_image->data=(char *) NULL; 57633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDestroyImage(window->matte_image); 57643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->matte_image=(XImage *) NULL; 57653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 57663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->matte_image=matte_image; 57673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->matte_pixmap != (Pixmap) NULL) 57683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 57693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreePixmap(display,window->matte_pixmap); 57703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->matte_pixmap=(Pixmap) NULL; 57713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_SHAPE) 57723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->shape != MagickFalse) 57733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XShapeCombineMask(display,window->id,ShapeBounding,0,0,None,ShapeSet); 57743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 57753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 57763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->stasis=MagickFalse; 57773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 57783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert pixels to X image data. 57793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 57803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->image != (Image *) NULL) 57813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 57823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((ximage->byte_order == LSBFirst) || ((ximage->format == XYBitmap) && 57833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (ximage->bitmap_bit_order == LSBFirst))) 57843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XMakeImageLSBFirst(resource_info,window,window->image,ximage, 5785e941a75fe8bf344bc5c06a7f74bb5173c87db115cristy matte_image,exception); 57863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 57873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XMakeImageMSBFirst(resource_info,window,window->image,ximage, 5788e941a75fe8bf344bc5c06a7f74bb5173c87db115cristy matte_image,exception); 57893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 57903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->matte_image != (XImage *) NULL) 57913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 57923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 57933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Create matte pixmap. 57943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 57953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->matte_pixmap=XCreatePixmap(display,window->id,width,height,1); 57963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->matte_pixmap != (Pixmap) NULL) 57973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 57983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy GC 57993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy graphics_context; 58003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 58013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGCValues 58023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy context_values; 58033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 58043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 58053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Copy matte image to matte pixmap. 58063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 58074c08aed51c5899665ade97263692328eea4af106cristy context_values.background=0; 58084c08aed51c5899665ade97263692328eea4af106cristy context_values.foreground=1; 58093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy graphics_context=XCreateGC(display,window->matte_pixmap, 5810bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy (size_t) (GCBackground | GCForeground),&context_values); 58113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XPutImage(display,window->matte_pixmap,graphics_context, 58123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->matte_image,0,0,0,0,width,height); 58133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreeGC(display,graphics_context); 58143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_SHAPE) 58153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->shape != MagickFalse) 58163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XShapeCombineMask(display,window->id,ShapeBounding,0,0, 58173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->matte_pixmap,ShapeSet); 58183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 58193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 58203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 58213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XMakePixmap(display,resource_info,window); 58223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 58233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Restore cursor. 58243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 58253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckDefineCursor(display,window->id,window->cursor); 58263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 58273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 58283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 58293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 58303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 58313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 58323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 58333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 58343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ X M a k e I m a g e L S B F i r s t % 58353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 58363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 58373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 58383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 58393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 58403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XMakeImageLSBFirst() initializes the pixel data of an X11 Image. The X image 58413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% pixels are copied in least-significant bit and byte first order. The 58423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% server's scanline pad is respected. Rather than using one or two general 58433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% cases, many special cases are found here to help speed up the image 58443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% conversion. 58453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 58463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XMakeImageLSBFirst method is: 58473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5848e941a75fe8bf344bc5c06a7f74bb5173c87db115cristy% void XMakeImageLSBFirst(Display *display,XWindows *windows, 5849e941a75fe8bf344bc5c06a7f74bb5173c87db115cristy% ExceptionInfo *exception) 58503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 58513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 58523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 58533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o resource_info: Specifies a pointer to a X11 XResourceInfo structure. 58543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 58553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a XWindowInfo structure. 58563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 58573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image: the image. 58583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 58593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o ximage: Specifies a pointer to a XImage structure; returned from 58603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XCreateImage. 58613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 58623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o matte_image: Specifies a pointer to a XImage structure; returned from 58633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XCreateImage. 58643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5865e941a75fe8bf344bc5c06a7f74bb5173c87db115cristy% o exception: return any errors or warnings in this structure. 5866e941a75fe8bf344bc5c06a7f74bb5173c87db115cristy% 58673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 58683ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic void XMakeImageLSBFirst(const XResourceInfo *resource_info, 5869e941a75fe8bf344bc5c06a7f74bb5173c87db115cristy const XWindowInfo *window,Image *image,XImage *ximage,XImage *matte_image, 5870e941a75fe8bf344bc5c06a7f74bb5173c87db115cristy ExceptionInfo *exception) 58713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 5872c57f694b2d04975a0e501613e34368c464708c19cristy CacheView 5873c57f694b2d04975a0e501613e34368c464708c19cristy *canvas_view; 5874c57f694b2d04975a0e501613e34368c464708c19cristy 58753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 58763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *canvas; 58773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 58783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 58793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y; 58803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 58814c08aed51c5899665ade97263692328eea4af106cristy register const Quantum 58823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 58833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 58843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 58853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 58863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 58873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register unsigned char 58883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 58893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 58903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned char 58913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bit, 58923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte; 58933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 58943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 58953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scanline_pad; 58963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5897f2faecf9facdbbb14fcba373365f9f691a9658e0cristy unsigned long 58983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel, 58993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *pixels; 59003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 59013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XStandardColormap 59023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *map_info; 59033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 59043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(resource_info != (XResourceInfo *) NULL); 59053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(window != (XWindowInfo *) NULL); 59063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image != (Image *) NULL); 59073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image->debug != MagickFalse) 59083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); 59093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy canvas=image; 5910bab87c3357f708174fd2d8ab87a0d7dbb3f70e31cristy if ((window->immutable == MagickFalse) && 59118a46d827a124555f0c48fb2368ec1bba8e079ab6cristy (image->storage_class == DirectClass) && (image->alpha_trait == BlendPixelTrait)) 59123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 59133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 59143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size[MaxTextExtent]; 59153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 59163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 59173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *pattern; 59183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 59193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ImageInfo 59203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *image_info; 59213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 59223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image_info=AcquireImageInfo(); 59233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(image_info->filename, 59243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->image_info->texture != (char *) NULL ? 59253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->image_info->texture : "pattern:checkerboard", 59263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MaxTextExtent); 5927b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(size,MaxTextExtent,"%.20gx%.20g",(double) 5928e8c25f9b4c9fb72cad6db08eeda58c7c5784014ecristy image->columns,(double) image->rows); 59293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image_info->size=ConstantString(size); 59306710d8414f0ed06e4eaf9346366be72e2b4719efcristy pattern=ReadImage(image_info,exception); 59313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image_info=DestroyImageInfo(image_info); 59323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (pattern != (Image *) NULL) 59333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 59346710d8414f0ed06e4eaf9346366be72e2b4719efcristy canvas=CloneImage(image,0,0,MagickTrue,exception); 59353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (canvas != (Image *) NULL) 593639172408bad7ef2ef00a815fa9abf9979e7857cbcristy (void) CompositeImage(canvas,pattern,DstOverCompositeOp,MagickTrue, 5937feb3e9695150978a5d2372d3fe2f60466a7c8066cristy 0,0,exception); 59383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pattern=DestroyImage(pattern); 59393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 59403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 59413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scanline_pad=(unsigned int) (ximage->bytes_per_line-((ximage->width* 59423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage->bits_per_pixel) >> 3)); 59433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_info=window->map_info; 59443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixels=window->pixel_info->pixels; 59453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=(unsigned char *) ximage->data; 59463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=0; 594746ff2676b1044ea4101ac7a59b83289cd8f6cfdacristy canvas_view=AcquireVirtualCacheView(canvas,exception); 59483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (ximage->format == XYBitmap) 59493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 59503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register unsigned short 59513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy polarity; 59523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 59533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned char 59543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy background, 59553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy foreground; 59563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 59573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 59583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert canvas to big-endian bitmap. 59593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 59603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy background=(unsigned char) 59613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (XPixelIntensity(&window->pixel_info->foreground_color) < 59623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XPixelIntensity(&window->pixel_info->background_color) ? 0x80 : 0x00); 59633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy foreground=(unsigned char) 59643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (XPixelIntensity(&window->pixel_info->background_color) < 59653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XPixelIntensity(&window->pixel_info->foreground_color) ? 0x80 : 0x00); 5966101ab708b0574518ac5715da4d3915400e9df79acristy polarity=(unsigned short) ((GetPixelInfoIntensity( 59676e963d8cbd0aebba1073d7f4b61e3d17177d6fedcristy &canvas->colormap[0])) < (QuantumRange/2) ? 1 : 0); 59683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (canvas->colors == 2) 5969101ab708b0574518ac5715da4d3915400e9df79acristy polarity=GetPixelInfoIntensity(&canvas->colormap[0]) < 5970101ab708b0574518ac5715da4d3915400e9df79acristy GetPixelInfoIntensity(&canvas->colormap[1]); 59713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) canvas->rows; y++) 59723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 5973c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,canvas->columns,1, 59746710d8414f0ed06e4eaf9346366be72e2b4719efcristy exception); 59754c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 59763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 59773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bit=0; 59783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte=0; 59793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=0; x < (int) canvas->columns; x++) 59803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 59813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte>>=1; 59824c08aed51c5899665ade97263692328eea4af106cristy if (GetPixelIndex(canvas,p) == (Quantum) polarity) 59833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte|=foreground; 59843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 59853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte|=background; 59863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bit++; 59873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (bit == 8) 59883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 59893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=byte; 59903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bit=0; 59913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte=0; 59923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5993ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 59943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 59953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (bit != 0) 59963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=byte >> (8-bit); 59973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 59983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 59993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 60003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 60013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->pixel_info->colors != 0) 60023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (ximage->bits_per_pixel) 60033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 2: 60053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register unsigned int 60073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble; 60083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 60093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 60103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert to 2 bit color-mapped X canvas. 60113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 60123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) canvas->rows; y++) 60133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6014c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y, 60156710d8414f0ed06e4eaf9346366be72e2b4719efcristy canvas->columns,1,exception); 60164c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 60173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 60183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble=0; 60193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=0; x < (int) canvas->columns; x++) 60203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60214c08aed51c5899665ade97263692328eea4af106cristy pixel=pixels[(ssize_t) GetPixelIndex(canvas,p)] & 0x0f; 60223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (nibble) 60233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 0: 60253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(unsigned char) pixel; 60273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble++; 60283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 60293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 60303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 1: 60313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q|=(unsigned char) (pixel << 2); 60333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble++; 60343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 60353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 60363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 2: 60373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q|=(unsigned char) (pixel << 4); 60393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble++; 60403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 60413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 60423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 3: 60433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q|=(unsigned char) (pixel << 6); 60453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 60463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble=0; 60473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 60483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 60493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6050ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 60513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 60523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 60533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 60543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 60553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 60563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 4: 60573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register unsigned int 60593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble; 60603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 60613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 60623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert to 4 bit color-mapped X canvas. 60633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 60643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) canvas->rows; y++) 60653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6066c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y, 60676710d8414f0ed06e4eaf9346366be72e2b4719efcristy canvas->columns,1,exception); 60684c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 60693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 60703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble=0; 60713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=0; x < (int) canvas->columns; x++) 60723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60734c08aed51c5899665ade97263692328eea4af106cristy pixel=pixels[(ssize_t) GetPixelIndex(canvas,p)] & 0xf; 60743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (nibble) 60753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 0: 60773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(unsigned char) pixel; 60793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble++; 60803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 60813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 60823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 1: 60833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q|=(unsigned char) (pixel << 4); 60853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 60863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble=0; 60873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 60883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 60893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6090ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 60913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 60923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 60933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 60943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 60953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 60963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 6: 60973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 8: 60983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 61003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert to 8 bit color-mapped X canvas. 61013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 61023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (resource_info->color_recovery && 6103cbda611068350bf4459f2dda1951f8823702e129cristy resource_info->quantize_info->dither_method != NoDitherMethod) 61043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 61056710d8414f0ed06e4eaf9346366be72e2b4719efcristy XDitherImage(canvas,ximage,exception); 61063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 61073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 61083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) canvas->rows; y++) 61093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6110c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y, 61116710d8414f0ed06e4eaf9346366be72e2b4719efcristy canvas->columns,1,exception); 61124c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 61133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 61143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=0; x < (int) canvas->columns; x++) 61153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 61164c08aed51c5899665ade97263692328eea4af106cristy pixel=pixels[(ssize_t) GetPixelIndex(canvas,p)]; 61173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=(unsigned char) pixel; 6118ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 61193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 61203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 61213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 61223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 61233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 61243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 61253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 61263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 61273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy k; 61283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 61293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register unsigned int 61303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bytes_per_pixel; 61313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 61323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 61333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert to multi-byte color-mapped X canvas. 61343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 61353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bytes_per_pixel=(unsigned int) (ximage->bits_per_pixel >> 3); 61363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) canvas->rows; y++) 61373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6138c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y, 61396710d8414f0ed06e4eaf9346366be72e2b4719efcristy canvas->columns,1,exception); 61404c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 61413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 61423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=0; x < (int) canvas->columns; x++) 61433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 61444c08aed51c5899665ade97263692328eea4af106cristy pixel=pixels[(ssize_t) GetPixelIndex(canvas,p)]; 61453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (k=0; k < (int) bytes_per_pixel; k++) 61463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 614742daae1036998661b8574cbce1fa28d25c1a4f42cristy *q++=(unsigned char) (pixel & 0xff); 61483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel>>=8; 61493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6150ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 61513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 61523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 61533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 61543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 61553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 61563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 61573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 61583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (ximage->bits_per_pixel) 61593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 61603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 2: 61613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 61623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register unsigned int 61633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble; 61643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 61653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 61663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert to contiguous 2 bit continuous-tone X canvas. 61673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 61683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) canvas->rows; y++) 61693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 61703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble=0; 6171c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y, 61726710d8414f0ed06e4eaf9346366be72e2b4719efcristy canvas->columns,1,exception); 61734c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 61743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 61753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=0; x < (int) canvas->columns; x++) 61763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 61774c08aed51c5899665ade97263692328eea4af106cristy pixel=XGammaPixel(canvas,map_info,p); 61783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel&=0xf; 61793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (nibble) 61803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 61813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 0: 61823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 61833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(unsigned char) pixel; 61843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble++; 61853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 61863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 61873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 1: 61883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 61893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q|=(unsigned char) (pixel << 2); 61903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble++; 61913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 61923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 61933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 2: 61943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 61953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q|=(unsigned char) (pixel << 4); 61963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble++; 61973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 61983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 61993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 3: 62003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q|=(unsigned char) (pixel << 6); 62023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 62033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble=0; 62043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 62053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6207ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 62083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 62103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 62123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 4: 62143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register unsigned int 62163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble; 62173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 62183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 62193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert to contiguous 4 bit continuous-tone X canvas. 62203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 62213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) canvas->rows; y++) 62223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6223c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y, 62246710d8414f0ed06e4eaf9346366be72e2b4719efcristy canvas->columns,1,exception); 62254c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 62263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 62273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble=0; 62283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=0; x < (int) canvas->columns; x++) 62293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62304c08aed51c5899665ade97263692328eea4af106cristy pixel=XGammaPixel(canvas,map_info,p); 62313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel&=0xf; 62323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (nibble) 62333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 0: 62353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(unsigned char) pixel; 62373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble++; 62383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 62393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 1: 62413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q|=(unsigned char) (pixel << 4); 62433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 62443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble=0; 62453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 62463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6248ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 62493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 62513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 62533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 6: 62553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 8: 62563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 62583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert to contiguous 8 bit continuous-tone X canvas. 62593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 62603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (resource_info->color_recovery && 6261cbda611068350bf4459f2dda1951f8823702e129cristy resource_info->quantize_info->dither_method != NoDitherMethod) 62623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62636710d8414f0ed06e4eaf9346366be72e2b4719efcristy XDitherImage(canvas,ximage,exception); 62643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 62653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) canvas->rows; y++) 62673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6268c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y, 62696710d8414f0ed06e4eaf9346366be72e2b4719efcristy canvas->columns,1,exception); 62704c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 62713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 62723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=0; x < (int) canvas->columns; x++) 62733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62744c08aed51c5899665ade97263692328eea4af106cristy pixel=XGammaPixel(canvas,map_info,p); 62753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=(unsigned char) pixel; 6276ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 62773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 62793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 62813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 62833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((ximage->bits_per_pixel == 32) && (map_info->red_max == 255) && 62853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (map_info->green_max == 255) && (map_info->blue_max == 255) && 62863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (map_info->red_mult == 65536L) && (map_info->green_mult == 256) && 62873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (map_info->blue_mult == 1)) 62883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 62903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert to 32 bit continuous-tone X canvas. 62913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 62923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) canvas->rows; y++) 62933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6294c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y, 62956710d8414f0ed06e4eaf9346366be72e2b4719efcristy canvas->columns,1,exception); 62964c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 62973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 62983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((red_gamma != 1.0) || (green_gamma != 1.0) || 62993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (blue_gamma != 1.0)) 63003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 63013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 63023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Gamma correct canvas. 63033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 63043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=(int) canvas->columns-1; x >= 0; x--) 63053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6306ccf844f01bcfb63e8c6260bc986878089bb4c85bcristy *q++=ScaleQuantumToChar(XBlueGamma( 63074c08aed51c5899665ade97263692328eea4af106cristy GetPixelBlue(canvas,p))); 6308ccf844f01bcfb63e8c6260bc986878089bb4c85bcristy *q++=ScaleQuantumToChar(XGreenGamma( 63094c08aed51c5899665ade97263692328eea4af106cristy GetPixelGreen(canvas,p))); 6310ccf844f01bcfb63e8c6260bc986878089bb4c85bcristy *q++=ScaleQuantumToChar(XRedGamma( 63114c08aed51c5899665ade97263692328eea4af106cristy GetPixelRed(canvas,p))); 63123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=0; 6313ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 63143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 63153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 63163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 63173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=(int) canvas->columns-1; x >= 0; x--) 63183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 63198bc259be59a7cde483c27474125272a7d65c5744cristy *q++=ScaleQuantumToChar((Quantum) GetPixelBlue(canvas,p)); 63208bc259be59a7cde483c27474125272a7d65c5744cristy *q++=ScaleQuantumToChar((Quantum) GetPixelGreen(canvas,p)); 63218bc259be59a7cde483c27474125272a7d65c5744cristy *q++=ScaleQuantumToChar((Quantum) GetPixelRed(canvas,p)); 63223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=0; 6323ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 63243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 63253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 63263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 63273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 63283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((ximage->bits_per_pixel == 32) && (map_info->red_max == 255) && 63293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (map_info->green_max == 255) && (map_info->blue_max == 255) && 63303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (map_info->red_mult == 1) && (map_info->green_mult == 256) && 63313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (map_info->blue_mult == 65536L)) 63323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 63333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 63343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert to 32 bit continuous-tone X canvas. 63353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 63363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) canvas->rows; y++) 63373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6338c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y, 63396710d8414f0ed06e4eaf9346366be72e2b4719efcristy canvas->columns,1,exception); 63404c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 63413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 63423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((red_gamma != 1.0) || (green_gamma != 1.0) || 63433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (blue_gamma != 1.0)) 63443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 63453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 63463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Gamma correct canvas. 63473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 63483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=(int) canvas->columns-1; x >= 0; x--) 63493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6350ccf844f01bcfb63e8c6260bc986878089bb4c85bcristy *q++=ScaleQuantumToChar(XRedGamma( 63514c08aed51c5899665ade97263692328eea4af106cristy GetPixelRed(canvas,p))); 6352ccf844f01bcfb63e8c6260bc986878089bb4c85bcristy *q++=ScaleQuantumToChar(XGreenGamma( 63534c08aed51c5899665ade97263692328eea4af106cristy GetPixelGreen(canvas,p))); 6354ccf844f01bcfb63e8c6260bc986878089bb4c85bcristy *q++=ScaleQuantumToChar(XBlueGamma( 63554c08aed51c5899665ade97263692328eea4af106cristy GetPixelBlue(canvas,p))); 63563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=0; 6357ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 63583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 63593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 63603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 63613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=(int) canvas->columns-1; x >= 0; x--) 63623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 63638bc259be59a7cde483c27474125272a7d65c5744cristy *q++=ScaleQuantumToChar((Quantum) GetPixelRed(canvas,p)); 63648bc259be59a7cde483c27474125272a7d65c5744cristy *q++=ScaleQuantumToChar((Quantum) GetPixelGreen(canvas,p)); 63658bc259be59a7cde483c27474125272a7d65c5744cristy *q++=ScaleQuantumToChar((Quantum) GetPixelBlue(canvas,p)); 63663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=0; 6367ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 63683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 63693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 63703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 63713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 63723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 63733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 63743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy k; 63753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 63763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register unsigned int 63773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bytes_per_pixel; 63783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 63793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 63803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert to multi-byte continuous-tone X canvas. 63813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 63823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bytes_per_pixel=(unsigned int) (ximage->bits_per_pixel >> 3); 63833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) canvas->rows; y++) 63843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6385c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y, 63866710d8414f0ed06e4eaf9346366be72e2b4719efcristy canvas->columns,1,exception); 63874c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 63883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 6389c57f694b2d04975a0e501613e34368c464708c19cristy for (x=0; x < (int) canvas->columns; x++) 63903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 63914c08aed51c5899665ade97263692328eea4af106cristy pixel=XGammaPixel(canvas,map_info,p); 63923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (k=0; k < (int) bytes_per_pixel; k++) 63933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 639442daae1036998661b8574cbce1fa28d25c1a4f42cristy *q++=(unsigned char) (pixel & 0xff); 63953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel>>=8; 63963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6397ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 63983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 63993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 64003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 64013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 64023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 64033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 64043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 64053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (matte_image != (XImage *) NULL) 64063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 64073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 64083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize matte canvas. 64093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 64103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scanline_pad=(unsigned int) (matte_image->bytes_per_line- 64113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((matte_image->width*matte_image->bits_per_pixel) >> 3)); 64123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=(unsigned char *) matte_image->data; 64133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) canvas->rows; y++) 64143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6415c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,canvas->columns,1, 64166710d8414f0ed06e4eaf9346366be72e2b4719efcristy exception); 64174c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 64183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 64193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bit=0; 64203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte=0; 64213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=(int) canvas->columns-1; x >= 0; x--) 64223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 64233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte>>=1; 64244c08aed51c5899665ade97263692328eea4af106cristy if (GetPixelAlpha(canvas,p) > (QuantumRange/2)) 64253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte|=0x80; 64263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bit++; 64273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (bit == 8) 64283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 64293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=byte; 64303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bit=0; 64313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte=0; 64323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6433ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 64343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 64353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (bit != 0) 64363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=byte >> (8-bit); 64373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 64383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 64393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6440c57f694b2d04975a0e501613e34368c464708c19cristy canvas_view=DestroyCacheView(canvas_view); 64413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (canvas != image) 64423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy canvas=DestroyImage(canvas); 64433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 64443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 64453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 64463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 64473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 64483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 64493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 64503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ X M a k e I m a g e M S B F i r s t % 64513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 64523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 64533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 64543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 64553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 64563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XMakeImageMSBFirst() initializes the pixel data of an X11 Image. The X 64573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% image pixels are copied in most-significant bit and byte first order. The 64583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% server's scanline pad is also respected. Rather than using one or two 64593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% general cases, many special cases are found here to help speed up the image 64603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% conversion. 64613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 64623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XMakeImageMSBFirst method is: 64633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6464e941a75fe8bf344bc5c06a7f74bb5173c87db115cristy% XMakeImageMSBFirst(resource_info,window,image,ximage,matte_image, 6465e941a75fe8bf344bc5c06a7f74bb5173c87db115cristy% ExceptionInfo *exception) 64663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 64673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 64683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 64693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o resource_info: Specifies a pointer to a X11 XResourceInfo structure. 64703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 64713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a XWindowInfo structure. 64723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 64733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image: the image. 64743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 64753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o ximage: Specifies a pointer to a XImage structure; returned from 64763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XCreateImage. 64773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 64783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o matte_image: Specifies a pointer to a XImage structure; returned from 64793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XCreateImage. 64803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6481e941a75fe8bf344bc5c06a7f74bb5173c87db115cristy% o exception: return any errors or warnings in this structure. 6482e941a75fe8bf344bc5c06a7f74bb5173c87db115cristy% 64833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 64843ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic void XMakeImageMSBFirst(const XResourceInfo *resource_info, 6485e941a75fe8bf344bc5c06a7f74bb5173c87db115cristy const XWindowInfo *window,Image *image,XImage *ximage,XImage *matte_image, 6486e941a75fe8bf344bc5c06a7f74bb5173c87db115cristy ExceptionInfo *exception) 64873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 6488c57f694b2d04975a0e501613e34368c464708c19cristy CacheView 6489c57f694b2d04975a0e501613e34368c464708c19cristy *canvas_view; 6490c57f694b2d04975a0e501613e34368c464708c19cristy 64913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 64923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *canvas; 64933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 64943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 64953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y; 64963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 64973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 64983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 64993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 65004c08aed51c5899665ade97263692328eea4af106cristy register const Quantum 65013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 65023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 65033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register unsigned char 65043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 65053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 65063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned char 65073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bit, 65083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte; 65093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 65103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 65113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scanline_pad; 65123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6513f2faecf9facdbbb14fcba373365f9f691a9658e0cristy unsigned long 65143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel, 65153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *pixels; 65163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 65173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XStandardColormap 65183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *map_info; 65193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 65203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(resource_info != (XResourceInfo *) NULL); 65213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(window != (XWindowInfo *) NULL); 65223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image != (Image *) NULL); 65233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image->debug != MagickFalse) 65243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); 65253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy canvas=image; 652654666e85e8e3b0eca47d318178a186ebb2901a73cristy if ((window->immutable != MagickFalse) && 65278a46d827a124555f0c48fb2368ec1bba8e079ab6cristy (image->storage_class == DirectClass) && (image->alpha_trait == BlendPixelTrait)) 65283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 65293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 65303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size[MaxTextExtent]; 65313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 65323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 65333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *pattern; 65343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 65353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ImageInfo 65363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *image_info; 65373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 65383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image_info=AcquireImageInfo(); 65393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(image_info->filename, 65403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->image_info->texture != (char *) NULL ? 65413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->image_info->texture : "pattern:checkerboard", 65423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MaxTextExtent); 6543b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(size,MaxTextExtent,"%.20gx%.20g",(double) 6544e8c25f9b4c9fb72cad6db08eeda58c7c5784014ecristy image->columns,(double) image->rows); 65453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image_info->size=ConstantString(size); 65466710d8414f0ed06e4eaf9346366be72e2b4719efcristy pattern=ReadImage(image_info,exception); 65473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image_info=DestroyImageInfo(image_info); 65483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (pattern != (Image *) NULL) 65493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 65506710d8414f0ed06e4eaf9346366be72e2b4719efcristy canvas=CloneImage(image,0,0,MagickTrue,exception); 65513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (canvas != (Image *) NULL) 6552feb3e9695150978a5d2372d3fe2f60466a7c8066cristy (void) CompositeImage(canvas,pattern,DstOverCompositeOp,MagickFalse, 6553feb3e9695150978a5d2372d3fe2f60466a7c8066cristy 0,0,exception); 65543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pattern=DestroyImage(pattern); 65553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 65563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 65574c08aed51c5899665ade97263692328eea4af106cristy scanline_pad=(unsigned int) (ximage->bytes_per_line-((ximage->width* 65584c08aed51c5899665ade97263692328eea4af106cristy ximage->bits_per_pixel) >> 3)); 65593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_info=window->map_info; 65603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixels=window->pixel_info->pixels; 65613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=(unsigned char *) ximage->data; 65623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=0; 656346ff2676b1044ea4101ac7a59b83289cd8f6cfdacristy canvas_view=AcquireVirtualCacheView(canvas,exception); 65643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (ximage->format == XYBitmap) 65653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 65663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register unsigned short 65673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy polarity; 65683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 65693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned char 65703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy background, 65713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy foreground; 65723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 65733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 65743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert canvas to big-endian bitmap. 65753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 65763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy background=(unsigned char) 65773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (XPixelIntensity(&window->pixel_info->foreground_color) < 65783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XPixelIntensity(&window->pixel_info->background_color) ? 0x01 : 0x00); 65793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy foreground=(unsigned char) 65803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (XPixelIntensity(&window->pixel_info->background_color) < 65813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XPixelIntensity(&window->pixel_info->foreground_color) ? 0x01 : 0x00); 6582101ab708b0574518ac5715da4d3915400e9df79acristy polarity=(unsigned short) ((GetPixelInfoIntensity( 65836e963d8cbd0aebba1073d7f4b61e3d17177d6fedcristy &canvas->colormap[0])) < (QuantumRange/2) ? 1 : 0); 65843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (canvas->colors == 2) 6585101ab708b0574518ac5715da4d3915400e9df79acristy polarity=GetPixelInfoIntensity(&canvas->colormap[0]) < 6586101ab708b0574518ac5715da4d3915400e9df79acristy GetPixelInfoIntensity(&canvas->colormap[1]); 65873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) canvas->rows; y++) 65883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6589c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,canvas->columns,1, 65906710d8414f0ed06e4eaf9346366be72e2b4719efcristy exception); 65914c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 65923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 65933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bit=0; 65943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte=0; 65953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=(int) canvas->columns-1; x >= 0; x--) 65963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 65973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte<<=1; 65984c08aed51c5899665ade97263692328eea4af106cristy if (GetPixelIndex(canvas,p) == (Quantum) polarity) 65993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte|=foreground; 66003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 66013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte|=background; 66023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bit++; 66033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (bit == 8) 66043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 66053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=byte; 66063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bit=0; 66073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte=0; 66083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6609ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 66103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 66113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (bit != 0) 66123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=byte << (8-bit); 66133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 66143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 66153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 66163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 66173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->pixel_info->colors != 0) 66183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (ximage->bits_per_pixel) 66193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 66203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 2: 66213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 66223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register unsigned int 66233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble; 66243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 66253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 66263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert to 2 bit color-mapped X canvas. 66273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 66283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) canvas->rows; y++) 66293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6630c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y, 66316710d8414f0ed06e4eaf9346366be72e2b4719efcristy canvas->columns,1,exception); 66324c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 66333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 66343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble=0; 66353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=0; x < (int) canvas->columns; x++) 66363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 66374c08aed51c5899665ade97263692328eea4af106cristy pixel=pixels[(ssize_t) 66384c08aed51c5899665ade97263692328eea4af106cristy GetPixelIndex(canvas,p)] & 0xf; 66393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (nibble) 66403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 66413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 0: 66423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 66433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(unsigned char) (pixel << 6); 66443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble++; 66453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 66463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 66473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 1: 66483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 66493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q|=(unsigned char) (pixel << 4); 66503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble++; 66513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 66523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 66533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 2: 66543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 66553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q|=(unsigned char) (pixel << 2); 66563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble++; 66573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 66583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 66593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 3: 66603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 66613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q|=(unsigned char) pixel; 66623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 66633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble=0; 66643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 66653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 66663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6667ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 66683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 66693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 66703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 66713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 66723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 66733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 4: 66743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 66753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register unsigned int 66763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble; 66773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 66783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 66793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert to 4 bit color-mapped X canvas. 66803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 66813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) canvas->rows; y++) 66823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6683c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y, 66846710d8414f0ed06e4eaf9346366be72e2b4719efcristy canvas->columns,1,exception); 66854c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 66863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 66873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble=0; 66883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=0; x < (int) canvas->columns; x++) 66893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 66904c08aed51c5899665ade97263692328eea4af106cristy pixel=pixels[(ssize_t) 66914c08aed51c5899665ade97263692328eea4af106cristy GetPixelIndex(canvas,p)] & 0xf; 66923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (nibble) 66933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 66943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 0: 66953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 66963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(unsigned char) (pixel << 4); 66973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble++; 66983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 66993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 67003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 1: 67013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 67023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q|=(unsigned char) pixel; 67033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 67043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble=0; 67053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 67063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 67073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6708ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 67093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 67103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 67113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 67123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 67133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 67143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 6: 67153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 8: 67163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 67173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 67183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert to 8 bit color-mapped X canvas. 67193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 67203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (resource_info->color_recovery && 6721cbda611068350bf4459f2dda1951f8823702e129cristy resource_info->quantize_info->dither_method != NoDitherMethod) 67223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 67236710d8414f0ed06e4eaf9346366be72e2b4719efcristy XDitherImage(canvas,ximage,exception); 67243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 67253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 67263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) canvas->rows; y++) 67273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6728c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y, 67296710d8414f0ed06e4eaf9346366be72e2b4719efcristy canvas->columns,1,exception); 67304c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 67313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 67323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=0; x < (int) canvas->columns; x++) 67333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 67346710d8414f0ed06e4eaf9346366be72e2b4719efcristy pixel=pixels[(ssize_t) GetPixelIndex(canvas,p)]; 67353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=(unsigned char) pixel; 6736ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 67373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 67383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 67393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 67403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 67413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 67423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 67433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 67443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 67453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy k; 67463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 67473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register unsigned int 67483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bytes_per_pixel; 67493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 67503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned char 6751bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy channel[sizeof(size_t)]; 67523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 67533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 67543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert to 8 bit color-mapped X canvas. 67553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 67563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bytes_per_pixel=(unsigned int) (ximage->bits_per_pixel >> 3); 67573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) canvas->rows; y++) 67583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6759c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y, 67606710d8414f0ed06e4eaf9346366be72e2b4719efcristy canvas->columns,1,exception); 67614c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 67623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 67633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=0; x < (int) canvas->columns; x++) 67643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 67654c08aed51c5899665ade97263692328eea4af106cristy pixel=pixels[(ssize_t) 67664c08aed51c5899665ade97263692328eea4af106cristy GetPixelIndex(canvas,p)]; 67673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (k=(int) bytes_per_pixel-1; k >= 0; k--) 67683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 67693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy channel[k]=(unsigned char) pixel; 67703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel>>=8; 67713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 67723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (k=0; k < (int) bytes_per_pixel; k++) 67733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=channel[k]; 6774ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 67753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 67763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 67773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 67783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 67793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 67803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 67813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 67823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (ximage->bits_per_pixel) 67833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 67843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 2: 67853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 67863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register unsigned int 67873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble; 67883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 67893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 67903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert to 4 bit continuous-tone X canvas. 67913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 67923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) canvas->rows; y++) 67933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6794c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y, 67956710d8414f0ed06e4eaf9346366be72e2b4719efcristy canvas->columns,1,exception); 67964c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 67973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 67983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble=0; 67993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=(int) canvas->columns-1; x >= 0; x--) 68003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 68014c08aed51c5899665ade97263692328eea4af106cristy pixel=XGammaPixel(canvas,map_info,p); 68023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel&=0xf; 68033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (nibble) 68043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 68053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 0: 68063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 68073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(unsigned char) (pixel << 6); 68083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble++; 68093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 68103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 68113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 1: 68123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 68133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q|=(unsigned char) (pixel << 4); 68143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble++; 68153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 68163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 68173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 2: 68183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 68193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q|=(unsigned char) (pixel << 2); 68203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble++; 68213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 68223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 68233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 3: 68243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 68253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q|=(unsigned char) pixel; 68263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 68273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble=0; 68283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 68293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 68303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6831ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 68323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 68333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 68343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 68353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 68363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 68373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 4: 68383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 68393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register unsigned int 68403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble; 68413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 68423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 68433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert to 4 bit continuous-tone X canvas. 68443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 68453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) canvas->rows; y++) 68463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6847c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y, 68486710d8414f0ed06e4eaf9346366be72e2b4719efcristy canvas->columns,1,exception); 68494c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 68503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 68513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble=0; 68523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=(int) canvas->columns-1; x >= 0; x--) 68533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 68544c08aed51c5899665ade97263692328eea4af106cristy pixel=XGammaPixel(canvas,map_info,p); 68553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel&=0xf; 68563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (nibble) 68573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 68583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 0: 68593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 68603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(unsigned char) (pixel << 4); 68613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble++; 68623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 68633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 68643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 1: 68653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 68663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q|=(unsigned char) pixel; 68673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 68683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nibble=0; 68693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 68703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 68713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6872ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 68733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 68743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 68753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 68763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 68773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 68783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 6: 68793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 8: 68803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 68813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 68823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert to 8 bit continuous-tone X canvas. 68833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 68843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (resource_info->color_recovery && 6885cbda611068350bf4459f2dda1951f8823702e129cristy resource_info->quantize_info->dither_method != NoDitherMethod) 68863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 68876710d8414f0ed06e4eaf9346366be72e2b4719efcristy XDitherImage(canvas,ximage,exception); 68883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 68893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 68903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) canvas->rows; y++) 68913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6892c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y, 68936710d8414f0ed06e4eaf9346366be72e2b4719efcristy canvas->columns,1,exception); 68944c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 68953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 68963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=(int) canvas->columns-1; x >= 0; x--) 68973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 68984c08aed51c5899665ade97263692328eea4af106cristy pixel=XGammaPixel(canvas,map_info,p); 68993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=(unsigned char) pixel; 6900ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 69013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 69023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 69033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 69043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 69053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 69063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 69073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 69083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((ximage->bits_per_pixel == 32) && (map_info->red_max == 255) && 69093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (map_info->green_max == 255) && (map_info->blue_max == 255) && 69103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (map_info->red_mult == 65536L) && (map_info->green_mult == 256) && 69113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (map_info->blue_mult == 1)) 69123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 69133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 69143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert to 32 bit continuous-tone X canvas. 69153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 69163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) canvas->rows; y++) 69173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6918c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y, 69196710d8414f0ed06e4eaf9346366be72e2b4719efcristy canvas->columns,1,exception); 69204c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 69213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 69223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((red_gamma != 1.0) || (green_gamma != 1.0) || 69233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (blue_gamma != 1.0)) 69243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 69253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 69263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Gamma correct canvas. 69273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 69283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=(int) canvas->columns-1; x >= 0; x--) 69293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 69303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=0; 6931ccf844f01bcfb63e8c6260bc986878089bb4c85bcristy *q++=ScaleQuantumToChar(XRedGamma( 69324c08aed51c5899665ade97263692328eea4af106cristy GetPixelRed(canvas,p))); 6933ccf844f01bcfb63e8c6260bc986878089bb4c85bcristy *q++=ScaleQuantumToChar(XGreenGamma( 69344c08aed51c5899665ade97263692328eea4af106cristy GetPixelGreen(canvas,p))); 6935ccf844f01bcfb63e8c6260bc986878089bb4c85bcristy *q++=ScaleQuantumToChar(XBlueGamma( 69364c08aed51c5899665ade97263692328eea4af106cristy GetPixelBlue(canvas,p))); 6937ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 69383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 69393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 69403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 69413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=(int) canvas->columns-1; x >= 0; x--) 69423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 69433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=0; 69448bc259be59a7cde483c27474125272a7d65c5744cristy *q++=ScaleQuantumToChar((Quantum) GetPixelRed(canvas,p)); 69458bc259be59a7cde483c27474125272a7d65c5744cristy *q++=ScaleQuantumToChar((Quantum) GetPixelGreen(canvas,p)); 69468bc259be59a7cde483c27474125272a7d65c5744cristy *q++=ScaleQuantumToChar((Quantum) GetPixelBlue(canvas,p)); 6947ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 69483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 69493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 69503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 69513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 69523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((ximage->bits_per_pixel == 32) && (map_info->red_max == 255) && 69533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (map_info->green_max == 255) && (map_info->blue_max == 255) && 69543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (map_info->red_mult == 1) && (map_info->green_mult == 256) && 69553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (map_info->blue_mult == 65536L)) 69563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 69573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 69583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert to 32 bit continuous-tone X canvas. 69593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 69603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) canvas->rows; y++) 69613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6962c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y, 69636710d8414f0ed06e4eaf9346366be72e2b4719efcristy canvas->columns,1,exception); 69644c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 69653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 69663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((red_gamma != 1.0) || (green_gamma != 1.0) || 69673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (blue_gamma != 1.0)) 69683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 69693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 69703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Gamma correct canvas. 69713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 69723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=(int) canvas->columns-1; x >= 0; x--) 69733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 69743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=0; 6975ccf844f01bcfb63e8c6260bc986878089bb4c85bcristy *q++=ScaleQuantumToChar(XBlueGamma( 69764c08aed51c5899665ade97263692328eea4af106cristy GetPixelBlue(canvas,p))); 6977ccf844f01bcfb63e8c6260bc986878089bb4c85bcristy *q++=ScaleQuantumToChar(XGreenGamma( 69784c08aed51c5899665ade97263692328eea4af106cristy GetPixelGreen(canvas,p))); 6979ccf844f01bcfb63e8c6260bc986878089bb4c85bcristy *q++=ScaleQuantumToChar(XRedGamma( 69804c08aed51c5899665ade97263692328eea4af106cristy GetPixelRed(canvas,p))); 6981ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 69823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 69833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 69843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 69853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=(int) canvas->columns-1; x >= 0; x--) 69863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 69873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=0; 69888bc259be59a7cde483c27474125272a7d65c5744cristy *q++=ScaleQuantumToChar((Quantum) GetPixelBlue(canvas,p)); 69898bc259be59a7cde483c27474125272a7d65c5744cristy *q++=ScaleQuantumToChar((Quantum) GetPixelGreen(canvas,p)); 69908bc259be59a7cde483c27474125272a7d65c5744cristy *q++=ScaleQuantumToChar((Quantum) GetPixelRed(canvas,p)); 6991ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 69923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 69933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 69943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 69953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 69963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 69973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 69983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy k; 69993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 70003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register unsigned int 70013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bytes_per_pixel; 70023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 70033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned char 7004bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy channel[sizeof(size_t)]; 70053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 70063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 70073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert to multi-byte continuous-tone X canvas. 70083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 70093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bytes_per_pixel=(unsigned int) (ximage->bits_per_pixel >> 3); 70103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) canvas->rows; y++) 70113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7012c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y, 70136710d8414f0ed06e4eaf9346366be72e2b4719efcristy canvas->columns,1,exception); 70144c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 70153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 70163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=(int) canvas->columns-1; x >= 0; x--) 70173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 70184c08aed51c5899665ade97263692328eea4af106cristy pixel=XGammaPixel(canvas,map_info,p); 70193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (k=(int) bytes_per_pixel-1; k >= 0; k--) 70203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 70213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy channel[k]=(unsigned char) pixel; 70223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel>>=8; 70233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 70243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (k=0; k < (int) bytes_per_pixel; k++) 70253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=channel[k]; 7026ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 70273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 70283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 70293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 70303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 70313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 70323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 70333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 70343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (matte_image != (XImage *) NULL) 70353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 70363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 70373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize matte canvas. 70383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 70393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scanline_pad=(unsigned int) (matte_image->bytes_per_line- 70403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((matte_image->width*matte_image->bits_per_pixel) >> 3)); 70413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=(unsigned char *) matte_image->data; 70423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) canvas->rows; y++) 70433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7044c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewVirtualPixels(canvas_view,0,(ssize_t) y,canvas->columns,1, 70456710d8414f0ed06e4eaf9346366be72e2b4719efcristy exception); 70464c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 70473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 70483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bit=0; 70493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte=0; 70503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=(int) canvas->columns-1; x >= 0; x--) 70513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 70523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte<<=1; 70534c08aed51c5899665ade97263692328eea4af106cristy if (GetPixelAlpha(canvas,p) > (QuantumRange/2)) 70543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte|=0x01; 70553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bit++; 70563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (bit == 8) 70573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 70583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=byte; 70593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bit=0; 70603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte=0; 70613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7062ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(canvas); 70633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 70643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (bit != 0) 70653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=byte << (8-bit); 70663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 70673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 70683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7069c57f694b2d04975a0e501613e34368c464708c19cristy canvas_view=DestroyCacheView(canvas_view); 70703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (canvas != image) 70713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy canvas=DestroyImage(canvas); 70723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 70733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 70743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 70753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 70763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 70773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 70783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 70793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X M a k e M a g n i f y I m a g e % 70803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 70813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 70823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 70833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 70843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 70853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XMakeMagnifyImage() magnifies a region of an X image and displays it. 70863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 70873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XMakeMagnifyImage method is: 70883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 70896710d8414f0ed06e4eaf9346366be72e2b4719efcristy% void XMakeMagnifyImage(Display *display,XWindows *windows, 70906710d8414f0ed06e4eaf9346366be72e2b4719efcristy% ExceptionInfo *exception) 70913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 70923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 70933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 70943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 70953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 70963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 70973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o windows: Specifies a pointer to a XWindows structure. 70983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 70996710d8414f0ed06e4eaf9346366be72e2b4719efcristy% o exception: return any errors or warnings in this structure. 71006710d8414f0ed06e4eaf9346366be72e2b4719efcristy% 71013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 71026710d8414f0ed06e4eaf9346366be72e2b4719efcristyMagickPrivate void XMakeMagnifyImage(Display *display,XWindows *windows, 71036710d8414f0ed06e4eaf9346366be72e2b4719efcristy ExceptionInfo *exception) 71043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 71053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 71063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy tuple[MaxTextExtent]; 71073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 71083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 71093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y; 71103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 71114c08aed51c5899665ade97263692328eea4af106cristy PixelInfo 71123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel; 71133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 71143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 71153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 71163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7117bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 71183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 71193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 71203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register unsigned char 71213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p, 71223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 71233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 71249d314ff2c17a77996c05413c2013880387e50f0ecristy ssize_t 71259d314ff2c17a77996c05413c2013880387e50f0ecristy n; 71269d314ff2c17a77996c05413c2013880387e50f0ecristy 71273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static unsigned int 71283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy previous_magnify = 0; 71293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 71303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static XWindowInfo 71313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magnify_window; 71323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 71333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 71343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height, 71353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy j, 71363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy k, 71373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy l, 71383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magnify, 71393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scanline_pad, 71403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width; 71413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 71423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XImage 71433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *ximage; 71443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 71453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 71463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Check boundary conditions. 71473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 71483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 71493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 71503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(windows != (XWindows *) NULL); 71513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magnify=1; 7152bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (n=1; n < (ssize_t) windows->magnify.data; n++) 71533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magnify<<=1; 71543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((magnify*windows->image.ximage->width) < windows->magnify.width) 71553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magnify<<=1; 71563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((magnify*windows->image.ximage->height) < windows->magnify.height) 71573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magnify<<=1; 71583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (magnify > windows->magnify.width) 71593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magnify>>=1; 71603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (magnify > windows->magnify.height) 71613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magnify>>=1; 71623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (magnify != previous_magnify) 71633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 71643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 71653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 71663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 71673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XTextProperty 71683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_name; 71693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 71703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 71713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy New magnify factor: update magnify window name. 71723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 71733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i=0; 71743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((1 << i) <= (int) magnify) 71753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i++; 7176b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(windows->magnify.name,MaxTextExtent, 7177e8c25f9b4c9fb72cad6db08eeda58c7c5784014ecristy "Magnify %.20gX",(double) i); 71783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XStringListToTextProperty(&windows->magnify.name,1,&window_name); 71793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != False) 71803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 71813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetWMName(display,windows->magnify.id,&window_name); 71823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetWMIconName(display,windows->magnify.id,&window_name); 71833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) window_name.value); 71843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 71853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 71863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy previous_magnify=magnify; 71873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage=windows->image.ximage; 71883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=(unsigned int) windows->magnify.ximage->width; 71893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) windows->magnify.ximage->height; 71903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((windows->magnify.x < 0) || 71913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (windows->magnify.x >= windows->image.ximage->width)) 71923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->magnify.x=windows->image.ximage->width >> 1; 71933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=windows->magnify.x-((width/magnify) >> 1); 71943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (x < 0) 71953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=0; 71963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 71973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (x > (int) (ximage->width-(width/magnify))) 71983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=ximage->width-width/magnify; 71993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((windows->magnify.y < 0) || 72003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (windows->magnify.y >= windows->image.ximage->height)) 72013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->magnify.y=windows->image.ximage->height >> 1; 72023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=windows->magnify.y-((height/magnify) >> 1); 72033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (y < 0) 72043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=0; 72053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 72063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (y > (int) (ximage->height-(height/magnify))) 72073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=ximage->height-height/magnify; 72083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=(unsigned char *) windows->magnify.ximage->data; 72093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scanline_pad=(unsigned int) (windows->magnify.ximage->bytes_per_line- 72103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((width*windows->magnify.ximage->bits_per_pixel) >> 3)); 72113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (ximage->bits_per_pixel < 8) 72123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 72133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register unsigned char 72143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy background, 72153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte, 72163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy foreground, 72173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p_bit, 72183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q_bit; 72193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 72203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register unsigned int 72213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy plane; 72223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 72233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XPixelInfo 72243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *pixel_info; 72253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 72263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel_info=windows->magnify.pixel_info; 72273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (ximage->bitmap_bit_order) 72283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 72293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case LSBFirst: 72303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 72313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 72323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Magnify little-endian bitmap. 72333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 72343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy background=0x00; 72353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy foreground=0x80; 72363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (ximage->format == XYBitmap) 72373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 72383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy background=(unsigned char) 72393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (XPixelIntensity(&pixel_info->foreground_color) < 72403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XPixelIntensity(&pixel_info->background_color) ? 0x80 : 0x00); 72413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy foreground=(unsigned char) 72423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (XPixelIntensity(&pixel_info->background_color) < 72433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XPixelIntensity(&pixel_info->foreground_color) ? 0x80 : 0x00); 72443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->magnify.depth > 1) 72453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Swap(background,foreground); 72463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7247bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) height; i+=magnify) 72483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 72493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 72503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Propogate pixel magnify rows. 72513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 72523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (j=0; j < magnify; j++) 72533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 72543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=(unsigned char *) ximage->data+y*ximage->bytes_per_line+ 72553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((x*ximage->bits_per_pixel) >> 3); 72563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p_bit=(unsigned char) (x*ximage->bits_per_pixel) & 0x07; 72573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q_bit=0; 72583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte=0; 72593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (k=0; k < width; k+=magnify) 72603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 72613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 72623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Propogate pixel magnify columns. 72633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 72643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (l=0; l < magnify; l++) 72653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 72663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 72673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Propogate each bit plane. 72683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 72693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (plane=0; (int) plane < ximage->bits_per_pixel; plane++) 72703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 72713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte>>=1; 72723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*p & (0x01 << (p_bit+plane))) 72733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte|=foreground; 72743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 72753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte|=background; 72763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q_bit++; 72773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (q_bit == 8) 72783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 72793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=byte; 72803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q_bit=0; 72813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte=0; 72823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 72833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 72843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 72853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p_bit+=ximage->bits_per_pixel; 72863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (p_bit == 8) 72873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 72883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 72893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p_bit=0; 72903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 72913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (q_bit != 0) 72923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=byte >> (8-q_bit); 72933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 72943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 72953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 72963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y++; 72973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 72983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 72993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 73003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case MSBFirst: 73013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 73023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 73043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Magnify big-endian bitmap. 73053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 73063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy background=0x00; 73073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy foreground=0x01; 73083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (ximage->format == XYBitmap) 73093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy background=(unsigned char) 73113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (XPixelIntensity(&pixel_info->foreground_color) < 73123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XPixelIntensity(&pixel_info->background_color) ? 0x01 : 0x00); 73133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy foreground=(unsigned char) 73143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (XPixelIntensity(&pixel_info->background_color) < 73153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XPixelIntensity(&pixel_info->foreground_color) ? 0x01 : 0x00); 73163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->magnify.depth > 1) 73173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Swap(background,foreground); 73183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7319bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) height; i+=magnify) 73203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 73223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Propogate pixel magnify rows. 73233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 73243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (j=0; j < magnify; j++) 73253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=(unsigned char *) ximage->data+y*ximage->bytes_per_line+ 73273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((x*ximage->bits_per_pixel) >> 3); 73283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p_bit=(unsigned char) (x*ximage->bits_per_pixel) & 0x07; 73293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q_bit=0; 73303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte=0; 73313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (k=0; k < width; k+=magnify) 73323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 73343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Propogate pixel magnify columns. 73353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 73363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (l=0; l < magnify; l++) 73373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 73393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Propogate each bit plane. 73403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 73413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (plane=0; (int) plane < ximage->bits_per_pixel; plane++) 73423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte<<=1; 73443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*p & (0x80 >> (p_bit+plane))) 73453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte|=foreground; 73463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 73473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte|=background; 73483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q_bit++; 73493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (q_bit == 8) 73503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=byte; 73523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q_bit=0; 73533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy byte=0; 73543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 73553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 73563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 73573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p_bit+=ximage->bits_per_pixel; 73583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (p_bit == 8) 73593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 73613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p_bit=0; 73623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 73633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (q_bit != 0) 73643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=byte << (8-q_bit); 73653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 73663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 73673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 73683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y++; 73693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 73703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 73713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 73723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 73733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 73743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 73753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (ximage->bits_per_pixel) 73763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 6: 73783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case 8: 73793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 73813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Magnify 8 bit X image. 73823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 7383bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) height; i+=magnify) 73843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 73863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Propogate pixel magnify rows. 73873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 73883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (j=0; j < magnify; j++) 73893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=(unsigned char *) ximage->data+y*ximage->bytes_per_line+ 73913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((x*ximage->bits_per_pixel) >> 3); 73923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (k=0; k < width; k+=magnify) 73933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 73953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Propogate pixel magnify columns. 73963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 73973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (l=0; l < magnify; l++) 73983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=(*p); 73993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 74003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 74013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 74023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 74033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y++; 74043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 74053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 74063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 74073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 74083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 74093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register unsigned int 74103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bytes_per_pixel, 74113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy m; 74123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 74133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 74143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Magnify multi-byte X image. 74153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 74163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bytes_per_pixel=(unsigned int) ximage->bits_per_pixel >> 3; 7417bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) height; i+=magnify) 74183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 74193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 74203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Propogate pixel magnify rows. 74213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 74223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (j=0; j < magnify; j++) 74233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 74243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=(unsigned char *) ximage->data+y*ximage->bytes_per_line+ 74253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((x*ximage->bits_per_pixel) >> 3); 74263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (k=0; k < width; k+=magnify) 74273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 74283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 74293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Propogate pixel magnify columns. 74303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 74313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (l=0; l < magnify; l++) 74323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (m=0; m < bytes_per_pixel; m++) 74333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q++=(*(p+m)); 74343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p+=bytes_per_pixel; 74353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 74363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q+=scanline_pad; 74373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 74383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y++; 74393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 74403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 74413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 74423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 74433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 74443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Copy X image to magnify pixmap. 74453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 74463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=windows->magnify.x-((width/magnify) >> 1); 74473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (x < 0) 74483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=(int) ((width >> 1)-windows->magnify.x*magnify); 74493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 74503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (x > (int) (ximage->width-(width/magnify))) 74513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=(int) ((ximage->width-windows->magnify.x)*magnify-(width >> 1)); 74523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 74533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=0; 74543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=windows->magnify.y-((height/magnify) >> 1); 74553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (y < 0) 74563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=(int) ((height >> 1)-windows->magnify.y*magnify); 74573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 74583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (y > (int) (ximage->height-(height/magnify))) 74593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=(int) ((ximage->height-windows->magnify.y)*magnify-(height >> 1)); 74603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 74613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=0; 74623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((x != 0) || (y != 0)) 74633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillRectangle(display,windows->magnify.pixmap, 74643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->magnify.annotate_context,0,0,width,height); 74653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XPutImage(display,windows->magnify.pixmap, 74663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->magnify.annotate_context,windows->magnify.ximage,0,0,x,y,width-x, 74673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height-y); 74683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((magnify > 1) && ((magnify <= (width >> 1)) && 74693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (magnify <= (height >> 1)))) 74703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 74713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RectangleInfo 74723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy highlight_info; 74733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 74743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 74753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Highlight center pixel. 74763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 7477bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy highlight_info.x=(ssize_t) windows->magnify.width >> 1; 7478bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy highlight_info.y=(ssize_t) windows->magnify.height >> 1; 74793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy highlight_info.width=magnify; 74803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy highlight_info.height=magnify; 74813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawRectangle(display,windows->magnify.pixmap, 74823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->magnify.highlight_context,(int) highlight_info.x, 74833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) highlight_info.y,(unsigned int) highlight_info.width-1, 74843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) highlight_info.height-1); 74853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (magnify > 2) 74863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawRectangle(display,windows->magnify.pixmap, 74873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->magnify.annotate_context,(int) highlight_info.x+1, 74883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) highlight_info.y+1,(unsigned int) highlight_info.width-3, 74893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) highlight_info.height-3); 74903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 74913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 74923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Show center pixel color. 74933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 74943aa9375ebfc21a5356d6b1754bcd1b162ad666c4cristy (void) GetOneVirtualPixelInfo(windows->image.image,TileVirtualPixelMethod, 74955201002e1ba0118594060d26142b48bdfb1320a2cristy (ssize_t) windows->magnify.x,(ssize_t) windows->magnify.y,&pixel,exception); 7496b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(tuple,MaxTextExtent,"%d,%d: ", 74973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->magnify.x,windows->magnify.y); 74983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ConcatenateMagickString(tuple,"(",MaxTextExtent); 7499ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy ConcatenateColorComponent(&pixel,RedPixelChannel,X11Compliance,tuple); 75003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ConcatenateMagickString(tuple,",",MaxTextExtent); 7501ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy ConcatenateColorComponent(&pixel,GreenPixelChannel,X11Compliance,tuple); 75023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ConcatenateMagickString(tuple,",",MaxTextExtent); 7503ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy ConcatenateColorComponent(&pixel,BluePixelChannel,X11Compliance,tuple); 75043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (pixel.colorspace == CMYKColorspace) 75053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 75063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ConcatenateMagickString(tuple,",",MaxTextExtent); 7507ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy ConcatenateColorComponent(&pixel,BlackPixelChannel,X11Compliance,tuple); 75083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 75098a46d827a124555f0c48fb2368ec1bba8e079ab6cristy if (pixel.alpha_trait == BlendPixelTrait) 75103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 75113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ConcatenateMagickString(tuple,",",MaxTextExtent); 7512ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy ConcatenateColorComponent(&pixel,AlphaPixelChannel,X11Compliance,tuple); 75133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 75143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ConcatenateMagickString(tuple,")",MaxTextExtent); 75153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) windows->magnify.font_info->ascent+ 75163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->magnify.font_info->descent; 75173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=windows->magnify.font_info->max_bounds.width >> 1; 75183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=windows->magnify.font_info->ascent+(height >> 2); 75193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawImageString(display,windows->magnify.pixmap, 75203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->magnify.annotate_context,x,y,tuple,(int) strlen(tuple)); 75213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy GetColorTuple(&pixel,MagickTrue,tuple); 75223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y+=height; 75233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawImageString(display,windows->magnify.pixmap, 75243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->magnify.annotate_context,x,y,tuple,(int) strlen(tuple)); 7525269c9413034627692b2a7d0a352f9dee4e8eada8cristy (void) QueryColorname(windows->image.image,&pixel,SVGCompliance,tuple, 75266710d8414f0ed06e4eaf9346366be72e2b4719efcristy exception); 75273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y+=height; 75283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawImageString(display,windows->magnify.pixmap, 75293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->magnify.annotate_context,x,y,tuple,(int) strlen(tuple)); 75303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 75313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Refresh magnify window. 75323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 75333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magnify_window=windows->magnify; 75343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magnify_window.x=0; 75353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy magnify_window.y=0; 75363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XRefreshWindow(display,&magnify_window,(XEvent *) NULL); 75373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 75383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 75393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 75403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 75413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 75423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 75433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 75443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X M a k e P i x m a p % 75453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 75463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 75473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 75483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 75493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 75503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XMakePixmap() creates an X11 pixmap. 75513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 75523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XMakePixmap method is: 75533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 75543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XMakeStandardColormap(Display *display,XVisualInfo *visual_info, 75553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XResourceInfo *resource_info,Image *image,XStandardColormap *map_info, 75563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XPixelInfo *pixel) 75573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 75583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 75593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 75603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o resource_info: Specifies a pointer to a X11 XResourceInfo structure. 75613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 75623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 75633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 75643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 75653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a XWindowInfo structure. 75663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 75673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 75683ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic MagickBooleanType XMakePixmap(Display *display, 75693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const XResourceInfo *resource_info,XWindowInfo *window) 75703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 75713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 75723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height, 75733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width; 75743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 75753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 75763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 75773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(resource_info != (XResourceInfo *) NULL); 75783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(window != (XWindowInfo *) NULL); 75793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->pixmap != (Pixmap) NULL) 75803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 75813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 75823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Destroy previous X pixmap. 75833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 75843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreePixmap(display,window->pixmap); 75853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->pixmap=(Pixmap) NULL; 75863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 75873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->use_pixmap == MagickFalse) 75883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 75893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->ximage == (XImage *) NULL) 75903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 75913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 75923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Display busy cursor. 75933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 75943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckDefineCursor(display,window->id,window->busy_cursor); 75953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFlush(display); 75963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 75973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Create pixmap. 75983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 75993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=(unsigned int) window->ximage->width; 76003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) window->ximage->height; 76013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->pixmap=XCreatePixmap(display,window->id,width,height,window->depth); 76023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->pixmap == (Pixmap) NULL) 76033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 76043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 76053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Unable to allocate pixmap. 76063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 76073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckDefineCursor(display,window->id,window->cursor); 76083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 76093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 76103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 76113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Copy X image to pixmap. 76123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 76133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_SHARED_MEMORY) 76143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->shared_memory) 76153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XShmPutImage(display,window->pixmap,window->annotate_context, 76163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->ximage,0,0,0,0,width,height,MagickTrue); 76173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 76183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->shared_memory == MagickFalse) 76193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XPutImage(display,window->pixmap,window->annotate_context, 76203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->ximage,0,0,0,0,width,height); 76213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (IsEventLogging()) 76223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 76233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(),"Pixmap:"); 76243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule()," width, height: %ux%u", 76253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width,height); 76263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 76273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 76283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Restore cursor. 76293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 76303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckDefineCursor(display,window->id,window->cursor); 76313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 76323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 76333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 76343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 76353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 76363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 76373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 76383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 76393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X M a k e S t a n d a r d C o l o r m a p % 76403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 76413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 76423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 76433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 76443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 76453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XMakeStandardColormap() creates an X11 Standard Colormap. 76463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 76473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XMakeStandardColormap method is: 76483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 76496710d8414f0ed06e4eaf9346366be72e2b4719efcristy% void XMakeStandardColormap(Display *display,XVisualInfo *visual_info, 76506710d8414f0ed06e4eaf9346366be72e2b4719efcristy% XResourceInfo *resource_info,Image *image,XStandardColormap *map_info, 76516710d8414f0ed06e4eaf9346366be72e2b4719efcristy% XPixelInfo *pixel,ExceptionInfo *exception) 76523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 76533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 76543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 76553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 76563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 76573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 76583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o visual_info: Specifies a pointer to a X11 XVisualInfo structure; 76593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% returned from XGetVisualInfo. 76603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 76613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o resource_info: Specifies a pointer to a X11 XResourceInfo structure. 76623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 76633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image: the image. 76643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 76653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o map_info: If a Standard Colormap type is specified, this structure is 76663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% initialized with info from the Standard Colormap. 76673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 76683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o pixel: Specifies a pointer to a XPixelInfo structure. 76693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 76706710d8414f0ed06e4eaf9346366be72e2b4719efcristy% o exception: return any errors or warnings in this structure. 76716710d8414f0ed06e4eaf9346366be72e2b4719efcristy% 76723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 76733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 76743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(__cplusplus) || defined(c_plusplus) 76753ed852eea50f9d4cd633efb8c2b054b8e33c253cristyextern "C" { 76763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 76773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7678a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristystatic inline double DiversityPixelIntensity( 76793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const DiversityPacket *pixel) 76803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 7681a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 76823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy intensity; 76833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7684a86a5cb565b7120f58b377f95e606867f28b08fecristy intensity=0.298839f*pixel->red+0.586811f*pixel->green+0.114350f*pixel->blue; 76853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(intensity); 76863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 76873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 76883ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic int IntensityCompare(const void *x,const void *y) 76893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 76903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DiversityPacket 76913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *color_1, 76923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *color_2; 76933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 76943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 76953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy diversity; 76963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 76973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color_1=(DiversityPacket *) x; 76983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color_2=(DiversityPacket *) y; 76993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy diversity=(int) (DiversityPixelIntensity(color_2)- 77003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DiversityPixelIntensity(color_1)); 77013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(diversity); 77023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 77033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 77043ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic int PopularityCompare(const void *x,const void *y) 77053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 77063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DiversityPacket 77073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *color_1, 77083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *color_2; 77093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 77103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color_1=(DiversityPacket *) x; 77113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color_2=(DiversityPacket *) y; 77123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((int) color_2->count-(int) color_1->count); 77133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 77143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 77153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(__cplusplus) || defined(c_plusplus) 77163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 77173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 77183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7719bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristystatic inline Quantum ScaleXToQuantum(const size_t x, 7720bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy const size_t scale) 77213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 7722a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy return((Quantum) (((double) QuantumRange*x)/scale+0.5)); 77233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 77243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7725bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XMakeStandardColormap(Display *display, 77263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XVisualInfo *visual_info,XResourceInfo *resource_info,Image *image, 77276710d8414f0ed06e4eaf9346366be72e2b4719efcristy XStandardColormap *map_info,XPixelInfo *pixel,ExceptionInfo *exception) 77283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 77293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Colormap 77303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colormap; 77313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7732bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 77333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 77343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 77353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 77363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 77373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7738bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 77393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_colors, 77403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy retain_colors; 77413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 77423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned short 77433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy gray_value; 77443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 77453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XColor 77463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color, 77473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *colors, 77483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 77493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 77503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 77513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 77523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(visual_info != (XVisualInfo *) NULL); 77533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(map_info != (XStandardColormap *) NULL); 77543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(resource_info != (XResourceInfo *) NULL); 77553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(pixel != (XPixelInfo *) NULL); 77563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (resource_info->map_type != (char *) NULL) 77573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 77583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 77593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Standard Colormap is already defined (i.e. xstdcmap). 77603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 77614c08aed51c5899665ade97263692328eea4af106cristy XGetPixelInfo(display,visual_info,map_info,resource_info,image, 77623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel); 77633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_colors=(unsigned int) (map_info->base_pixel+ 77643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (map_info->red_max+1)*(map_info->green_max+1)*(map_info->blue_max+1)); 77653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((map_info->red_max*map_info->green_max*map_info->blue_max) != 0) 77668a46d827a124555f0c48fb2368ec1bba8e079ab6cristy if ((image->alpha_trait != BlendPixelTrait) && 77673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (resource_info->color_recovery == MagickFalse) && 7768cbda611068350bf4459f2dda1951f8823702e129cristy (resource_info->quantize_info->dither_method != NoDitherMethod) && 77693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (number_colors < MaxColormapSize)) 77703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 77713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 77723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *affinity_image; 77733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 77744c08aed51c5899665ade97263692328eea4af106cristy register Quantum 7775c47d1f8ecfe7d04f0f003cca0fe175658bbf0fb2cristy *restrict q; 77763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 77773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 77783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Improve image appearance with error diffusion. 77793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 77806710d8414f0ed06e4eaf9346366be72e2b4719efcristy affinity_image=AcquireImage((ImageInfo *) NULL,exception); 77813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (affinity_image == (Image *) NULL) 77823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(ResourceLimitFatalError, 77833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "UnableToDitherImage",image->filename); 77843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy affinity_image->columns=number_colors; 77853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy affinity_image->rows=1; 77863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 77873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize colormap image. 77883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 77893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=QueueAuthenticPixels(affinity_image,0,0,affinity_image->columns, 77903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1,exception); 77914c08aed51c5899665ade97263692328eea4af106cristy if (q != (Quantum *) NULL) 77923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7793bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) number_colors; i++) 77943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 77954c08aed51c5899665ade97263692328eea4af106cristy SetPixelRed(affinity_image,0,q); 77963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (map_info->red_max != 0) 7797534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy SetPixelRed(affinity_image,ScaleXToQuantum((size_t) 7798534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy (i/map_info->red_mult),map_info->red_max),q); 77994c08aed51c5899665ade97263692328eea4af106cristy SetPixelGreen(affinity_image,0,q); 78003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (map_info->green_max != 0) 7801534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy SetPixelGreen(affinity_image,ScaleXToQuantum((size_t) 7802534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy ((i/map_info->green_mult) % (map_info->green_max+1)), 7803534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy map_info->green_max),q); 78044c08aed51c5899665ade97263692328eea4af106cristy SetPixelBlue(affinity_image,0,q); 78053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (map_info->blue_max != 0) 7806534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy SetPixelBlue(affinity_image,ScaleXToQuantum((size_t) 7807534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy (i % map_info->green_mult),map_info->blue_max),q); 78084c08aed51c5899665ade97263692328eea4af106cristy SetPixelAlpha(affinity_image, 78094c08aed51c5899665ade97263692328eea4af106cristy TransparentAlpha,q); 7810ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(affinity_image); 78113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 78123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) SyncAuthenticPixels(affinity_image,exception); 78133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) RemapImage(resource_info->quantize_info,image, 7814018f07f7333b25743d0afff892450cebdb905c1acristy affinity_image,exception); 78153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 78164c08aed51c5899665ade97263692328eea4af106cristy XGetPixelInfo(display,visual_info,map_info,resource_info,image, 78173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel); 7818574cc26500992189f637cd1cdf93d0654e7df7aecristy (void) SetImageStorageClass(image,DirectClass,exception); 78193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy affinity_image=DestroyImage(affinity_image); 78203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 78213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (IsEventLogging()) 78223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 78233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(), 78243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "Standard Colormap:"); 78253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(), 78263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " colormap id: 0x%lx",map_info->colormap); 78273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(), 78283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " red, green, blue max: %lu %lu %lu",map_info->red_max, 78293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_info->green_max,map_info->blue_max); 78303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(), 78313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " red, green, blue mult: %lu %lu %lu",map_info->red_mult, 78323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_info->green_mult,map_info->blue_mult); 78333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 78343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 78353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 78363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((visual_info->klass != DirectColor) && 78373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (visual_info->klass != TrueColor)) 78383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((image->storage_class == DirectClass) || 78393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((int) image->colors > visual_info->colormap_size)) 78403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 78413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy QuantizeInfo 78423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy quantize_info; 78433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 78443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 78453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image has more colors than the visual supports. 78463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 78473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy quantize_info=(*resource_info->quantize_info); 7848bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy quantize_info.number_colors=(size_t) visual_info->colormap_size; 7849018f07f7333b25743d0afff892450cebdb905c1acristy (void) QuantizeImage(&quantize_info,image,exception); 78503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 78513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 78523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Free previous and create new colormap. 78533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 78543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreeStandardColormap(display,visual_info,map_info,pixel); 78553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colormap=XDefaultColormap(display,visual_info->screen); 78563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (visual_info->visual != XDefaultVisual(display,visual_info->screen)) 78573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colormap=XCreateColormap(display,XRootWindow(display,visual_info->screen), 78583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_info->visual,visual_info->klass == DirectColor ? 78593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy AllocAll : AllocNone); 78603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (colormap == (Colormap) NULL) 78613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(ResourceLimitFatalError,"UnableToCreateColormap", 78623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image->filename); 78633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 78643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize the map and pixel info structures. 78653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 78663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetMapInfo(visual_info,colormap,map_info); 78674c08aed51c5899665ade97263692328eea4af106cristy XGetPixelInfo(display,visual_info,map_info,resource_info,image,pixel); 78683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 78693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Allocating colors in server colormap is based on visual class. 78703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 78713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (visual_info->klass) 78723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 78733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case StaticGray: 78743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case StaticColor: 78753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 78763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 78773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Define Standard Colormap for StaticGray or StaticColor visual. 78783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 78793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_colors=image->colors; 78803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colors=(XColor *) AcquireQuantumMemory((size_t) 78813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_info->colormap_size,sizeof(*colors)); 78823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (colors == (XColor *) NULL) 78833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(ResourceLimitFatalError, 78843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "UnableToCreateColormap",image->filename); 78853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=colors; 78863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.flags=(char) (DoRed | DoGreen | DoBlue); 7887bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) image->colors; i++) 78883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 78893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.red=ScaleQuantumToShort(XRedGamma(image->colormap[i].red)); 78903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.green=ScaleQuantumToShort(XGreenGamma(image->colormap[i].green)); 78913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.blue=ScaleQuantumToShort(XBlueGamma(image->colormap[i].blue)); 78923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (visual_info->klass != StaticColor) 78933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 78943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy gray_value=(unsigned short) XPixelIntensity(&color); 78953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.red=gray_value; 78963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.green=gray_value; 78973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.blue=gray_value; 78983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 78993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XAllocColor(display,colormap,&color); 79003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == False) 79013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 79023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colormap=XCopyColormapAndFree(display,colormap); 79033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XAllocColor(display,colormap,&color); 79043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 79053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->pixels[i]=color.pixel; 79063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p++=color; 79073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 79083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 79093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 79103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case GrayScale: 79113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case PseudoColor: 79123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 79133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 79143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colormap_type; 79153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 79163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 79173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Define Standard Colormap for GrayScale or PseudoColor visual. 79183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 79193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_colors=image->colors; 79203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colors=(XColor *) AcquireQuantumMemory((size_t) 79213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_info->colormap_size,sizeof(*colors)); 79223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (colors == (XColor *) NULL) 79233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(ResourceLimitFatalError, 79243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "UnableToCreateColormap",image->filename); 79253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 79263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Preallocate our GUI colors. 79273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 79283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XAllocColor(display,colormap,&pixel->foreground_color); 79293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XAllocColor(display,colormap,&pixel->background_color); 79303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XAllocColor(display,colormap,&pixel->border_color); 79313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XAllocColor(display,colormap,&pixel->matte_color); 79323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XAllocColor(display,colormap,&pixel->highlight_color); 79333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XAllocColor(display,colormap,&pixel->shadow_color); 79343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XAllocColor(display,colormap,&pixel->depth_color); 79353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XAllocColor(display,colormap,&pixel->trough_color); 79363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < MaxNumberPens; i++) 79373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XAllocColor(display,colormap,&pixel->pen_colors[i]); 79383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 79393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine if image colors will "fit" into X server colormap. 79403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 79413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colormap_type=resource_info->colormap; 7942f2faecf9facdbbb14fcba373365f9f691a9658e0cristy status=XAllocColorCells(display,colormap,MagickFalse,(unsigned long *) 79433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy NULL,0,pixel->pixels,(unsigned int) image->colors); 79443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != False) 79453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colormap_type=PrivateColormap; 79463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (colormap_type == SharedColormap) 79473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7948c57f694b2d04975a0e501613e34368c464708c19cristy CacheView 7949c57f694b2d04975a0e501613e34368c464708c19cristy *image_view; 7950c57f694b2d04975a0e501613e34368c464708c19cristy 79513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DiversityPacket 79523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *diversity; 79533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 79543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 79553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y; 79563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 79573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 79583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 79593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 79603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned short 79613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy index; 79623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 79633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XColor 79643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *server_colors; 79653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 79663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 79673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Define Standard colormap for shared GrayScale or PseudoColor visual. 79683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 79693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy diversity=(DiversityPacket *) AcquireQuantumMemory(image->colors, 79703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*diversity)); 79713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (diversity == (DiversityPacket *) NULL) 79723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(ResourceLimitFatalError, 79733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "UnableToCreateColormap",image->filename); 7974bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) image->colors; i++) 79753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7976e42f658533644aecb733785ffd91b286d6778deacristy diversity[i].red=ClampToQuantum(image->colormap[i].red); 7977e42f658533644aecb733785ffd91b286d6778deacristy diversity[i].green=ClampToQuantum(image->colormap[i].green); 7978e42f658533644aecb733785ffd91b286d6778deacristy diversity[i].blue=ClampToQuantum(image->colormap[i].blue); 79793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy diversity[i].index=(unsigned short) i; 79803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy diversity[i].count=0; 79813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 798246ff2676b1044ea4101ac7a59b83289cd8f6cfdacristy image_view=AcquireAuthenticCacheView(image,exception); 79833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=0; y < (int) image->rows; y++) 79843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7985c57f694b2d04975a0e501613e34368c464708c19cristy register int 79863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 79873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 79884c08aed51c5899665ade97263692328eea4af106cristy register const Quantum 7989c57f694b2d04975a0e501613e34368c464708c19cristy *restrict p; 79903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7991c57f694b2d04975a0e501613e34368c464708c19cristy p=GetCacheViewAuthenticPixels(image_view,0,(ssize_t) y, 7992c57f694b2d04975a0e501613e34368c464708c19cristy image->columns,1,exception); 79934c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 79943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 7995c57f694b2d04975a0e501613e34368c464708c19cristy for (x=(int) image->columns-1; x >= 0; x--) 79964c08aed51c5899665ade97263692328eea4af106cristy { 79974c08aed51c5899665ade97263692328eea4af106cristy diversity[(ssize_t) GetPixelIndex(image,p)].count++; 7998ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 79994c08aed51c5899665ade97263692328eea4af106cristy } 80003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8001c57f694b2d04975a0e501613e34368c464708c19cristy image_view=DestroyCacheView(image_view); 80023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 80033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Sort colors by decreasing intensity. 80043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 80053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy qsort((void *) diversity,image->colors,sizeof(*diversity), 80063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy IntensityCompare); 8007bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) image->colors; ) 80083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 80093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy diversity[i].count<<=4; /* increase this colors popularity */ 8010dfe2b6658f367de8f84405263f62768fb853adafcristy i+=MagickMax((int) (image->colors >> 4),2); 80113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 80123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy diversity[image->colors-1].count<<=4; 80133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy qsort((void *) diversity,image->colors,sizeof(*diversity), 80143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy PopularityCompare); 80153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 80163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Allocate colors. 80173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 80183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=colors; 80193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.flags=(char) (DoRed | DoGreen | DoBlue); 8020bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) image->colors; i++) 80213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 80223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy index=diversity[i].index; 80233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.red= 80243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ScaleQuantumToShort(XRedGamma(image->colormap[index].red)); 80253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.green= 80263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ScaleQuantumToShort(XGreenGamma(image->colormap[index].green)); 80273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.blue= 80283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ScaleQuantumToShort(XBlueGamma(image->colormap[index].blue)); 80293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (visual_info->klass != PseudoColor) 80303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 80313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy gray_value=(unsigned short) XPixelIntensity(&color); 80323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.red=gray_value; 80333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.green=gray_value; 80343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.blue=gray_value; 80353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 80363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XAllocColor(display,colormap,&color); 80373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == False) 80383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 80393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->pixels[index]=color.pixel; 80403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p++=color; 80413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 80423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 80433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Read X server colormap. 80443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 80453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy server_colors=(XColor *) AcquireQuantumMemory((size_t) 80463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_info->colormap_size,sizeof(*server_colors)); 80473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (server_colors == (XColor *) NULL) 80483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(ResourceLimitFatalError, 80493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "UnableToCreateColormap",image->filename); 80503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=visual_info->colormap_size-1; x >= 0; x--) 8051bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy server_colors[x].pixel=(size_t) x; 80523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XQueryColors(display,colormap,server_colors, 80533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) MagickMin((unsigned int) visual_info->colormap_size,256)); 80543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 80553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Select remaining colors from X server colormap. 80563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 8057bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (; i < (ssize_t) image->colors; i++) 80583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 80593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy index=diversity[i].index; 8060534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy color.red=ScaleQuantumToShort( 8061534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy XRedGamma(image->colormap[index].red)); 8062534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy color.green=ScaleQuantumToShort( 8063534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy XGreenGamma(image->colormap[index].green)); 8064534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy color.blue=ScaleQuantumToShort( 8065534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy XBlueGamma(image->colormap[index].blue)); 80663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (visual_info->klass != PseudoColor) 80673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 80683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy gray_value=(unsigned short) XPixelIntensity(&color); 80693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.red=gray_value; 80703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.green=gray_value; 80713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.blue=gray_value; 80723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 80733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XBestPixel(display,colormap,server_colors,(unsigned int) 80743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visual_info->colormap_size,&color); 80753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->pixels[index]=color.pixel; 80763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p++=color; 80773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 80783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((int) image->colors < visual_info->colormap_size) 80793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 80803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 80813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Fill up colors array-- more choices for pen colors. 80823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 80833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy retain_colors=MagickMin((unsigned int) 80843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (visual_info->colormap_size-image->colors),256); 8085bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) retain_colors; i++) 80863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p++=server_colors[i]; 80873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_colors+=retain_colors; 80883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 80893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy server_colors=(XColor *) RelinquishMagickMemory(server_colors); 80903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy diversity=(DiversityPacket *) RelinquishMagickMemory(diversity); 80913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 80923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 80933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 80943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Define Standard colormap for private GrayScale or PseudoColor visual. 80953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 80963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == False) 80973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 80983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 80993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Not enough colormap entries in the colormap-- Create a new colormap. 81003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 81013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colormap=XCreateColormap(display, 81023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XRootWindow(display,visual_info->screen),visual_info->visual, 81033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy AllocNone); 81043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (colormap == (Colormap) NULL) 81053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(ResourceLimitFatalError, 81063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "UnableToCreateColormap",image->filename); 81073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_info->colormap=colormap; 81083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((int) image->colors < visual_info->colormap_size) 81093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 81103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 81113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Retain colors from the default colormap to help lessens the 81123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy effects of colormap flashing. 81133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 81143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy retain_colors=MagickMin((unsigned int) 81153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (visual_info->colormap_size-image->colors),256); 81163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=colors+image->colors; 8117bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) retain_colors; i++) 81183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 8119c57f694b2d04975a0e501613e34368c464708c19cristy p->pixel=(unsigned long) i; 81203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 81213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 81223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XQueryColors(display, 81233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDefaultColormap(display,visual_info->screen), 81243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colors+image->colors,(int) retain_colors); 81253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 81263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Transfer colors from default to private colormap. 81273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 81283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XAllocColorCells(display,colormap,MagickFalse, 8129f2faecf9facdbbb14fcba373365f9f691a9658e0cristy (unsigned long *) NULL,0,pixel->pixels,(unsigned int) 81303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy retain_colors); 81313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=colors+image->colors; 8132bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) retain_colors; i++) 81333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 81343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p->pixel=pixel->pixels[i]; 81353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 81363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 81373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XStoreColors(display,colormap,colors+image->colors, 81383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) retain_colors); 81393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_colors+=retain_colors; 81403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 81413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XAllocColorCells(display,colormap,MagickFalse, 8142f2faecf9facdbbb14fcba373365f9f691a9658e0cristy (unsigned long *) NULL,0,pixel->pixels,(unsigned int) 81433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image->colors); 81443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 81453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 81463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Store the image colormap. 81473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 81483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=colors; 81493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.flags=(char) (DoRed | DoGreen | DoBlue); 8150bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) image->colors; i++) 81513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 81523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.red=ScaleQuantumToShort(XRedGamma(image->colormap[i].red)); 81533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.green=ScaleQuantumToShort(XGreenGamma(image->colormap[i].green)); 81543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.blue=ScaleQuantumToShort(XBlueGamma(image->colormap[i].blue)); 81553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (visual_info->klass != PseudoColor) 81563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 81573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy gray_value=(unsigned short) XPixelIntensity(&color); 81583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.red=gray_value; 81593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.green=gray_value; 81603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.blue=gray_value; 81613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 81623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.pixel=pixel->pixels[i]; 81633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p++=color; 81643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 81653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XStoreColors(display,colormap,colors,(int) image->colors); 81663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 81673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 81683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case TrueColor: 81693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case DirectColor: 81703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 81713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 81723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 81733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy linear_colormap; 81743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 81753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 81763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Define Standard Colormap for TrueColor or DirectColor visual. 81773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 81783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_colors=(unsigned int) ((map_info->red_max*map_info->red_mult)+ 81793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (map_info->green_max*map_info->green_mult)+ 81803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (map_info->blue_max*map_info->blue_mult)+1); 81813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy linear_colormap=(number_colors > 4096) || 81823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (((int) (map_info->red_max+1) == visual_info->colormap_size) && 81833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((int) (map_info->green_max+1) == visual_info->colormap_size) && 81843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((int) (map_info->blue_max+1) == visual_info->colormap_size)) ? 81853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickTrue : MagickFalse; 81863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (linear_colormap != MagickFalse) 8187bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy number_colors=(size_t) visual_info->colormap_size; 81883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 81893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Allocate color array. 81903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 81913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colors=(XColor *) AcquireQuantumMemory(number_colors,sizeof(*colors)); 81923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (colors == (XColor *) NULL) 81933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(ResourceLimitFatalError, 81943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "UnableToCreateColormap",image->filename); 81953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 81963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize linear color ramp. 81973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 81983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=colors; 81993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.flags=(char) (DoRed | DoGreen | DoBlue); 82003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (linear_colormap != MagickFalse) 8201bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) number_colors; i++) 82023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 82033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.blue=(unsigned short) 0; 82043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (map_info->blue_max != 0) 8205bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy color.blue=(unsigned short) ((size_t) 82063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((65535L*(i % map_info->green_mult))/map_info->blue_max)); 82073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.green=color.blue; 82083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.red=color.blue; 82093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.pixel=XStandardPixel(map_info,&color); 82103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p++=color; 82113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 82123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 8213bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) number_colors; i++) 82143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 82153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.red=(unsigned short) 0; 82163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (map_info->red_max != 0) 8217bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy color.red=(unsigned short) ((size_t) 82183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((65535L*(i/map_info->red_mult))/map_info->red_max)); 82193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.green=(unsigned int) 0; 82203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (map_info->green_max != 0) 8221bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy color.green=(unsigned short) ((size_t) 82223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((65535L*((i/map_info->green_mult) % (map_info->green_max+1)))/ 82233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_info->green_max)); 82243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.blue=(unsigned short) 0; 82253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (map_info->blue_max != 0) 8226bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy color.blue=(unsigned short) ((size_t) 82273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((65535L*(i % map_info->green_mult))/map_info->blue_max)); 82283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color.pixel=XStandardPixel(map_info,&color); 82293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p++=color; 82303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 82313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((visual_info->klass == DirectColor) && 82323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (colormap != XDefaultColormap(display,visual_info->screen))) 82333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XStoreColors(display,colormap,colors,(int) number_colors); 82343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 8235bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) number_colors; i++) 82363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XAllocColor(display,colormap,&colors[i]); 82373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 82383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 82393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 82403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((visual_info->klass != DirectColor) && 82413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (visual_info->klass != TrueColor)) 82423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 82433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 82443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set foreground, background, border, etc. pixels. 82453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 82463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XBestPixel(display,colormap,colors,(unsigned int) number_colors, 82473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &pixel->foreground_color); 82483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XBestPixel(display,colormap,colors,(unsigned int) number_colors, 82493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &pixel->background_color); 82503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (pixel->background_color.pixel == pixel->foreground_color.pixel) 82513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 82523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 82533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Foreground and background colors must differ. 82543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 82553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->background_color.red=(~pixel->foreground_color.red); 82563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->background_color.green= 82573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (~pixel->foreground_color.green); 82583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->background_color.blue= 82593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (~pixel->foreground_color.blue); 82603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XBestPixel(display,colormap,colors,(unsigned int) number_colors, 82613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &pixel->background_color); 82623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 82633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XBestPixel(display,colormap,colors,(unsigned int) number_colors, 82643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &pixel->border_color); 82653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XBestPixel(display,colormap,colors,(unsigned int) number_colors, 82663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &pixel->matte_color); 82673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XBestPixel(display,colormap,colors,(unsigned int) number_colors, 82683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &pixel->highlight_color); 82693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XBestPixel(display,colormap,colors,(unsigned int) number_colors, 82703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &pixel->shadow_color); 82713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XBestPixel(display,colormap,colors,(unsigned int) number_colors, 82723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &pixel->depth_color); 82733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XBestPixel(display,colormap,colors,(unsigned int) number_colors, 82743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &pixel->trough_color); 82753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < MaxNumberPens; i++) 82763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 82773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XBestPixel(display,colormap,colors,(unsigned int) number_colors, 82783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &pixel->pen_colors[i]); 82793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixel->pixels[image->colors+i]=pixel->pen_colors[i].pixel; 82803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8281c57f694b2d04975a0e501613e34368c464708c19cristy pixel->colors=(ssize_t) (image->colors+MaxNumberPens); 82823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 82833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colors=(XColor *) RelinquishMagickMemory(colors); 82843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (IsEventLogging()) 82853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 82863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(),"Standard Colormap:"); 82873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule()," colormap id: 0x%lx", 82883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_info->colormap); 82893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(), 82903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " red, green, blue max: %lu %lu %lu",map_info->red_max, 82913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_info->green_max,map_info->blue_max); 82923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(X11Event,GetMagickModule(), 82933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " red, green, blue mult: %lu %lu %lu",map_info->red_mult, 82943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy map_info->green_mult,map_info->blue_mult); 82953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 82963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 82973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 82983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 82993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 83003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 83013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 83023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 83033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X M a k e W i n d o w % 83043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 83053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 83063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 83073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 83083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 83093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XMakeWindow() creates an X11 window. 83103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 83113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XMakeWindow method is: 83123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 83133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XMakeWindow(Display *display,Window parent,char **argv,int argc, 83143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XClassHint *class_hint,XWMHints *manager_hints, 83153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XWindowInfo *window_info) 83163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 83173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 83183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 83193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 83203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 83213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 83223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o parent: Specifies the parent window_info. 83233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 83243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o argv: Specifies the application's argument list. 83253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 83263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o argc: Specifies the number of arguments. 83273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 83283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o class_hint: Specifies a pointer to a X11 XClassHint structure. 83293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 83303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o manager_hints: Specifies a pointer to a X11 XWMHints structure. 83313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 83323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window_info: Specifies a pointer to a X11 XWindowInfo structure. 83333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 83343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 8335bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XMakeWindow(Display *display,Window parent,char **argv, 83363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int argc,XClassHint *class_hint,XWMHints *manager_hints, 83373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindowInfo *window_info) 83383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 83393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define MinWindowSize 64 83403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 83413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Atom 83423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy atom_list[2]; 83433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 83443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 83453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy gravity; 83463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 83473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static XTextProperty 83483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy icon_name, 83493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_name; 83503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 83513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 83523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 83533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 83543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSizeHints 83553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *size_hints; 83563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 83573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 83583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set window info hints. 83593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 83603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 83613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 83623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(window_info != (XWindowInfo *) NULL); 83633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints=XAllocSizeHints(); 83643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (size_hints == (XSizeHints *) NULL) 83653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerFatalError,"UnableToMakeXWindow",argv[0]); 8366dfe2b6658f367de8f84405263f62768fb853adafcristy size_hints->flags=(int) window_info->flags; 83673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints->x=window_info->x; 83683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints->y=window_info->y; 83693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints->width=(int) window_info->width; 83703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints->height=(int) window_info->height; 83713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->immutable != MagickFalse) 83723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 83733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 83743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window size cannot be changed. 83753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 83763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints->min_width=size_hints->width; 83773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints->min_height=size_hints->height; 83783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints->max_width=size_hints->width; 83793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints->max_height=size_hints->height; 83803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints->flags|=PMinSize; 83813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints->flags|=PMaxSize; 83823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 83833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 83843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 83853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 83863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window size can be changed. 83873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 83883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints->min_width=(int) window_info->min_width; 83893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints->min_height=(int) window_info->min_height; 83903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints->flags|=PResizeInc; 83913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints->width_inc=(int) window_info->width_inc; 83923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints->height_inc=(int) window_info->height_inc; 83933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if !defined(PRE_R4_ICCCM) 83943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints->flags|=PBaseSize; 83953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints->base_width=size_hints->width_inc; 83963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints->base_height=size_hints->height_inc; 83973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 83983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 83993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy gravity=NorthWestGravity; 84003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->geometry != (char *) NULL) 84013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 84023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 84033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default_geometry[MaxTextExtent], 84043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy geometry[MaxTextExtent]; 84053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 84063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 84073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy flags; 84083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 84093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 84103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 84113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 84123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 84133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User specified geometry. 84143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 8415b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(default_geometry,MaxTextExtent,"%dx%d", 84163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints->width,size_hints->height); 84173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(geometry,window_info->geometry,MaxTextExtent); 84183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=geometry; 84193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (strlen(p) != 0) 84203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 84213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((isspace((int) ((unsigned char) *p)) == 0) && (*p != '%')) 84223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 84233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 84243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(p,p+1,MaxTextExtent); 84253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 84263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy flags=XWMGeometry(display,window_info->screen,geometry,default_geometry, 84273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->border_width,size_hints,&size_hints->x,&size_hints->y, 84283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &size_hints->width,&size_hints->height,&gravity); 84293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((flags & WidthValue) && (flags & HeightValue)) 84303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints->flags|=USSize; 84313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((flags & XValue) && (flags & YValue)) 84323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 84333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints->flags|=USPosition; 84343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->x=size_hints->x; 84353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->y=size_hints->y; 84363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 84373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 84383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if !defined(PRE_R4_ICCCM) 84393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints->win_gravity=gravity; 84403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints->flags|=PWinGravity; 84413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 84423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->id == (Window) NULL) 84433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->id=XCreateWindow(display,parent,window_info->x,window_info->y, 84443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) size_hints->width,(unsigned int) size_hints->height, 84453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->border_width,(int) window_info->depth,InputOutput, 8446c57f694b2d04975a0e501613e34368c464708c19cristy window_info->visual,(unsigned long) window_info->mask, 8447c57f694b2d04975a0e501613e34368c464708c19cristy &window_info->attributes); 84483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 84493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 84503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickStatusType 84513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mask; 84523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 84533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEvent 84543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sans_event; 84553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 84563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindowChanges 84573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes; 84583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 84593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 84603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window already exists; change relevant attributes. 84613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 8462c57f694b2d04975a0e501613e34368c464708c19cristy (void) XChangeWindowAttributes(display,window_info->id,(unsigned long) 8463c57f694b2d04975a0e501613e34368c464708c19cristy window_info->mask,&window_info->attributes); 84643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mask=ConfigureNotify; 84653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (XCheckTypedWindowEvent(display,window_info->id,(int) mask,&sans_event)) ; 84663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.x=window_info->x; 84673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.y=window_info->y; 84683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.width=(int) window_info->width; 84693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.height=(int) window_info->height; 84703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mask=(MagickStatusType) (CWWidth | CWHeight); 84713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->flags & USPosition) 84723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mask|=CWX | CWY; 84733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XReconfigureWMWindow(display,window_info->id,window_info->screen, 84743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mask,&window_changes); 84753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 84763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->id == (Window) NULL) 84773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerFatalError,"UnableToCreateWindow", 84783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->name); 84793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XStringListToTextProperty(&window_info->name,1,&window_name); 84803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == False) 84813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerFatalError,"UnableToCreateTextProperty", 84823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->name); 84833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XStringListToTextProperty(&window_info->icon_name,1,&icon_name); 84843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == False) 84853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerFatalError,"UnableToCreateTextProperty", 84863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->icon_name); 84873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->icon_geometry != (char *) NULL) 84883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 84893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 84903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy flags, 84913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height, 84923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width; 84933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 84943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 84953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User specified icon geometry. 84963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 84973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints->flags|=USPosition; 84983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy flags=XWMGeometry(display,window_info->screen,window_info->icon_geometry, 84993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) NULL,0,size_hints,&manager_hints->icon_x, 85003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &manager_hints->icon_y,&width,&height,&gravity); 85013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((flags & XValue) && (flags & YValue)) 85023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy manager_hints->flags|=IconPositionHint; 85033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 85043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetWMProperties(display,window_info->id,&window_name,&icon_name,argv,argc, 85053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_hints,manager_hints,class_hint); 85063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_name.value != (void *) NULL) 85073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 85083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) window_name.value); 85093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_name.value=(unsigned char *) NULL; 85103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_name.nitems=0; 85113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 85123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (icon_name.value != (void *) NULL) 85133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 85143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) icon_name.value); 85153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy icon_name.value=(unsigned char *) NULL; 85163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy icon_name.nitems=0; 85173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 85183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy atom_list[0]=XInternAtom(display,"WM_DELETE_WINDOW",MagickFalse); 85193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy atom_list[1]=XInternAtom(display,"WM_TAKE_FOCUS",MagickFalse); 85203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetWMProtocols(display,window_info->id,atom_list,2); 85213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) size_hints); 85223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->shape != MagickFalse) 85233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 85243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_SHAPE) 85253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 85263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy error_base, 85273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event_base; 85283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 85293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 85303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Can we apply a non-rectangular shaping mask? 85313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 85323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy error_base=0; 85333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event_base=0; 85343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (XShapeQueryExtension(display,&error_base,&event_base) == 0) 85353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->shape=MagickFalse; 85363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#else 85373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->shape=MagickFalse; 85383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 85393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 85403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->shared_memory) 85413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 85423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_SHARED_MEMORY) 85433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 85443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Can we use shared memory with this window? 85453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 85463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (XShmQueryExtension(display) == 0) 85473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->shared_memory=MagickFalse; 85483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#else 85493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->shared_memory=MagickFalse; 85503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 85513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 85523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->image=NewImageList(); 85533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->destroy=MagickFalse; 85543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 85553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 85563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 85573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 85583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 85593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 85603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 85613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X M a g i c k P r o g r e s s M o n i t o r % 85623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 85633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 85643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 85653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 85663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 85673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XMagickProgressMonitor() displays the progress a task is making in 85683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% completing a task. 85693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 85703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XMagickProgressMonitor method is: 85713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 85723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XMagickProgressMonitor(const char *task, 85733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const MagickOffsetType quantum,const MagickSizeType span, 85743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void *client_data) 85753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 85763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 85773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 85783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o task: Identifies the task in progress. 85793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 85803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o quantum: Specifies the quantum position within the span which represents 85813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% how much progress has been made in completing a task. 85823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 85833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o span: Specifies the span relative to completing a task. 85843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 85853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o client_data: Pointer to any client data. 85863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 85873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 85883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 85893ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic const char *GetLocaleMonitorMessage(const char *text) 85903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 85913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 85923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy message[MaxTextExtent], 85933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy tag[MaxTextExtent]; 85943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 85953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char 85963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *locale_message; 85973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 85983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 85993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 86003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 86013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickMemory(tag,text,MaxTextExtent); 86023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=strrchr(tag,'/'); 86033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (p != (char *) NULL) 86043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p='\0'; 8605b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(message,MaxTextExtent,"Monitor/%s",tag); 86063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy locale_message=GetLocaleMessage(message); 86073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (locale_message == message) 86083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(text); 86093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(locale_message); 86103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 86113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8612bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate MagickBooleanType XMagickProgressMonitor(const char *tag, 86133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const MagickOffsetType quantum,const MagickSizeType span, 86143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy void *magick_unused(client_data)) 86153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 86163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindows 86173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *windows; 86183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 86193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows=XSetWindows((XWindows *) ~0); 86203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows == (XWindows *) NULL) 86213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 86223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->info.mapped != MagickFalse) 86233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XProgressMonitorWidget(windows->display,windows, 86243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy GetLocaleMonitorMessage(tag),quantum,span); 86253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 86263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 86273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 86283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 86293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 86303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 86313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 86323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 86333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X Q u e r y C o l o r D a t a b a s e % 86343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 86353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 86363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 86373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 86383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 86399950d57e1124b73f684fb5946e206994cefda628cristy% XQueryColorCompliance() looks up a RGB values for a color given in the target 86403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% string. 86413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 86423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XQueryColorDatabase method is: 86433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 86449950d57e1124b73f684fb5946e206994cefda628cristy% MagickBooleanType XQueryColorCompliance(const char *target,XColor *color) 86453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 86463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 86473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 86483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o target: Specifies the color to lookup in the X color database. 86493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8650101ab708b0574518ac5715da4d3915400e9df79acristy% o color: A pointer to an PixelInfo structure. The RGB value of the target 86513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% color is returned as this value. 86523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 86533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 86549950d57e1124b73f684fb5946e206994cefda628cristyMagickPrivate MagickBooleanType XQueryColorCompliance(const char *target, 86553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XColor *color) 86563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 86573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Colormap 86583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colormap; 86593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 86603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static Display 86613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *display = (Display *) NULL; 86623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 86633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 86643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 86653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 86663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XColor 86673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy xcolor; 86683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 86693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 86703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize color return value. 86713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 86723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(color != (XColor *) NULL); 86733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color->red=0; 86743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color->green=0; 86753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color->blue=0; 86763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color->flags=(char) (DoRed | DoGreen | DoBlue); 86773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((target == (char *) NULL) || (*target == '\0')) 86783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target="#ffffffffffff"; 86793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 86803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Let the X server define the color for us. 86813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 86823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (display == (Display *) NULL) 86833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy display=XOpenDisplay((char *) NULL); 86843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (display == (Display *) NULL) 86853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 86863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerError,"ColorIsNotKnownToServer",target); 86873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 86883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 86893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colormap=XDefaultColormap(display,XDefaultScreen(display)); 86903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XParseColor(display,colormap,(char *) target,&xcolor); 86913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == False) 86923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerError,"ColorIsNotKnownToServer",target) 86933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 86943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 86953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color->red=xcolor.red; 86963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color->green=xcolor.green; 86973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color->blue=xcolor.blue; 86983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color->flags=xcolor.flags; 86993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 87003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(status != False ? MagickTrue : MagickFalse); 87013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 87023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 87033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 87043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 87053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 87063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 87073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 87083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X Q u e r y P o s i t i o n % 87093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 87103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 87113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 87123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 87133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 87143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XQueryPosition() gets the pointer coordinates relative to a window. 87153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 87163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XQueryPosition method is: 87173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 87183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XQueryPosition(Display *display,const Window window,int *x,int *y) 87193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 87203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 87213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 87223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 87233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 87243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 87253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a Window. 87263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 87273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o x: Return the x coordinate of the pointer relative to the origin of the 87283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% window. 87293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 87303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o y: Return the y coordinate of the pointer relative to the origin of the 87313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% window. 87323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 87333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 8734534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristyMagickPrivate void XQueryPosition(Display *display,const Window window,int *x, 8735534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy int *y) 87363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 87373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 87383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x_root, 87393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y_root; 87403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 87413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 87423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mask; 87433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 87443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window 87453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy root_window; 87463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 87473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 87483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 87493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(window != (Window) NULL); 87503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(x != (int *) NULL); 87513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(y != (int *) NULL); 87523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XQueryPointer(display,window,&root_window,&root_window,&x_root,&y_root, 87533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x,y,&mask); 87543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 87553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 87563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 87573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 87583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 87593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 87603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 87613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X R e f r e s h W i n d o w % 87623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 87633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 87643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 87653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 87663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 87673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XRefreshWindow() refreshes an image in a X window. 87683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 87693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XRefreshWindow method is: 87703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 87713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XRefreshWindow(Display *display,const XWindowInfo *window, 87723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const XEvent *event) 87733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 87743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 87753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 87763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 87773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 87783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 87793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a XWindowInfo structure. 87803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 87813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o event: Specifies a pointer to a XEvent structure. If it is NULL, 87823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% the entire image is refreshed. 87833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 87843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 8785bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XRefreshWindow(Display *display,const XWindowInfo *window, 87863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const XEvent *event) 87873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 87883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 87893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x, 87903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y; 87913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 87923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 87933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height, 87943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width; 87953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 87963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 87973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 87983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(window != (XWindowInfo *) NULL); 87993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->ximage == (XImage *) NULL) 88003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 88013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event != (XEvent *) NULL) 88023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 88033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 88043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine geometry from expose event. 88053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 88063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=event->xexpose.x; 88073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=event->xexpose.y; 88083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=(unsigned int) event->xexpose.width; 88093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) event->xexpose.height; 88103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 88113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 88123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 88133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEvent 88143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sans_event; 88153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 88163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 88173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Refresh entire window; discard outstanding expose events. 88183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 88193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=0; 88203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=0; 88213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=window->width; 88223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=window->height; 88233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (XCheckTypedWindowEvent(display,window->id,Expose,&sans_event)) ; 8824a0e5ad575fbabf93f14a3748ae501376928998fccristy if (window->matte_pixmap != (Pixmap) NULL) 8825a0e5ad575fbabf93f14a3748ae501376928998fccristy { 8826a0e5ad575fbabf93f14a3748ae501376928998fccristy#if defined(MAGICKCORE_HAVE_SHAPE) 8827a0e5ad575fbabf93f14a3748ae501376928998fccristy if (window->shape != MagickFalse) 8828a0e5ad575fbabf93f14a3748ae501376928998fccristy XShapeCombineMask(display,window->id,ShapeBounding,0,0, 8829a0e5ad575fbabf93f14a3748ae501376928998fccristy window->matte_pixmap,ShapeSet); 8830a0e5ad575fbabf93f14a3748ae501376928998fccristy#endif 8831a0e5ad575fbabf93f14a3748ae501376928998fccristy } 88323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 88333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 88343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Check boundary conditions. 88353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 88363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((window->ximage->width-(x+window->x)) < (int) width) 88373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=(unsigned int) (window->ximage->width-(x+window->x)); 88383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((window->ximage->height-(y+window->y)) < (int) height) 88393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) (window->ximage->height-(y+window->y)); 88403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 88413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Refresh image. 88423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 88433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->matte_pixmap != (Pixmap) NULL) 8844a0e5ad575fbabf93f14a3748ae501376928998fccristy (void) XSetClipMask(display,window->annotate_context,window->matte_pixmap); 88453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->pixmap != (Pixmap) NULL) 88463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 88473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->depth > 1) 88483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCopyArea(display,window->pixmap,window->id, 88493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->annotate_context,x+window->x,y+window->y,width,height,x,y); 88503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 88513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCopyPlane(display,window->pixmap,window->id, 88523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->highlight_context,x+window->x,y+window->y,width,height,x,y, 88533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1L); 88543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 88553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 88563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 88573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_HAVE_SHARED_MEMORY) 88583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->shared_memory) 88593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XShmPutImage(display,window->id,window->annotate_context, 88603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->ximage,x+window->x,y+window->y,x,y,width,height,MagickTrue); 88613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 88623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->shared_memory == MagickFalse) 88633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XPutImage(display,window->id,window->annotate_context, 88643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window->ximage,x+window->x,y+window->y,x,y,width,height); 88653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 88663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window->matte_pixmap != (Pixmap) NULL) 88673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetClipMask(display,window->annotate_context,None); 88683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFlush(display); 88693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 88703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 88713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 88723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 88733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 88743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 88753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 88763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X R e m o t e C o m m a n d % 88773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 88783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 88793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 88803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 88813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 88823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XRemoteCommand() forces a remote display(1) to display the specified 88833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% image filename. 88843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 88853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XRemoteCommand method is: 88863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 88873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MagickBooleanType XRemoteCommand(Display *display,const char *window, 88883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *filename) 88893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 88903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 88913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 88923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 88933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 88943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 88953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies the name or id of an X window. 88963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 88973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o filename: the name of the image filename to display. 88983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 88993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 89003ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport MagickBooleanType XRemoteCommand(Display *display, 89013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *window,const char *filename) 89023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 89033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Atom 89043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy remote_atom; 89053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 89063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window 89073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy remote_window, 89083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy root_window; 89093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 89103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(filename != (char *) NULL); 89113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",filename); 89123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (display == (Display *) NULL) 89133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy display=XOpenDisplay((char *) NULL); 89143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (display == (Display *) NULL) 89153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 89163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowException(XServerError,"UnableToOpenXServer",filename); 89173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 89183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 89193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy remote_atom=XInternAtom(display,"IM_PROTOCOLS",MagickFalse); 89203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy remote_window=(Window) NULL; 89213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy root_window=XRootWindow(display,XDefaultScreen(display)); 89223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window != (char *) NULL) 89233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 89243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 89253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Search window hierarchy and identify any clients by name or ID. 89263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 89273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (isdigit((unsigned char) *window) != 0) 89283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy remote_window=XWindowByID(display,root_window,(Window) 89293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy strtol((char *) window,(char **) NULL,0)); 89303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (remote_window == (Window) NULL) 89313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy remote_window=XWindowByName(display,root_window,window); 89323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 89333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (remote_window == (Window) NULL) 89343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy remote_window=XWindowByProperty(display,root_window,remote_atom); 89353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (remote_window == (Window) NULL) 89363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 89373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowException(XServerError,"UnableToConnectToRemoteDisplay", 89383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy filename); 89393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 89403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 89413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 89423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Send remote command. 89433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 89443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy remote_atom=XInternAtom(display,"IM_REMOTE_COMMAND",MagickFalse); 89453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XChangeProperty(display,remote_window,remote_atom,XA_STRING,8, 89463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy PropModeReplace,(unsigned char *) filename,(int) strlen(filename)); 89473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSync(display,MagickFalse); 89483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 89493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 89503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 89513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 89523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 89533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 89543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 89553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8956534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% X R e n d e r I m a g e % 8957534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% % 8958534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% % 8959534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% % 8960534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8961534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% 8962534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% XRenderImage() renders text on the image with an X11 font. It also returns 8963534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% the bounding box of the text relative to the image. 8964534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% 8965534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% The format of the XRenderImage method is: 8966534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% 8967534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% MagickBooleanType XRenderImage(Image *image,DrawInfo *draw_info, 8968534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% const PointInfo *offset,TypeMetric *metrics,ExceptionInfo *exception) 8969534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% 8970534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% A description of each parameter follows: 8971534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% 8972534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% o image: the image. 8973534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% 8974534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% o draw_info: the draw info. 8975534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% 8976534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% o offset: (x,y) location of text relative to image. 8977534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% 8978534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% o metrics: bounding box of text. 8979534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% 8980534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% o exception: return any errors or warnings in this structure. 8981534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% 8982534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy*/ 8983534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristyMagickPrivate MagickBooleanType XRenderImage(Image *image, 8984534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy const DrawInfo *draw_info,const PointInfo *offset,TypeMetric *metrics, 8985534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy ExceptionInfo *exception) 8986534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy{ 8987534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy const char 8988534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy *client_name; 8989534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy 8990534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy DrawInfo 8991534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy cache_info; 8992534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy 8993534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy Display 8994534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy *display; 8995534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy 8996534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy ImageInfo 8997534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy *image_info; 8998534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy 8999534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy MagickBooleanType 9000534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy status; 9001534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy 9002534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy size_t 9003534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy height, 9004534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy width; 9005534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy 9006534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy XAnnotateInfo 9007534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy annotate_info; 9008534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy 9009534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy XFontStruct 9010534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy *font_info; 9011534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy 9012534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy XPixelInfo 9013534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy pixel; 9014534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy 9015534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy XResourceInfo 9016534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy resource_info; 9017534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy 9018534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy XrmDatabase 9019534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy resource_database; 9020534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy 9021534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy XStandardColormap 9022534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy *map_info; 9023534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy 9024534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy XVisualInfo 9025534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy *visual_info; 9026534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy 9027534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy /* 9028534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy Open X server connection. 9029534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy */ 9030534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy display=XOpenDisplay(draw_info->server_name); 9031534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy if (display == (Display *) NULL) 9032534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy { 9033534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy ThrowXWindowException(XServerError,"UnableToOpenXServer", 9034534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy draw_info->server_name); 9035534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy return(MagickFalse); 9036534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy } 9037534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy /* 9038534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy Get user defaults from X resource database. 9039534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy */ 9040534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy (void) XSetErrorHandler(XError); 9041534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy image_info=AcquireImageInfo(); 9042534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy client_name=GetClientName(); 9043534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy resource_database=XGetResourceDatabase(display,client_name); 9044534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy XGetResourceInfo(image_info,resource_database,client_name,&resource_info); 9045534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy resource_info.close_server=MagickFalse; 9046534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy resource_info.colormap=PrivateColormap; 9047534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy resource_info.font=AcquireString(draw_info->font); 9048534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy resource_info.background_color=AcquireString("#ffffffffffff"); 9049534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy resource_info.foreground_color=AcquireString("#000000000000"); 9050534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy map_info=XAllocStandardColormap(); 9051534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy if (map_info == (XStandardColormap *) NULL) 9052534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy { 9053534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy ThrowXWindowException(ResourceLimitError,"MemoryAllocationFailed", 9054534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy image->filename); 9055534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy return(MagickFalse); 9056534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy } 9057534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy /* 9058534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy Initialize visual info. 9059534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy */ 9060534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy visual_info=XBestVisualInfo(display,map_info,&resource_info); 9061534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy if (visual_info == (XVisualInfo *) NULL) 9062534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy { 9063534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy ThrowXWindowException(XServerError,"UnableToGetVisual", 9064534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy image->filename); 9065534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy return(MagickFalse); 9066534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy } 9067534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy map_info->colormap=(Colormap) NULL; 9068534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy pixel.pixels=(unsigned long *) NULL; 9069534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy /* 9070534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy Initialize Standard Colormap info. 9071534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy */ 9072534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy XGetMapInfo(visual_info,XDefaultColormap(display,visual_info->screen), 9073534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy map_info); 9074534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy XGetPixelInfo(display,visual_info,map_info,&resource_info,(Image *) NULL, 9075534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy &pixel); 9076534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy pixel.annotate_context=XDefaultGC(display,visual_info->screen); 9077534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy /* 9078534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy Initialize font info. 9079534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy */ 9080534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy font_info=XBestFont(display,&resource_info,MagickFalse); 9081534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy if (font_info == (XFontStruct *) NULL) 9082534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy { 9083534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy ThrowXWindowException(XServerError,"UnableToLoadFont",draw_info->font); 9084534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy return(MagickFalse); 9085534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy } 9086534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy if ((map_info == (XStandardColormap *) NULL) || 9087534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy (visual_info == (XVisualInfo *) NULL) || 9088534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy (font_info == (XFontStruct *) NULL)) 9089534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy { 9090534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy XFreeResources(display,visual_info,map_info,&pixel,font_info, 9091534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy &resource_info,(XWindowInfo *) NULL); 9092534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy ThrowXWindowException(XServerError,"UnableToLoadFont",image->filename); 9093534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy return(MagickFalse); 9094534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy } 9095534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy cache_info=(*draw_info); 9096534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy /* 9097534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy Initialize annotate info. 9098534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy */ 9099534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy XGetAnnotateInfo(&annotate_info); 9100534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy annotate_info.stencil=ForegroundStencil; 9101534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy if (cache_info.font != draw_info->font) 9102534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy { 9103534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy /* 9104534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy Type name has changed. 9105534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy */ 9106534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy (void) XFreeFont(display,font_info); 9107534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy (void) CloneString(&resource_info.font,draw_info->font); 9108534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy font_info=XBestFont(display,&resource_info,MagickFalse); 9109534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy if (font_info == (XFontStruct *) NULL) 9110534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy { 9111534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy ThrowXWindowException(XServerError,"UnableToLoadFont", 9112534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy draw_info->font); 9113534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy return(MagickFalse); 9114534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy } 9115534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy } 9116534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy if (image->debug != MagickFalse) 9117534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy (void) LogMagickEvent(AnnotateEvent,GetMagickModule(), 9118534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy "Font %s; pointsize %g",draw_info->font != (char *) NULL ? 9119534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy draw_info->font : "none",draw_info->pointsize); 9120534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy cache_info=(*draw_info); 9121534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy annotate_info.font_info=font_info; 9122534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy annotate_info.text=(char *) draw_info->text; 9123534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy annotate_info.width=(unsigned int) XTextWidth(font_info,draw_info->text,(int) 9124534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy strlen(draw_info->text)); 9125534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy annotate_info.height=(unsigned int) font_info->ascent+font_info->descent; 9126534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy metrics->pixels_per_em.x=(double) font_info->max_bounds.width; 9127534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy metrics->pixels_per_em.y=(double) font_info->ascent+font_info->descent; 9128534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy metrics->ascent=(double) font_info->ascent+4; 9129534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy metrics->descent=(double) (-font_info->descent); 9130534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy metrics->width=annotate_info.width/ExpandAffine(&draw_info->affine); 9131534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy metrics->height=font_info->ascent+font_info->descent; 9132534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy metrics->max_advance=(double) font_info->max_bounds.width; 9133534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy metrics->bounds.x1=0.0; 9134534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy metrics->bounds.y1=metrics->descent; 9135534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy metrics->bounds.x2=metrics->ascent+metrics->descent; 9136534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy metrics->bounds.y2=metrics->ascent+metrics->descent; 9137534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy metrics->underline_position=(-2.0); 9138534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy metrics->underline_thickness=1.0; 9139534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy if (draw_info->render == MagickFalse) 9140534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy return(MagickTrue); 9141534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy if (draw_info->fill.alpha == TransparentAlpha) 9142534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy return(MagickTrue); 9143534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy /* 9144534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy Render fill color. 9145534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy */ 9146534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy width=annotate_info.width; 9147534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy height=annotate_info.height; 9148534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy if ((fabs(draw_info->affine.rx) >= MagickEpsilon) || 9149534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy (fabs(draw_info->affine.ry) >= MagickEpsilon)) 9150534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy { 9151534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy if ((fabs(draw_info->affine.sx-draw_info->affine.sy) < MagickEpsilon) && 9152534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy (fabs(draw_info->affine.rx+draw_info->affine.ry) < MagickEpsilon)) 9153534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy annotate_info.degrees=(double) (180.0/MagickPI)* 9154534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy atan2(draw_info->affine.rx,draw_info->affine.sx); 9155534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy } 9156534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy (void) FormatLocaleString(annotate_info.geometry,MaxTextExtent, 9157534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy "%.20gx%.20g%+.20g%+.20g",(double) width,(double) height, 9158534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy ceil(offset->x-0.5),ceil(offset->y-metrics->ascent-metrics->descent+ 9159534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy draw_info->interline_spacing-0.5)); 9160534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy pixel.pen_color.red=ScaleQuantumToShort(draw_info->fill.red); 9161534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy pixel.pen_color.green=ScaleQuantumToShort(draw_info->fill.green); 9162534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy pixel.pen_color.blue=ScaleQuantumToShort(draw_info->fill.blue); 9163534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy status=XAnnotateImage(display,&pixel,&annotate_info,image,exception); 9164534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy if (status == 0) 9165534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy { 9166534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy ThrowXWindowException(ResourceLimitError,"MemoryAllocationFailed", 9167534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy image->filename); 9168534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy return(MagickFalse); 9169534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy } 9170534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy return(MagickTrue); 9171534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy} 9172534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy 9173534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy/* 9174534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9175534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% % 9176534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% % 9177534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% % 91783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X R e t a i n W i n d o w C o l o r s % 91793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 91803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 91813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 91823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 91833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 91843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XRetainWindowColors() sets X11 color resources on a window. This preserves 91853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% the colors associated with an image displayed on the window. 91863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 91873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XRetainWindowColors method is: 91883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 91893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XRetainWindowColors(Display *display,const Window window) 91903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 91913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 91923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 91933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 91943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 91953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 91963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a XWindowInfo structure. 91973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 91983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 91993ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void XRetainWindowColors(Display *display,const Window window) 92003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 92013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Atom 92023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy property; 92033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 92043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Pixmap 92053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixmap; 92063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 92073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 92083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Put property on the window. 92093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 92103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 92113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 92123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(window != (Window) NULL); 92133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy property=XInternAtom(display,"_XSETROOT_ID",MagickFalse); 92143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (property == (Atom) NULL) 92153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 92163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerError,"UnableToCreateProperty", 92173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "_XSETROOT_ID"); 92183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 92193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 92203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pixmap=XCreatePixmap(display,window,1,1,1); 92213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (pixmap == (Pixmap) NULL) 92223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 92233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerError,"UnableToCreateBitmap",""); 92243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 92253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 92263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XChangeProperty(display,window,property,XA_PIXMAP,32,PropModeReplace, 92273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned char *) &pixmap,1); 92283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetCloseDownMode(display,RetainPermanent); 92293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 92303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 92313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 92323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 92333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 92343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 92353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 92363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X S e l e c t W i n d o w % 92373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 92383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 92393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 92403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 92413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 92423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XSelectWindow() allows a user to select a window using the mouse. If the 92433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% mouse moves, a cropping rectangle is drawn and the extents of the rectangle 92443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% is returned in the crop_info structure. 92453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 92463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XSelectWindow function is: 92473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 92483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% target_window=XSelectWindow(display,crop_info) 92493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 92503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 92513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 92523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: XSelectWindow returns the window id. 92533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 92543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a pointer to the Display structure; returned from 92553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 92563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 92573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o crop_info: Specifies a pointer to a RectangleInfo structure. It 92583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% contains the extents of any cropping rectangle. 92593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 92603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 92613ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic Window XSelectWindow(Display *display,RectangleInfo *crop_info) 92623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 92633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define MinimumCropArea (unsigned int) 9 92643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 92653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Cursor 92663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target_cursor; 92673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 92683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy GC 92693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy annotate_context; 92703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 92713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 92723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy presses, 92733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x_offset, 92743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y_offset; 92753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 92763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 92773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 92783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 92793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window 92803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy root_window, 92813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target_window; 92823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 92833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEvent 92843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event; 92853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 92863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGCValues 92873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy context_values; 92883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 92893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 92903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize graphic context. 92913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 92923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 92933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 92943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(crop_info != (RectangleInfo *) NULL); 92953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy root_window=XRootWindow(display,XDefaultScreen(display)); 92963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy context_values.background=XBlackPixel(display,XDefaultScreen(display)); 92973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy context_values.foreground=XWhitePixel(display,XDefaultScreen(display)); 92983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy context_values.function=GXinvert; 92993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy context_values.plane_mask= 93003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy context_values.background ^ context_values.foreground; 93013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy context_values.subwindow_mode=IncludeInferiors; 9302bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy annotate_context=XCreateGC(display,root_window,(size_t) (GCBackground | 93033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy GCForeground | GCFunction | GCSubwindowMode),&context_values); 93043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (annotate_context == (GC) NULL) 93053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 93063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 93073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Grab the pointer using target cursor. 93083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 93093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target_cursor=XMakeCursor(display,root_window,XDefaultColormap(display, 93103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDefaultScreen(display)),(char * ) "white",(char * ) "black"); 93113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XGrabPointer(display,root_window,MagickFalse,(unsigned int) 93123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (ButtonPressMask | ButtonReleaseMask | ButtonMotionMask),GrabModeSync, 93133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy GrabModeAsync,root_window,target_cursor,CurrentTime); 93143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != GrabSuccess) 93153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 93163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowXWindowFatalException(XServerError,"UnableToGrabMouse",""); 93173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((Window) NULL); 93183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 93193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 93203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Select a window. 93213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 93223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info->width=0; 93233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info->height=0; 93243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy presses=0; 93253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target_window=(Window) NULL; 93263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x_offset=0; 93273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y_offset=0; 93283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy do 93293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 93303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((crop_info->width*crop_info->height) >= MinimumCropArea) 93313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawRectangle(display,root_window,annotate_context, 93323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) crop_info->x,(int) crop_info->y,(unsigned int) crop_info->width-1, 93333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) crop_info->height-1); 93343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 93353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Allow another event. 93363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 93373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XAllowEvents(display,SyncPointer,CurrentTime); 93383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XWindowEvent(display,root_window,ButtonPressMask | 93393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ButtonReleaseMask | ButtonMotionMask,&event); 93403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((crop_info->width*crop_info->height) >= MinimumCropArea) 93413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawRectangle(display,root_window,annotate_context, 93423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) crop_info->x,(int) crop_info->y,(unsigned int) crop_info->width-1, 93433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) crop_info->height-1); 93443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (event.type) 93453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 93463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonPress: 93473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 93483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target_window=XGetSubwindow(display,event.xbutton.subwindow, 93493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event.xbutton.x,event.xbutton.y); 93503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (target_window == (Window) NULL) 93513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target_window=root_window; 93523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x_offset=event.xbutton.x_root; 93533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y_offset=event.xbutton.y_root; 9354ecd0ab5350482e4a2ea003705e3e0b2120b66384cristy crop_info->x=(ssize_t) x_offset; 9355ecd0ab5350482e4a2ea003705e3e0b2120b66384cristy crop_info->y=(ssize_t) y_offset; 93563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info->width=0; 93573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info->height=0; 93583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy presses++; 93593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 93603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 93613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonRelease: 93623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 93633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy presses--; 93643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 93653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 93663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case MotionNotify: 93673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 93683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 93693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Discard pending button motion events. 93703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 93713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (XCheckMaskEvent(display,ButtonMotionMask,&event)) ; 9372ecd0ab5350482e4a2ea003705e3e0b2120b66384cristy crop_info->x=(ssize_t) event.xmotion.x; 9373ecd0ab5350482e4a2ea003705e3e0b2120b66384cristy crop_info->y=(ssize_t) event.xmotion.y; 93743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 93753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Check boundary conditions. 93763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 93773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((int) crop_info->x < x_offset) 9378ecd0ab5350482e4a2ea003705e3e0b2120b66384cristy crop_info->width=(size_t) (x_offset-crop_info->x); 93793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 93803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9381ecd0ab5350482e4a2ea003705e3e0b2120b66384cristy crop_info->width=(size_t) (crop_info->x-x_offset); 9382ecd0ab5350482e4a2ea003705e3e0b2120b66384cristy crop_info->x=(ssize_t) x_offset; 93833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 93843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((int) crop_info->y < y_offset) 9385ecd0ab5350482e4a2ea003705e3e0b2120b66384cristy crop_info->height=(size_t) (y_offset-crop_info->y); 93863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 93873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9388ecd0ab5350482e4a2ea003705e3e0b2120b66384cristy crop_info->height=(size_t) (crop_info->y-y_offset); 9389ecd0ab5350482e4a2ea003705e3e0b2120b66384cristy crop_info->y=(ssize_t) y_offset; 93903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 93913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 93923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 93933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 93943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 93953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } while ((target_window == (Window) NULL) || (presses > 0)); 93963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XUngrabPointer(display,CurrentTime); 93973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreeCursor(display,target_cursor); 93983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreeGC(display,annotate_context); 93993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((crop_info->width*crop_info->height) < MinimumCropArea) 94003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 94013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info->width=0; 94023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info->height=0; 94033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 94043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((crop_info->width != 0) && (crop_info->height != 0)) 94053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy target_window=root_window; 94063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(target_window); 94073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 94083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 94093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 94103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 94113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 94123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 94133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 94143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X S e t C u r s o r S t a t e % 94153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 94163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 94173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 94183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 94193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 94203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XSetCursorState() sets the cursor state to busy, otherwise the cursor are 94213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% reset to their default. 94223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 94233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XXSetCursorState method is: 94243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 94253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XSetCursorState(display,windows,const MagickStatusType state) 94263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 94273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 94283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 94293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 94303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 94313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 94323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o windows: Specifies a pointer to a XWindows structure. 94333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 94343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o state: An unsigned integer greater than 0 sets the cursor state 94353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% to busy, otherwise the cursor are reset to their default. 94363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 94373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 9438bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XSetCursorState(Display *display,XWindows *windows, 94393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const MagickStatusType state) 94403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 94413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 94423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 94433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(windows != (XWindows *) NULL); 94443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state) 94453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 94463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckDefineCursor(display,windows->image.id, 94473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->image.busy_cursor); 94483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckDefineCursor(display,windows->pan.id, 94493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->pan.busy_cursor); 94503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckDefineCursor(display,windows->magnify.id, 94513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->magnify.busy_cursor); 94523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckDefineCursor(display,windows->command.id, 94533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->command.busy_cursor); 94543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 94553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 94563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 94573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckDefineCursor(display,windows->image.id, 94583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->image.cursor); 94593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckDefineCursor(display,windows->pan.id,windows->pan.cursor); 94603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckDefineCursor(display,windows->magnify.id, 94613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->magnify.cursor); 94623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckDefineCursor(display,windows->command.id, 94633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->command.cursor); 94643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckDefineCursor(display,windows->command.id, 94653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.cursor); 94663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XWithdrawWindow(display,windows->info.id,windows->info.screen); 94673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 94683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->info.mapped=MagickFalse; 94693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 94703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 94713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 94723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 94733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 94743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 94753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 94763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X S e t W i n d o w s % 94773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 94783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 94793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 94803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 94813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 94823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XSetWindows() sets the X windows structure if the windows info is specified. 94833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Otherwise the current windows structure is returned. 94843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 94853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XSetWindows method is: 94863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 94873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XWindows *XSetWindows(XWindows *windows_info) 94883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 94893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 94903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 94913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o windows_info: Initialize the Windows structure with this information. 94923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 94933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 9494bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate XWindows *XSetWindows(XWindows *windows_info) 94953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 94963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static XWindows 94973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *windows = (XWindows *) NULL; 94983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 94993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows_info != (XWindows *) ~0) 95003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 95013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows=(XWindows *) RelinquishMagickMemory(windows); 95023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows=windows_info; 95033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 95043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(windows); 95053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 95063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 95073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 95083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 95093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 95103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 95113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X U s e r P r e f e r e n c e s % 95123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 95133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 95143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 95153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 95163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 95173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XUserPreferences() saves the preferences in a configuration file in the 95183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% users' home directory. 95193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 95203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XUserPreferences method is: 95213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 95223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XUserPreferences(XResourceInfo *resource_info) 95233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 95243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 95253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 95263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o resource_info: Specifies a pointer to a X11 XResourceInfo structure. 95273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 95283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 9529bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XUserPreferences(XResourceInfo *resource_info) 95303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 95313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(X11_PREFERENCES_PATH) 95323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 95333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cache[MaxTextExtent], 95343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy filename[MaxTextExtent], 95353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy specifier[MaxTextExtent]; 95363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 95373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char 9538104cea817534e8601291610f22e496c10f8f9ddbcristy *client_name, 95393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *value; 95403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 95413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XrmDatabase 95423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences_database; 95433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 95443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 95453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Save user preferences to the client configuration file. 95463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 95473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(resource_info != (XResourceInfo *) NULL); 9548104cea817534e8601291610f22e496c10f8f9ddbcristy client_name=GetClientName(); 95493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences_database=XrmGetStringDatabase(""); 9550b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(specifier,MaxTextExtent,"%s.backdrop",client_name); 95513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy value=resource_info->backdrop ? "True" : "False"; 95523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XrmPutStringResource(&preferences_database,specifier,(char *) value); 9553b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(specifier,MaxTextExtent,"%s.colormap",client_name); 95543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy value=resource_info->colormap == SharedColormap ? "Shared" : "Private"; 95553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XrmPutStringResource(&preferences_database,specifier,(char *) value); 9556b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(specifier,MaxTextExtent,"%s.confirmExit", 9557104cea817534e8601291610f22e496c10f8f9ddbcristy client_name); 95583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy value=resource_info->confirm_exit ? "True" : "False"; 95593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XrmPutStringResource(&preferences_database,specifier,(char *) value); 9560b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(specifier,MaxTextExtent,"%s.confirmEdit", 9561104cea817534e8601291610f22e496c10f8f9ddbcristy client_name); 95623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy value=resource_info->confirm_edit ? "True" : "False"; 95633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XrmPutStringResource(&preferences_database,specifier,(char *) value); 9564b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(specifier,MaxTextExtent,"%s.displayWarnings", 9565104cea817534e8601291610f22e496c10f8f9ddbcristy client_name); 95663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy value=resource_info->display_warnings ? "True" : "False"; 95673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XrmPutStringResource(&preferences_database,specifier,(char *) value); 9568b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(specifier,MaxTextExtent,"%s.dither",client_name); 9569cbda611068350bf4459f2dda1951f8823702e129cristy value=resource_info->quantize_info->dither_method != NoDitherMethod ? 9570cbda611068350bf4459f2dda1951f8823702e129cristy "True" : "False"; 95713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XrmPutStringResource(&preferences_database,specifier,(char *) value); 9572b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(specifier,MaxTextExtent,"%s.gammaCorrect", 9573104cea817534e8601291610f22e496c10f8f9ddbcristy client_name); 95743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy value=resource_info->gamma_correct ? "True" : "False"; 95753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XrmPutStringResource(&preferences_database,specifier,(char *) value); 9576b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(specifier,MaxTextExtent,"%s.undoCache",client_name); 9577b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(cache,MaxTextExtent,"%.20g",(double) 95783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->undo_cache); 95793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XrmPutStringResource(&preferences_database,specifier,cache); 9580b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(specifier,MaxTextExtent,"%s.usePixmap",client_name); 95813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy value=resource_info->use_pixmap ? "True" : "False"; 95823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XrmPutStringResource(&preferences_database,specifier,(char *) value); 9583b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy (void) FormatLocaleString(filename,MaxTextExtent,"%s%src", 9584104cea817534e8601291610f22e496c10f8f9ddbcristy X11_PREFERENCES_PATH,client_name); 95853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ExpandFilename(filename); 95863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XrmPutFileDatabase(preferences_database,filename); 95873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 95883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 95893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 95903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 95913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 95923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 95933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 95943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 95953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X V i s u a l C l a s s N a m e % 95963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 95973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 95983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 95993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 96003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 96013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XVisualClassName() returns the visual class name as a character string. 96023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 96033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XVisualClassName method is: 96043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 96053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% char *XVisualClassName(const int visual_class) 96063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 96073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 96083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 96093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o visual_type: XVisualClassName returns the visual class as a character 96103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% string. 96113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 96123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o class: Specifies the visual class. 96133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 96143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 96153ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic const char *XVisualClassName(const int visual_class) 96163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 96173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (visual_class) 96183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 96193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case StaticGray: return("StaticGray"); 96203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case GrayScale: return("GrayScale"); 96213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case StaticColor: return("StaticColor"); 96223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case PseudoColor: return("PseudoColor"); 96233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case TrueColor: return("TrueColor"); 96243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case DirectColor: return("DirectColor"); 96253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 96263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return("unknown visual class"); 96273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 96283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 96293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 96303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 96313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 96323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 96333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 96343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X W a r n i n g % 96353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 96363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 96373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 96383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 96393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 96403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XWarning() displays a warning reason in a Notice widget. 96413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 96423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XWarning method is: 96433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 96443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XWarning(const unsigned int warning,const char *reason, 96453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *description) 96463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 96473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 96483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 96493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o warning: Specifies the numeric warning category. 96503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 96513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o reason: Specifies the reason to display before terminating the 96523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% program. 96533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 96543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o description: Specifies any description to the reason. 96553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 96563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 9657bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XWarning(const ExceptionType magick_unused(warning), 96583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *reason,const char *description) 96593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 96603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 96613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text[MaxTextExtent]; 96623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 96633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindows 96643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *windows; 96653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 96663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (reason == (char *) NULL) 96673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 96683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(text,reason,MaxTextExtent); 96693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ConcatenateMagickString(text,":",MaxTextExtent); 96703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows=XSetWindows((XWindows *) ~0); 96713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XNoticeWidget(windows->display,windows,text,(char *) description); 96723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 96733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 96743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 96753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 96763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 96773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 96783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 96793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X W i n d o w B y I D % 96803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 96813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 96823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 96833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 96843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 96853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XWindowByID() locates a child window with a given ID. If not window with 96863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% the given name is found, 0 is returned. Only the window specified and its 96873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% subwindows are searched. 96883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 96893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XWindowByID function is: 96903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 96913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% child=XWindowByID(display,window,id) 96923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 96933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 96943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 96953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o child: XWindowByID returns the window with the specified 96963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% id. If no windows are found, XWindowByID returns 0. 96973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 96983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a pointer to the Display structure; returned from 96993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 97003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 97013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o id: Specifies the id of the window to locate. 97023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 97033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 9704bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate Window XWindowByID(Display *display,const Window root_window, 9705bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy const size_t id) 97063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 97073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RectangleInfo 97083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy rectangle_info; 97093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 97103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 97113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 97123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 97133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 97143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 97153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 97163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 97173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_children; 97183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 97193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window 97203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy child, 97213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *children, 97223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window; 97233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 97243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 97253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 97263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(root_window != (Window) NULL); 97273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (id == 0) 97283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(XSelectWindow(display,&rectangle_info)); 97293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (root_window == id) 9730dfe2b6658f367de8f84405263f62768fb853adafcristy return(root_window); 97313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XQueryTree(display,root_window,&child,&child,&children, 97323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &number_children); 97333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == False) 97343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((Window) NULL); 97353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window=(Window) NULL; 97363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < (int) number_children; i++) 97373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 97383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 97393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Search each child and their children. 97403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 97413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window=XWindowByID(display,children[i],id); 97423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window != (Window) NULL) 97433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 97443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 97453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (children != (Window *) NULL) 97463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) children); 97473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(window); 97483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 97493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 97503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 97513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 97523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 97533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 97543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 97553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X W i n d o w B y N a m e % 97563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 97573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 97583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 97593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 97603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 97613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XWindowByName() locates a window with a given name on a display. If no 97623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% window with the given name is found, 0 is returned. If more than one window 97633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% has the given name, the first one is returned. Only root and its children 97643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% are searched. 97653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 97663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XWindowByName function is: 97673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 97683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% window=XWindowByName(display,root_window,name) 97693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 97703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 97713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 97723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: XWindowByName returns the window id. 97733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 97743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a pointer to the Display structure; returned from 97753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 97763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 97773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o root_window: Specifies the id of the root window. 97783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 97793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o name: Specifies the name of the window to locate. 97803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 97813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 9782bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate Window XWindowByName(Display *display,const Window root_window, 97833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *name) 97843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 97853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 97863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 97873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 97883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 97893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 97903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 97913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 97923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_children; 97933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 97943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window 97953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *children, 97963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy child, 97973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window; 97983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 97993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XTextProperty 98003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_name; 98013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 98023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 98033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(root_window != (Window) NULL); 98043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(name != (char *) NULL); 98053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",name); 98063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (XGetWMName(display,root_window,&window_name) != 0) 98073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare((char *) window_name.value,name) == 0) 98083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(root_window); 98093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XQueryTree(display,root_window,&child,&child,&children, 98103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &number_children); 98113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == False) 98123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((Window) NULL); 98133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window=(Window) NULL; 98143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < (int) number_children; i++) 98153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 98163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 98173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Search each child and their children. 98183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 98193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window=XWindowByName(display,children[i],name); 98203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window != (Window) NULL) 98213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 98223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 98233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (children != (Window *) NULL) 98243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) children); 98253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(window); 98263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 98273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 98283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 98293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 98303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 98313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 98323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 98333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X W i n d o w B y P r o p e r y % 98343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 98353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 98363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 98373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 98383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 98393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XWindowByProperty() locates a child window with a given property. If not 98403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% window with the given name is found, 0 is returned. If more than one window 98413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% has the given property, the first one is returned. Only the window 98423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% specified and its subwindows are searched. 98433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 98443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XWindowByProperty function is: 98453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 98463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% child=XWindowByProperty(display,window,property) 98473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 98483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 98493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 98503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o child: XWindowByProperty returns the window id with the specified 98513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% property. If no windows are found, XWindowByProperty returns 0. 98523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 98533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a pointer to the Display structure; returned from 98543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 98553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 98563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o property: Specifies the property of the window to locate. 98573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 98583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 9859bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate Window XWindowByProperty(Display *display,const Window window, 98603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const Atom property) 98613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 98623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Atom 98633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy type; 98643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 98653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 98663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy format; 98673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 98683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 98693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 98703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 98713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned char 98723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *data; 98733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 98743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 98753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i, 98763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_children; 98773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9878f2faecf9facdbbb14fcba373365f9f691a9658e0cristy unsigned long 98793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy after, 98803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_items; 98813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 98823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Window 98833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy child, 98843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *children, 98853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy parent, 98863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy root; 98873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 98883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 98893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 98903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(window != (Window) NULL); 98913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(property != (Atom) NULL); 98923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XQueryTree(display,window,&root,&parent,&children,&number_children); 98933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == False) 98943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((Window) NULL); 98953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy type=(Atom) NULL; 98963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy child=(Window) NULL; 98973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; (i < number_children) && (child == (Window) NULL); i++) 98983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 98993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XGetWindowProperty(display,children[i],property,0L,0L,MagickFalse, 99003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (Atom) AnyPropertyType,&type,&format,&number_items,&after,&data); 99013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (data != NULL) 99023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) data); 99033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((status == Success) && (type != (Atom) NULL)) 99043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy child=children[i]; 99053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 99063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; (i < number_children) && (child == (Window) NULL); i++) 99073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy child=XWindowByProperty(display,children[i],property); 99083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (children != (Window *) NULL) 99093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) children); 99103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(child); 99113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 99123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#else 99133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 99143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 99153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 99163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 99173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 99183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 99193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X I m p o r t I m a g e % 99203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 99213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 99223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 99233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 99243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 99253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XImportImage() reads an image from an X window. 99263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 99273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XImportImage method is: 99283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9929a0dc96a5df0a380c9ef855cc7f2a5f264bec8af3cristy% Image *XImportImage(const ImageInfo *image_info,XImportInfo *ximage_info, 9930a0dc96a5df0a380c9ef855cc7f2a5f264bec8af3cristy% ExceptionInfo *exception) 99313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 99323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 99333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 99343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image_info: the image info.. 99353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 99363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o ximage_info: Specifies a pointer to an XImportInfo structure. 99373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9938a0dc96a5df0a380c9ef855cc7f2a5f264bec8af3cristy% o exception: return any errors or warnings in this structure. 9939a0dc96a5df0a380c9ef855cc7f2a5f264bec8af3cristy% 99403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 99414bc52025ac134838f6a62b8dc8ea6cfacab91796cristyMagickExport Image *XImportImage(const ImageInfo *image_info, 9942a0dc96a5df0a380c9ef855cc7f2a5f264bec8af3cristy XImportInfo *ximage_info,ExceptionInfo *exception) 99433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 99443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image_info != (const ImageInfo *) NULL); 99453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image_info->signature == MagickSignature); 99463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image_info->debug != MagickFalse) 99473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s", 99483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image_info->filename); 99493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(ximage_info != (XImportInfo *) NULL); 9950a0dc96a5df0a380c9ef855cc7f2a5f264bec8af3cristy assert(exception != (ExceptionInfo *) NULL); 9951a0dc96a5df0a380c9ef855cc7f2a5f264bec8af3cristy assert(exception->signature == MagickSignature); 99523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((Image *) NULL); 99533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 9954534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy 9955534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy/* 9956534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9957534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% % 9958534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% % 9959534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% % 9960534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% X R e n d e r X 1 1 % 9961534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% % 9962534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% % 9963534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% % 9964534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9965534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% 9966534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% XRenderImage() renders text on the image with an X11 font. It also returns 9967534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% the bounding box of the text relative to the image. 9968534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% 9969534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% The format of the XRenderImage method is: 9970534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% 9971534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% MagickBooleanType XRenderImage(Image *image,DrawInfo *draw_info, 9972534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% const PointInfo *offset,TypeMetric *metrics,ExceptionInfo *exception) 9973534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% 9974534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% A description of each parameter follows: 9975534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% 9976534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% o image: the image. 9977534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% 9978534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% o draw_info: the draw info. 9979534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% 9980534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% o offset: (x,y) location of text relative to image. 9981534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% 9982534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% o metrics: bounding box of text. 9983534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% 9984534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% o exception: return any errors or warnings in this structure. 9985534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy% 9986534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy*/ 9987534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristyMagickPrivate MagickBooleanType XRenderImage(Image *image, 9988534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy const DrawInfo *draw_info,const PointInfo *offset,TypeMetric *metrics, 9989534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy ExceptionInfo *exception) 9990534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy{ 9991534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy (void) draw_info; 9992534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy (void) offset; 9993534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy (void) metrics; 9994534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy (void) ThrowMagickException(exception,GetMagickModule(), 9995534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy MissingDelegateError,"DelegateLibrarySupportNotBuiltIn","'%s' (X11)", 9996534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy image->filename); 9997534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy return(MagickFalse); 9998534d0a353b31242ce2f7b26c4eb4fe53f914d0f5cristy} 99993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 100003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 100013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 100023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 100033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 100043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 100053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10006576974eba31c1fac74b2492a74862b2fcd50f21ccristy+ X C o m p o n e n t G e n e s i s % 10007576974eba31c1fac74b2492a74862b2fcd50f21ccristy% % 10008576974eba31c1fac74b2492a74862b2fcd50f21ccristy% % 10009576974eba31c1fac74b2492a74862b2fcd50f21ccristy% % 10010576974eba31c1fac74b2492a74862b2fcd50f21ccristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10011576974eba31c1fac74b2492a74862b2fcd50f21ccristy% 10012576974eba31c1fac74b2492a74862b2fcd50f21ccristy% XComponentGenesis() instantiates the X component. 10013576974eba31c1fac74b2492a74862b2fcd50f21ccristy% 10014576974eba31c1fac74b2492a74862b2fcd50f21ccristy% The format of the XComponentGenesis method is: 10015576974eba31c1fac74b2492a74862b2fcd50f21ccristy% 10016576974eba31c1fac74b2492a74862b2fcd50f21ccristy% MagickBooleanType XComponentGenesis(void) 10017576974eba31c1fac74b2492a74862b2fcd50f21ccristy% 10018576974eba31c1fac74b2492a74862b2fcd50f21ccristy*/ 100195ff4eaf57b3cd47d0371f204f865cbba614674a0cristyMagickPrivate MagickBooleanType XComponentGenesis(void) 10020576974eba31c1fac74b2492a74862b2fcd50f21ccristy{ 10021576974eba31c1fac74b2492a74862b2fcd50f21ccristy return(MagickTrue); 10022576974eba31c1fac74b2492a74862b2fcd50f21ccristy} 10023576974eba31c1fac74b2492a74862b2fcd50f21ccristy 10024576974eba31c1fac74b2492a74862b2fcd50f21ccristy/* 10025576974eba31c1fac74b2492a74862b2fcd50f21ccristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10026576974eba31c1fac74b2492a74862b2fcd50f21ccristy% % 10027576974eba31c1fac74b2492a74862b2fcd50f21ccristy% % 10028576974eba31c1fac74b2492a74862b2fcd50f21ccristy% % 100293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X G e t I m p o r t I n f o % 100303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 100313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 100323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 100333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 100343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 100353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XGetImportInfo() initializes the XImportInfo structure. 100363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 100373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XGetImportInfo method is: 100383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 100393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XGetImportInfo(XImportInfo *ximage_info) 100403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 100413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 100423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 100433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o ximage_info: Specifies a pointer to an ImageInfo structure. 100443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 100453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 100463ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport void XGetImportInfo(XImportInfo *ximage_info) 100473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 100483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(ximage_info != (XImportInfo *) NULL); 100493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage_info->frame=MagickFalse; 100503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage_info->borders=MagickFalse; 100513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage_info->screen=MagickFalse; 100523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage_info->descend=MagickTrue; 100533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ximage_info->silent=MagickFalse; 100543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 10055