// Generated by gmmproc 2.86.0 -- DO NOT MODIFY!
#ifndef _GDKMM_ENUMS_H
#define _GDKMM_ENUMS_H

#include <gdkmmconfig.h>


#include <glibmm/ustring.h>
#include <sigc++/sigc++.h>

/* Copyright (C) 2017 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, see <http://www.gnu.org/licenses/>.
 */


#include <glibmm/value.h>
#include <gdk/gdk.h>


namespace Gdk
{
/** @addtogroup gdkmmEnums gdkmm Enums and Flags */

/** 
 *  @var AxisFlags::X
 * X axis is present.
 * 
 *  @var AxisFlags::Y
 * Y axis is present.
 * 
 *  @var AxisFlags::DELTA_X
 * Scroll X delta axis is present.
 * 
 *  @var AxisFlags::DELTA_Y
 * Scroll Y delta axis is present.
 * 
 *  @var AxisFlags::PRESSURE
 * Pressure axis is present.
 * 
 *  @var AxisFlags::XTILT
 * X tilt axis is present.
 * 
 *  @var AxisFlags::YTILT
 * Y tilt axis is present.
 * 
 *  @var AxisFlags::WHEEL
 * Wheel axis is present.
 * 
 *  @var AxisFlags::DISTANCE
 * Distance axis is present.
 * 
 *  @var AxisFlags::ROTATION
 * Z-axis rotation is present.
 * 
 *  @var AxisFlags::SLIDER
 * Slider axis is present.
 */
 /** Flags describing the current capabilities of a device/tool.
 *
 * @ingroup gdkmmEnums
 * @par Bitwise operators:
 * <tt>AxisFlags operator|(AxisFlags, AxisFlags)</tt><br>
 * <tt>AxisFlags operator&(AxisFlags, AxisFlags)</tt><br>
 * <tt>AxisFlags operator^(AxisFlags, AxisFlags)</tt><br>
 * <tt>AxisFlags operator~(AxisFlags)</tt><br>
 * <tt>AxisFlags& operator|=(AxisFlags&, AxisFlags)</tt><br>
 * <tt>AxisFlags& operator&=(AxisFlags&, AxisFlags)</tt><br>
 * <tt>AxisFlags& operator^=(AxisFlags&, AxisFlags)</tt><br>
 */
enum class AxisFlags
{
  X = 1 << 1,
  Y = 1 << 2,
  DELTA_X = 1 << 3,
  DELTA_Y = 1 << 4,
  PRESSURE = 1 << 5,
  XTILT = 1 << 6,
  YTILT = 1 << 7,
  WHEEL = 1 << 8,
  DISTANCE = 1 << 9,
  ROTATION = 1 << 10,
  SLIDER = 1 << 11
};

/** @ingroup gdkmmEnums */
inline constexpr AxisFlags operator|(AxisFlags lhs, AxisFlags rhs)
  { return static_cast<AxisFlags>(static_cast<unsigned>(lhs) | static_cast<unsigned>(rhs)); }

/** @ingroup gdkmmEnums */
inline constexpr AxisFlags operator&(AxisFlags lhs, AxisFlags rhs)
  { return static_cast<AxisFlags>(static_cast<unsigned>(lhs) & static_cast<unsigned>(rhs)); }

/** @ingroup gdkmmEnums */
inline constexpr AxisFlags operator^(AxisFlags lhs, AxisFlags rhs)
  { return static_cast<AxisFlags>(static_cast<unsigned>(lhs) ^ static_cast<unsigned>(rhs)); }

/** @ingroup gdkmmEnums */
inline constexpr AxisFlags operator~(AxisFlags flags)
  { return static_cast<AxisFlags>(~static_cast<unsigned>(flags)); }

/** @ingroup gdkmmEnums */
inline AxisFlags& operator|=(AxisFlags& lhs, AxisFlags rhs)
  { return (lhs = static_cast<AxisFlags>(static_cast<unsigned>(lhs) | static_cast<unsigned>(rhs))); }

/** @ingroup gdkmmEnums */
inline AxisFlags& operator&=(AxisFlags& lhs, AxisFlags rhs)
  { return (lhs = static_cast<AxisFlags>(static_cast<unsigned>(lhs) & static_cast<unsigned>(rhs))); }

/** @ingroup gdkmmEnums */
inline AxisFlags& operator^=(AxisFlags& lhs, AxisFlags rhs)
  { return (lhs = static_cast<AxisFlags>(static_cast<unsigned>(lhs) ^ static_cast<unsigned>(rhs))); }


} // namespace Gdk

#ifndef DOXYGEN_SHOULD_SKIP_THIS
namespace Glib
{

template <>
class GDKMM_API Value<Gdk::AxisFlags> : public Glib::Value_Flags<Gdk::AxisFlags>
{
public:
  static GType value_type() G_GNUC_CONST;
};

} // namespace Glib
#endif /* DOXYGEN_SHOULD_SKIP_THIS */

namespace Gdk
{

/** 
 *  @var AxisUse::IGNORE
 * The axis is ignored.
 * 
 *  @var AxisUse::X
 * The axis is used as the x axis.
 * 
 *  @var AxisUse::Y
 * The axis is used as the y axis.
 * 
 *  @var AxisUse::DELTA_X
 * The axis is used as the scroll x delta.
 * 
 *  @var AxisUse::DELTA_Y
 * The axis is used as the scroll y delta.
 * 
 *  @var AxisUse::PRESSURE
 * The axis is used for pressure information.
 * 
 *  @var AxisUse::XTILT
 * The axis is used for x tilt information.
 * 
 *  @var AxisUse::YTILT
 * The axis is used for y tilt information.
 * 
 *  @var AxisUse::WHEEL
 * The axis is used for wheel information.
 * 
 *  @var AxisUse::DISTANCE
 * The axis is used for pen/tablet distance information.
 * 
 *  @var AxisUse::ROTATION
 * The axis is used for pen rotation information.
 * 
 *  @var AxisUse::SLIDER
 * The axis is used for pen slider information.
 * 
 *  @var AxisUse::LAST
 * A constant equal to the numerically highest axis value.
 */
 /** Defines how device axes are interpreted by GTK.
 * 
 * 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 class AxisUse
{
  IGNORE,
  X,
  Y,
  DELTA_X,
  DELTA_Y,
  PRESSURE,
  XTILT,
  YTILT,
  WHEEL,
  DISTANCE,
  ROTATION,
  SLIDER,
  LAST
};


} // namespace Gdk

#ifndef DOXYGEN_SHOULD_SKIP_THIS
namespace Glib
{

template <>
class GDKMM_API Value<Gdk::AxisUse> : public Glib::Value_Enum<Gdk::AxisUse>
{
public:
  static GType value_type() G_GNUC_CONST;
};

} // namespace Glib
#endif /* DOXYGEN_SHOULD_SKIP_THIS */

namespace Gdk
{

/** 
 *  @var CrossingMode::NORMAL
 * Crossing because of pointer motion.
 * 
 *  @var CrossingMode::GRAB
 * Crossing because a grab is activated.
 * 
 *  @var CrossingMode::UNGRAB
 * Crossing because a grab is deactivated.
 * 
 *  @var CrossingMode::GTK_GRAB
 * Crossing because a GTK grab is activated.
 * 
 *  @var CrossingMode::GTK_UNGRAB
 * Crossing because a GTK grab is deactivated.
 * 
 *  @var CrossingMode::STATE_CHANGED
 * Crossing because a GTK widget changed
 * state (e.g. sensitivity).
 * 
 *  @var CrossingMode::TOUCH_BEGIN
 * Crossing because a touch sequence has begun,
 * this event is synthetic as the pointer might have not left the surface.
 * 
 *  @var CrossingMode::TOUCH_END
 * Crossing because a touch sequence has ended,
 * this event is synthetic as the pointer might have not left the surface.
 * 
 *  @var CrossingMode::DEVICE_SWITCH
 * Crossing because of a device switch (i.e.
 * a mouse taking control of the pointer after a touch device), this event
 * is synthetic as the pointer didn’t leave the surface.
 */
 /** Specifies the crossing mode for enter and leave events.
 *
 * @ingroup gdkmmEnums
 */
enum class CrossingMode
{
  NORMAL,
  GRAB,
  UNGRAB,
  GTK_GRAB,
  GTK_UNGRAB,
  STATE_CHANGED,
  TOUCH_BEGIN,
  TOUCH_END,
  DEVICE_SWITCH
};


} // namespace Gdk

#ifndef DOXYGEN_SHOULD_SKIP_THIS
namespace Glib
{

template <>
class GDKMM_API Value<Gdk::CrossingMode> : public Glib::Value_Enum<Gdk::CrossingMode>
{
public:
  static GType value_type() G_GNUC_CONST;
};

} // namespace Glib
#endif /* DOXYGEN_SHOULD_SKIP_THIS */

namespace Gdk
{

/** 
 *  @var DragAction::COPY
 * Copy the data.
 * 
 *  @var DragAction::MOVE
 * Move the data, i.e. first copy it, then delete
 * it from the source using the DELETE target of the X selection protocol.
 * 
 *  @var DragAction::LINK
 * Add a link to the data. Note that this is only
 * useful if source and destination agree on what it means, and is not
 * supported on all platforms.
 * 
 *  @var DragAction::ASK
 * Ask the user what to do with the data.
 * 
 *  @var DragAction::NONE
 * No action.
 * 
 * @newin{4,20}
 */
 /** Used in `Gdk::Drop` and `Gdk::Drag` to indicate the actions that the
 * destination can and should do with the dropped data.
 *
 * @ingroup gdkmmEnums
 * @par Bitwise operators:
 * <tt>DragAction operator|(DragAction, DragAction)</tt><br>
 * <tt>DragAction operator&(DragAction, DragAction)</tt><br>
 * <tt>DragAction operator^(DragAction, DragAction)</tt><br>
 * <tt>DragAction operator~(DragAction)</tt><br>
 * <tt>DragAction& operator|=(DragAction&, DragAction)</tt><br>
 * <tt>DragAction& operator&=(DragAction&, DragAction)</tt><br>
 * <tt>DragAction& operator^=(DragAction&, DragAction)</tt><br>
 */
enum class DragAction
{
  NONE = 0x0,
  COPY = 1 << 0,
  MOVE = 1 << 1,
  LINK = 1 << 2,
  ASK = 1 << 3
};

/** @ingroup gdkmmEnums */
inline constexpr DragAction operator|(DragAction lhs, DragAction rhs)
  { return static_cast<DragAction>(static_cast<unsigned>(lhs) | static_cast<unsigned>(rhs)); }

/** @ingroup gdkmmEnums */
inline constexpr DragAction operator&(DragAction lhs, DragAction rhs)
  { return static_cast<DragAction>(static_cast<unsigned>(lhs) & static_cast<unsigned>(rhs)); }

/** @ingroup gdkmmEnums */
inline constexpr DragAction operator^(DragAction lhs, DragAction rhs)
  { return static_cast<DragAction>(static_cast<unsigned>(lhs) ^ static_cast<unsigned>(rhs)); }

/** @ingroup gdkmmEnums */
inline constexpr DragAction operator~(DragAction flags)
  { return static_cast<DragAction>(~static_cast<unsigned>(flags)); }

/** @ingroup gdkmmEnums */
inline DragAction& operator|=(DragAction& lhs, DragAction rhs)
  { return (lhs = static_cast<DragAction>(static_cast<unsigned>(lhs) | static_cast<unsigned>(rhs))); }

/** @ingroup gdkmmEnums */
inline DragAction& operator&=(DragAction& lhs, DragAction rhs)
  { return (lhs = static_cast<DragAction>(static_cast<unsigned>(lhs) & static_cast<unsigned>(rhs))); }

/** @ingroup gdkmmEnums */
inline DragAction& operator^=(DragAction& lhs, DragAction rhs)
  { return (lhs = static_cast<DragAction>(static_cast<unsigned>(lhs) ^ static_cast<unsigned>(rhs))); }


} // namespace Gdk

#ifndef DOXYGEN_SHOULD_SKIP_THIS
namespace Glib
{

template <>
class GDKMM_API Value<Gdk::DragAction> : public Glib::Value_Flags<Gdk::DragAction>
{
public:
  static GType value_type() G_GNUC_CONST;
};

} // namespace Glib
#endif /* DOXYGEN_SHOULD_SKIP_THIS */

namespace Gdk
{

/** 
 *  @var Gravity::NORTH_WEST
 * The reference point is at the top left corner.
 * 
 *  @var Gravity::NORTH
 * The reference point is in the middle of the top edge.
 * 
 *  @var Gravity::NORTH_EAST
 * The reference point is at the top right corner.
 * 
 *  @var Gravity::WEST
 * The reference point is at the middle of the left edge.
 * 
 *  @var Gravity::CENTER
 * The reference point is at the center of the surface.
 * 
 *  @var Gravity::EAST
 * The reference point is at the middle of the right edge.
 * 
 *  @var Gravity::SOUTH_WEST
 * The reference point is at the lower left corner.
 * 
 *  @var Gravity::SOUTH
 * The reference point is at the middle of the lower edge.
 * 
 *  @var Gravity::SOUTH_EAST
 * The reference point is at the lower right corner.
 * 
 *  @var Gravity::STATIC
 * The reference point is at the top left corner of the
 * surface itself, ignoring window manager decorations.
 */
 /** Defines the reference point of a surface and is used in `Gdk::PopupLayout`.
 *
 * @ingroup gdkmmEnums
 */
enum class Gravity
{
  NORTH_WEST = 1,
  NORTH,
  NORTH_EAST,
  WEST,
  CENTER,
  EAST,
  SOUTH_WEST,
  SOUTH,
  SOUTH_EAST,
  STATIC
};


} // namespace Gdk

#ifndef DOXYGEN_SHOULD_SKIP_THIS
namespace Glib
{

template <>
class GDKMM_API Value<Gdk::Gravity> : public Glib::Value_Enum<Gdk::Gravity>
{
public:
  static GType value_type() G_GNUC_CONST;
};

} // namespace Glib
#endif /* DOXYGEN_SHOULD_SKIP_THIS */

namespace Gdk
{

/** 
 *  @var MemoryFormat::B8G8R8A8_PREMULTIPLIED
 * 4 bytes; for blue, green, red, alpha.
 * The color values are premultiplied with the alpha value.
 * 
 *  @var MemoryFormat::A8R8G8B8_PREMULTIPLIED
 * 4 bytes; for alpha, red, green, blue.
 * The color values are premultiplied with the alpha value.
 * 
 *  @var MemoryFormat::R8G8B8A8_PREMULTIPLIED
 * 4 bytes; for red, green, blue, alpha
 * The color values are premultiplied with the alpha value.
 * 
 *  @var MemoryFormat::B8G8R8A8
 * 4 bytes; for blue, green, red, alpha.
 * 
 *  @var MemoryFormat::A8R8G8B8
 * 4 bytes; for alpha, red, green, blue.
 * 
 *  @var MemoryFormat::R8G8B8A8
 * 4 bytes; for red, green, blue, alpha.
 * 
 *  @var MemoryFormat::A8B8G8R8
 * 4 bytes; for alpha, blue, green, red.
 * 
 *  @var MemoryFormat::R8G8B8
 * 3 bytes; for red, green, blue. The data is opaque.
 * 
 *  @var MemoryFormat::B8G8R8
 * 3 bytes; for blue, green, red. The data is opaque.
 * 
 *  @var MemoryFormat::N_FORMATS
 * The number of formats. This value will change as
 * more formats get added, so do not rely on its concrete integer.
 * 
 *  @var MemoryFormat::R32G32B32_FLOAT
 * 3 float values; for red, green, blue.
 * 
 *  @var MemoryFormat::A8B8G8R8_PREMULTIPLIED
 * 4 bytes; for alpha, blue, green, red, The color values are premultiplied with
 * the alpha value.
 * 
 * @newin{4,14}
 * 
 *  @var MemoryFormat::B8G8R8X8
 * 4 bytes; for blue, green, red, unused.
 * 
 * @newin{4,14}
 * 
 *  @var MemoryFormat::X8R8G8B8
 * 4 bytes; for unused, red, green, blue.
 * 
 * @newin{4,14}
 * 
 *  @var MemoryFormat::R8G8B8X8
 * 4 bytes; for red, green, blue, unused.
 * 
 * @newin{4,14}
 * 
 *  @var MemoryFormat::X8B8G8R8
 * 4 bytes; for unused, blue, green, red.
 * 
 * @newin{4,14}
 * 
 *  @var MemoryFormat::R16G16B16
 * 3 guint16 values; for red, green, blue.
 * 
 * @newin{4,6}
 * 
 *  @var MemoryFormat::R16G16B16A16_PREMULTIPLIED
 * 4 guint16 values; for red, green, blue, alpha. The color values are
 * premultiplied with the alpha value.
 * 
 * @newin{4,6}
 * 
 *  @var MemoryFormat::R16G16B16A16
 * 4 guint16 values; for red, green, blue, alpha.
 * 
 * @newin{4,6}
 * 
 *  @var MemoryFormat::R16G16B16_FLOAT
 * 3 half-float values; for red, green, blue. The data is opaque.
 * 
 * @newin{4,6}
 * 
 *  @var MemoryFormat::R16G16B16A16_FLOAT_PREMULTIPLIED
 * 4 half-float values; for red, green, blue and alpha. The color values are
 * premultiplied with the alpha value.
 * 
 * @newin{4,6}
 * 
 *  @var MemoryFormat::R16G16B16A16_FLOAT
 * 4 half-float values; for red, green, blue and alpha.
 * 
 * @newin{4,6}
 * 
 *  @var MemoryFormat::R32G32B32A32_FLOAT_PREMULTIPLIED
 * 4 float values; for red, green, blue and alpha. The color values are
 * premultiplied with the alpha value.
 * 
 * @newin{4,6}
 * 
 *  @var MemoryFormat::R32G32B32A32_FLOAT
 * 4 float values; for red, green, blue and alpha.
 * 
 * @newin{4,6}
 * 
 *  @var MemoryFormat::G8A8_PREMULTIPLIED
 * 2 bytes; for grayscale, alpha. The color values are premultiplied with the
 * alpha value.
 * 
 * @newin{4,12}
 * 
 *  @var MemoryFormat::G8A8
 * 2 bytes; for grayscale, alpha.
 * 
 * @newin{4,12}
 * 
 *  @var MemoryFormat::G8
 * One byte; for grayscale. The data is opaque.
 * 
 * @newin{4,12}
 * 
 *  @var MemoryFormat::G16A16_PREMULTIPLIED
 * 2 guint16 values; for grayscale, alpha. The color values are premultiplied
 * with the alpha value.
 * 
 * @newin{4,12}
 * 
 *  @var MemoryFormat::G16A16
 * 2 guint16 values; for grayscale, alpha.
 * 
 * @newin{4,12}
 * 
 *  @var MemoryFormat::G16
 * One guint16 value; for grayscale. The data is opaque.
 * 
 * @newin{4,12}
 * 
 *  @var MemoryFormat::A8
 * One byte; for alpha.
 * 
 * @newin{4,12}
 * 
 *  @var MemoryFormat::A16
 * One guint16 value; for alpha.
 * 
 * @newin{4,12}
 * 
 *  @var MemoryFormat::A16_FLOAT
 * One half-float value; for alpha.
 * 
 * @newin{4,12}
 * 
 *  @var MemoryFormat::A32_FLOAT
 * One float value; for alpha.
 * 
 * @newin{4,12}
 * 
 *  @var MemoryFormat::G8_B8R8_420
 * Multiplane format with 2 planes.
 * 
 * The first plane contains the first channel, usually containing
 * luma values.
 * The second plane with interleaved chroma values, Cb followed by Cr.
 * Subsampled in both the X and Y direction.
 * 
 * Commonly known by the fourcc "NV12".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::G8_R8B8_420
 * Multiplane format with 2 planes.
 * 
 * The first plane contains the first channel, usually containing
 * luma values.
 * The second plane with interleaved chroma values, Cr followed by Cb.
 * Subsampled in both the X and Y direction.
 * 
 * Commonly known by the fourcc "NV21".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::G8_B8R8_422
 * Multiplane format with 2 planes.
 * 
 * The first plane contains the first channel, usually containing
 * luma values.
 * The second plane with interleaved chroma values, Cb followed by Cr.
 * Subsampled in the X direction.
 * 
 * Commonly known by the fourcc "NV16".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::G8_R8B8_422
 * Multiplane format with 2 planes.
 * 
 * The first plane contains the first channel, usually containing
 * luma values.
 * The second plane with interleaved chroma values, Cr followed by Cb.
 * Subsampled in the X direction.
 * 
 * Commonly known by the fourcc "NV61".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::G8_B8R8_444
 * Multiplane format with 2 planes.
 * 
 * The first plane contains the first channel, usually containing
 * luma values.
 * The second plane with interleaved chroma values, Cb followed by Cr.
 * This format is not subsampled.
 * 
 * Commonly known by the fourcc "NV24".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::G8_R8B8_444
 * Multiplane format with 2 planes.
 * 
 * The first plane contains the first channel, usually containing
 * luma values.
 * The second plane with interleaved chroma values, Cr followed by Cb.
 * This format is not subsampled.
 * 
 * Commonly known by the fourcc "NV42".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::G10X6_B10X6R10X6_420
 * Multiplane format with 2 planes.
 * 
 * Each channel is a 16 bit integer, but only the highest 10 bits are used.
 * 
 * The first plane contains the first channel, usually containing
 * luma values.
 * The second plane with interleaved chroma values, Cr followed by Cb.
 * This format is not subsampled.
 * 
 * Commonly known by the fourcc "P010".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::G12X4_B12X4R12X4_420
 * Multiplane format with 2 planes.
 * 
 * Each channel is a 16 bit integer, but only the highest 10 bits are used.
 * 
 * The first plane contains the first channel, usually containing
 * luma values.
 * The second plane with interleaved chroma values, Cr followed by Cb.
 * This format is not subsampled.
 * 
 * Commonly known by the fourcc "P012".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::G16_B16R16_420
 * Multiplane format with 2 planes.
 * 
 * Each channel is a 16 bit integer.
 * 
 * The first plane contains the first channel, usually containing
 * luma values.
 * The second plane with interleaved chroma values, Cr followed by Cb.
 * This format is not subsampled.
 * 
 * Commonly known by the fourcc "P016".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::G8_B8_R8_410
 * Multiplane format with 3 planes.
 * 
 * Each channel is a 8 bit integer.
 * 
 * The first plane usually contains the luma channel. It is mapped
 * into the 2nd channel.
 * 
 * The second plane usually contains the first chroma chanel.
 * Subsampled in both the X and Y direction with 4:1 ratio. It is
 * mapped into the 3rd channel.
 * 
 * The third plane usually contains the second chroma channel.
 * Subsampled in both the X and Y direction with 4:1 ratio. It is
 * mapped into the 1st channel.
 * 
 * Commonly known by the fourcc "YUV410".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::G8_R8_B8_410
 * Multiplane format with 3 planes.
 * 
 * Each channel is a 8 bit integer.
 * 
 * The first plane usually contains the luma channel. It is mapped
 * into the 2nd channel.
 * 
 * The second plane usually contains the second chroma chanel.
 * Subsampled in both the X and Y direction with 4:1 ratio. It is
 * mapped into the 1st channel.
 * 
 * The third plane usually contains the first chroma channel.
 * Subsampled in both the X and Y direction with 4:1 ratio. It is
 * mapped into the 3rd channel.
 * 
 * Commonly known by the fourcc "YVU410".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::G8_B8_R8_411
 * Multiplane format with 3 planes.
 * 
 * Each channel is a 8 bit integer.
 * 
 * The first plane usually contains the luma channel. It is mapped
 * into the 2nd channel.
 * 
 * The second plane usually contains the first chroma chanel.
 * Subsampled in the X direction with 4:1 ratio. It is
 * mapped into the 3rd channel.
 * 
 * The third plane usually contains the second chroma channel.
 * Subsampled in the X direction with 4:1 ratio. It is
 * mapped into the 1st channel.
 * 
 * Commonly known by the fourcc "YUV411".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::G8_R8_B8_411
 * Multiplane format with 3 planes.
 * 
 * Each channel is a 8 bit integer.
 * 
 * The first plane usually contains the luma channel. It is mapped
 * into the 2nd channel.
 * 
 * The second plane usually contains the second chroma chanel.
 * Subsampled in the X direction with 4:1 ratio. It is
 * mapped into the 1st channel.
 * 
 * The third plane usually contains the first chroma channel.
 * Subsampled in the X direction with 4:1 ratio. It is
 * mapped into the 3rd channel.
 * 
 * Commonly known by the fourcc "YVU411".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::G8_B8_R8_420
 * Multiplane format with 3 planes.
 * 
 * Each channel is a 8 bit integer.
 * 
 * The first plane usually contains the luma channel. It is mapped
 * into the 2nd channel.
 * 
 * The second plane usually contains the first chroma chanel.
 * Subsampled in both the X and Y direction. It is mapped into the
 * 3rd channel.
 * 
 * The third plane usually contains the second chroma channel.
 * Subsampled in both the X and Y direction. It is mapped into the
 * 1st channel.
 * 
 * Commonly known by the fourcc "YUV420".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::G8_R8_B8_420
 * Multiplane format with 3 planes.
 * 
 * Each channel is a 8 bit integer.
 * 
 * The first plane usually contains the luma channel. It is mapped
 * into the 2nd channel.
 * 
 * The second plane usually contains the second chroma chanel.
 * Subsampled in both the X and Y direction. It is mapped into the
 * 1st channel.
 * 
 * The third plane usually contains the first chroma channel.
 * Subsampled in both the X and Y direction. It is mapped into the
 * 3rd channel.
 * 
 * Commonly known by the fourcc "YVU420".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::G8_B8_R8_422
 * Multiplane format with 3 planes.
 * 
 * Each channel is a 8 bit integer.
 * 
 * The first plane usually contains the luma channel. It is mapped
 * into the 2nd channel.
 * 
 * The second plane usually contains the first chroma chanel.
 * Subsampled in the X direction. It is mapped into the 3rd channel.
 * 
 * The third plane usually contains the second chroma channel.
 * Subsampled in the X direction. It is mapped into the 1st channel.
 * 
 * Commonly known by the fourcc "YUV422".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::G8_R8_B8_422
 * Multiplane format with 3 planes.
 * 
 * Each channel is a 8 bit integer.
 * 
 * The first plane usually contains the luma channel. It is mapped
 * into the 2nd channel.
 * 
 * The second plane usually contains the second chroma chanel.
 * Subsampled in the X direction. It is mapped into the 1st channel.
 * 
 * The third plane usually contains the first chroma channel.
 * Subsampled in the X direction. It is mapped into the 3rd channel.
 * 
 * Commonly known by the fourcc "YVU422".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::G8_B8_R8_444
 * Multiplane format with 3 planes.
 * 
 * Each channel is a 8 bit integer.
 * 
 * The first plane usually contains the luma channel. It is mapped
 * into the 2nd channel.
 * 
 * The second plane usually contains the first chroma chanel. It is
 * mapped into the 3rd channel.
 * 
 * The third plane usually contains the second chroma channel. It is
 * mapped into the 1st channel.
 * 
 * Commonly known by the fourcc "YUV444".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::G8_R8_B8_444
 * Multiplane format with 3 planes.
 * 
 * Each channel is a 8 bit integer.
 * 
 * The first plane usually contains the luma channel. It is mapped
 * into the 2nd channel.
 * 
 * The second plane usually contains the second chroma chanel.
 * Subsampled in the X direction. It is mapped into the 1st channel.
 * 
 * The third plane usually contains the first chroma channel.
 * Subsampled in the X direction. It is mapped into the 3rd channel.
 * 
 * Commonly known by the fourcc "YVU444".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::G8B8G8R8_422
 * Packed format with subsampled channels.
 * 
 * Each channel is a 8 bit integer. The red and blue/chroma channels
 * are subsampled and interleaved with the green/luma channel.
 * 
 * Each block contains 2 pixels, so the width must be a multiple of
 * 2.
 * 
 * Commonly known by the fourcc "YUYV".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::G8R8G8B8_422
 * Packed format with subsampled channels.
 * 
 * Each channel is a 8 bit integer. The red and blue/chroma channels
 * are subsampled and interleaved with the green/luma channel.
 * 
 * Each block contains 2 pixels, so the width must be a multiple of
 * 2.
 * 
 * Commonly known by the fourcc "YVYU".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::R8G8B8G8_422
 * Packed format with subsampled channels.
 * 
 * Each channel is a 8 bit integer. The red and blue/chroma channels
 * are subsampled and interleaved with the green/luma channel.
 * 
 * Each block contains 2 pixels, so the width must be a multiple of
 * 2.
 * 
 * Commonly known by the fourcc "VYUY".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::B8G8R8G8_422
 * Packed format with subsampled channels.
 * 
 * Each channel is a 8 bit integer. The red and blue/chroma channels
 * are subsampled and interleaved with the green/luma channel.
 * 
 * Each block contains 2 pixels, so the width must be a multiple of
 * 2.
 * 
 * Commonly known by the fourcc "UYVY".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::X6G10_X6B10_X6R10_420
 * Multiplane format with 3 planes.
 * 
 * Each channel is a 16 bit integer.
 * 
 * Only the 10 lower bits are used. The remaining ones must be set to 0 by the
 * producer.
 * 
 * The first plane usually contains the luma channel. It is mapped
 * into the 2nd channel.
 * 
 * The second plane usually contains the first chroma chanel.
 * Subsampled in both the X and Y direction. It is mapped into the
 * 3rd channel.
 * 
 * The third plane usually contains the second chroma channel.
 * Subsampled in both the X and Y direction. It is mapped into the
 * 1st channel.
 * 
 * Commonly known by the fourcc "S010".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::X6G10_X6B10_X6R10_422
 * Multiplane format with 3 planes.
 * 
 * Each channel is a 16 bit integer.
 * 
 * Only the 10 lower bits are used. The remaining ones must be set to 0 by the
 * producer.
 * 
 * The first plane usually contains the luma channel. It is mapped
 * into the 2nd channel.
 * 
 * The second plane usually contains the first chroma chanel.
 * Subsampled in the X direction. It is mapped into the 3rd channel.
 * 
 * The third plane usually contains the second chroma channel.
 * Subsampled in the X direction. It is mapped into the 1st channel.
 * 
 * Commonly known by the fourcc "S210".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::X6G10_X6B10_X6R10_444
 * Multiplane format with 3 planes.
 * 
 * Each channel is a 16 bit integer.
 * 
 * Only the 10 lower bits are used. The remaining ones must be set to 0 by the
 * producer.
 * 
 * The first plane usually contains the luma channel. It is mapped
 * into the 2nd channel.
 * 
 * The second plane usually contains the first chroma chanel. It is
 * mapped into the 3rd channel.
 * 
 * The third plane usually contains the second chroma channel. It is
 * mapped into the 1st channel.
 * 
 * Commonly known by the fourcc "S410".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::X4G12_X4B12_X4R12_420
 * Multiplane format with 3 planes.
 * 
 * Each channel is a 16 bit integer.
 * 
 * Only the 12 lower bits are used. The remaining ones must be set to 0 by the
 * producer.
 * 
 * The first plane usually contains the luma channel. It is mapped
 * into the 2nd channel.
 * 
 * The second plane usually contains the first chroma chanel.
 * Subsampled in both the X and Y direction. It is mapped into the
 * 3rd channel.
 * 
 * The third plane usually contains the second chroma channel.
 * Subsampled in both the X and Y direction. It is mapped into the
 * 1st channel.
 * 
 * Commonly known by the fourcc "S012".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::X4G12_X4B12_X4R12_422
 * Multiplane format with 3 planes.
 * 
 * Each channel is a 16 bit integer.
 * 
 * Only the 12 lower bits are used. The remaining ones must be set to 0 by the
 * producer.
 * 
 * The first plane usually contains the luma channel. It is mapped
 * into the 2nd channel.
 * 
 * The second plane usually contains the first chroma chanel.
 * Subsampled in the X direction. It is mapped into the 3rd channel.
 * 
 * The third plane usually contains the second chroma channel.
 * Subsampled in the X direction. It is mapped into the 1st channel.
 * 
 * Commonly known by the fourcc "S212".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::X4G12_X4B12_X4R12_444
 * Multiplane format with 3 planes.
 * 
 * Each channel is a 16 bit integer.
 * 
 * Only the 12 lower bits are used. The remaining ones must be set to 0 by the
 * producer.
 * 
 * The first plane usually contains the luma channel. It is mapped
 * into the 2nd channel.
 * 
 * The second plane usually contains the first chroma chanel. It is
 * mapped into the 3rd channel.
 * 
 * The third plane usually contains the second chroma channel. It is
 * mapped into the 1st channel.
 * 
 * Commonly known by the fourcc "S412".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::G16_B16_R16_420
 * Multiplane format with 3 planes.
 * 
 * Each channel is a 16 bit integer.
 * 
 * The first plane usually contains the luma channel. It is mapped
 * into the 2nd channel.
 * 
 * The second plane usually contains the first chroma chanel.
 * Subsampled in both the X and Y direction. It is mapped into the
 * 3rd channel.
 * 
 * The third plane usually contains the second chroma channel.
 * Subsampled in both the X and Y direction. It is mapped into the
 * 1st channel.
 * 
 * Commonly known by the fourcc "S016".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::G16_B16_R16_422
 * Multiplane format with 3 planes.
 * 
 * Each channel is a 16 bit integer.
 * 
 * The first plane usually contains the luma channel. It is mapped
 * into the 2nd channel.
 * 
 * The second plane usually contains the first chroma chanel.
 * Subsampled in the X direction. It is mapped into the 3rd channel.
 * 
 * The third plane usually contains the second chroma channel.
 * Subsampled in the X direction. It is mapped into the 1st channel.
 * 
 * Commonly known by the fourcc "S216".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::G16_B16_R16_444
 * Multiplane format with 3 planes.
 * 
 * Each channel is a 16 bit integer.
 * 
 * The first plane usually contains the luma channel. It is mapped
 * into the 2nd channel.
 * 
 * The second plane usually contains the first chroma chanel. It is
 * mapped into the 3rd channel.
 * 
 * The third plane usually contains the second chroma channel. It is
 * mapped into the 1st channel.
 * 
 * Commonly known by the fourcc "S416".
 * 
 * @newin{4,20}
 * 
 *  @var MemoryFormat::ARGB2101010_PREMULTIPLIED
 * 4 bytes per pixel
 * 
 * Bits 31..30 contain the alpha channel, 29..20 red, 19..10 green
 * and 9..0 blue.
 * 
 * The color values are premultiplied with the alpha value.
 * 
 * @newin{4,24}
 * 
 *  @var MemoryFormat::ARGB2101010
 * 4 bytes per pixel
 * 
 * Bits 31..30 contain the alpha channel, 29..20 red, 19..10 green
 * and 9..0 blue.
 * 
 * @newin{4,24}
 * 
 *  @var MemoryFormat::XRGB2101010
 * 4 bytes per pixel
 * 
 * Bits 31..30 are padding, bits 29..20 contain red, 19..10 green
 * and 9..0 blue.
 * 
 * The format is opaque.
 * 
 * @newin{4,24}
 * 
 *  @var MemoryFormat::ABGR2101010
 * 4 bytes per pixel
 * 
 * Bits 31..30 contain the alpha channel, 29..20 blue, 19..10 green
 * and 9..0 red.
 * 
 * @newin{4,24}
 * 
 *  @var MemoryFormat::XBGR2101010
 * 4 bytes per pixel
 * 
 * Bits 31..30 are padding, bits 29..20 contain blue, 19..10 green
 * and 9..0 red.
 * 
 * The format is opaque.
 * 
 * @newin{4,24}
 */
 /** Describes formats that image data can have in memory.
 * 
 * It describes formats by listing the contents of the memory passed to it.
 * So `Gdk::MemoryFormat::A8R8G8B8` will be 1 byte (8 bits) of alpha, followed by a
 * byte each of red, green and blue. It is not endian-dependent, so
 * `Cairo::Surface::Format::ARGB32` is represented by different `Gdk::MemoryFormats`
 * on architectures with different endiannesses.
 * 
 * # A note on naming
 * 
 * The format names are roughly modelled after
 * [VkFormat](https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.htmlVkFormat).
 * A name follows `GDK_MEMORY_<CHANNELS>_<DATA_TYPE>_<SUBSAMPLING> <PREMULTIPLIED>`
 * where CHANNELS describe how the RGBA channels are layed out in memory, with an
 * X denoting padding. DATA_TYPE is unsigned normalized integer if not present, or
 * otherwise FLOAT. The optional SUBSAMPLING defines the subsampling method used.
 * The optional ENDIAN term describes the endianness if it is not
 * host-endian. Finally, an optional PREMULTIPLIED term indicates that the color
 * channels are premultiplied with the alpha value, if it is omitted, the data is
 * not premultiplied or there is no alpha channel.
 * 
 * The CHANNELS are given as a list of planes seperated by underscores where
 * each plane is split into multiple elements describing one or more bytes of memory.
 * Each element is given as the list of channels folowed by the amount of bits taken
 * up.
 * 
 * So the fictional format `RGB565_A8_PREMULTIPLIED` would describe a format with 2
 * planes where the first plane is an unsigned 16 bit integer containing the RGB
 * channels with 5, 6, and 5 bits respectively while the 2nd plane contains the
 * alpha channel as an unisnged 8bit integer.
 * 
 * @newin{4,10}
 *
 * @ingroup gdkmmEnums
 */
enum class MemoryFormat
{
  B8G8R8A8_PREMULTIPLIED,
  A8R8G8B8_PREMULTIPLIED,
  R8G8B8A8_PREMULTIPLIED,
  B8G8R8A8,
  A8R8G8B8,
  R8G8B8A8,
  A8B8G8R8,
  R8G8B8,
  B8G8R8,
  R16G16B16,
  R16G16B16A16_PREMULTIPLIED,
  R16G16B16A16,
  R16G16B16_FLOAT,
  R16G16B16A16_FLOAT_PREMULTIPLIED,
  R16G16B16A16_FLOAT,
  R32G32B32_FLOAT,
  R32G32B32A32_FLOAT_PREMULTIPLIED,
  R32G32B32A32_FLOAT,
  G8A8_PREMULTIPLIED,
  G8A8,
  G8,
  G16A16_PREMULTIPLIED,
  G16A16,
  G16,
  A8,
  A16,
  A16_FLOAT,
  A32_FLOAT,
  A8B8G8R8_PREMULTIPLIED,
  B8G8R8X8,
  X8R8G8B8,
  R8G8B8X8,
  X8B8G8R8,
  G8_B8R8_420,
  G8_R8B8_420,
  G8_B8R8_422,
  G8_R8B8_422,
  G8_B8R8_444,
  G8_R8B8_444,
  G10X6_B10X6R10X6_420,
  G12X4_B12X4R12X4_420,
  G16_B16R16_420,
  G8_B8_R8_410,
  G8_R8_B8_410,
  G8_B8_R8_411,
  G8_R8_B8_411,
  G8_B8_R8_420,
  G8_R8_B8_420,
  G8_B8_R8_422,
  G8_R8_B8_422,
  G8_B8_R8_444,
  G8_R8_B8_444,
  G8B8G8R8_422,
  G8R8G8B8_422,
  R8G8B8G8_422,
  B8G8R8G8_422,
  X6G10_X6B10_X6R10_420,
  X6G10_X6B10_X6R10_422,
  X6G10_X6B10_X6R10_444,
  X4G12_X4B12_X4R12_420,
  X4G12_X4B12_X4R12_422,
  X4G12_X4B12_X4R12_444,
  G16_B16_R16_420,
  G16_B16_R16_422,
  G16_B16_R16_444,
  ARGB2101010_PREMULTIPLIED,
  ARGB2101010,
  XRGB2101010,
  ABGR2101010_PREMULTIPLIED,
  ABGR2101010,
  XBGR2101010,
  N_FORMATS
};


} // namespace Gdk

#ifndef DOXYGEN_SHOULD_SKIP_THIS
namespace Glib
{

template <>
class GDKMM_API Value<Gdk::MemoryFormat> : public Glib::Value_Enum<Gdk::MemoryFormat>
{
public:
  static GType value_type() G_GNUC_CONST;
};

} // namespace Glib
#endif /* DOXYGEN_SHOULD_SKIP_THIS */

namespace Gdk
{

/** 
 *  @var ModifierType::SHIFT_MASK
 * The Shift key.
 * 
 *  @var ModifierType::LOCK_MASK
 * A Lock key (depending on the Windowing System configuration,
 * this may either be <kbd>CapsLock</kbd> or <kbd>ShiftLock</kbd>).
 * 
 *  @var ModifierType::CONTROL_MASK
 * The Control key.
 * 
 *  @var ModifierType::ALT_MASK
 * The fourth modifier key (it depends on the Windowing System
 * configuration which key is interpreted as this modifier, but normally it
 * is the <kbd>Alt</kbd> key).
 * 
 *  @var ModifierType::BUTTON1_MASK
 * The first mouse button.
 * 
 *  @var ModifierType::BUTTON2_MASK
 * The second mouse button.
 * 
 *  @var ModifierType::BUTTON3_MASK
 * The third mouse button.
 * 
 *  @var ModifierType::BUTTON4_MASK
 * The fourth mouse button.
 * 
 *  @var ModifierType::BUTTON5_MASK
 * The fifth mouse button.
 * 
 *  @var ModifierType::SUPER_MASK
 * The Super modifier.
 * 
 *  @var ModifierType::HYPER_MASK
 * The Hyper modifier.
 * 
 *  @var ModifierType::META_MASK
 * The Meta modifier. Maps to Command on macOS.
 * 
 *  @var ModifierType::NO_MODIFIER_MASK
 * No modifier.
 * 
 * @newin{4,14}
 */
 /** Flags to indicate the state of modifier keys and mouse buttons
 * in events.
 * 
 * Typical modifier keys are Shift, Control, Meta, Super, Hyper, Alt, Compose,
 * Apple, CapsLock or ShiftLock.
 * 
 * Note that GDK may add internal values to events which include values outside
 * of this enumeration. Your code should preserve and ignore them. You can use
 * GDK_MODIFIER_MASK to remove all private values.
 *
 * @ingroup gdkmmEnums
 * @par Bitwise operators:
 * <tt>ModifierType operator|(ModifierType, ModifierType)</tt><br>
 * <tt>ModifierType operator&(ModifierType, ModifierType)</tt><br>
 * <tt>ModifierType operator^(ModifierType, ModifierType)</tt><br>
 * <tt>ModifierType operator~(ModifierType)</tt><br>
 * <tt>ModifierType& operator|=(ModifierType&, ModifierType)</tt><br>
 * <tt>ModifierType& operator&=(ModifierType&, ModifierType)</tt><br>
 * <tt>ModifierType& operator^=(ModifierType&, ModifierType)</tt><br>
 */
enum class ModifierType
{
  NO_MODIFIER_MASK = 0x0,
  SHIFT_MASK = 1 << 0,
  LOCK_MASK = 1 << 1,
  CONTROL_MASK = 1 << 2,
  ALT_MASK = 1 << 3,
  BUTTON1_MASK = 1 << 8,
  BUTTON2_MASK = 1 << 9,
  BUTTON3_MASK = 1 << 10,
  BUTTON4_MASK = 1 << 11,
  BUTTON5_MASK = 1 << 12,
  SUPER_MASK = 1 << 26,
  HYPER_MASK = 1 << 27,
  META_MASK = 1 << 28
};

/** @ingroup gdkmmEnums */
inline constexpr ModifierType operator|(ModifierType lhs, ModifierType rhs)
  { return static_cast<ModifierType>(static_cast<unsigned>(lhs) | static_cast<unsigned>(rhs)); }

/** @ingroup gdkmmEnums */
inline constexpr ModifierType operator&(ModifierType lhs, ModifierType rhs)
  { return static_cast<ModifierType>(static_cast<unsigned>(lhs) & static_cast<unsigned>(rhs)); }

/** @ingroup gdkmmEnums */
inline constexpr ModifierType operator^(ModifierType lhs, ModifierType rhs)
  { return static_cast<ModifierType>(static_cast<unsigned>(lhs) ^ static_cast<unsigned>(rhs)); }

/** @ingroup gdkmmEnums */
inline constexpr ModifierType operator~(ModifierType flags)
  { return static_cast<ModifierType>(~static_cast<unsigned>(flags)); }

/** @ingroup gdkmmEnums */
inline ModifierType& operator|=(ModifierType& lhs, ModifierType rhs)
  { return (lhs = static_cast<ModifierType>(static_cast<unsigned>(lhs) | static_cast<unsigned>(rhs))); }

/** @ingroup gdkmmEnums */
inline ModifierType& operator&=(ModifierType& lhs, ModifierType rhs)
  { return (lhs = static_cast<ModifierType>(static_cast<unsigned>(lhs) & static_cast<unsigned>(rhs))); }

/** @ingroup gdkmmEnums */
inline ModifierType& operator^=(ModifierType& lhs, ModifierType rhs)
  { return (lhs = static_cast<ModifierType>(static_cast<unsigned>(lhs) ^ static_cast<unsigned>(rhs))); }


} // namespace Gdk

#ifndef DOXYGEN_SHOULD_SKIP_THIS
namespace Glib
{

template <>
class GDKMM_API Value<Gdk::ModifierType> : public Glib::Value_Flags<Gdk::ModifierType>
{
public:
  static GType value_type() G_GNUC_CONST;
};

} // namespace Glib
#endif /* DOXYGEN_SHOULD_SKIP_THIS */

namespace Gdk
{

/** 
 *  @var NotifyType::ANCESTOR
 * The surface is entered from an ancestor or
 * left towards an ancestor.
 * 
 *  @var NotifyType::VIRTUAL
 * The pointer moves between an ancestor and an
 * inferior of the surface.
 * 
 *  @var NotifyType::INFERIOR
 * The surface is entered from an inferior or
 * left towards an inferior.
 * 
 *  @var NotifyType::NONLINEAR
 * The surface is entered from or left towards
 * a surface which is neither an ancestor nor an inferior.
 * 
 *  @var NotifyType::NONLINEAR_VIRTUAL
 * The pointer moves between two surfaces
 * which are not ancestors of each other and the surface is part of
 * the ancestor chain between one of these surfaces and their least
 * common ancestor.
 * 
 *  @var NotifyType::UNKNOWN
 * An unknown type of enter/leave event occurred.
 */
 /** Specifies the kind of crossing for enter and leave events.
 * 
 * See the X11 protocol specification of LeaveNotify for
 * full details of crossing event generation.
 *
 * @ingroup gdkmmEnums
 */
enum class NotifyType
{
  ANCESTOR,
  VIRTUAL,
  INFERIOR,
  NONLINEAR,
  NONLINEAR_VIRTUAL,
  UNKNOWN
};


} // namespace Gdk

#ifndef DOXYGEN_SHOULD_SKIP_THIS
namespace Glib
{

template <>
class GDKMM_API Value<Gdk::NotifyType> : public Glib::Value_Enum<Gdk::NotifyType>
{
public:
  static GType value_type() G_GNUC_CONST;
};

} // namespace Glib
#endif /* DOXYGEN_SHOULD_SKIP_THIS */

namespace Gdk
{

/** 
 *  @var ScrollDirection::UP
 * The surface is scrolled up.
 * 
 *  @var ScrollDirection::DOWN
 * The surface is scrolled down.
 * 
 *  @var ScrollDirection::LEFT
 * The surface is scrolled to the left.
 * 
 *  @var ScrollDirection::RIGHT
 * The surface is scrolled to the right.
 * 
 *  @var ScrollDirection::SMOOTH
 * The scrolling is determined by the delta values
 * in scroll events. See Gdk::ScrollEvent::get_deltas().
 */
 /** Specifies the direction for scroll events.
 *
 * @ingroup gdkmmEnums
 */
enum class ScrollDirection
{
  UP,
  DOWN,
  LEFT,
  RIGHT,
  SMOOTH
};


} // namespace Gdk

#ifndef DOXYGEN_SHOULD_SKIP_THIS
namespace Glib
{

template <>
class GDKMM_API Value<Gdk::ScrollDirection> : public Glib::Value_Enum<Gdk::ScrollDirection>
{
public:
  static GType value_type() G_GNUC_CONST;
};

} // namespace Glib
#endif /* DOXYGEN_SHOULD_SKIP_THIS */

namespace Gdk
{

/** 
 *  @var TouchpadGesturePhase::BEGIN
 * The gesture has begun.
 * 
 *  @var TouchpadGesturePhase::UPDATE
 * The gesture has been updated.
 * 
 *  @var TouchpadGesturePhase::END
 * The gesture was finished, changes
 * should be permanently applied.
 * 
 *  @var TouchpadGesturePhase::CANCEL
 * The gesture was cancelled, all
 * changes should be undone.
 */
 /** Specifies the current state of a touchpad gesture.
 * 
 * All gestures are guaranteed to begin with an event with phase
 * Gdk::TouchpadGesturePhase::BEGIN, followed by 0 or several events
 * with phase Gdk::TouchpadGesturePhase::UPDATE.
 * 
 * A finished gesture may have 2 possible outcomes, an event with phase
 * Gdk::TouchpadGesturePhase::END will be emitted when the gesture is
 * considered successful, this should be used as the hint to perform any
 * permanent changes.
 * 
 * Cancelled gestures may be so for a variety of reasons, due to hardware
 * or the compositor, or due to the gesture recognition layers hinting the
 * gesture did not finish resolutely (eg. a 3rd finger being added during
 * a pinch gesture). In these cases, the last event will report the phase
 * Gdk::TouchpadGesturePhase::CANCEL, this should be used as a hint
 * to undo any visible/permanent changes that were done throughout the
 * progress of the gesture.
 *
 * @ingroup gdkmmEnums
 */
enum class TouchpadGesturePhase
{
  BEGIN,
  UPDATE,
  END,
  CANCEL
};


} // namespace Gdk

#ifndef DOXYGEN_SHOULD_SKIP_THIS
namespace Glib
{

template <>
class GDKMM_API Value<Gdk::TouchpadGesturePhase> : public Glib::Value_Enum<Gdk::TouchpadGesturePhase>
{
public:
  static GType value_type() G_GNUC_CONST;
};

} // namespace Glib
#endif /* DOXYGEN_SHOULD_SKIP_THIS */

namespace Gdk
{

/** 
 *  @var ScrollUnit::WHEEL
 * The delta is in number of wheel clicks.
 * 
 *  @var ScrollUnit::SURFACE
 * The delta is in surface pixels to scroll directly
 * on screen.
 */
 /** Specifies the unit of scroll deltas.
 * 
 * When you get Gdk::ScrollUnit::WHEEL, a delta of 1.0 means 1 wheel detent
 * click in the south direction, 2.0 means 2 wheel detent clicks in the south
 * direction... This is the same logic for negative values but in the north
 * direction.
 * 
 * If you get Gdk::ScrollUnit::SURFACE, are managing a scrollable view and get a
 * value of 123, you have to scroll 123 surface logical pixels right if it's
 *  @a delta_x or down if it's @a delta_y. This is the same logic for negative values
 * but you have to scroll left instead of right if it's @a delta_x and up instead
 * of down if it's @a delta_y.
 * 
 * 1 surface logical pixel is equal to 1 real screen pixel multiplied by the
 * final scale factor of your graphical interface (the product of the desktop
 * scale factor and eventually a custom scale factor in your app).
 * 
 * @newin{4,8}
 *
 * @ingroup gdkmmEnums
 */
enum class ScrollUnit
{
  WHEEL,
  SURFACE
};


} // namespace Gdk

#ifndef DOXYGEN_SHOULD_SKIP_THIS
namespace Glib
{

template <>
class GDKMM_API Value<Gdk::ScrollUnit> : public Glib::Value_Enum<Gdk::ScrollUnit>
{
public:
  static GType value_type() G_GNUC_CONST;
};

} // namespace Glib
#endif /* DOXYGEN_SHOULD_SKIP_THIS */

namespace Gdk
{


} //namespace Gdk


#endif /* _GDKMM_ENUMS_H */

