1 /* GDK - The GIMP Drawing Kit
2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the Free
16 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 #ifndef __GDK_TYPES_H__
19 #define __GDK_TYPES_H__
24 /* GDK uses "glib". (And so does GTK).
30 #define GDK_CURRENT_TIME 0L
31 #define GDK_PARENT_RELATIVE 1L
33 /* special deviceid for core pointer events */
34 #define GDK_CORE_POINTER 0xfedc
39 #endif /* __cplusplus */
42 /* Type definitions for the basic structures.
45 typedef gulong GdkAtom;
46 typedef struct _GdkColor GdkColor;
47 typedef struct _GdkColormap GdkColormap;
48 typedef struct _GdkVisual GdkVisual;
49 typedef struct _GdkWindowAttr GdkWindowAttr;
50 typedef struct _GdkWindow GdkWindow;
51 typedef struct _GdkWindow GdkPixmap;
52 typedef struct _GdkWindow GdkBitmap;
53 typedef struct _GdkWindow GdkDrawable;
54 typedef struct _GdkImage GdkImage;
55 typedef struct _GdkGCValues GdkGCValues;
56 typedef struct _GdkGC GdkGC;
57 typedef struct _GdkPoint GdkPoint;
58 typedef struct _GdkRectangle GdkRectangle;
59 typedef struct _GdkSegment GdkSegment;
60 typedef struct _GdkFont GdkFont;
61 typedef struct _GdkCursor GdkCursor;
63 typedef struct _GdkEventAny GdkEventAny;
64 typedef struct _GdkEventExpose GdkEventExpose;
65 typedef struct _GdkEventMotion GdkEventMotion;
66 typedef struct _GdkEventButton GdkEventButton;
67 typedef struct _GdkEventKey GdkEventKey;
68 typedef struct _GdkEventFocus GdkEventFocus;
69 typedef struct _GdkEventCrossing GdkEventCrossing;
70 typedef struct _GdkEventConfigure GdkEventConfigure;
71 typedef struct _GdkEventProperty GdkEventProperty;
72 typedef struct _GdkEventSelection GdkEventSelection;
73 typedef struct _GdkEventProximity GdkEventProximity;
74 typedef struct _GdkEventOther GdkEventOther;
75 typedef struct _GdkEventDragBegin GdkEventDragBegin;
76 typedef struct _GdkEventDragRequest GdkEventDragRequest;
77 typedef struct _GdkEventDropEnter GdkEventDropEnter;
78 typedef struct _GdkEventDropDataAvailable GdkEventDropDataAvailable;
79 typedef struct _GdkEventDropLeave GdkEventDropLeave;
80 typedef struct _GdkEventClient GdkEventClient;
81 typedef union _GdkEvent GdkEvent;
82 typedef struct _GdkDeviceInfo GdkDeviceInfo;
83 typedef struct _GdkTimeCoord GdkTimeCoord;
84 typedef gint (*GdkEventFunc) (GdkEvent *event,
93 * Root: There is only 1 root window and it is initialized
94 * at startup. Creating a window of type GDK_WINDOW_ROOT
96 * Toplevel: Windows which interact with the window manager.
97 * Child: Windows which are children of some other type of window.
98 * (Any other type of window). Most windows are child windows.
99 * Dialog: A special kind of toplevel window which interacts with
100 * the window manager slightly differently than a regular
101 * toplevel window. Dialog windows should be used for any
103 * Pixmap: Pixmaps are really just another kind of window which
104 * doesn't actually appear on the screen. It can't have
105 * children, either and is really just a convenience so
106 * that the drawing functions can work on both windows
107 * and pixmaps transparently. (ie. You shouldn't pass a
108 * pixmap to any procedure which accepts a window with the
109 * exception of the drawing functions).
121 /* Classes of windows.
122 * InputOutput: Almost every window should be of this type. Such windows
123 * receive events and are also displayed on screen.
124 * InputOnly: Used only in special circumstances when events need to be
125 * stolen from another window or windows. Input only windows
126 * have no visible output, so they are handy for placing over
127 * top of a group of windows in order to grab the events (or
128 * filter the events) from those windows.
137 * Normal: Normal X image type. These are slow as they involve passing
138 * the entire image through the X connection each time a draw
139 * request is required.
140 * Shared: Shared memory X image type. These are fast as the X server
141 * and the program actually use the same piece of memory. They
142 * should be used with care though as there is the possibility
143 * for both the X server and the program to be reading/writing
144 * the image simultaneously and producing undesired results.
163 GDK_VISUAL_STATIC_GRAY,
164 GDK_VISUAL_GRAYSCALE,
165 GDK_VISUAL_STATIC_COLOR,
166 GDK_VISUAL_PSEUDO_COLOR,
167 GDK_VISUAL_TRUE_COLOR,
168 GDK_VISUAL_DIRECT_COLOR
172 * GDK_FONT_FONT: the font is an XFontStruct.
173 * GDK_FONT_FONTSET: the font is an XFontSet used for I18N.
181 /* Window attribute mask values.
182 * GDK_WA_TITLE: The "title" field is valid.
183 * GDK_WA_X: The "x" field is valid.
184 * GDK_WA_Y: The "y" field is valid.
185 * GDK_WA_CURSOR: The "cursor" field is valid.
186 * GDK_WA_COLORMAP: The "colormap" field is valid.
187 * GDK_WA_VISUAL: The "visual" field is valid.
191 GDK_WA_TITLE = 1 << 1,
194 GDK_WA_CURSOR = 1 << 4,
195 GDK_WA_COLORMAP = 1 << 5,
196 GDK_WA_VISUAL = 1 << 6,
197 GDK_WA_WMCLASS = 1 << 7
198 } GdkWindowAttributesType;
200 /* Size restriction enumeration.
204 GDK_HINT_POS = 1 << 0,
205 GDK_HINT_MIN_SIZE = 1 << 1,
206 GDK_HINT_MAX_SIZE = 1 << 2
209 /* GC function types.
210 * Copy: Overwrites destination pixels with the source pixels.
211 * Invert: Inverts the destination pixels.
212 * Xor: Xor's the destination pixels with the source pixels.
243 GDK_LINE_ON_OFF_DASH,
277 #include <gdk/gdkcursors.h>
282 * Nothing: No event occurred.
283 * Delete: A window delete event was sent by the window manager.
284 * The specified window should be deleted.
285 * Destroy: A window has been destroyed.
286 * Expose: Part of a window has been uncovered.
287 * MotionNotify: The mouse has moved.
288 * ButtonPress: A mouse button was pressed.
289 * ButtonRelease: A mouse button was release.
290 * KeyPress: A key was pressed.
291 * KeyRelease: A key was released.
292 * EnterNotify: A window was entered.
293 * LeaveNotify: A window was exited.
294 * FocusChange: The focus window has changed. (The focus window gets
296 * Resize: A window has been resized.
297 * Map: A window has been mapped. (It is now visible on the screen).
298 * Unmap: A window has been unmapped. (It is no longer visible on
307 GDK_MOTION_NOTIFY = 3,
308 GDK_BUTTON_PRESS = 4,
309 GDK_2BUTTON_PRESS = 5,
310 GDK_3BUTTON_PRESS = 6,
311 GDK_BUTTON_RELEASE = 7,
314 GDK_ENTER_NOTIFY = 10,
315 GDK_LEAVE_NOTIFY = 11,
316 GDK_FOCUS_CHANGE = 12,
320 GDK_PROPERTY_NOTIFY = 16,
321 GDK_SELECTION_CLEAR = 17,
322 GDK_SELECTION_REQUEST = 18,
323 GDK_SELECTION_NOTIFY = 19,
324 GDK_PROXIMITY_IN = 20,
325 GDK_PROXIMITY_OUT = 21,
327 GDK_DRAG_REQUEST = 23,
330 GDK_DROP_DATA_AVAIL = 26,
331 GDK_CLIENT_EVENT = 27,
332 GDK_OTHER_EVENT = 9999
335 /* Event masks. (Used to select what types of events a window
340 GDK_EXPOSURE_MASK = 1 << 1,
341 GDK_POINTER_MOTION_MASK = 1 << 2,
342 GDK_POINTER_MOTION_HINT_MASK = 1 << 3,
343 GDK_BUTTON_MOTION_MASK = 1 << 4,
344 GDK_BUTTON1_MOTION_MASK = 1 << 5,
345 GDK_BUTTON2_MOTION_MASK = 1 << 6,
346 GDK_BUTTON3_MOTION_MASK = 1 << 7,
347 GDK_BUTTON_PRESS_MASK = 1 << 8,
348 GDK_BUTTON_RELEASE_MASK = 1 << 9,
349 GDK_KEY_PRESS_MASK = 1 << 10,
350 GDK_KEY_RELEASE_MASK = 1 << 11,
351 GDK_ENTER_NOTIFY_MASK = 1 << 12,
352 GDK_LEAVE_NOTIFY_MASK = 1 << 13,
353 GDK_FOCUS_CHANGE_MASK = 1 << 14,
354 GDK_STRUCTURE_MASK = 1 << 15,
355 GDK_PROPERTY_CHANGE_MASK = 1 << 16,
356 GDK_PROXIMITY_IN_MASK = 1 << 17,
357 GDK_PROXIMITY_OUT_MASK = 1 << 18,
358 GDK_ALL_EVENTS_MASK = 0x07FFFF
361 /* Types of enter/leave notifications.
367 * Unknown: An unknown type of enter/leave event occurred.
371 GDK_NOTIFY_ANCESTOR = 0,
372 GDK_NOTIFY_VIRTUAL = 1,
373 GDK_NOTIFY_INFERIOR = 2,
374 GDK_NOTIFY_NONLINEAR = 3,
375 GDK_NOTIFY_NONLINEAR_VIRTUAL = 4,
376 GDK_NOTIFY_UNKNOWN = 5
379 /* Types of modifiers.
383 GDK_SHIFT_MASK = 1 << 0,
384 GDK_LOCK_MASK = 1 << 1,
385 GDK_CONTROL_MASK = 1 << 2,
386 GDK_MOD1_MASK = 1 << 3,
387 GDK_MOD2_MASK = 1 << 4,
388 GDK_MOD3_MASK = 1 << 5,
389 GDK_MOD4_MASK = 1 << 6,
390 GDK_MOD5_MASK = 1 << 7,
391 GDK_BUTTON1_MASK = 1 << 8,
392 GDK_BUTTON2_MASK = 1 << 9,
393 GDK_BUTTON3_MASK = 1 << 10,
394 GDK_BUTTON4_MASK = 1 << 11,
395 GDK_BUTTON5_MASK = 1 << 12
400 GDK_CLIP_BY_CHILDREN = 0,
401 GDK_INCLUDE_INFERIORS = 1
406 GDK_INPUT_READ = 1 << 0,
407 GDK_INPUT_WRITE = 1 << 1,
408 GDK_INPUT_EXCEPTION = 1 << 2
415 GDK_ERROR_PARAM = -2,
428 GDK_GC_FOREGROUND = 1 << 0,
429 GDK_GC_BACKGROUND = 1 << 1,
430 GDK_GC_FONT = 1 << 2,
431 GDK_GC_FUNCTION = 1 << 3,
432 GDK_GC_FILL = 1 << 4,
433 GDK_GC_TILE = 1 << 5,
434 GDK_GC_STIPPLE = 1 << 6,
435 GDK_GC_CLIP_MASK = 1 << 7,
436 GDK_GC_SUBWINDOW = 1 << 8,
437 GDK_GC_TS_X_ORIGIN = 1 << 9,
438 GDK_GC_TS_Y_ORIGIN = 1 << 10,
439 GDK_GC_CLIP_X_ORIGIN = 1 << 11,
440 GDK_GC_CLIP_Y_ORIGIN = 1 << 12,
441 GDK_GC_EXPOSURES = 1 << 13,
442 GDK_GC_LINE_WIDTH = 1 << 14,
443 GDK_GC_LINE_STYLE = 1 << 15,
444 GDK_GC_CAP_STYLE = 1 << 16,
445 GDK_GC_JOIN_STYLE = 1 << 17
450 GDK_SELECTION_PRIMARY = 1,
451 GDK_SELECTION_SECONDARY = 2
456 GDK_PROPERTY_NEW_VALUE,
462 GDK_PROP_MODE_REPLACE,
463 GDK_PROP_MODE_PREPEND,
467 /* These definitions are for version 1 of the OffiX D&D protocol,
468 taken from <OffiX/DragAndDropTypes.h> */
471 GDK_DNDTYPE_NOTDND = -1,
472 GDK_DNDTYPE_UNKNOWN = 0,
473 GDK_DNDTYPE_RAWDATA = 1,
474 GDK_DNDTYPE_FILE = 2,
475 GDK_DNDTYPE_FILES = 3,
476 GDK_DNDTYPE_TEXT = 4,
478 GDK_DNDTYPE_LINK = 6,
481 GDK_DNDTYPE_MIME = 9,
485 /* Enums for XInput support */
513 /* The next two types define enums for predefined atoms relating
514 to selections. In general, one will need to use gdk_intern_atom */
518 GDK_TARGET_BITMAP = 5,
519 GDK_TARGET_COLORMAP = 7,
520 GDK_TARGET_DRAWABLE = 17,
521 GDK_TARGET_PIXMAP = 20,
522 GDK_TARGET_STRING = 31
527 GDK_SELECTION_TYPE_ATOM = 4,
528 GDK_SELECTION_TYPE_BITMAP = 5,
529 GDK_SELECTION_TYPE_COLORMAP = 7,
530 GDK_SELECTION_TYPE_DRAWABLE = 17,
531 GDK_SELECTION_TYPE_INTEGER = 19,
532 GDK_SELECTION_TYPE_PIXMAP = 20,
533 GDK_SELECTION_TYPE_WINDOW = 33,
534 GDK_SELECTION_TYPE_STRING = 31
539 GDK_EXTENSION_EVENTS_NONE,
540 GDK_EXTENSION_EVENTS_ALL,
541 GDK_EXTENSION_EVENTS_CURSOR
550 GdkIMPreeditArea = 0x0001L,
551 GdkIMPreeditCallbacks = 0x0002L,
552 GdkIMPreeditPosition = 0x0004L,
553 GdkIMPreeditNothing = 0x0008L,
554 GdkIMPreeditNone = 0x0010L,
555 GdkIMStatusArea = 0x0100L,
556 GdkIMStatusCallbacks = 0x0200L,
557 GdkIMStatusNothing = 0x0400L,
558 GdkIMStatusNone = 0x0800L
561 #define GdkIMPreeditMask \
562 ( GdkIMPreeditArea | GdkIMPreeditCallbacks | \
563 GdkIMPreeditPosition | GdkIMPreeditNothing | \
566 #define GdkIMStatusMask \
567 ( GdkIMStatusArea | GdkIMStatusCallbacks | \
568 GdkIMStatusNothing | GdkIMStatusNone )
572 typedef void (*GdkInputFunction) (gpointer data,
574 GdkInputCondition condition);
577 * A color consists of red, green and blue values in the
578 * range 0-65535 and a pixel value. The pixel value is highly
579 * dependent on the depth and colormap which this color will
580 * be used to draw into. Therefore, sharing colors between
581 * colormaps is a bad idea.
591 /* The colormap type.
592 * Colormaps consist of 256 colors.
596 GdkColor colors[256];
600 * "type" is the type of visual this is (PseudoColor, TrueColor, etc).
601 * "depth" is the bit depth of this visual.
602 * "colormap_size" is the size of a colormap for this visual.
603 * "bits_per_rgb" is the number of significant bits per red, green and blue.
604 * The red, green and blue masks, shifts and precisions refer
605 * to value needed to calculate pixel values in TrueColor and DirectColor
606 * visuals. The "mask" is the significant bits within the pixel. The
607 * "shift" is the number of bits left we must shift a primary for it
608 * to be in position (according to the "mask"). "prec" refers to how
609 * much precision the pixel value contains for a particular primary.
615 GdkByteOrder byte_order;
632 struct _GdkWindowAttr
639 GdkWindowClass wclass;
641 GdkColormap *colormap;
642 GdkWindowType window_type;
645 gchar *wmclass_class;
656 GdkVisual *visual; /* visual used to create the image */
657 GdkByteOrder byte_order;
661 guint16 bpp; /* bytes per pixel */
662 guint16 bpl; /* bytes per line */
671 GdkFunction function;
675 GdkPixmap *clip_mask;
676 GdkSubwindowMode subwindow_mode;
681 gint graphics_exposures;
683 GdkLineStyle line_style;
684 GdkCapStyle cap_style;
685 GdkJoinStyle join_style;
727 /* Types for XInput support */
729 struct _GdkDeviceInfo
733 GdkInputSource source;
735 gint has_cursor; /* TRUE if the X pointer follows device motion */
737 GdkAxisUse *axes; /* Specifies use for each axis */
757 struct _GdkEventExpose
762 gint count; /* If non-zero, how many more events follow. */
765 struct _GdkEventMotion
777 GdkInputSource source;
781 struct _GdkEventButton
793 GdkInputSource source;
808 struct _GdkEventCrossing
812 GdkWindow *subwindow;
813 GdkNotifyType detail;
816 struct _GdkEventFocus
823 struct _GdkEventConfigure
832 struct _GdkEventProperty
841 struct _GdkEventSelection
852 /* This event type will be used pretty rarely. It only is important
853 for XInput aware programs that are drawing their own cursor */
855 struct _GdkEventProximity
860 GdkInputSource source;
864 struct _GdkEventDragRequest
871 guint protocol_version:4;
874 guint delete_data:1; /* Do *not* delete if link is sent, only
881 guint8 isdrop; /* This gdk event can be generated by a couple of
882 X events - this lets the app know whether the
883 drop really occurred or we just set the data */
885 GdkPoint drop_coords;
889 struct _GdkEventDragBegin
895 guint protocol_version:4;
902 struct _GdkEventDropEnter
909 guint protocol_version:4;
911 guint extended_typelist:1;
918 struct _GdkEventDropLeave
925 guint protocol_version:4;
932 struct _GdkEventDropDataAvailable
939 guint protocol_version:4;
945 gchar *data_type; /* MIME type */
946 gulong data_numbytes;
950 struct _GdkEventClient
954 GdkAtom message_type;
967 struct _GdkEventOther
978 GdkEventExpose expose;
979 GdkEventMotion motion;
980 GdkEventButton button;
982 GdkEventCrossing crossing;
983 GdkEventFocus focus_change;
984 GdkEventConfigure configure;
985 GdkEventProperty property;
986 GdkEventSelection selection;
987 GdkEventProximity proximity;
988 GdkEventDragBegin dragbegin;
989 GdkEventDragRequest dragrequest;
990 GdkEventDropEnter dropenter;
991 GdkEventDropLeave dropleave;
992 GdkEventDropDataAvailable dropdataavailable;
993 GdkEventClient client;
1000 #endif /* __cplusplus */
1003 #endif /* __GDK_TYPES_H__ */