1 /*
2  * This file is part of gtkD.
3  *
4  * gtkD is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License
6  * as published by the Free Software Foundation; either version 3
7  * of the License, or (at your option) any later version, with
8  * some exceptions, please read the COPYING file.
9  *
10  * gtkD is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with gtkD; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
18  */
19 
20 // generated automatically - do not change
21 // find conversion definition on APILookup.txt
22 // implement new conversion functionalities on the wrap.utils pakage
23 
24 
25 module gdk.c.types;
26 
27 public import cairo.c.types;
28 public import gdkpixbuf.c.types;
29 public import gio.c.types;
30 public import glib.c.types;
31 public import gobject.c.types;
32 public import pango.c.types;
33 
34 
35 /**
36  * Positioning hints for aligning a surface relative to a rectangle.
37  *
38  * These hints determine how the surface should be positioned in the case that
39  * the surface would fall off-screen if placed in its ideal position.
40  *
41  * For example, %GDK_ANCHOR_FLIP_X will replace %GDK_GRAVITY_NORTH_WEST with
42  * %GDK_GRAVITY_NORTH_EAST and vice versa if the surface extends beyond the left
43  * or right edges of the monitor.
44  *
45  * If %GDK_ANCHOR_SLIDE_X is set, the surface can be shifted horizontally to fit
46  * on-screen. If %GDK_ANCHOR_RESIZE_X is set, the surface can be shrunken
47  * horizontally to fit.
48  *
49  * In general, when multiple flags are set, flipping should take precedence over
50  * sliding, which should take precedence over resizing.
51  */
52 public enum GdkAnchorHints
53 {
54 	/**
55 	 * allow flipping anchors horizontally
56 	 */
57 	FLIP_X = 1,
58 	/**
59 	 * allow flipping anchors vertically
60 	 */
61 	FLIP_Y = 2,
62 	/**
63 	 * allow sliding surface horizontally
64 	 */
65 	SLIDE_X = 4,
66 	/**
67 	 * allow sliding surface vertically
68 	 */
69 	SLIDE_Y = 8,
70 	/**
71 	 * allow resizing surface horizontally
72 	 */
73 	RESIZE_X = 16,
74 	/**
75 	 * allow resizing surface vertically
76 	 */
77 	RESIZE_Y = 32,
78 	/**
79 	 * allow flipping anchors on both axes
80 	 */
81 	FLIP = 3,
82 	/**
83 	 * allow sliding surface on both axes
84 	 */
85 	SLIDE = 12,
86 	/**
87 	 * allow resizing surface on both axes
88 	 */
89 	RESIZE = 48,
90 }
91 alias GdkAnchorHints AnchorHints;
92 
93 /**
94  * Flags describing the current capabilities of a device/tool.
95  */
96 public enum GdkAxisFlags
97 {
98 	/**
99 	 * X axis is present
100 	 */
101 	X = 2,
102 	/**
103 	 * Y axis is present
104 	 */
105 	Y = 4,
106 	/**
107 	 * Scroll X delta axis is present
108 	 */
109 	DELTA_X = 8,
110 	/**
111 	 * Scroll Y delta axis is present
112 	 */
113 	DELTA_Y = 16,
114 	/**
115 	 * Pressure axis is present
116 	 */
117 	PRESSURE = 32,
118 	/**
119 	 * X tilt axis is present
120 	 */
121 	XTILT = 64,
122 	/**
123 	 * Y tilt axis is present
124 	 */
125 	YTILT = 128,
126 	/**
127 	 * Wheel axis is present
128 	 */
129 	WHEEL = 256,
130 	/**
131 	 * Distance axis is present
132 	 */
133 	DISTANCE = 512,
134 	/**
135 	 * Z-axis rotation is present
136 	 */
137 	ROTATION = 1024,
138 	/**
139 	 * Slider axis is present
140 	 */
141 	SLIDER = 2048,
142 }
143 alias GdkAxisFlags AxisFlags;
144 
145 /**
146  * Defines how device axes are interpreted by GTK.
147  *
148  * Note that the X and Y axes are not really needed; pointer devices
149  * report their location via the x/y members of events regardless. Whether
150  * X and Y are present as axes depends on the GDK backend.
151  */
152 public enum GdkAxisUse
153 {
154 	/**
155 	 * the axis is ignored.
156 	 */
157 	IGNORE = 0,
158 	/**
159 	 * the axis is used as the x axis.
160 	 */
161 	X = 1,
162 	/**
163 	 * the axis is used as the y axis.
164 	 */
165 	Y = 2,
166 	/**
167 	 * the axis is used as the scroll x delta
168 	 */
169 	DELTA_X = 3,
170 	/**
171 	 * the axis is used as the scroll y delta
172 	 */
173 	DELTA_Y = 4,
174 	/**
175 	 * the axis is used for pressure information.
176 	 */
177 	PRESSURE = 5,
178 	/**
179 	 * the axis is used for x tilt information.
180 	 */
181 	XTILT = 6,
182 	/**
183 	 * the axis is used for y tilt information.
184 	 */
185 	YTILT = 7,
186 	/**
187 	 * the axis is used for wheel information.
188 	 */
189 	WHEEL = 8,
190 	/**
191 	 * the axis is used for pen/tablet distance information
192 	 */
193 	DISTANCE = 9,
194 	/**
195 	 * the axis is used for pen rotation information
196 	 */
197 	ROTATION = 10,
198 	/**
199 	 * the axis is used for pen slider information
200 	 */
201 	SLIDER = 11,
202 	/**
203 	 * a constant equal to the numerically highest axis value.
204 	 */
205 	LAST = 12,
206 }
207 alias GdkAxisUse AxisUse;
208 
209 /**
210  * Specifies the crossing mode for enter and leave events.
211  */
212 public enum GdkCrossingMode
213 {
214 	/**
215 	 * crossing because of pointer motion.
216 	 */
217 	NORMAL = 0,
218 	/**
219 	 * crossing because a grab is activated.
220 	 */
221 	GRAB = 1,
222 	/**
223 	 * crossing because a grab is deactivated.
224 	 */
225 	UNGRAB = 2,
226 	/**
227 	 * crossing because a GTK grab is activated.
228 	 */
229 	GTK_GRAB = 3,
230 	/**
231 	 * crossing because a GTK grab is deactivated.
232 	 */
233 	GTK_UNGRAB = 4,
234 	/**
235 	 * crossing because a GTK widget changed
236 	 * state (e.g. sensitivity).
237 	 */
238 	STATE_CHANGED = 5,
239 	/**
240 	 * crossing because a touch sequence has begun,
241 	 * this event is synthetic as the pointer might have not left the surface.
242 	 */
243 	TOUCH_BEGIN = 6,
244 	/**
245 	 * crossing because a touch sequence has ended,
246 	 * this event is synthetic as the pointer might have not left the surface.
247 	 */
248 	TOUCH_END = 7,
249 	/**
250 	 * crossing because of a device switch (i.e.
251 	 * a mouse taking control of the pointer after a touch device), this event
252 	 * is synthetic as the pointer didn’t leave the surface.
253 	 */
254 	DEVICE_SWITCH = 8,
255 }
256 alias GdkCrossingMode CrossingMode;
257 
258 /**
259  * A pad feature.
260  */
261 public enum GdkDevicePadFeature
262 {
263 	/**
264 	 * a button
265 	 */
266 	BUTTON = 0,
267 	/**
268 	 * a ring-shaped interactive area
269 	 */
270 	RING = 1,
271 	/**
272 	 * a straight interactive area
273 	 */
274 	STRIP = 2,
275 }
276 alias GdkDevicePadFeature DevicePadFeature;
277 
278 /**
279  * Indicates the specific type of tool being used being a tablet. Such as an
280  * airbrush, pencil, etc.
281  */
282 public enum GdkDeviceToolType
283 {
284 	/**
285 	 * Tool is of an unknown type.
286 	 */
287 	UNKNOWN = 0,
288 	/**
289 	 * Tool is a standard tablet stylus.
290 	 */
291 	PEN = 1,
292 	/**
293 	 * Tool is standard tablet eraser.
294 	 */
295 	ERASER = 2,
296 	/**
297 	 * Tool is a brush stylus.
298 	 */
299 	BRUSH = 3,
300 	/**
301 	 * Tool is a pencil stylus.
302 	 */
303 	PENCIL = 4,
304 	/**
305 	 * Tool is an airbrush stylus.
306 	 */
307 	AIRBRUSH = 5,
308 	/**
309 	 * Tool is a mouse.
310 	 */
311 	MOUSE = 6,
312 	/**
313 	 * Tool is a lens cursor.
314 	 */
315 	LENS = 7,
316 }
317 alias GdkDeviceToolType DeviceToolType;
318 
319 /**
320  * Used in `GdkDrop` and `GdkDrag` to indicate the actions that the
321  * destination can and should do with the dropped data.
322  */
323 public enum GdkDragAction
324 {
325 	/**
326 	 * Copy the data.
327 	 */
328 	COPY = 1,
329 	/**
330 	 * Move the data, i.e. first copy it, then delete
331 	 * it from the source using the DELETE target of the X selection protocol.
332 	 */
333 	MOVE = 2,
334 	/**
335 	 * Add a link to the data. Note that this is only
336 	 * useful if source and destination agree on what it means, and is not
337 	 * supported on all platforms.
338 	 */
339 	LINK = 4,
340 	/**
341 	 * Ask the user what to do with the data.
342 	 */
343 	ASK = 8,
344 }
345 alias GdkDragAction DragAction;
346 
347 /**
348  * Used in `GdkDrag` to the reason of a cancelled DND operation.
349  */
350 public enum GdkDragCancelReason
351 {
352 	/**
353 	 * There is no suitable drop target.
354 	 */
355 	NO_TARGET = 0,
356 	/**
357 	 * Drag cancelled by the user
358 	 */
359 	USER_CANCELLED = 1,
360 	/**
361 	 * Unspecified error.
362 	 */
363 	ERROR = 2,
364 }
365 alias GdkDragCancelReason DragCancelReason;
366 
367 /**
368  * Specifies the type of the event.
369  */
370 public enum GdkEventType
371 {
372 	/**
373 	 * the window manager has requested that the toplevel surface be
374 	 * hidden or destroyed, usually when the user clicks on a special icon in the
375 	 * title bar.
376 	 */
377 	DELETE = 0,
378 	/**
379 	 * the pointer (usually a mouse) has moved.
380 	 */
381 	MOTION_NOTIFY = 1,
382 	/**
383 	 * a mouse button has been pressed.
384 	 */
385 	BUTTON_PRESS = 2,
386 	/**
387 	 * a mouse button has been released.
388 	 */
389 	BUTTON_RELEASE = 3,
390 	/**
391 	 * a key has been pressed.
392 	 */
393 	KEY_PRESS = 4,
394 	/**
395 	 * a key has been released.
396 	 */
397 	KEY_RELEASE = 5,
398 	/**
399 	 * the pointer has entered the surface.
400 	 */
401 	ENTER_NOTIFY = 6,
402 	/**
403 	 * the pointer has left the surface.
404 	 */
405 	LEAVE_NOTIFY = 7,
406 	/**
407 	 * the keyboard focus has entered or left the surface.
408 	 */
409 	FOCUS_CHANGE = 8,
410 	/**
411 	 * an input device has moved into contact with a sensing
412 	 * surface (e.g. a touchscreen or graphics tablet).
413 	 */
414 	PROXIMITY_IN = 9,
415 	/**
416 	 * an input device has moved out of contact with a sensing
417 	 * surface.
418 	 */
419 	PROXIMITY_OUT = 10,
420 	/**
421 	 * the mouse has entered the surface while a drag is in progress.
422 	 */
423 	DRAG_ENTER = 11,
424 	/**
425 	 * the mouse has left the surface while a drag is in progress.
426 	 */
427 	DRAG_LEAVE = 12,
428 	/**
429 	 * the mouse has moved in the surface while a drag is in
430 	 * progress.
431 	 */
432 	DRAG_MOTION = 13,
433 	/**
434 	 * a drop operation onto the surface has started.
435 	 */
436 	DROP_START = 14,
437 	/**
438 	 * the scroll wheel was turned
439 	 */
440 	SCROLL = 15,
441 	/**
442 	 * a pointer or keyboard grab was broken.
443 	 */
444 	GRAB_BROKEN = 16,
445 	/**
446 	 * A new touch event sequence has just started.
447 	 */
448 	TOUCH_BEGIN = 17,
449 	/**
450 	 * A touch event sequence has been updated.
451 	 */
452 	TOUCH_UPDATE = 18,
453 	/**
454 	 * A touch event sequence has finished.
455 	 */
456 	TOUCH_END = 19,
457 	/**
458 	 * A touch event sequence has been canceled.
459 	 */
460 	TOUCH_CANCEL = 20,
461 	/**
462 	 * A touchpad swipe gesture event, the current state
463 	 * is determined by its phase field.
464 	 */
465 	TOUCHPAD_SWIPE = 21,
466 	/**
467 	 * A touchpad pinch gesture event, the current state
468 	 * is determined by its phase field.
469 	 */
470 	TOUCHPAD_PINCH = 22,
471 	/**
472 	 * A tablet pad button press event.
473 	 */
474 	PAD_BUTTON_PRESS = 23,
475 	/**
476 	 * A tablet pad button release event.
477 	 */
478 	PAD_BUTTON_RELEASE = 24,
479 	/**
480 	 * A tablet pad axis event from a "ring".
481 	 */
482 	PAD_RING = 25,
483 	/**
484 	 * A tablet pad axis event from a "strip".
485 	 */
486 	PAD_STRIP = 26,
487 	/**
488 	 * A tablet pad group mode change.
489 	 */
490 	PAD_GROUP_MODE = 27,
491 	/**
492 	 * marks the end of the GdkEventType enumeration.
493 	 */
494 	EVENT_LAST = 28,
495 }
496 alias GdkEventType EventType;
497 
498 /**
499  * Used to represent the different paint clock phases that can be requested.
500  *
501  * The elements of the enumeration correspond to the signals of `GdkFrameClock`.
502  */
503 public enum GdkFrameClockPhase
504 {
505 	/**
506 	 * no phase
507 	 */
508 	NONE = 0,
509 	/**
510 	 * corresponds to GdkFrameClock::flush-events. Should not be handled by applications.
511 	 */
512 	FLUSH_EVENTS = 1,
513 	/**
514 	 * corresponds to GdkFrameClock::before-paint. Should not be handled by applications.
515 	 */
516 	BEFORE_PAINT = 2,
517 	/**
518 	 * corresponds to GdkFrameClock::update.
519 	 */
520 	UPDATE = 4,
521 	/**
522 	 * corresponds to GdkFrameClock::layout. Should not be handled by applicatiosn.
523 	 */
524 	LAYOUT = 8,
525 	/**
526 	 * corresponds to GdkFrameClock::paint.
527 	 */
528 	PAINT = 16,
529 	/**
530 	 * corresponds to GdkFrameClock::resume-events. Should not be handled by applications.
531 	 */
532 	RESUME_EVENTS = 32,
533 	/**
534 	 * corresponds to GdkFrameClock::after-paint. Should not be handled by applications.
535 	 */
536 	AFTER_PAINT = 64,
537 }
538 alias GdkFrameClockPhase FrameClockPhase;
539 
540 /**
541  * Indicates which monitor a surface should span over when in fullscreen mode.
542  */
543 public enum GdkFullscreenMode
544 {
545 	/**
546 	 * Fullscreen on current monitor only.
547 	 */
548 	CURRENT_MONITOR = 0,
549 	/**
550 	 * Span across all monitors when fullscreen.
551 	 */
552 	ALL_MONITORS = 1,
553 }
554 alias GdkFullscreenMode FullscreenMode;
555 
556 /**
557  * Error enumeration for `GdkGLContext`.
558  */
559 public enum GdkGLError
560 {
561 	/**
562 	 * OpenGL support is not available
563 	 */
564 	NOT_AVAILABLE = 0,
565 	/**
566 	 * The requested visual format is not supported
567 	 */
568 	UNSUPPORTED_FORMAT = 1,
569 	/**
570 	 * The requested profile is not supported
571 	 */
572 	UNSUPPORTED_PROFILE = 2,
573 	/**
574 	 * The shader compilation failed
575 	 */
576 	COMPILATION_FAILED = 3,
577 	/**
578 	 * The shader linking failed
579 	 */
580 	LINK_FAILED = 4,
581 }
582 alias GdkGLError GLError;
583 
584 /**
585  * Defines the reference point of a surface and is used in #GdkPopupLayout.
586  */
587 public enum GdkGravity
588 {
589 	/**
590 	 * the reference point is at the top left corner.
591 	 */
592 	NORTH_WEST = 1,
593 	/**
594 	 * the reference point is in the middle of the top edge.
595 	 */
596 	NORTH = 2,
597 	/**
598 	 * the reference point is at the top right corner.
599 	 */
600 	NORTH_EAST = 3,
601 	/**
602 	 * the reference point is at the middle of the left edge.
603 	 */
604 	WEST = 4,
605 	/**
606 	 * the reference point is at the center of the surface.
607 	 */
608 	CENTER = 5,
609 	/**
610 	 * the reference point is at the middle of the right edge.
611 	 */
612 	EAST = 6,
613 	/**
614 	 * the reference point is at the lower left corner.
615 	 */
616 	SOUTH_WEST = 7,
617 	/**
618 	 * the reference point is at the middle of the lower edge.
619 	 */
620 	SOUTH = 8,
621 	/**
622 	 * the reference point is at the lower right corner.
623 	 */
624 	SOUTH_EAST = 9,
625 	/**
626 	 * the reference point is at the top left corner of the
627 	 * surface itself, ignoring window manager decorations.
628 	 */
629 	STATIC = 10,
630 }
631 alias GdkGravity Gravity;
632 
633 /**
634  * An enumeration describing the type of an input device in general terms.
635  */
636 public enum GdkInputSource
637 {
638 	/**
639 	 * the device is a mouse. (This will be reported for the core
640 	 * pointer, even if it is something else, such as a trackball.)
641 	 */
642 	MOUSE = 0,
643 	/**
644 	 * the device is a stylus of a graphics tablet or similar device.
645 	 */
646 	PEN = 1,
647 	/**
648 	 * the device is a keyboard.
649 	 */
650 	KEYBOARD = 2,
651 	/**
652 	 * the device is a direct-input touch device, such
653 	 * as a touchscreen or tablet
654 	 */
655 	TOUCHSCREEN = 3,
656 	/**
657 	 * the device is an indirect touch device, such
658 	 * as a touchpad
659 	 */
660 	TOUCHPAD = 4,
661 	/**
662 	 * the device is a trackpoint
663 	 */
664 	TRACKPOINT = 5,
665 	/**
666 	 * the device is a "pad", a collection of buttons,
667 	 * rings and strips found in drawing tablets
668 	 */
669 	TABLET_PAD = 6,
670 }
671 alias GdkInputSource InputSource;
672 
673 /**
674  * Describes how well an event matches a given keyval and modifiers.
675  *
676  * `GdkKeyMatch` values are returned by [method@Gdk.KeyEvent.matches].
677  */
678 public enum GdkKeyMatch
679 {
680 	/**
681 	 * The key event does not match
682 	 */
683 	NONE = 0,
684 	/**
685 	 * The key event matches if keyboard state
686 	 * (specifically, the currently active group) is ignored
687 	 */
688 	PARTIAL = 1,
689 	/**
690 	 * The key event matches
691 	 */
692 	EXACT = 2,
693 }
694 alias GdkKeyMatch KeyMatch;
695 
696 /**
697  * `GdkMemoryFormat` describes a format that bytes can have in memory.
698  *
699  * It describes formats by listing the contents of the memory passed to it.
700  * So GDK_MEMORY_A8R8G8B8 will be 1 byte (8 bits) of alpha, followed by a
701  * byte each of red, green and blue. It is not endian-dependent, so
702  * CAIRO_FORMAT_ARGB32 is represented by different `GdkMemoryFormats`
703  * on architectures with different endiannesses.
704  *
705  * Its naming is modelled after VkFormat (see
706  * https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VkFormat
707  * for details).
708  */
709 public enum GdkMemoryFormat
710 {
711 	/**
712 	 * 4 bytes; for blue, green, red, alpha.
713 	 * The color values are premultiplied with the alpha value.
714 	 */
715 	B8G8R8A8_PREMULTIPLIED = 0,
716 	/**
717 	 * 4 bytes; for alpha, red, green, blue.
718 	 * The color values are premultiplied with the alpha value.
719 	 */
720 	A8R8G8B8_PREMULTIPLIED = 1,
721 	/**
722 	 * 4 bytes; for red, green, blue, alpha
723 	 * The color values are premultiplied with the alpha value.
724 	 */
725 	R8G8B8A8_PREMULTIPLIED = 2,
726 	/**
727 	 * 4 bytes; for blue, green, red, alpha.
728 	 */
729 	B8G8R8A8 = 3,
730 	/**
731 	 * 4 bytes; for alpha, red, green, blue.
732 	 */
733 	A8R8G8B8 = 4,
734 	/**
735 	 * 4 bytes; for red, green, blue, alpha.
736 	 */
737 	R8G8B8A8 = 5,
738 	/**
739 	 * 4 bytes; for alpha, blue, green, red.
740 	 */
741 	A8B8G8R8 = 6,
742 	/**
743 	 * 3 bytes; for red, green, blue. The data is opaque.
744 	 */
745 	R8G8B8 = 7,
746 	/**
747 	 * 3 bytes; for blue, green, red. The data is opaque.
748 	 */
749 	B8G8R8 = 8,
750 	/**
751 	 * The number of formats. This value will change as
752 	 * more formats get added, so do not rely on its concrete integer.
753 	 */
754 	N_FORMATS = 9,
755 }
756 alias GdkMemoryFormat MemoryFormat;
757 
758 /**
759  * Flags to indicate the state of modifier keys and mouse buttons
760  * in events.
761  *
762  * Typical modifier keys are Shift, Control, Meta, Super, Hyper, Alt, Compose,
763  * Apple, CapsLock or ShiftLock.
764  *
765  * Note that GDK may add internal values to events which include values outside
766  * of this enumeration. Your code should preserve and ignore them.  You can use
767  * %GDK_MODIFIER_MASK to remove all private values.
768  */
769 public enum GdkModifierType
770 {
771 	/**
772 	 * the Shift key.
773 	 */
774 	SHIFT_MASK = 1,
775 	/**
776 	 * a Lock key (depending on the modifier mapping of the
777 	 * X server this may either be CapsLock or ShiftLock).
778 	 */
779 	LOCK_MASK = 2,
780 	/**
781 	 * the Control key.
782 	 */
783 	CONTROL_MASK = 4,
784 	/**
785 	 * the fourth modifier key (it depends on the modifier
786 	 * mapping of the X server which key is interpreted as this modifier, but
787 	 * normally it is the Alt key).
788 	 */
789 	ALT_MASK = 8,
790 	/**
791 	 * the first mouse button.
792 	 */
793 	BUTTON1_MASK = 256,
794 	/**
795 	 * the second mouse button.
796 	 */
797 	BUTTON2_MASK = 512,
798 	/**
799 	 * the third mouse button.
800 	 */
801 	BUTTON3_MASK = 1024,
802 	/**
803 	 * the fourth mouse button.
804 	 */
805 	BUTTON4_MASK = 2048,
806 	/**
807 	 * the fifth mouse button.
808 	 */
809 	BUTTON5_MASK = 4096,
810 	/**
811 	 * the Super modifier
812 	 */
813 	SUPER_MASK = 67108864,
814 	/**
815 	 * the Hyper modifier
816 	 */
817 	HYPER_MASK = 134217728,
818 	/**
819 	 * the Meta modifier
820 	 */
821 	META_MASK = 268435456,
822 }
823 alias GdkModifierType ModifierType;
824 
825 /**
826  * Specifies the kind of crossing for enter and leave events.
827  *
828  * See the X11 protocol specification of LeaveNotify for
829  * full details of crossing event generation.
830  */
831 public enum GdkNotifyType
832 {
833 	/**
834 	 * the surface is entered from an ancestor or
835 	 * left towards an ancestor.
836 	 */
837 	ANCESTOR = 0,
838 	/**
839 	 * the pointer moves between an ancestor and an
840 	 * inferior of the surface.
841 	 */
842 	VIRTUAL = 1,
843 	/**
844 	 * the surface is entered from an inferior or
845 	 * left towards an inferior.
846 	 */
847 	INFERIOR = 2,
848 	/**
849 	 * the surface is entered from or left towards
850 	 * a surface which is neither an ancestor nor an inferior.
851 	 */
852 	NONLINEAR = 3,
853 	/**
854 	 * the pointer moves between two surfaces
855 	 * which are not ancestors of each other and the surface is part of
856 	 * the ancestor chain between one of these surfaces and their least
857 	 * common ancestor.
858 	 */
859 	NONLINEAR_VIRTUAL = 4,
860 	/**
861 	 * an unknown type of enter/leave event occurred.
862 	 */
863 	UNKNOWN = 5,
864 }
865 alias GdkNotifyType NotifyType;
866 
867 /**
868  * Flags about a paintable object.
869  *
870  * Implementations use these for optimizations such as caching.
871  */
872 public enum GdkPaintableFlags
873 {
874 	/**
875 	 * The size is immutable.
876 	 * The [signal@GdkPaintable::invalidate-size] signal will never be
877 	 * emitted.
878 	 */
879 	SIZE = 1,
880 	/**
881 	 * The content is immutable.
882 	 * The [signal@GdkPaintable::invalidate-contents] signal will never be
883 	 * emitted.
884 	 */
885 	CONTENTS = 2,
886 }
887 alias GdkPaintableFlags PaintableFlags;
888 
889 /**
890  * Specifies the direction for scroll events.
891  */
892 public enum GdkScrollDirection
893 {
894 	/**
895 	 * the surface is scrolled up.
896 	 */
897 	UP = 0,
898 	/**
899 	 * the surface is scrolled down.
900 	 */
901 	DOWN = 1,
902 	/**
903 	 * the surface is scrolled to the left.
904 	 */
905 	LEFT = 2,
906 	/**
907 	 * the surface is scrolled to the right.
908 	 */
909 	RIGHT = 3,
910 	/**
911 	 * the scrolling is determined by the delta values
912 	 * in scroll events. See gdk_scroll_event_get_deltas()
913 	 */
914 	SMOOTH = 4,
915 }
916 alias GdkScrollDirection ScrollDirection;
917 
918 /**
919  * Flags describing the seat capabilities.
920  */
921 public enum GdkSeatCapabilities
922 {
923 	/**
924 	 * No input capabilities
925 	 */
926 	NONE = 0,
927 	/**
928 	 * The seat has a pointer (e.g. mouse)
929 	 */
930 	POINTER = 1,
931 	/**
932 	 * The seat has touchscreen(s) attached
933 	 */
934 	TOUCH = 2,
935 	/**
936 	 * The seat has drawing tablet(s) attached
937 	 */
938 	TABLET_STYLUS = 4,
939 	/**
940 	 * The seat has keyboard(s) attached
941 	 */
942 	KEYBOARD = 8,
943 	/**
944 	 * The seat has drawing tablet pad(s) attached
945 	 */
946 	TABLET_PAD = 16,
947 	/**
948 	 * The union of all pointing capabilities
949 	 */
950 	ALL_POINTING = 7,
951 	/**
952 	 * The union of all capabilities
953 	 */
954 	ALL = 15,
955 }
956 alias GdkSeatCapabilities SeatCapabilities;
957 
958 /**
959  * This enumeration describes how the red, green and blue components
960  * of physical pixels on an output device are laid out.
961  */
962 public enum GdkSubpixelLayout
963 {
964 	/**
965 	 * The layout is not known
966 	 */
967 	UNKNOWN = 0,
968 	/**
969 	 * Not organized in this way
970 	 */
971 	NONE = 1,
972 	/**
973 	 * The layout is horizontal, the order is RGB
974 	 */
975 	HORIZONTAL_RGB = 2,
976 	/**
977 	 * The layout is horizontal, the order is BGR
978 	 */
979 	HORIZONTAL_BGR = 3,
980 	/**
981 	 * The layout is vertical, the order is RGB
982 	 */
983 	VERTICAL_RGB = 4,
984 	/**
985 	 * The layout is vertical, the order is BGR
986 	 */
987 	VERTICAL_BGR = 5,
988 }
989 alias GdkSubpixelLayout SubpixelLayout;
990 
991 /**
992  * Determines a surface edge or corner.
993  */
994 public enum GdkSurfaceEdge
995 {
996 	/**
997 	 * the top left corner.
998 	 */
999 	NORTH_WEST = 0,
1000 	/**
1001 	 * the top edge.
1002 	 */
1003 	NORTH = 1,
1004 	/**
1005 	 * the top right corner.
1006 	 */
1007 	NORTH_EAST = 2,
1008 	/**
1009 	 * the left edge.
1010 	 */
1011 	WEST = 3,
1012 	/**
1013 	 * the right edge.
1014 	 */
1015 	EAST = 4,
1016 	/**
1017 	 * the lower left corner.
1018 	 */
1019 	SOUTH_WEST = 5,
1020 	/**
1021 	 * the lower edge.
1022 	 */
1023 	SOUTH = 6,
1024 	/**
1025 	 * the lower right corner.
1026 	 */
1027 	SOUTH_EAST = 7,
1028 }
1029 alias GdkSurfaceEdge SurfaceEdge;
1030 
1031 /**
1032  * Specifies the state of a toplevel surface.
1033  *
1034  * On platforms that support information about individual edges, the
1035  * %GDK_TOPLEVEL_STATE_TILED state will be set whenever any of the individual
1036  * tiled states is set. On platforms that lack that support, the tiled state
1037  * will give an indication of tiledness without any of the per-edge states
1038  * being set.
1039  */
1040 public enum GdkToplevelState
1041 {
1042 	/**
1043 	 * the surface is minimized
1044 	 */
1045 	MINIMIZED = 1,
1046 	/**
1047 	 * the surface is maximized
1048 	 */
1049 	MAXIMIZED = 2,
1050 	/**
1051 	 * the surface is sticky
1052 	 */
1053 	STICKY = 4,
1054 	/**
1055 	 * the surface is maximized without decorations
1056 	 */
1057 	FULLSCREEN = 8,
1058 	/**
1059 	 * the surface is kept above other surfaces
1060 	 */
1061 	ABOVE = 16,
1062 	/**
1063 	 * the surface is kept below other surfaces
1064 	 */
1065 	BELOW = 32,
1066 	/**
1067 	 * the surface is presented as focused (with active decorations)
1068 	 */
1069 	FOCUSED = 64,
1070 	/**
1071 	 * the surface is in a tiled state
1072 	 */
1073 	TILED = 128,
1074 	/**
1075 	 * whether the top edge is tiled
1076 	 */
1077 	TOP_TILED = 256,
1078 	/**
1079 	 * whether the top edge is resizable
1080 	 */
1081 	TOP_RESIZABLE = 512,
1082 	/**
1083 	 * whether the right edge is tiled
1084 	 */
1085 	RIGHT_TILED = 1024,
1086 	/**
1087 	 * whether the right edge is resizable
1088 	 */
1089 	RIGHT_RESIZABLE = 2048,
1090 	/**
1091 	 * whether the bottom edge is tiled
1092 	 */
1093 	BOTTOM_TILED = 4096,
1094 	/**
1095 	 * whether the bottom edge is resizable
1096 	 */
1097 	BOTTOM_RESIZABLE = 8192,
1098 	/**
1099 	 * whether the left edge is tiled
1100 	 */
1101 	LEFT_TILED = 16384,
1102 	/**
1103 	 * whether the left edge is resizable
1104 	 */
1105 	LEFT_RESIZABLE = 32768,
1106 }
1107 alias GdkToplevelState ToplevelState;
1108 
1109 /**
1110  * Specifies the current state of a touchpad gesture.
1111  *
1112  * All gestures are guaranteed to begin with an event with phase
1113  * %GDK_TOUCHPAD_GESTURE_PHASE_BEGIN, followed by 0 or several events
1114  * with phase %GDK_TOUCHPAD_GESTURE_PHASE_UPDATE.
1115  *
1116  * A finished gesture may have 2 possible outcomes, an event with phase
1117  * %GDK_TOUCHPAD_GESTURE_PHASE_END will be emitted when the gesture is
1118  * considered successful, this should be used as the hint to perform any
1119  * permanent changes.
1120  *
1121  * Cancelled gestures may be so for a variety of reasons, due to hardware
1122  * or the compositor, or due to the gesture recognition layers hinting the
1123  * gesture did not finish resolutely (eg. a 3rd finger being added during
1124  * a pinch gesture). In these cases, the last event will report the phase
1125  * %GDK_TOUCHPAD_GESTURE_PHASE_CANCEL, this should be used as a hint
1126  * to undo any visible/permanent changes that were done throughout the
1127  * progress of the gesture.
1128  */
1129 public enum GdkTouchpadGesturePhase
1130 {
1131 	/**
1132 	 * The gesture has begun.
1133 	 */
1134 	BEGIN = 0,
1135 	/**
1136 	 * The gesture has been updated.
1137 	 */
1138 	UPDATE = 1,
1139 	/**
1140 	 * The gesture was finished, changes
1141 	 * should be permanently applied.
1142 	 */
1143 	END = 2,
1144 	/**
1145 	 * The gesture was cancelled, all
1146 	 * changes should be undone.
1147 	 */
1148 	CANCEL = 3,
1149 }
1150 alias GdkTouchpadGesturePhase TouchpadGesturePhase;
1151 
1152 /**
1153  * Error enumeration for #GdkVulkanContext.
1154  */
1155 public enum GdkVulkanError
1156 {
1157 	/**
1158 	 * Vulkan is not supported on this backend or has not been
1159 	 * compiled in.
1160 	 */
1161 	UNSUPPORTED = 0,
1162 	/**
1163 	 * Vulkan support is not available on this Surface
1164 	 */
1165 	NOT_AVAILABLE = 1,
1166 }
1167 alias GdkVulkanError VulkanError;
1168 
1169 struct GdkAppLaunchContext;
1170 
1171 struct GdkButtonEvent;
1172 
1173 struct GdkCairoContext;
1174 
1175 struct GdkClipboard;
1176 
1177 struct GdkContentDeserializer;
1178 
1179 struct GdkContentFormats;
1180 
1181 struct GdkContentFormatsBuilder;
1182 
1183 struct GdkContentProvider
1184 {
1185 	GObject parent;
1186 }
1187 
1188 /**
1189  * Class structure for #GdkContentProvider.
1190  */
1191 struct GdkContentProviderClass
1192 {
1193 	GObjectClass parentClass;
1194 	/** */
1195 	extern(C) void function(GdkContentProvider* provider) contentChanged;
1196 	/** */
1197 	extern(C) void function(GdkContentProvider* provider, GdkClipboard* clipboard) attachClipboard;
1198 	/** */
1199 	extern(C) void function(GdkContentProvider* provider, GdkClipboard* clipboard) detachClipboard;
1200 	/**
1201 	 *
1202 	 * Params:
1203 	 *     provider = a #GdkContentProvider
1204 	 * Returns: The formats of the provider
1205 	 */
1206 	extern(C) GdkContentFormats* function(GdkContentProvider* provider) refFormats;
1207 	/**
1208 	 *
1209 	 * Params:
1210 	 *     provider = a #GdkContentProvider
1211 	 * Returns: The storable formats of the provider
1212 	 */
1213 	extern(C) GdkContentFormats* function(GdkContentProvider* provider) refStorableFormats;
1214 	/** */
1215 	extern(C) void function(GdkContentProvider* provider, const(char)* mimeType, GOutputStream* stream, int ioPriority, GCancellable* cancellable, GAsyncReadyCallback callback, void* userData) writeMimeTypeAsync;
1216 	/**
1217 	 *
1218 	 * Params:
1219 	 *     provider = a `GdkContentProvider`
1220 	 *     result = a `GAsyncResult`
1221 	 * Returns: %TRUE if the operation was completed successfully. Otherwise
1222 	 *     @error will be set to describe the failure.
1223 	 *
1224 	 * Throws: GException on failure.
1225 	 */
1226 	extern(C) int function(GdkContentProvider* provider, GAsyncResult* result, GError** err) writeMimeTypeFinish;
1227 	/**
1228 	 *
1229 	 * Params:
1230 	 *     provider = a `GdkContentProvider`
1231 	 *     value = the `GValue` to fill
1232 	 * Returns: %TRUE if the value was set successfully. Otherwise
1233 	 *     @error will be set to describe the failure.
1234 	 *
1235 	 * Throws: GException on failure.
1236 	 */
1237 	extern(C) int function(GdkContentProvider* provider, GValue* value, GError** err) getValue;
1238 	void*[8] padding;
1239 }
1240 
1241 struct GdkContentSerializer;
1242 
1243 struct GdkCrossingEvent;
1244 
1245 struct GdkCursor;
1246 
1247 struct GdkDNDEvent;
1248 
1249 struct GdkDeleteEvent;
1250 
1251 struct GdkDevice;
1252 
1253 struct GdkDevicePad;
1254 
1255 struct GdkDevicePadInterface;
1256 
1257 struct GdkDeviceTool;
1258 
1259 struct GdkDisplay;
1260 
1261 struct GdkDisplayManager;
1262 
1263 struct GdkDrag;
1264 
1265 struct GdkDragSurface;
1266 
1267 /**
1268  * The `GdkDragSurfaceInterface` implementation is private to GDK.
1269  */
1270 struct GdkDragSurfaceInterface;
1271 
1272 struct GdkDrawContext;
1273 
1274 struct GdkDrop;
1275 
1276 struct GdkEvent;
1277 
1278 /**
1279  * `GdkEventSequence` is an opaque type representing a sequence
1280  * of related touch events.
1281  */
1282 struct GdkEventSequence;
1283 
1284 struct GdkFocusEvent;
1285 
1286 struct GdkFrameClock;
1287 
1288 struct GdkFrameClockClass;
1289 
1290 struct GdkFrameClockPrivate;
1291 
1292 struct GdkFrameTimings;
1293 
1294 struct GdkGLContext;
1295 
1296 struct GdkGLTexture;
1297 
1298 struct GdkGLTextureClass;
1299 
1300 struct GdkGrabBrokenEvent;
1301 
1302 struct GdkKeyEvent;
1303 
1304 /**
1305  * A `GdkKeymapKey` is a hardware key that can be mapped to a keyval.
1306  */
1307 struct GdkKeymapKey
1308 {
1309 	/**
1310 	 * the hardware keycode. This is an identifying number for a
1311 	 * physical key.
1312 	 */
1313 	uint keycode;
1314 	/**
1315 	 * indicates movement in a horizontal direction. Usually groups are used
1316 	 * for two different languages. In group 0, a key might have two English
1317 	 * characters, and in group 1 it might have two Hebrew characters. The Hebrew
1318 	 * characters will be printed on the key next to the English characters.
1319 	 */
1320 	int group;
1321 	/**
1322 	 * indicates which symbol on the key will be used, in a vertical direction.
1323 	 * So on a standard US keyboard, the key with the number “1” on it also has the
1324 	 * exclamation point ("!") character on it. The level indicates whether to use
1325 	 * the “1” or the “!” symbol. The letter keys are considered to have a lowercase
1326 	 * letter at level 0, and an uppercase letter at level 1, though only the
1327 	 * uppercase letter is printed.
1328 	 */
1329 	int level;
1330 }
1331 
1332 struct GdkMemoryTexture;
1333 
1334 struct GdkMemoryTextureClass;
1335 
1336 struct GdkMonitor;
1337 
1338 struct GdkMonitorClass;
1339 
1340 struct GdkMotionEvent;
1341 
1342 struct GdkPadEvent;
1343 
1344 struct GdkPaintable;
1345 
1346 /**
1347  * The list of functions that can be implemented for the `GdkPaintable`
1348  * interface.
1349  *
1350  * Note that apart from the #GdkPaintableInterface.snapshot() function, no
1351  * virtual function of this interface is mandatory to implement, though it
1352  * is a good idea to implement #GdkPaintableInterface.get_current_image()
1353  * for non-static paintables and #GdkPaintableInterface.get_flags() if the
1354  * image is not dynamic as the default implementation returns no flags and
1355  * that will make the implementation likely quite slow.
1356  */
1357 struct GdkPaintableInterface
1358 {
1359 	GTypeInterface gIface;
1360 	/** */
1361 	extern(C) void function(GdkPaintable* paintable, GdkSnapshot* snapshot, double width, double height) snapshot;
1362 	/**
1363 	 *
1364 	 * Params:
1365 	 *     paintable = a `GdkPaintable`
1366 	 * Returns: An immutable paintable for the current
1367 	 *     contents of @paintable.
1368 	 */
1369 	extern(C) GdkPaintable* function(GdkPaintable* paintable) getCurrentImage;
1370 	/**
1371 	 *
1372 	 * Params:
1373 	 *     paintable = a `GdkPaintable`
1374 	 * Returns: The `GdkPaintableFlags` for this paintable
1375 	 */
1376 	extern(C) GdkPaintableFlags function(GdkPaintable* paintable) getFlags;
1377 	/**
1378 	 *
1379 	 * Params:
1380 	 *     paintable = a `GdkPaintable`
1381 	 * Returns: the intrinsic width of @paintable or 0 if none.
1382 	 */
1383 	extern(C) int function(GdkPaintable* paintable) getIntrinsicWidth;
1384 	/**
1385 	 *
1386 	 * Params:
1387 	 *     paintable = a `GdkPaintable`
1388 	 * Returns: the intrinsic height of @paintable or 0 if none.
1389 	 */
1390 	extern(C) int function(GdkPaintable* paintable) getIntrinsicHeight;
1391 	/**
1392 	 *
1393 	 * Params:
1394 	 *     paintable = a `GdkPaintable`
1395 	 * Returns: the intrinsic aspect ratio of @paintable or 0 if none.
1396 	 */
1397 	extern(C) double function(GdkPaintable* paintable) getIntrinsicAspectRatio;
1398 }
1399 
1400 struct GdkPopup;
1401 
1402 struct GdkPopupInterface;
1403 
1404 struct GdkPopupLayout;
1405 
1406 struct GdkProximityEvent;
1407 
1408 struct GdkRGBA
1409 {
1410 	/**
1411 	 * The intensity of the red channel from 0.0 to 1.0 inclusive
1412 	 */
1413 	float red;
1414 	/**
1415 	 * The intensity of the green channel from 0.0 to 1.0 inclusive
1416 	 */
1417 	float green;
1418 	/**
1419 	 * The intensity of the blue channel from 0.0 to 1.0 inclusive
1420 	 */
1421 	float blue;
1422 	/**
1423 	 * The opacity of the color from 0.0 for completely translucent to
1424 	 * 1.0 for opaque
1425 	 */
1426 	float alpha;
1427 }
1428 
1429 /**
1430  * A `GdkRectangle` data type for representing rectangles.
1431  *
1432  * `GdkRectangle` is identical to `cairo_rectangle_t`. Together with Cairo’s
1433  * `cairo_region_t` data type, these are the central types for representing
1434  * sets of pixels.
1435  *
1436  * The intersection of two rectangles can be computed with
1437  * [method@Gdk.Rectangle.intersect]; to find the union of two rectangles use
1438  * [method@Gdk.Rectangle.union].
1439  *
1440  * The `cairo_region_t` type provided by Cairo is usually used for managing
1441  * non-rectangular clipping of graphical operations.
1442  *
1443  * The Graphene library has a number of other data types for regions and
1444  * volumes in 2D and 3D.
1445  */
1446 struct GdkRectangle
1447 {
1448 	/**
1449 	 * the x coordinate of the top left corner
1450 	 */
1451 	int x;
1452 	/**
1453 	 * the y coordinate of the top left corner
1454 	 */
1455 	int y;
1456 	/**
1457 	 * the width of the rectangle
1458 	 */
1459 	int width;
1460 	/**
1461 	 * the height of the rectangle
1462 	 */
1463 	int height;
1464 }
1465 
1466 struct GdkScrollEvent;
1467 
1468 struct GdkSeat
1469 {
1470 	GObject parentInstance;
1471 }
1472 
1473 struct GdkSnapshot;
1474 
1475 struct GdkSnapshotClass;
1476 
1477 struct GdkSurface;
1478 
1479 struct GdkSurfaceClass;
1480 
1481 struct GdkTexture;
1482 
1483 struct GdkTextureClass;
1484 
1485 /**
1486  * A #GdkTimeCoord stores a single event in a motion history.
1487  */
1488 struct GdkTimeCoord
1489 {
1490 	/**
1491 	 * The timestamp for this event.
1492 	 */
1493 	uint time;
1494 	/**
1495 	 * Flags indicating what axes are present
1496 	 */
1497 	GdkAxisFlags flags;
1498 	/**
1499 	 * axis values
1500 	 */
1501 	double[12] axes;
1502 }
1503 
1504 struct GdkToplevel;
1505 
1506 struct GdkToplevelInterface;
1507 
1508 struct GdkToplevelLayout;
1509 
1510 struct GdkToplevelSize;
1511 
1512 struct GdkTouchEvent;
1513 
1514 struct GdkTouchpadEvent;
1515 
1516 struct GdkVulkanContext;
1517 
1518 /**
1519  * The type of a function that can be registered with gdk_content_register_deserializer().
1520  *
1521  * When the function gets called to operate on content, it can call functions on the
1522  * @deserializer object to obtain the mime type, input stream, user data, etc. for its
1523  * operation.
1524  *
1525  * Params:
1526  *     deserializer = a #GdkContentDeserializer
1527  */
1528 public alias extern(C) void function(GdkContentDeserializer* deserializer) GdkContentDeserializeFunc;
1529 
1530 /**
1531  * The type of a function that can be registered with gdk_content_register_serializer().
1532  *
1533  * When the function gets called to operate on content, it can call functions on the
1534  * @serializer object to obtain the mime type, output stream, user data, etc. for its
1535  * operation.
1536  *
1537  * Params:
1538  *     serializer = a #GdkContentSerializer
1539  */
1540 public alias extern(C) void function(GdkContentSerializer* serializer) GdkContentSerializeFunc;
1541 
1542 /**
1543  * Defines all possible DND actions.
1544  *
1545  * This can be used in [method@Gdk.Drop.status] messages when any drop
1546  * can be accepted or a more specific drop method is not yet known.
1547  */
1548 enum ACTION_ALL = 7;
1549 alias GDK_ACTION_ALL = ACTION_ALL;
1550 
1551 /**
1552  * The middle button.
1553  */
1554 enum BUTTON_MIDDLE = 2;
1555 alias GDK_BUTTON_MIDDLE = BUTTON_MIDDLE;
1556 
1557 /**
1558  * The primary button. This is typically the left mouse button, or the
1559  * right button in a left-handed setup.
1560  */
1561 enum BUTTON_PRIMARY = 1;
1562 alias GDK_BUTTON_PRIMARY = BUTTON_PRIMARY;
1563 
1564 /**
1565  * The secondary button. This is typically the right mouse button, or the
1566  * left button in a left-handed setup.
1567  */
1568 enum BUTTON_SECONDARY = 3;
1569 alias GDK_BUTTON_SECONDARY = BUTTON_SECONDARY;
1570 
1571 /**
1572  * Represents the current time, and can be used anywhere a time is expected.
1573  */
1574 enum CURRENT_TIME = 0;
1575 alias GDK_CURRENT_TIME = CURRENT_TIME;
1576 
1577 /**
1578  * Use this macro as the return value for continuing the propagation of
1579  * an event handler.
1580  */
1581 enum EVENT_PROPAGATE = false;
1582 alias GDK_EVENT_PROPAGATE = EVENT_PROPAGATE;
1583 
1584 /**
1585  * Use this macro as the return value for stopping the propagation of
1586  * an event handler.
1587  */
1588 enum EVENT_STOP = true;
1589 alias GDK_EVENT_STOP = EVENT_STOP;
1590 
1591 /**
1592  * A mask covering all entries in `GdkModifierType`.
1593  */
1594 enum MODIFIER_MASK = 469769999;
1595 alias GDK_MODIFIER_MASK = MODIFIER_MASK;
1596 
1597 /**
1598  * This is the priority that the idle handler processing surface updates
1599  * is given in the main loop.
1600  */
1601 enum PRIORITY_REDRAW = 120;
1602 alias GDK_PRIORITY_REDRAW = PRIORITY_REDRAW;