]> granicus.if.org Git - imagemagick/blob - MagickCore/xwindow-private.h
The -preview option is an image operator
[imagemagick] / MagickCore / xwindow-private.h
1 /*
2   Copyright 1999-2017 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"
24 #include "MagickCore/nt-base-private.h"
25 #include "MagickCore/pixel-accessor.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
137   RectangleInfo
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
234   QuantizeInfo
235     *quantize_info;
236
237   size_t
238     colors;
239
240   MagickBooleanType
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
260   MagickBooleanType
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
273   MagickBooleanType
274     display_warnings,
275     gamma_correct;
276
277   char
278     *icon_geometry;
279
280   MagickBooleanType
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
309   MagickBooleanType
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
395   MagickBooleanType
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
428   MagickBooleanType
429     orphan,
430     mapped,
431     stasis;
432
433   Image
434     *image;
435
436   MagickBooleanType
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
503 extern MagickPrivate MagickBooleanType
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
575 extern MagickExport MagickBooleanType
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
600 extern MagickPrivate MagickBooleanType
601   XRenderImage(Image *,const DrawInfo *,const PointInfo *,TypeMetric *,
602     ExceptionInfo *);
603
604 #if defined(__cplusplus) || defined(c_plusplus)
605 }
606 #endif
607
608 #endif