1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
#![no_std]
#![allow(bad_style)]
#![warn(missing_docs)]
#![allow(clippy::missing_safety_doc)]

//! Bindings to the SDL2 C library.

pub use chlorine::*;

macro_rules! impl_bit_ops_for_tuple_newtype {
  ($t:ty) => {
    impl core::ops::BitAnd for $t {
      type Output = Self;
      #[inline]
      fn bitand(self, rhs: Self) -> Self::Output {
        Self(self.0 & rhs.0)
      }
    }
    impl core::ops::BitAndAssign for $t {
      fn bitand_assign(&mut self, rhs: Self) {
        self.0 &= rhs.0
      }
    }
    impl core::ops::BitOr for $t {
      type Output = Self;
      #[inline]
      fn bitor(self, rhs: Self) -> Self::Output {
        Self(self.0 | rhs.0)
      }
    }
    impl core::ops::BitOrAssign for $t {
      fn bitor_assign(&mut self, rhs: Self) {
        self.0 |= rhs.0
      }
    }
    impl core::ops::BitXor for $t {
      type Output = Self;
      #[inline]
      fn bitxor(self, rhs: Self) -> Self::Output {
        Self(self.0 ^ rhs.0)
      }
    }
    impl core::ops::BitXorAssign for $t {
      fn bitxor_assign(&mut self, rhs: Self) {
        self.0 ^= rhs.0
      }
    }
    impl core::ops::Not for $t {
      type Output = Self;
      fn not(self) -> Self::Output {
        Self(!self.0)
      }
    }
  };
}

// Note(Lokathor): Declarations are organized into modules according to SDL's
// public header organization. A file like `include/SDL_foo.h` becomes a module
// named `foo`, and `SDL.h` itself is `lib.rs`. As with SDL, all the
// declarations are exported as a single flat namespace at the top level.

pub mod platform;
pub use platform::*;

pub mod stdinc;
pub use stdinc::*;

pub mod error;
pub use error::*;

pub mod rwops;
pub use rwops::*;

pub mod audio;
pub use audio::*;

pub mod blendmode;
pub use blendmode::*;

pub mod clipboard;
pub use clipboard::*;

pub mod cpuinfo;
pub use cpuinfo::*;

pub mod pixels;
pub use pixels::*;

pub mod rect;
pub use rect::*;

pub mod surface;
pub use surface::*;

pub mod video;
pub use video::*;

pub mod scancode;
pub use scancode::*;

pub mod keycode;
pub use keycode::*;

pub mod keyboard;
pub use keyboard::*;

pub mod mouse;
pub use mouse::*;

pub mod joystick;
pub use joystick::*;

pub mod gamecontroller;
pub use gamecontroller::*;

pub mod touch;
pub use touch::*;

pub mod gesture;
pub use gesture::*;

pub mod events;
pub use events::*;

pub mod quit;
pub use quit::*;

pub mod filesystem;
pub use filesystem::*;

// TODO: haptic (joystick force feedback system). I bet no one is even gonna ask
// for this to be put in.

pub mod hints;
pub use hints::*;

pub mod loadso;
pub use loadso::*;

pub mod messagebox;
pub use messagebox::*;

pub mod power;
pub use power::*;

pub mod renderer;
pub use renderer::*;

pub mod sensor;
pub use sensor::*;

// TODO: shape (allows shaped windows). I bet no one is even gonna ask for this.

pub mod syswm;
pub use syswm::*;

pub mod timer;
pub use timer::*;

pub mod version;
pub use version::*;

pub mod vulkan;
pub use vulkan::*;