1 /* 2 Copyright 1999-2019 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. You may 6 obtain a copy of the License at 7 8 https://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 609