MagickCore  7.0.7
Convert, Edit, Or Compose Bitmap Images
xwindow-private.h
Go to the documentation of this file.
1 /*
2  Copyright 1999-2018 ImageMagick Studio LLC, a non-profit organization
3  dedicated to making software imaging solutions freely available.
4 
5  You may not use this file except in compliance with the License.
6  obtain a copy of the License at
7 
8  https://www.imagemagick.org/script/license.php
9 
10  Unless required by applicable law or agreed to in writing, software
11  distributed under the License is distributed on an "AS IS" BASIS,
12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  See the License for the specific language governing permissions and
14  limitations under the License.
15 
16  MagickCore X11 window methods.
17 */
18 #ifndef MAGICKCORE_XWINDOW_PRIVATE_H
19 #define MAGICKCORE_XWINDOW_PRIVATE_H
20 
21 #include "MagickCore/draw.h"
22 #include "MagickCore/exception.h"
23 #include "MagickCore/geometry.h"
26 #include "MagickCore/quantize.h"
27 
28 #if defined(__cplusplus) || defined(c_plusplus)
29 extern "C" {
30 #endif
31 
32 #if defined(MAGICKCORE_X11_DELEGATE)
33 
34 #include <X11/Xos.h>
35 #include <X11/Xlib.h>
36 #include <X11/Xatom.h>
37 #include <X11/cursorfont.h>
38 #include <X11/keysym.h>
39 #include <X11/Xresource.h>
40 #include <X11/Xutil.h>
41 
42 #if defined(__cplusplus) || defined(c_plusplus)
43 # define klass c_class
44 #else
45 # define klass class
46 #endif
47 
48 #define MaxIconSize 96
49 #define MaxNumberPens 11
50 #define MaxNumberFonts 11
51 #define MaxXWindows 12
52 #undef index
53 
54 #define ThrowXWindowException(severity,tag,context) \
55 { \
56  ExceptionInfo \
57  *exception; \
58  \
59  exception=AcquireExceptionInfo(); \
60  (void) ThrowMagickException(exception,GetMagickModule(),severity, \
61  tag == (const char *) NULL ? "unknown" : tag,"'%s': %s",context, \
62  strerror(errno)); \
63  CatchException(exception); \
64  (void) DestroyExceptionInfo(exception); \
65 }
66 #define ThrowXWindowFatalException(severity,tag,context) \
67 { \
68  ThrowXWindowException(severity,tag,context); \
69  _exit(1); \
70 }
71 
72 typedef enum
73 {
74  ForegroundStencil,
75  BackgroundStencil,
76  OpaqueStencil,
77  TransparentStencil
78 } AnnotationStencil;
79 
80 typedef enum
81 {
82  UndefinedElement,
83  PointElement,
84  LineElement,
85  RectangleElement,
86  FillRectangleElement,
87  CircleElement,
88  FillCircleElement,
89  EllipseElement,
90  FillEllipseElement,
91  PolygonElement,
92  FillPolygonElement,
93  ColorElement,
94  MatteElement,
95  TextElement,
96  ImageElement
97 } ElementType;
98 
99 typedef enum
100 {
101  UndefinedColormap,
102  PrivateColormap,
103  SharedColormap
104 } XColormapType;
105 
106 typedef struct _XDrawInfo
107 {
108  int
109  x,
110  y;
111 
112  unsigned int
113  width,
114  height;
115 
116  double
117  degrees;
118 
119  AnnotationStencil
120  stencil;
121 
122  ElementType
123  element;
124 
125  Pixmap
126  stipple;
127 
128  unsigned int
129  line_width;
130 
131  XSegment
132  line_info;
133 
134  unsigned int
135  number_coordinates;
136 
138  rectangle_info;
139 
140  XPoint
141  *coordinate_info;
142 
143  char
144  geometry[MagickPathExtent];
145 } XDrawInfo;
146 
147 typedef enum
148 {
149  DefaultState = 0x0000,
150  EscapeState = 0x0001,
151  ExitState = 0x0002,
152  FormerImageState = 0x0004,
153  ModifierState = 0x0008,
154  MontageImageState = 0x0010,
155  NextImageState = 0x0020,
156  RetainColorsState = 0x0040,
157  SuspendTime = 50,
158  UpdateConfigurationState = 0x0080,
159  UpdateRegionState = 0x0100
160 } XState;
161 
162 typedef struct _XAnnotateInfo
163 {
164  int
165  x,
166  y;
167 
168  unsigned int
169  width,
170  height;
171 
172  double
173  degrees;
174 
175  XFontStruct
176  *font_info;
177 
178  char
179  *text;
180 
181  AnnotationStencil
182  stencil;
183 
184  char
185  geometry[MagickPathExtent];
186 
187  struct _XAnnotateInfo
188  *next,
189  *previous;
190 } XAnnotateInfo;
191 
192 typedef struct _XPixelInfo
193 {
194  ssize_t
195  colors;
196 
197  unsigned long
198  *pixels;
199 
200  XColor
201  alpha_color, /* deprecated */
202  foreground_color,
203  background_color,
204  border_color,
205  highlight_color,
206  shadow_color,
207  depth_color,
208  trough_color,
209  box_color,
210  pen_color,
211  pen_colors[MaxNumberPens];
212 
213  GC
214  annotate_context,
215  highlight_context,
216  widget_context;
217 
218  unsigned short
219  box_index,
220  pen_index;
221 
222  XColor
223  matte_color;
224 } XPixelInfo;
225 
226 typedef struct _XResourceInfo
227 {
228  XrmDatabase
229  resource_database;
230 
231  ImageInfo
232  *image_info;
233 
235  *quantize_info;
236 
237  size_t
238  colors;
239 
241  close_server,
242  backdrop;
243 
244  char
245  *background_color,
246  *border_color;
247 
248  char
249  *client_name;
250 
251  XColormapType
252  colormap;
253 
254  unsigned int
255  border_width;
256 
257  size_t
258  delay;
259 
261  color_recovery,
262  confirm_exit,
263  confirm_edit;
264 
265  char
266  *display_gamma;
267 
268  char
269  *font,
270  *font_name[MaxNumberFonts],
271  *foreground_color;
272 
274  display_warnings,
275  gamma_correct;
276 
277  char
278  *icon_geometry;
279 
281  iconic,
282  immutable;
283 
284  char
285  *image_geometry;
286 
287  char
288  *alpha_color, /* deprecated */
289  *map_type,
290  *name;
291 
292  unsigned int
293  magnify,
294  pause;
295 
296  char
297  *pen_colors[MaxNumberPens];
298 
299  char
300  *text_font,
301  *title;
302 
303  int
304  quantum;
305 
306  unsigned int
307  update;
308 
310  use_pixmap,
311  use_shared_memory;
312 
313  size_t
314  undo_cache;
315 
316  char
317  *visual_type,
318  *window_group,
319  *window_id,
320  *write_filename;
321 
322  Image
323  *copy_image;
324 
325  int
326  gravity;
327 
328  char
329  home_directory[MagickPathExtent];
330 
331  char
332  *matte_color;
333 } XResourceInfo;
334 
335 typedef struct _XWindowInfo
336 {
337  Window
338  id;
339 
340  Window
341  root;
342 
343  Visual
344  *visual;
345 
346  unsigned int
347  storage_class,
348  depth;
349 
350  XVisualInfo
351  *visual_info;
352 
353  XStandardColormap
354  *map_info;
355 
356  XPixelInfo
357  *pixel_info;
358 
359  XFontStruct
360  *font_info;
361 
362  GC
363  annotate_context,
364  highlight_context,
365  widget_context;
366 
367  Cursor
368  cursor,
369  busy_cursor;
370 
371  char
372  *name,
373  *geometry,
374  *icon_name,
375  *icon_geometry,
376  *crop_geometry;
377 
378  size_t
379  data,
380  flags;
381 
382  int
383  x,
384  y;
385 
386  unsigned int
387  width,
388  height,
389  min_width,
390  min_height,
391  width_inc,
392  height_inc,
393  border_width;
394 
396  use_pixmap,
397  immutable,
398  shape,
399  shared_memory;
400 
401  int
402  screen;
403 
404  XImage
405  *ximage,
406  *matte_image;
407 
408  Pixmap
409  highlight_stipple,
410  shadow_stipple,
411  pixmap,
412  *pixmaps,
413  matte_pixmap,
414  *matte_pixmaps;
415 
416  XSetWindowAttributes
417  attributes;
418 
419  XWindowChanges
420  window_changes;
421 
422  void
423  *segment_info;
424 
425  long
426  mask;
427 
429  orphan,
430  mapped,
431  stasis;
432 
433  Image
434  *image;
435 
437  destroy;
438 } XWindowInfo;
439 
440 typedef struct _XWindows
441 {
442  Display
443  *display;
444 
445  XStandardColormap
446  *map_info,
447  *icon_map;
448 
449  XVisualInfo
450  *visual_info,
451  *icon_visual;
452 
453  XPixelInfo
454  *pixel_info,
455  *icon_pixel;
456 
457  XFontStruct
458  *font_info;
459 
460  XResourceInfo
461  *icon_resources;
462 
463  XClassHint
464  *class_hints;
465 
466  XWMHints
467  *manager_hints;
468 
469  XWindowInfo
470  context,
471  group_leader,
472  backdrop,
473  icon,
474  image,
475  info,
476  magnify,
477  pan,
478  command,
479  widget,
480  popup;
481 
482  Atom
483  wm_protocols,
484  wm_delete_window,
485  wm_take_focus,
486  im_protocols,
487  im_remote_command,
488  im_update_widget,
489  im_update_colormap,
490  im_former_image,
491  im_retain_colors,
492  im_next_image,
493  im_exit,
494  dnd_protocols;
495 } XWindows;
496 
497 extern MagickPrivate Cursor
498  XMakeCursor(Display *,Window,Colormap,char *,char *);
499 
500 extern MagickPrivate int
501  XCheckDefineCursor(Display *,Window,Cursor);
502 
504  XAnnotateImage(Display *,const XPixelInfo *,XAnnotateInfo *,Image *,
505  ExceptionInfo *),
506  XComponentGenesis(void),
507  XDrawImage(Display *,const XPixelInfo *,XDrawInfo *,Image *,ExceptionInfo *),
508  XGetWindowColor(Display *,XWindows *,char *,ExceptionInfo *),
509  XMagickProgressMonitor(const char *,const MagickOffsetType,
510  const MagickSizeType,void *),
511  XMakeImage(Display *,const XResourceInfo *,XWindowInfo *,Image *,unsigned int,
512  unsigned int,ExceptionInfo *),
513  XQueryColorCompliance(const char *,XColor *);
514 
515 extern MagickPrivate void
516  XBestIconSize(Display *,XWindowInfo *,Image *),
517  XBestPixel(Display *,const Colormap,XColor *,unsigned int,XColor *),
518  XCheckRefreshWindows(Display *,XWindows *),
519  XClientMessage(Display *,const Window,const Atom,const Atom,const Time),
520  XComponentTerminus(void),
521  XConfigureImageColormap(Display *,XResourceInfo *,XWindows *,Image *,
522  ExceptionInfo *),
523  XConstrainWindowPosition(Display *,XWindowInfo *),
524  XDelay(Display *,const size_t),
525  XDisplayImageInfo(Display *,const XResourceInfo *,XWindows *,Image *,Image *,
526  ExceptionInfo *),
527  XDestroyWindowColors(Display *,Window),
528  XFreeResources(Display *,XVisualInfo *,XStandardColormap *,XPixelInfo *,
529  XFontStruct *,XResourceInfo *,XWindowInfo *),
530  XFreeStandardColormap(Display *,const XVisualInfo *,XStandardColormap *,
531  XPixelInfo *),
532  XHighlightEllipse(Display *,Window,GC,const RectangleInfo *),
533  XHighlightLine(Display *,Window,GC,const XSegment *),
534  XHighlightRectangle(Display *,Window,GC,const RectangleInfo *),
535  XGetAnnotateInfo(XAnnotateInfo *),
536  XGetPixelInfo(Display *,const XVisualInfo *,const XStandardColormap *,
537  const XResourceInfo *,Image *,XPixelInfo *),
538  XGetMapInfo(const XVisualInfo *,const Colormap,XStandardColormap *),
539  XGetWindowInfo(Display *,XVisualInfo *,XStandardColormap *,XPixelInfo *,
540  XFontStruct *,XResourceInfo *,XWindowInfo *),
541  XMakeMagnifyImage(Display *,XWindows *,ExceptionInfo *),
542  XMakeStandardColormap(Display *,XVisualInfo *,XResourceInfo *,Image *,
543  XStandardColormap *,XPixelInfo *,ExceptionInfo *),
544  XMakeWindow(Display *,Window,char **,int,XClassHint *,XWMHints *,
545  XWindowInfo *),
546  XQueryPosition(Display *,const Window,int *,int *),
547  XRefreshWindow(Display *,const XWindowInfo *,const XEvent *),
548  XSetCursorState(Display *,XWindows *,const MagickStatusType),
549  XUserPreferences(XResourceInfo *),
550  XWarning(const ExceptionType,const char *,const char *);
551 
552 extern MagickPrivate Window
553  XWindowByID(Display *,const Window,const size_t),
554  XWindowByName(Display *,const Window,const char *),
555  XWindowByProperty(Display *,const Window,const Atom);
556 
557 extern MagickPrivate XFontStruct
558  *XBestFont(Display *,const XResourceInfo *,const MagickBooleanType);
559 
560 extern MagickPrivate XVisualInfo
561  *XBestVisualInfo(Display *,XStandardColormap *,XResourceInfo *);
562 
563 extern MagickPrivate XWindows
564  *XInitializeWindows(Display *,XResourceInfo *),
565  *XSetWindows(XWindows *);
566 
567 extern MagickExport char
568  *XGetResourceClass(XrmDatabase,const char *,const char *,char *),
569  *XGetResourceInstance(XrmDatabase,const char *,const char *,const char *),
570  *XGetScreenDensity(Display *);
571 
572 extern MagickExport int
573  XError(Display *,XErrorEvent *);
574 
576  XRemoteCommand(Display *,const char *,const char *);
577 
578 extern MagickExport void
579  DestroyXResources(void),
580  XDestroyResourceInfo(XResourceInfo *),
581  XGetResourceInfo(const ImageInfo *,XrmDatabase,const char *,XResourceInfo *),
582  XRetainWindowColors(Display *,const Window);
583 
584 extern MagickExport XrmDatabase
585  XGetResourceDatabase(Display *,const char *);
586 
587 static inline double XPixelIntensity(const XColor *pixel)
588 {
589  double
590  intensity;
591 
592  if ((pixel->red == pixel->green) && (pixel->green == pixel->blue))
593  return((double) pixel->red);
594  intensity=0.212656*pixel->red+0.715158*pixel->green+0.072186*pixel->blue;
595  return(intensity);
596 }
597 
598 #endif
599 
601  XRenderImage(Image *,const DrawInfo *,const PointInfo *,TypeMetric *,
602  ExceptionInfo *);
603 
604 #if defined(__cplusplus) || defined(c_plusplus)
605 }
606 #endif
607 
608 #endif
ssize_t MagickOffsetType
Definition: magick-type.h:127
Definition: image.h:151
ExceptionType
Definition: exception.h:27
MagickBooleanType
Definition: magick-type.h:156
unsigned int MagickStatusType
Definition: magick-type.h:119
MagickPrivate MagickBooleanType XRenderImage(Image *, const DrawInfo *, const PointInfo *, TypeMetric *, ExceptionInfo *)
Definition: xwindow.c:9968
size_t MagickSizeType
Definition: magick-type.h:128
#define MagickPathExtent
MagickPrivate MagickBooleanType XComponentGenesis(void)
Definition: xwindow.c:10000
#define MagickPrivate
#define MagickExport