// GENERATED — DO NOT EDIT

///|
/// [Upstream documentation](https://docs.gtk.org/gdk4/flags.ModifierType.html).
pub(all) enum ModifierTypeFlag {
  NoModifierMask = 1
  ShiftMask = 2
  LockMask = 4
  ControlMask = 8
  AltMask = 16
  Button1Mask = 32
  Button2Mask = 64
  Button3Mask = 128
  Button4Mask = 256
  Button5Mask = 512
  SuperMask = 1024
  HyperMask = 2048
  MetaMask = 4096
}

///|
fn ModifierTypeFlag::to_int(self : ModifierTypeFlag) -> Int = "%identity"

///|
pub struct ModifierType {
  priv value : Int
}

///|
pub fn ModifierType::ModifierType(
  flags : Array[ModifierTypeFlag],
) -> ModifierType {
  let mut v = 0
  for flag in flags {
    v = v | flag.to_int()
  }
  ModifierType::{ value: v }
}

///|
pub fn ModifierType::from_int(value : Int) -> ModifierType {
  ModifierType::{ value, }
}

///|
pub fn ModifierType::to_int(self : ModifierType) -> Int {
  self.value
}

///|
/// [Upstream documentation](https://docs.gtk.org/gdk4/flags.FrameClockPhase.html).
pub(all) enum FrameClockPhaseFlag {
  None = 1
  FlushEvents = 2
  BeforePaint = 4
  Update = 8
  Layout = 16
  Paint = 32
  ResumeEvents = 64
  AfterPaint = 128
}

///|
fn FrameClockPhaseFlag::to_int(self : FrameClockPhaseFlag) -> Int = "%identity"

///|
pub struct FrameClockPhase {
  priv value : Int
}

///|
pub fn FrameClockPhase::FrameClockPhase(
  flags : Array[FrameClockPhaseFlag],
) -> FrameClockPhase {
  let mut v = 0
  for flag in flags {
    v = v | flag.to_int()
  }
  FrameClockPhase::{ value: v }
}

///|
pub fn FrameClockPhase::from_int(value : Int) -> FrameClockPhase {
  FrameClockPhase::{ value, }
}

///|
pub fn FrameClockPhase::to_int(self : FrameClockPhase) -> Int {
  self.value
}

///|
/// [Upstream documentation](https://docs.gtk.org/gdk4/enum.SubpixelLayout.html).
pub(all) enum SubpixelLayout {
  Unknown = 0
  None = 1
  HorizontalRgb = 2
  HorizontalBgr = 3
  VerticalRgb = 4
  VerticalBgr = 5
}

///|
/// [Upstream documentation](https://docs.gtk.org/gdk4/flags.PaintableFlags.html).
pub(all) enum PaintableFlag {
  StaticSize = 1
  StaticContents = 2
}

///|
fn PaintableFlag::to_int(self : PaintableFlag) -> Int = "%identity"

///|
pub struct PaintableFlags {
  priv value : Int
}

///|
pub fn PaintableFlags::PaintableFlags(
  flags : Array[PaintableFlag],
) -> PaintableFlags {
  let mut v = 0
  for flag in flags {
    v = v | flag.to_int()
  }
  PaintableFlags::{ value: v }
}

///|
pub fn PaintableFlags::from_int(value : Int) -> PaintableFlags {
  PaintableFlags::{ value, }
}

///|
pub fn PaintableFlags::to_int(self : PaintableFlags) -> Int {
  self.value
}

///|
/// [Upstream documentation](https://docs.gtk.org/gdk4/flags.DragAction.html).
pub(all) enum DragActionFlag {
  None = 1
  Copy = 2
  Move = 4
  Link = 8
  Ask = 16
}

///|
fn DragActionFlag::to_int(self : DragActionFlag) -> Int = "%identity"

///|
pub struct DragAction {
  priv value : Int
}

///|
pub fn DragAction::DragAction(flags : Array[DragActionFlag]) -> DragAction {
  let mut v = 0
  for flag in flags {
    v = v | flag.to_int()
  }
  DragAction::{ value: v }
}

///|
pub fn DragAction::from_int(value : Int) -> DragAction {
  DragAction::{ value, }
}

///|
pub fn DragAction::to_int(self : DragAction) -> Int {
  self.value
}

///|
/// [Upstream documentation](https://docs.gtk.org/gdk4/enum.ScrollUnit.html).
pub(all) enum ScrollUnit {
  Wheel = 0
  Surface = 1
}

///|
/// [Upstream documentation](https://docs.gtk.org/gdk4/enum.InputSource.html).
pub(all) enum InputSource {
  Mouse = 0
  Pen = 1
  Keyboard = 2
  Touchscreen = 3
  Touchpad = 4
  Trackpoint = 5
  TabletPad = 6
}

///|
/// [Upstream documentation](https://docs.gtk.org/gdk4/enum.MemoryFormat.html).
pub(all) enum MemoryFormat {
  B8g8r8a8Premultiplied = 0
  A8r8g8b8Premultiplied = 1
  R8g8b8a8Premultiplied = 2
  B8g8r8a8 = 3
  A8r8g8b8 = 4
  R8g8b8a8 = 5
  A8b8g8r8 = 6
  R8g8b8 = 7
  B8g8r8 = 8
  R16g16b16 = 9
  R16g16b16a16Premultiplied = 10
  R16g16b16a16 = 11
  R16g16b16Float = 12
  R16g16b16a16FloatPremultiplied = 13
  R16g16b16a16Float = 14
  R32g32b32Float = 15
  R32g32b32a32FloatPremultiplied = 16
  R32g32b32a32Float = 17
  G8a8Premultiplied = 18
  G8a8 = 19
  G8 = 20
  G16a16Premultiplied = 21
  G16a16 = 22
  G16 = 23
  A8 = 24
  A16 = 25
  A16Float = 26
  A32Float = 27
  A8b8g8r8Premultiplied = 28
  B8g8r8x8 = 29
  X8r8g8b8 = 30
  R8g8b8x8 = 31
  X8b8g8r8 = 32
  G8B8r8420 = 33
  G8R8b8420 = 34
  G8B8r8422 = 35
  G8R8b8422 = 36
  G8B8r8444 = 37
  G8R8b8444 = 38
  G10x6B10x6r10x6420 = 39
  G12x4B12x4r12x4420 = 40
  G16B16r16420 = 41
  G8B8R8410 = 42
  G8R8B8410 = 43
  G8B8R8411 = 44
  G8R8B8411 = 45
  G8B8R8420 = 46
  G8R8B8420 = 47
  G8B8R8422 = 48
  G8R8B8422 = 49
  G8B8R8444 = 50
  G8R8B8444 = 51
  G8b8g8r8422 = 52
  G8r8g8b8422 = 53
  R8g8b8g8422 = 54
  B8g8r8g8422 = 55
  X6g10X6b10X6r10420 = 56
  X6g10X6b10X6r10422 = 57
  X6g10X6b10X6r10444 = 58
  X4g12X4b12X4r12420 = 59
  X4g12X4b12X4r12422 = 60
  X4g12X4b12X4r12444 = 61
  G16B16R16420 = 62
  G16B16R16422 = 63
  G16B16R16444 = 64
  NFormats = 65
}

///|
/// [Upstream documentation](https://docs.gtk.org/gdk4/flags.GLAPI.html).
pub(all) enum GLAPIFlag {
  Gl = 1
  Gles = 2
}

///|
fn GLAPIFlag::to_int(self : GLAPIFlag) -> Int = "%identity"

///|
pub struct GLAPI {
  priv value : Int
}

///|
pub fn GLAPI::GLAPI(flags : Array[GLAPIFlag]) -> GLAPI {
  let mut v = 0
  for flag in flags {
    v = v | flag.to_int()
  }
  GLAPI::{ value: v }
}

///|
pub fn GLAPI::from_int(value : Int) -> GLAPI {
  GLAPI::{ value, }
}

///|
pub fn GLAPI::to_int(self : GLAPI) -> Int {
  self.value
}