// Generated by gmmproc 2.66.7 -- DO NOT MODIFY! #ifndef _GDKMM_EVENT_H #define _GDKMM_EVENT_H #include #include /* Copyright (C) 1998-2002 The gtkmm Development Team * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include /* Shadow DELETE macro (from winnt.h). */ #if defined(DELETE) && !defined(GTKMM_MACRO_SHADOW_DELETE) enum { GTKMM_MACRO_DEFINITION_DELETE = DELETE }; #undef DELETE enum { DELETE = GTKMM_MACRO_DEFINITION_DELETE }; #define DELETE DELETE #define GTKMM_MACRO_SHADOW_DELETE 1 #endif #ifndef DOXYGEN_SHOULD_SKIP_THIS extern "C" { typedef union _GdkEvent GdkEvent; } #endif /* DOXYGEN_SHOULD_SKIP_THIS */ namespace Gdk { /** @addtogroup gdkmmEnums gdkmm Enums and Flags */ /** * @var EventType NOTHING * A special code to indicate a null event. * * @var EventType DELETE * The window manager has requested that the toplevel window be * hidden or destroyed, usually when the user clicks on a special icon in the * title bar. * * @var EventType DESTROY * The window has been destroyed. * * @var EventType EXPOSE * All or part of the window has become visible and needs to be * redrawn. * * @var EventType MOTION_NOTIFY * The pointer (usually a mouse) has moved. * * @var EventType BUTTON_PRESS * A mouse button has been pressed. * * @var EventType DOUBLE_BUTTON_PRESS * A mouse button has been double-clicked (clicked twice * within a short period of time). Note that each click also generates a * Gdk::BUTTON_PRESS event. * * @var EventType TRIPLE_BUTTON_PRESS * A mouse button has been clicked 3 times in a short period * of time. Note that each click also generates a Gdk::BUTTON_PRESS event. * * @var EventType BUTTON_RELEASE * A mouse button has been released. * * @var EventType KEY_PRESS * A key has been pressed. * * @var EventType KEY_RELEASE * A key has been released. * * @var EventType ENTER_NOTIFY * The pointer has entered the window. * * @var EventType LEAVE_NOTIFY * The pointer has left the window. * * @var EventType FOCUS_CHANGE * The keyboard focus has entered or left the window. * * @var EventType CONFIGURE * The size, position or stacking order of the window has changed. * Note that GTK+ discards these events for Gdk::WINDOW_CHILD windows. * * @var EventType MAP * The window has been mapped. * * @var EventType UNMAP * The window has been unmapped. * * @var EventType PROPERTY_NOTIFY * A property on the window has been changed or deleted. * * @var EventType SELECTION_CLEAR * The application has lost ownership of a selection. * * @var EventType SELECTION_REQUEST * Another application has requested a selection. * * @var EventType SELECTION_NOTIFY * A selection has been received. * * @var EventType PROXIMITY_IN * An input device has moved into contact with a sensing * surface (e.g. a touchscreen or graphics tablet). * * @var EventType PROXIMITY_OUT * An input device has moved out of contact with a sensing * surface. * * @var EventType DRAG_ENTER * The mouse has entered the window while a drag is in progress. * * @var EventType DRAG_LEAVE * The mouse has left the window while a drag is in progress. * * @var EventType DRAG_MOTION * The mouse has moved in the window while a drag is in * progress. * * @var EventType DRAG_STATUS * The status of the drag operation initiated by the window * has changed. * * @var EventType DROP_START * A drop operation onto the window has started. * * @var EventType DROP_FINISHED * The drop operation initiated by the window has completed. * * @var EventType CLIENT_EVENT * A message has been received from another application. * * @var EventType VISIBILITY_NOTIFY * The window visibility status has changed. * * @var EventType SCROLL * The scroll wheel was turned. * * @var EventType WINDOW_STATE * The state of a window has changed. See Gdk::WindowState * for the possible window states. * * @var EventType SETTING * A setting has been modified. * * @var EventType OWNER_CHANGE * The owner of a selection has changed. This event type * was added in 2.6. * * @var EventType GRAB_BROKEN * A pointer or keyboard grab was broken. This event type * was added in 2.8. * * @var EventType DAMAGE * The content of the window has been changed. This event type * was added in 2.14. * * @var EventType TOUCH_BEGIN * A new touch event sequence has just started. This event * type was added in 3.4. * * @var EventType TOUCH_UPDATE * A touch event sequence has been updated. This event type * was added in 3.4. * * @var EventType TOUCH_END * A touch event sequence has finished. This event type * was added in 3.4. * * @var EventType TOUCH_CANCEL * A touch event sequence has been canceled. This event type * was added in 3.4. * * @var EventType TOUCHPAD_SWIPE * A touchpad swipe gesture event, the current state * is determined by its phase field. This event type was added in 3.18. * * @var EventType TOUCHPAD_PINCH * A touchpad pinch gesture event, the current state * is determined by its phase field. This event type was added in 3.18. * * @var EventType PAD_BUTTON_PRESS * A tablet pad button press event. This event type * was added in 3.22. * * @var EventType PAD_BUTTON_RELEASE * A tablet pad button release event. This event type * was added in 3.22. * * @var EventType PAD_RING * A tablet pad axis event from a "ring". This event type was * added in 3.22. * * @var EventType PAD_STRIP * A tablet pad axis event from a "strip". This event type was * added in 3.22. * * @var EventType PAD_GROUP_MODE * A tablet pad group mode change. This event type was * added in 3.22. * * @var EventType EVENT_LAST * Marks the end of the GdkEventType enumeration. Added in 2.18. * * @enum EventType * * Specifies the type of the event. * * Do not confuse these events with the signals that GTK+ widgets emit. * Although many of these events result in corresponding signals being emitted, * the events are often transformed or filtered along the way. * * In some language bindings, the values Gdk::2BUTTON_PRESS and * Gdk::3BUTTON_PRESS would translate into something syntactically * invalid (eg `Gdk.EventType.2ButtonPress`, where a * symbol is not allowed to start with a number). In that case, the * aliases Gdk::DOUBLE_BUTTON_PRESS and Gdk::TRIPLE_BUTTON_PRESS can * be used instead. * * @ingroup gdkmmEnums */ enum EventType { NOTHING = -1, DELETE = 0, DESTROY = 1, EXPOSE = 2, MOTION_NOTIFY = 3, BUTTON_PRESS = 4, DOUBLE_BUTTON_PRESS = 5, TRIPLE_BUTTON_PRESS = 6, BUTTON_RELEASE = 7, KEY_PRESS = 8, KEY_RELEASE = 9, ENTER_NOTIFY = 10, LEAVE_NOTIFY = 11, FOCUS_CHANGE = 12, CONFIGURE = 13, MAP = 14, UNMAP = 15, PROPERTY_NOTIFY = 16, SELECTION_CLEAR = 17, SELECTION_REQUEST = 18, SELECTION_NOTIFY = 19, PROXIMITY_IN = 20, PROXIMITY_OUT = 21, DRAG_ENTER = 22, DRAG_LEAVE = 23, DRAG_MOTION = 24, DRAG_STATUS = 25, DROP_START = 26, DROP_FINISHED = 27, CLIENT_EVENT = 28, VISIBILITY_NOTIFY = 29, SCROLL = 31, WINDOW_STATE = 32, SETTING = 33, OWNER_CHANGE = 34, GRAB_BROKEN = 35, DAMAGE = 36, TOUCH_BEGIN = 37, TOUCH_UPDATE = 38, TOUCH_END = 39, TOUCH_CANCEL = 40, TOUCHPAD_SWIPE = 41, TOUCHPAD_PINCH = 42, PAD_BUTTON_PRESS = 43, PAD_BUTTON_RELEASE = 44, PAD_RING = 45, PAD_STRIP = 46, PAD_GROUP_MODE = 47, EVENT_LAST = 48 }; } // namespace Gdk #ifndef DOXYGEN_SHOULD_SKIP_THIS namespace Glib { template <> class GDKMM_API Value : public Glib::Value_Enum { public: static GType value_type() G_GNUC_CONST; }; } // namespace Glib #endif /* DOXYGEN_SHOULD_SKIP_THIS */ namespace Gdk { /** * @var AxisUse AXIS_IGNORE * The axis is ignored. * * @var AxisUse AXIS_X * The axis is used as the x axis. * * @var AxisUse AXIS_Y * The axis is used as the y axis. * * @var AxisUse AXIS_PRESSURE * The axis is used for pressure information. * * @var AxisUse AXIS_XTILT * The axis is used for x tilt information. * * @var AxisUse AXIS_YTILT * The axis is used for y tilt information. * * @var AxisUse AXIS_WHEEL * The axis is used for wheel information. * * @var AxisUse AXIS_DISTANCE * The axis is used for pen/tablet distance information. (Since: 3.22). * * @var AxisUse AXIS_ROTATION * The axis is used for pen rotation information. (Since: 3.22). * * @var AxisUse AXIS_SLIDER * The axis is used for pen slider information. (Since: 3.22). * * @var AxisUse AXIS_LAST * A constant equal to the numerically highest axis value. * * @enum AxisUse * * An enumeration describing the way in which a device * axis (valuator) maps onto the predefined valuator * types that GTK+ understands. * * Note that the X and Y axes are not really needed; pointer devices * report their location via the x/y members of events regardless. Whether * X and Y are present as axes depends on the GDK backend. * * @ingroup gdkmmEnums */ enum AxisUse { AXIS_IGNORE, AXIS_X, AXIS_Y, AXIS_PRESSURE, AXIS_XTILT, AXIS_YTILT, AXIS_WHEEL, AXIS_DISTANCE, AXIS_ROTATION, AXIS_SLIDER, AXIS_LAST }; } // namespace Gdk #ifndef DOXYGEN_SHOULD_SKIP_THIS namespace Glib { template <> class GDKMM_API Value : public Glib::Value_Enum { public: static GType value_type() G_GNUC_CONST; }; } // namespace Glib #endif /* DOXYGEN_SHOULD_SKIP_THIS */ namespace Gdk { /** * @var AxisFlags AXIS_FLAG_X * X axis is present. * * @var AxisFlags AXIS_FLAG_Y * Y axis is present. * * @var AxisFlags AXIS_FLAG_PRESSURE * Pressure axis is present. * * @var AxisFlags AXIS_FLAG_XTILT * X tilt axis is present. * * @var AxisFlags AXIS_FLAG_YTILT * Y tilt axis is present. * * @var AxisFlags AXIS_FLAG_WHEEL * Wheel axis is present. * * @var AxisFlags AXIS_FLAG_DISTANCE * Distance axis is present. * * @var AxisFlags AXIS_FLAG_ROTATION * Z-axis rotation is present. * * @var AxisFlags AXIS_FLAG_SLIDER * Slider axis is present. * * @enum AxisFlags * * Flags describing the current capabilities of a device/tool. * * @newin{3,22} * * @ingroup gdkmmEnums * @par Bitwise operators: * %AxisFlags operator|(AxisFlags, AxisFlags)
* %AxisFlags operator&(AxisFlags, AxisFlags)
* %AxisFlags operator^(AxisFlags, AxisFlags)
* %AxisFlags operator~(AxisFlags)
* %AxisFlags& operator|=(AxisFlags&, AxisFlags)
* %AxisFlags& operator&=(AxisFlags&, AxisFlags)
* %AxisFlags& operator^=(AxisFlags&, AxisFlags)
*/ enum AxisFlags { AXIS_FLAG_X = 0x2, AXIS_FLAG_Y = 0x4, AXIS_FLAG_PRESSURE = 0x8, AXIS_FLAG_XTILT = 0x10, AXIS_FLAG_YTILT = 0x20, AXIS_FLAG_WHEEL = 0x40, AXIS_FLAG_DISTANCE = 0x80, AXIS_FLAG_ROTATION = 0x100, AXIS_FLAG_SLIDER = 0x200 }; /** @ingroup gdkmmEnums */ inline AxisFlags operator|(AxisFlags lhs, AxisFlags rhs) { return static_cast(static_cast(lhs) | static_cast(rhs)); } /** @ingroup gdkmmEnums */ inline AxisFlags operator&(AxisFlags lhs, AxisFlags rhs) { return static_cast(static_cast(lhs) & static_cast(rhs)); } /** @ingroup gdkmmEnums */ inline AxisFlags operator^(AxisFlags lhs, AxisFlags rhs) { return static_cast(static_cast(lhs) ^ static_cast(rhs)); } /** @ingroup gdkmmEnums */ inline AxisFlags operator~(AxisFlags flags) { return static_cast(~static_cast(flags)); } /** @ingroup gdkmmEnums */ inline AxisFlags& operator|=(AxisFlags& lhs, AxisFlags rhs) { return (lhs = static_cast(static_cast(lhs) | static_cast(rhs))); } /** @ingroup gdkmmEnums */ inline AxisFlags& operator&=(AxisFlags& lhs, AxisFlags rhs) { return (lhs = static_cast(static_cast(lhs) & static_cast(rhs))); } /** @ingroup gdkmmEnums */ inline AxisFlags& operator^=(AxisFlags& lhs, AxisFlags rhs) { return (lhs = static_cast(static_cast(lhs) ^ static_cast(rhs))); } } // namespace Gdk #ifndef DOXYGEN_SHOULD_SKIP_THIS namespace Glib { template <> class GDKMM_API Value : public Glib::Value_Flags { public: static GType value_type() G_GNUC_CONST; }; } // namespace Glib #endif /* DOXYGEN_SHOULD_SKIP_THIS */ namespace Gdk { //TODO: Actually use this class instead of GdkEvent? class GDKMM_API Event { public: #ifndef DOXYGEN_SHOULD_SKIP_THIS using CppObjectType = Event; using BaseObjectType = GdkEvent; #endif /* DOXYGEN_SHOULD_SKIP_THIS */ /** Get the GType for this class, for use with the underlying GObject type system. */ static GType get_type() G_GNUC_CONST; Event(); explicit Event(GdkEvent* gobject, bool make_a_copy = true); Event(const Event& other); Event& operator=(const Event& other); Event(Event&& other) noexcept; Event& operator=(Event&& other) noexcept; ~Event() noexcept; void swap(Event& other) noexcept; ///Provides access to the underlying C instance. GdkEvent* gobj() { return gobject_; } ///Provides access to the underlying C instance. const GdkEvent* gobj() const { return gobject_; } ///Provides access to the underlying C instance. The caller is responsible for freeing it. Use when directly setting fields in structs. GdkEvent* gobj_copy() const; protected: GdkEvent* gobject_; private: public: /** Checks all open displays for a Gdk::Event to process,to be processed * on, fetching events from the windowing system if necessary. * See Gdk::Display::get_event(). * * @return The next Gdk::Event to be processed, or nullptr * if no events are pending. The returned Gdk::Event should be freed * with free(). */ static Event get(); /** If there is an event waiting in the event queue of some open * display, returns a copy of it. See Gdk::Display::peek_event(). * * @return A copy of the first Gdk::Event on some event * queue, or nullptr if no events are in any queues. The returned * Gdk::Event should be freed with free(). */ static Event peek(); /** Appends a copy of the given event onto the front of the event * queue for event->any.window’s display, or the default event * queue if event->any.window is nullptr. See Gdk::Display::put_event(). */ void put(); /** Checks if any events are ready to be processed for any display. * * @return true if any events are pending. */ static bool events_pending(); /** Returns the time stamp from @a event, if there is one; otherwise * returns GDK_CURRENT_TIME. If @a event is nullptr, returns GDK_CURRENT_TIME. * * @return Time stamp field from @a event. */ guint32 get_time() const; /** If the event contains a “state” field, puts that field in @a state. Otherwise * stores an empty state (0). Returns true if there was a state field * in the event. @a event may be nullptr, in which case it’s treated * as if the event had no state field. * * @param state Return location for state. * @return true if there was a state field in the event. */ bool get_state(ModifierType& state) const; /** Extract the event window relative x/y coordinates from an event. * * @param x_win Location to put event window x coordinate. * @param y_win Location to put event window y coordinate. * @return true if the event delivered event window coordinates. */ bool get_coords(double& x_win, double& y_win) const; /** Extract the root window relative x/y coordinates from an event. * * @param x_root Location to put root window x coordinate. * @param y_root Location to put root window y coordinate. * @return true if the event delivered root window coordinates. */ bool get_root_coords(double& x_root, double& y_root) const; /** Extract the axis value for a particular axis use from * an event structure. * * @param axis_use The axis use to look for. * @param value Location to store the value found. * @return true if the specified axis was found, otherwise false. */ bool get_axis(AxisUse axis_use, double& value) const; //_WRAP_METHOD(void gdk_event_handler_set(GdkEventFunc func, gpointer data, GDestroyNotify notify), gdk_event_handler_set) /** Sets whether a trace of received events is output. * Note that GTK+ must be compiled with debugging (that is, * configured using the `--enable-debug` option) * to use this option. * * @param show_events true to output event debugging information. */ static void set_show_events(bool show_events); /** Gets whether event debugging output is enabled. * * @return true if event debugging output is enabled. */ static bool get_show_events(); //deprecated /** Returns the screen for the event. The screen is * typically the screen for `event->any.window`, but * for events such as mouse events, it is the screen * where the pointer was when the event occurs - * that is, the screen which has the root window * to which `event->motion.x_root` and * `event->motion.y_root` are relative. * * @newin{2,2} * * @return The screen for the event. */ Glib::RefPtr get_screen(); /** Returns the screen for the event. The screen is * typically the screen for `event->any.window`, but * for events such as mouse events, it is the screen * where the pointer was when the event occurs - * that is, the screen which has the root window * to which `event->motion.x_root` and * `event->motion.y_root` are relative. * * @newin{2,2} * * @return The screen for the event. */ Glib::RefPtr get_screen() const; }; } // namespace Gdk namespace Gdk { /** @relates Gdk::Event * @param lhs The left-hand side * @param rhs The right-hand side */ inline void swap(Event& lhs, Event& rhs) noexcept { lhs.swap(rhs); } } // namespace Gdk namespace Glib { /** A Glib::wrap() method for this object. * * @param object The C instance. * @param take_copy False if the result should take ownership of the C instance. True if it should take a new copy or ref. * @result A C++ instance that wraps this C instance. * * @relates Gdk::Event */ GDKMM_API Gdk::Event wrap(GdkEvent* object, bool take_copy = false); #ifndef DOXYGEN_SHOULD_SKIP_THIS template <> class GDKMM_API Value : public Glib::Value_Boxed {}; #endif /* DOXYGEN_SHOULD_SKIP_THIS */ } // namespace Glib #endif /* _GDKMM_EVENT_H */