00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _MAGICKCORE_XWINDOW_PRIVATE_H
00019 #define _MAGICKCORE_XWINDOW_PRIVATE_H
00020
00021 #if defined(__cplusplus) || defined(c_plusplus)
00022 extern "C" {
00023 #endif
00024
00025 #if defined(MAGICKCORE_X11_DELEGATE)
00026
00027 #include <X11/Xos.h>
00028 #include <X11/Xlib.h>
00029 #include <X11/Xatom.h>
00030 #include <X11/cursorfont.h>
00031 #include <X11/keysym.h>
00032 #include <X11/Xresource.h>
00033 #include <X11/Xutil.h>
00034 #include "magick/exception.h"
00035 #include "magick/geometry.h"
00036 #include "magick/quantize.h"
00037
00038 #if defined(__cplusplus) || defined(c_plusplus)
00039 # define klass c_class
00040 #else
00041 # define klass class
00042 #endif
00043
00044
00045
00046
00047 #if XlibSpecificationRelease < 6
00048 #if !defined(PRE_R6_ICCCM)
00049 #define PRE_R6_ICCCM
00050 #endif
00051 #endif
00052
00053
00054
00055 #if !defined(XlibSpecificationRelease)
00056 #define PRE_R5_ICCCM
00057 #endif
00058
00059
00060
00061 #if !defined(PWinGravity)
00062 #define PRE_R4_ICCCM
00063 #endif
00064
00065 #define MaxIconSize 96
00066 #define MaxNumberPens 11
00067 #define MaxNumberFonts 11
00068 #define MaxXWindows 12
00069 #undef index
00070
00071 #define ThrowXWindowException(severity,tag,context) \
00072 { \
00073 ExceptionInfo \
00074 exception; \
00075 \
00076 GetExceptionInfo(&exception); \
00077 (void) ThrowMagickException(&exception,GetMagickModule(),severity, \
00078 tag == (const char *) NULL ? "unknown" : tag,"`%s': %s",context, \
00079 strerror(errno)); \
00080 CatchException(&exception); \
00081 (void) DestroyExceptionInfo(&exception); \
00082 }
00083 #define ThrowXWindowFatalException(severity,tag,context) \
00084 { \
00085 ThrowXWindowException(severity,tag,context); \
00086 _exit(1); \
00087 }
00088
00089 typedef enum
00090 {
00091 ForegroundStencil,
00092 BackgroundStencil,
00093 OpaqueStencil,
00094 TransparentStencil
00095 } AnnotationStencil;
00096
00097 typedef enum
00098 {
00099 UndefinedElement,
00100 PointElement,
00101 LineElement,
00102 RectangleElement,
00103 FillRectangleElement,
00104 CircleElement,
00105 FillCircleElement,
00106 EllipseElement,
00107 FillEllipseElement,
00108 PolygonElement,
00109 FillPolygonElement,
00110 ColorElement,
00111 MatteElement,
00112 TextElement,
00113 ImageElement
00114 } ElementType;
00115
00116 typedef enum
00117 {
00118 UndefinedColormap,
00119 PrivateColormap,
00120 SharedColormap
00121 } XColormapType;
00122
00123 typedef struct _XDrawInfo
00124 {
00125 int
00126 x,
00127 y;
00128
00129 unsigned int
00130 width,
00131 height;
00132
00133 double
00134 degrees;
00135
00136 AnnotationStencil
00137 stencil;
00138
00139 ElementType
00140 element;
00141
00142 Pixmap
00143 stipple;
00144
00145 unsigned int
00146 line_width;
00147
00148 XSegment
00149 line_info;
00150
00151 unsigned int
00152 number_coordinates;
00153
00154 RectangleInfo
00155 rectangle_info;
00156
00157 XPoint
00158 *coordinate_info;
00159
00160 char
00161 geometry[MaxTextExtent];
00162 } XDrawInfo;
00163
00164 typedef enum
00165 {
00166 DefaultState = 0x0000,
00167 EscapeState = 0x0001,
00168 ExitState = 0x0002,
00169 FormerImageState = 0x0004,
00170 ModifierState = 0x0008,
00171 MontageImageState = 0x0010,
00172 NextImageState = 0x0020,
00173 RetainColorsState = 0x0040,
00174 SuspendTime = 50,
00175 UpdateConfigurationState = 0x0080,
00176 UpdateRegionState = 0x0100
00177 } XState;
00178
00179 typedef struct _XAnnotateInfo
00180 {
00181 int
00182 x,
00183 y;
00184
00185 unsigned int
00186 width,
00187 height;
00188
00189 double
00190 degrees;
00191
00192 XFontStruct
00193 *font_info;
00194
00195 char
00196 *text;
00197
00198 AnnotationStencil
00199 stencil;
00200
00201 char
00202 geometry[MaxTextExtent];
00203
00204 struct _XAnnotateInfo
00205 *next,
00206 *previous;
00207 } XAnnotateInfo;
00208
00209 typedef struct _XPixelInfo
00210 {
00211 unsigned long
00212 colors,
00213 *pixels;
00214
00215 XColor
00216 foreground_color,
00217 background_color,
00218 border_color,
00219 matte_color,
00220 highlight_color,
00221 shadow_color,
00222 depth_color,
00223 trough_color,
00224 box_color,
00225 pen_color,
00226 pen_colors[MaxNumberPens];
00227
00228 GC
00229 annotate_context,
00230 highlight_context,
00231 widget_context;
00232
00233 unsigned short
00234 box_index,
00235 pen_index;
00236 } XPixelInfo;
00237
00238 typedef struct _XResourceInfo
00239 {
00240 XrmDatabase
00241 resource_database;
00242
00243 ImageInfo
00244 *image_info;
00245
00246 QuantizeInfo
00247 *quantize_info;
00248
00249 unsigned long
00250 colors;
00251
00252 MagickBooleanType
00253 close_server,
00254 backdrop;
00255
00256 char
00257 *background_color,
00258 *border_color;
00259
00260 char
00261 *client_name;
00262
00263 XColormapType
00264 colormap;
00265
00266 unsigned int
00267 border_width;
00268
00269 unsigned long
00270 delay;
00271
00272 MagickBooleanType
00273 color_recovery,
00274 confirm_exit,
00275 confirm_edit;
00276
00277 char
00278 *display_gamma;
00279
00280 char
00281 *font,
00282 *font_name[MaxNumberFonts],
00283 *foreground_color;
00284
00285 MagickBooleanType
00286 display_warnings,
00287 gamma_correct;
00288
00289 char
00290 *icon_geometry;
00291
00292 MagickBooleanType
00293 iconic,
00294 immutable;
00295
00296 char
00297 *image_geometry;
00298
00299 char
00300 *map_type,
00301 *matte_color,
00302 *name;
00303
00304 unsigned int
00305 magnify,
00306 pause;
00307
00308 char
00309 *pen_colors[MaxNumberPens];
00310
00311 char
00312 *text_font,
00313 *title;
00314
00315 int
00316 quantum;
00317
00318 unsigned int
00319 update;
00320
00321 MagickBooleanType
00322 use_pixmap,
00323 use_shared_memory;
00324
00325 unsigned long
00326 undo_cache;
00327
00328 char
00329 *visual_type,
00330 *window_group,
00331 *window_id,
00332 *write_filename;
00333
00334 Image
00335 *copy_image;
00336
00337 int
00338 gravity;
00339
00340 char
00341 home_directory[MaxTextExtent];
00342 } XResourceInfo;
00343
00344 typedef struct _XWindowInfo
00345 {
00346 Window
00347 id;
00348
00349 Window
00350 root;
00351
00352 Visual
00353 *visual;
00354
00355 unsigned int
00356 storage_class,
00357 depth;
00358
00359 XVisualInfo
00360 *visual_info;
00361
00362 XStandardColormap
00363 *map_info;
00364
00365 XPixelInfo
00366 *pixel_info;
00367
00368 XFontStruct
00369 *font_info;
00370
00371 GC
00372 annotate_context,
00373 highlight_context,
00374 widget_context;
00375
00376 Cursor
00377 cursor,
00378 busy_cursor;
00379
00380 char
00381 *name,
00382 *geometry,
00383 *icon_name,
00384 *icon_geometry,
00385 *crop_geometry;
00386
00387 unsigned long
00388 data,
00389 flags;
00390
00391 int
00392 x,
00393 y;
00394
00395 unsigned int
00396 width,
00397 height,
00398 min_width,
00399 min_height,
00400 width_inc,
00401 height_inc,
00402 border_width;
00403
00404 MagickBooleanType
00405 use_pixmap,
00406 immutable,
00407 shape,
00408 shared_memory;
00409
00410 int
00411 screen;
00412
00413 XImage
00414 *ximage,
00415 *matte_image;
00416
00417 Pixmap
00418 highlight_stipple,
00419 shadow_stipple,
00420 pixmap,
00421 *pixmaps,
00422 matte_pixmap,
00423 *matte_pixmaps;
00424
00425 XSetWindowAttributes
00426 attributes;
00427
00428 XWindowChanges
00429 window_changes;
00430
00431 void
00432 *segment_info;
00433
00434 unsigned long
00435 mask;
00436
00437 MagickBooleanType
00438 orphan,
00439 mapped,
00440 stasis;
00441
00442 Image
00443 *image;
00444
00445 MagickBooleanType
00446 destroy;
00447 } XWindowInfo;
00448
00449 typedef struct _XWindows
00450 {
00451 Display
00452 *display;
00453
00454 XStandardColormap
00455 *map_info,
00456 *icon_map;
00457
00458 XVisualInfo
00459 *visual_info,
00460 *icon_visual;
00461
00462 XPixelInfo
00463 *pixel_info,
00464 *icon_pixel;
00465
00466 XFontStruct
00467 *font_info;
00468
00469 XResourceInfo
00470 *icon_resources;
00471
00472 XClassHint
00473 *class_hints;
00474
00475 XWMHints
00476 *manager_hints;
00477
00478 XWindowInfo
00479 context,
00480 group_leader,
00481 backdrop,
00482 icon,
00483 image,
00484 info,
00485 magnify,
00486 pan,
00487 command,
00488 widget,
00489 popup;
00490
00491 Atom
00492 wm_protocols,
00493 wm_delete_window,
00494 wm_take_focus,
00495 im_protocols,
00496 im_remote_command,
00497 im_update_widget,
00498 im_update_colormap,
00499 im_former_image,
00500 im_retain_colors,
00501 im_next_image,
00502 im_exit,
00503 dnd_protocols;
00504 } XWindows;
00505
00506 extern MagickExport char
00507 *XGetResourceClass(XrmDatabase,const char *,const char *,char *),
00508 *XGetResourceInstance(XrmDatabase,const char *,const char *,const char *),
00509 *XGetScreenDensity(Display *);
00510
00511 extern MagickExport Cursor
00512 XMakeCursor(Display *,Window,Colormap,char *,char *);
00513
00514 extern MagickExport int
00515 XCheckDefineCursor(Display *,Window,Cursor),
00516 XError(Display *,XErrorEvent *);
00517
00518 extern MagickExport MagickBooleanType
00519 XAnnotateImage(Display *,const XPixelInfo *,XAnnotateInfo *,Image *),
00520 XDrawImage(Display *,const XPixelInfo *,XDrawInfo *,Image *),
00521 XGetWindowColor(Display *,XWindows *,char *),
00522 XMagickProgressMonitor(const char *,const MagickOffsetType,
00523 const MagickSizeType,void *),
00524 XMakeImage(Display *,const XResourceInfo *,XWindowInfo *,Image *,unsigned int,
00525 unsigned int),
00526 XQueryColorDatabase(const char *,XColor *),
00527 XRemoteCommand(Display *,const char *,const char *);
00528
00529 extern MagickExport void
00530 DestroyXResources(void),
00531 XBestIconSize(Display *,XWindowInfo *,Image *),
00532 XBestPixel(Display *,const Colormap,XColor *,unsigned int,XColor *),
00533 XCheckRefreshWindows(Display *,XWindows *),
00534 XClientMessage(Display *,const Window,const Atom,const Atom,const Time),
00535 XConfigureImageColormap(Display *,XResourceInfo *,XWindows *,Image *),
00536 XConstrainWindowPosition(Display *,XWindowInfo *),
00537 XDelay(Display *,const unsigned long),
00538 XDestroyResourceInfo(XResourceInfo *),
00539 XDestroyWindowColors(Display *,Window),
00540 XDisplayImageInfo(Display *,const XResourceInfo *,XWindows *,Image *,Image *),
00541 XFreeResources(Display *,XVisualInfo *,XStandardColormap *,XPixelInfo *,
00542 XFontStruct *,XResourceInfo *,XWindowInfo *),
00543 XFreeStandardColormap(Display *,const XVisualInfo *,XStandardColormap *,
00544 XPixelInfo *),
00545 XHighlightEllipse(Display *,Window,GC,const RectangleInfo *),
00546 XHighlightLine(Display *,Window,GC,const XSegment *),
00547 XHighlightRectangle(Display *,Window,GC,const RectangleInfo *),
00548 XGetAnnotateInfo(XAnnotateInfo *),
00549 XGetPixelPacket(Display *,const XVisualInfo *,const XStandardColormap *,
00550 const XResourceInfo *,Image *,XPixelInfo *),
00551 XGetMapInfo(const XVisualInfo *,const Colormap,XStandardColormap *),
00552 XGetResourceInfo(XrmDatabase,const char *,XResourceInfo *),
00553 XGetWindowInfo(Display *,XVisualInfo *,XStandardColormap *,XPixelInfo *,
00554 XFontStruct *,XResourceInfo *,XWindowInfo *),
00555 XMakeMagnifyImage(Display *,XWindows *),
00556 XMakeStandardColormap(Display *,XVisualInfo *,XResourceInfo *,Image *,
00557 XStandardColormap *,XPixelInfo *),
00558 XMakeWindow(Display *,Window,char **,int,XClassHint *,XWMHints *,
00559 XWindowInfo *),
00560 XQueryPosition(Display *,const Window,int *,int *),
00561 XRefreshWindow(Display *,const XWindowInfo *,const XEvent *),
00562 XRetainWindowColors(Display *,const Window),
00563 XSetCursorState(Display *,XWindows *,const MagickStatusType),
00564 XUserPreferences(XResourceInfo *),
00565 XWarning(const ExceptionType,const char *,const char *);
00566
00567 extern MagickExport Window
00568 XWindowByID(Display *,const Window,const unsigned long),
00569 XWindowByName(Display *,const Window,const char *),
00570 XWindowByProperty(Display *,const Window,const Atom);
00571
00572 extern MagickExport XFontStruct
00573 *XBestFont(Display *,const XResourceInfo *,const MagickBooleanType);
00574
00575 extern MagickExport XrmDatabase
00576 XGetResourceDatabase(Display *,const char *);
00577
00578 extern MagickExport XVisualInfo
00579 *XBestVisualInfo(Display *,XStandardColormap *,XResourceInfo *);
00580
00581 extern MagickExport XWindows
00582 *XInitializeWindows(Display *,XResourceInfo *),
00583 *XSetWindows(XWindows *);
00584
00585 static inline MagickRealType XPixelIntensity(const XColor *pixel)
00586 {
00587 MagickRealType
00588 intensity;
00589
00590 intensity=0.299*pixel->red+0.587*pixel->green+0.114*pixel->blue;
00591 return(intensity);
00592 }
00593
00594 #endif
00595
00596 #if defined(__cplusplus) || defined(c_plusplus)
00597 }
00598 #endif
00599
00600 #endif