class moderngl_window.context.base.window.WindowConfig(ctx: Context | None = None, wnd: BaseWindow | None = None, timer: BaseTimer | None = None, **kwargs: Any)

  Bases: `object`

  Creating a `WindowConfig` instance is the simplest interface this library provides to open and window, handle inputs and provide simple shortcut method for loading basic resources. It’s appropriate for projects with basic needs.

  Example:

      import moderngl_window

      class MyConfig(moderngl_window.WindowConfig):
          gl_version = (3, 3)
          window_size = (1920, 1080)
          aspect_ratio = 16 / 9
          title = "My Config"
          resizable = False
          samples = 8

          def __init__(self, **kwargs):
              super().__init__(**kwargs)
              # Do other initialization here

          def on_render(self, time: float, frametime: float):
              # Render stuff here with ModernGL

          def on_resize(self, width: int, height: int):
              print("Window was resized. buffer size is {} x {}".format(width, height))

          def on_mouse_position_event(self, x, y, dx, dy):
              print("Mouse position:", x, y)

          def on_mouse_press_event(self, x, y, button):
              print("Mouse button {} pressed at {}, {}".format(button, x, y))

          def on_mouse_release_event(self, x: int, y: int, button: int):
              print("Mouse button {} released at {}, {}".format(button, x, y))

          def on_key_event(self, key, action, modifiers):
              print(key, action, modifiers)

  classmethod add_arguments(parser: ArgumentParser) → None

    Add arguments to default argument parser. Add arguments using `add_argument(..)`.

    Parameters:

      parser (ArgumentParser) – The default argument parser.

  argv: Namespace | None = None

    The parsed command line arguments.

  aspect_ratio = 1.7777777777777777

    The enforced aspect ratio of the viewport. When specified back borders will be calculated both vertically and horizontally if needed.

    This property can be set to `None` to disable the fixed viewport system.

        # Default value
        aspect_ratio = 16 / 9

  assign_event_callbacks() → None

    Look for methods in the class instance and assign them to callbacks. This method is call by `__init__`.

  clear_color = (0.0, 0.0, 0.0, 0.0)

    The color the active framebuffer is cleared with. This attribute is expected to be in the form of `(r, g, b, a)` in the range `[0.0, 1.0]`

    If the value is None the screen will not be cleared every frame.

        # Default value
        clear_color = (0.0, 0.0, 0.0, 0.0)
        # Disable screen clearing
        clear_color = None

  cursor = True

    Determines if the mouse cursor should be visible inside the window. If enabled on some platforms

        # Default value
        cursor = True

  fullscreen = False

    Open the window in fullscreen mode.

        # Default value
        fullscreen = False

  gl_version = (3, 3)

    The minimum required OpenGL version required

        # Default value
        gl_version = (3, 3)

  hidden_window_framerate_limit = 30

    The framerate limit for hidden windows. This is useful for windows that should not render at full speed when hidden. On some platforms the render loop can spike to thousands of frames per second when hidden eating up battery life on laptops.

    A value less than 0 will disable the framerate limit. Otherwise the the value is a suggested limit in frames per second.

  classmethod init_mgl_context() → Context | None

    Can be implemented to control the creation of the moderngl context.

    The window calls this method first during context creation. If not context is returned the window will create its own.

  load_binary(path: str, **kwargs: Any) → bytes

    Load a file in binary mode.

    If the path is relative the resource system is used expecting one or more resource directories to be registered first. Absolute paths will attempt to load the file directly.

    Parameters:

      - path (str) – Path to the file relative to search directories

      - **kwargs – Additional parameters to DataDescription

    Returns:

      The byte data of the file

    Return type:

      bytes

  load_compute_shader(path: str, defines: dict[str, Any] | None = None, **kwargs: Any) → ComputeShader

    Loads a compute shader.

    Parameters:

      - path (str) – Path to a single glsl file

      - defines (dict) – `#define` values to replace in the shader source. Example: `{'VALUE1': 10, 'VALUE2': '3.1415'}`.

    Returns:

      The compute shader

    Return type:

      moderngl.ComputeShader

  load_json(path: str, **kwargs: Any) → dict[str, Any]

    Load a json file

    If the path is relative the resource system is used expecting one or more resource directories to be registered first. Absolute paths will attempt to load the file directly.

    Parameters:

      - path (str) – Path to the file relative to search directories

      - **kwargs – Additional parameters to DataDescription

    Returns:

      Contents of the json file

    Return type:

      dict

  load_program(path: str | None = None, vertex_shader: str | None = None, geometry_shader: str | None = None, fragment_shader: str | None = None, tess_control_shader: str | None = None, tess_evaluation_shader: str | None = None, defines: dict[str, Any] | None = None, varyings: list[str] | None = None) → Program

    Loads a shader program.

    Note that path should only be used if all shaders are defined in the same glsl file separated by defines.

    If the path is relative the resource system is used expecting one or more resource directories to be registered first. Absolute paths will attempt to load the file directly.

    Keyword Arguments:

      - path (str) – Path to a single glsl file

      - vertex_shader (str) – Path to vertex shader

      - geometry_shader (str) – Path to geometry shader

      - fragment_shader (str) – Path to fragment shader

      - tess_control_shader (str) – Path to tessellation control shader

      - tess_evaluation_shader (str) – Path to tessellation eval shader

      - defines (dict) – `#define` values to replace in the shader source. Example: `{'VALUE1': 10, 'VALUE2': '3.1415'}`.

      - varyings (list[str]) – Out attribute names for transform shaders

    Returns:

      The program instance

    Return type:

      moderngl.Program

  load_scene(path: str, cache: bool = False, attr_names: type[AttributeNames] = <class 'moderngl_window.geometry.attributes.AttributeNames'>, kind: str | None = None, **kwargs: Any) → Scene

    Loads a scene.

    If the path is relative the resource system is used expecting one or more resource directories to be registered first. Absolute paths will attempt to load the file directly.

    Keyword Arguments:

      - path (str) – Path to the file relative to search directories

      - cache (str) – Use the loader caching system if present

      - attr_names (AttributeNames) – Attrib name config

      - kind (str) – Override loader kind

      - **kwargs – Additional parameters to SceneDescription

    Returns:

      The scene instance

    Return type:

      Scene

  load_text(path: str, **kwargs: Any) → str

    Load a text file.

    If the path is relative the resource system is used expecting one or more resource directories to be registered first. Absolute paths will attempt to load the file directly.

    Parameters:

      - path (str) – Path to the file relative to search directories

      - **kwargs – Additional parameters to DataDescription

    Returns:

      Contents of the text file

    Return type:

      str

  load_texture_2d(path: str, flip: bool = True, flip_x: bool = False, flip_y: bool = True, mipmap: bool = False, mipmap_levels: tuple[int, int] | None = None, anisotropy: float = 1.0, **kwargs: Any) → Texture

    Loads a 2D texture.

    If the path is relative the resource system is used expecting one or more resource directories to be registered first. Absolute paths will attempt to load the file directly.

    Parameters:

      path (str) – Path to the texture relative to search directories

    Keyword Arguments:

      - flip (boolean) – (Use ``flip_y`) Flip the image vertically (top to bottom)

      - flip_x (boolean) – Flip the image horizontally (left to right)

      - flip_y (boolean) – Flip the image vertically (top to bottom)

      - mipmap (bool) – Generate mipmaps. Will generate max possible levels unless mipmap_levels is defined.

      - mipmap_levels (tuple) – (base, max_level) controlling mipmap generation. When defined the mipmap parameter is automatically True

      - anisotropy (float) – Number of samples for anisotropic filtering

      - **kwargs – Additional parameters to TextureDescription

    Returns:

      Texture instance

    Return type:

      moderngl.Texture

  load_texture_array(path: str, layers: int = 0, flip: bool = True, mipmap: bool = False, mipmap_levels: tuple[int, int] | None = None, anisotropy: float = 1.0, **kwargs: Any) → TextureArray

    Loads a texture array.

    If the path is relative the resource system is used expecting one or more resource directories to be registered first. Absolute paths will attempt to load the file directly.

    Parameters:

      path (str) – Path to the texture relative to search directories

    Keyword Arguments:

      - layers (int) – How many layers to split the texture into vertically

      - flip (boolean) – Flip the image horizontally

      - mipmap (bool) – Generate mipmaps. Will generate max possible levels unless mipmap_levels is defined.

      - mipmap_levels (tuple) – (base, max_level) controlling mipmap generation. When defined the mipmap parameter is automatically True

      - anisotropy (float) – Number of samples for anisotropic filtering

      - **kwargs – Additional parameters to TextureDescription

    Returns:

      The texture instance

    Return type:

      moderngl.TextureArray

  load_texture_cube(pos_x: str = '', pos_y: str = '', pos_z: str = '', neg_x: str = '', neg_y: str = '', neg_z: str = '', flip: bool = False, flip_x: bool = False, flip_y: bool = False, mipmap: bool = False, mipmap_levels: tuple[int, int] | None = None, anisotropy: float = 1.0, **kwargs: Any) → TextureCube

    Loads a texture cube.

    If the path is relative the resource system is used expecting one or more resource directories to be registered first. Absolute paths will attempt to load the file directly.

    Keyword Arguments:

      - pos_x (str) – Path to texture representing positive x face

      - pos_y (str) – Path to texture representing positive y face

      - pos_z (str) – Path to texture representing positive z face

      - neg_x (str) – Path to texture representing negative x face

      - neg_y (str) – Path to texture representing negative y face

      - neg_z (str) – Path to texture representing negative z face

      - flip (boolean) – (Use `flip_y`)Flip the image vertically (top to bottom)

      - flip_x (boolean) – Flip the image horizontally (left to right)

      - flip_y (boolean) – Flip the image vertically (top to bottom)

      - mipmap (bool) – Generate mipmaps. Will generate max possible levels unless mipmap_levels is defined.

      - mipmap_levels (tuple) – (base, max_level) controlling mipmap generation. When defined the mipmap parameter is automatically True

      - anisotropy (float) – Number of samples for anisotropic filtering

      - **kwargs – Additional parameters to TextureDescription

    Returns:

      Texture instance

    Return type:

      moderngl.TextureCube

  log_level = 20

    Sets the log level for this library using the standard logging module.

        # Default value
        log_level = logging.INFO

  on_close() → None

    Called when the window is about to close

  on_files_dropped_event(x: int, y: int, paths: list[str]) → None

    Called when files dropped onto the window

    Parameters:

      - x (int) – X location in window where file was dropped

      - y (int) – Y location in window where file was dropped

      - paths (list) – List of file paths dropped

  on_iconify(iconified: bool) → None

    Called when the window is minimized/iconified or restored from this state

    Parameters:

      iconified (bool) – If `True` the window is iconified/minimized. Otherwise restored.

  on_key_event(key: Any, action: Any, modifiers: KeyModifiers) → None

    Called for every key press and release. Depending on the library used, key events may trigger repeating events during the pressed duration based on the configured key repeat on the users operating system.

    Parameters:

      - key – The key that was press. Compare with self.wnd.keys.

      - action – self.wnd.keys.ACTION_PRESS or ACTION_RELEASE

      - modifiers – Modifier state for shift, ctrl and alt

  on_mouse_drag_event(x: int, y: int, dx: int, dy: int) → None

    Called when the mouse is moved while a button is pressed.

    Parameters:

      - x (int) – X position of the mouse cursor

      - y (int) – Y position of the mouse cursor

      - dx (int) – X delta position

      - dy (int) – Y delta position

  on_mouse_position_event(x: int, y: int, dx: int, dy: int) → None

    Reports the current mouse cursor position in the window

    Parameters:

      - x (int) – X position of the mouse cursor

      - y (int) – Y position of the mouse cursor

      - dx (int) – X delta position

      - dy (int) – Y delta position

  on_mouse_press_event(x: int, y: int, button: int) → None

    Called when a mouse button in pressed

    Parameters:

      - x (int) – X position the press occurred

      - y (int) – Y position the press occurred

      - button (int) – 1 = Left button, 2 = right button

  on_mouse_release_event(x: int, y: int, button: int) → None

    Called when a mouse button in released

    Parameters:

      - x (int) – X position the release occurred

      - y (int) – Y position the release occurred

      - button (int) – 1 = Left button, 2 = right button

  on_mouse_scroll_event(x_offset: float, y_offset: float) → None

    Called when the mouse wheel is scrolled.

    Some input devices also support horizontal scrolling, but vertical scrolling is fairly universal.

    Parameters:

      - x_offset (int) – X scroll offset

      - y_offset (int) – Y scroll offset

  on_render(time: float, frame_time: float) → None

    Renders the assigned effect

    Parameters:

      - time (float) – Current time in seconds

      - frame_time (float) – Delta time from last frame in seconds

  on_resize(width: int, height: int) → None

    Called every time the window is resized in case the we need to do internal adjustments.

    Parameters:

      - width (int) – width in buffer size (not window size)

      - height (int) – height in buffer size (not window size)

  on_unicode_char_entered(char: str) → None

    Called when the user entered a unicode character.

    Parameters:

      char (str) – The character entered

  resizable = True

    Determines of the window should be resizable

        # Default value
        resizable = True

  resource_dir = None

    Absolute path to your resource directory containing textures, scenes, shaders/programs or data files. The `load_` methods in this class will look for resources in this path. This attribute can be a `str` or a `pathlib.Path`.

        # Default value
        resource_dir = None

  classmethod run() → None

    Shortcut for running a `WindowConfig`.

    This executes the following code:

        import moderngl_window
        moderngl_window.run_window_config(cls)

  samples = 0

    Number of samples to use in multisampling.

        # Default value
        samples = 4

  title = 'Example'

    Title of the window

        # Default value
        title = "Example"

  visible = True

    Determines if the window should be visible when created

        # Default value
        visible = True

  vsync = True

    Enable or disable vsync.

        # Default value
        vsync = True

  window_size = (1280, 720)

    Size of the window.

        # Default value
        window_size = (1280, 720)

class moderngl_window.context.base.window.BaseWindow(title: str = 'ModernGL', gl_version: tuple[int, int] = (3, 3), size: tuple[int, int] = (1280, 720), resizable: bool = True, visible: bool = True, fullscreen: bool = False, vsync: bool = True, aspect_ratio: float | None = None, samples: int = 0, cursor: bool = True, backend: str | None = None, context_creation_func: Callable[[], Context | None] | None = None, **kwargs: Any)

  Bases: `object`

  Helper base class for a generic window implementation

  property aspect_ratio: float

    The current aspect ratio of the window. If a fixed aspect ratio was passed to the window initializer this value will always be returned. Otherwise `width / height` will be returned.

    This property is read only.

    Type:

      float

  property backend: str | None

    Name of the context backend.

    This is `None` unless a backend is explicitly specified during context creation. The main use case for this is to enable EGL in headless mode.

  property buffer_height: int

    the current window buffer height

    Type:

      int

  property buffer_size: tuple[int, int]

    tuple with the current window buffer size

    Type:

      tuple[int, int]

  property buffer_width: int

    the current window buffer width

    Type:

      int

  clear(red: float = 0.0, green: float = 0.0, blue: float = 0.0, alpha: float = 0.0, depth: float = 1.0, viewport: tuple[int, int, int, int] | None = None) → None

    Binds and clears the default framebuffer

    Parameters:

      - red (float) – color component

      - green (float) – color component

      - blue (float) – color component

      - alpha (float) – alpha component

      - depth (float) – depth value

      - viewport (tuple) – The viewport

  close() → None

    Signal for the window to close

  property close_func: Callable[[], None]

    Get or set the close callable

    Type:

      callable

  property config: WindowConfig | None

    Get or det the current WindowConfig instance

    Assigning a WindowConfig instance will automatically set up the necessary event callback methods:

        window.config = window_config_instance

  convert_window_coordinates(x: int, y: int, x_flipped: bool = False, y_flipped: bool = False) → tuple[int, int]

    Convert window coordinates to top-left coordinate space. The default origin is the top left corner of the window.

    - If you are converting from bottom origin coordinates use x_flipped=True

    - If you are converting from right origin coordinates use y_flipped=True

    Parameters:

      - x_flipped (bool)

      - y_flipped (bool)

    Returns:

      tuple (x, y) of converted window coordinates

  property ctx: Context

    The ModernGL context for the window

    Type:

      moderngl.Context

  property cursor: bool

    Should the mouse cursor be visible inside the window?

    This property can also be assigned to:

        # Disable cursor
        window.cursor = False

    Type:

      bool

  destroy() → None

    A library specific destroy method is required

  property exit_key: Any

    Get or set the exit/close key for the window.

    Pressing this key will close the window.

    By default the `ESCAPE` is set, but this can be overridden or disabled:

        # Default exit key
        window.exit_key = window.keys.ESCAPE

        # Set some other random exit key
        window.exit_key = window.keys.Q

        # Disable the exit key
        window.exit_key = None

  property fbo: Framebuffer

    The default framebuffer

    Type:

      moderngl.Framebuffer

  property files_dropped_event_func: Callable[[int, int, list[str | Path]], None]

    Get or set the files_dropped callable

    Type:

      callable

  property fixed_aspect_ratio: float | None

    The fixed aspect ratio for the window.

    Can be set to `None` to disable fixed aspect ratio making the aspect ratio adjust to the actual window size

    This will affects how the viewport is calculated and the reported value from the `aspect_ratio` property:

        # Enabled fixed aspect ratio
        window.fixed_aspect_ratio = 16 / 9

        # Disable fixed aspect ratio
        window.fixed_aspect_ratio = None

    Type:

      float

  property frames: int

    Number of frames rendered

    Type:

      int

  property fullscreen: bool

    Window is in fullscreen mode

    Type:

      bool

  property fullscreen_key: Any

    Get or set the fullscreen toggle key for the window.

    Pressing this key will toggle fullscreen for the window.

    By default this is set to `F11`, but this can be overridden or disabled:

        # Default fullscreen key
        window.fullscreen_key = window.keys.F11

        # Set some other random fullscreen key
        window.fullscreen_key = window.keys.F

        # Disable the fullscreen key
        window.fullscreen_key = None

  property gl_version: tuple[int, int]

    (major, minor) required OpenGL version

    Type:

      tuple[int, int]

  property gl_version_code: int

    Generates the version code integer for the selected OpenGL version.

    gl_version (4, 1) returns 410

    Type:

      int

  property headless: bool

    Is the window headless?

    Type:

      bool

  property height: int

    The current window height

    Type:

      int

  property hidden: bool

    Window is hidden

    Type:

      bool

  hide() → None

    Hide the window

  property iconify_func: Callable[[bool], None]

    Get or set ehe iconify/show/hide callable

    Type:

      callable

  init_mgl_context() → None

    Create or assign a ModernGL context. If no context is supplied a context will be created using the window’s `gl_version`.

    Keyword Arguments:

      ctx – An optional custom ModernGL context

  property is_closing: bool

    Is the window about to close?

    Type:

      bool

  is_key_pressed(key: str) → bool

    Returns: The press state of a key

  property key_event_func: Callable[[str | int, int, KeyModifiers], None]

    Get or set the key_event callable

    Type:

      callable

  keys

    Window specific key constants

    alias of `BaseKeys`

  property modifiers: KeyModifiers

    (KeyModifiers) The current keyboard modifiers

  mouse

    Mouse button enum

    alias of `MouseButtons`

  property mouse_drag_event_func: Callable[[int, int, int, int], None]

    Get or set the mouse_drag callable

    Type:

      callable

  property mouse_exclusivity: bool

    If mouse exclusivity is enabled.

    When you enable mouse-exclusive mode, the mouse cursor is no longer available. It is not merely hidden – no amount of mouse movement will make it leave your application. This is for example useful when you don’t want the mouse leaving the screen when rotating a 3d scene.

    This property can also be set:

        window.mouse_exclusivity = True

    Type:

      bool

  property mouse_position_event_func: Callable[[int, int, int, int], None]

    Get or set the mouse_position callable

    Type:

      callable

  property mouse_press_event_func: Callable[[int, int, int], None]

    Get or set the mouse_press callable

    Type:

      callable

  property mouse_release_event_func: Callable[[int, int, int], None]

    Get or set the mouse_release callable

    Type:

      callable

  property mouse_scroll_event_func: Callable[[float, float], None]

    Get or set the mouse_scroll_event calable

    Type:

      callable

  property mouse_states: MouseButtonStates

    Mouse button state structure.

    The current mouse button states.

        window.mouse_buttons.left
        window.mouse_buttons.right
        window.mouse_buttons.middle

    Type:

      MouseButtonStates

  name = 'base'

    Name of the window. For example `pyglet`, `glfw`

  property on_generic_event_func: Callable[[int, int, int, int], None] | None

    Get or set the on_generic_event callable used to funnel all non-processed events

    Type:

      callable

  property pixel_ratio: float

    The framebuffer/window size ratio

    Type:

      float

  property position: tuple[int, int]

    The current window position.

    This property can also be set to move the window:

        # Move window to 100, 100
        window.position = 100, 100

    Type:

      tuple[int, int]

  print_context_info() → None

    Prints moderngl context info.

  render(time: float = 0.0, frame_time: float = 0.0) → None

    Renders a frame by calling the configured render callback

    Keyword Arguments:

      - time (float) – Current time in seconds

      - frame_time (float) – Delta time from last frame in seconds

  property render_func: Callable[[float, float], None]

    The render callable

    This property can also be used to assign a callable.

    Type:

      callable

  property resizable: bool

    Window is resizable

    Type:

      bool

  resize(width: int, height: int) → None

    Should be called every time window is resized so the example can adapt to the new size if needed

  property resize_func: Callable[[int, int], None]

    Get or set the resize callable

    Type:

      callable

  property samples: int

    Number of Multisample anti-aliasing (MSAA) samples

    Type:

      float

  set_default_viewport() → None

    Calculates the and sets the viewport based on window configuration.

    The viewport will based on the configured fixed aspect ratio if set. If no fixed aspect ratio is set the viewport will be scaled to the entire window size regardless of size.

    Will add black borders and center the viewport if the window do not match the configured viewport (fixed only)

  set_icon(icon_path: str) → None

    Sets the window icon to the given path

    Parameters:

      icon_path (str) – path to the icon

  show() → None

    Show the window

  property size: tuple[int, int]

    current window size.

    This property also support assignment:

        # Resize the window to 1000 x 1000
        window.size = 1000, 1000

    Type:

      tuple[int, int]

  swap_buffers() → None

    Library specific buffer swap method. Must be overridden.

  property title: str

    Window title.

    This property can also be set:

        window.title = "New Title"

    Type:

      str

  property unicode_char_entered_func: Callable[[str], None]

    Get or set the unicode_char_entered callable

    Type:

      callable

  use() → None

    Bind the window’s framebuffer

  property viewport: tuple[int, int, int, int]

    current window viewport

    Type:

      tuple[int, int, int, int]

  property viewport_height: int

    The height of the viewport

    Equivalent to `self.viewport[3]`.

    Type:

      int

  property viewport_size: tuple[int, int]

    Size of the viewport.

    Equivalent to `self.viewport[2], self.viewport[3]`

    Type:

      tuple[int,int]

  property viewport_width: int

    The width of the viewport.

    Equivalent to `self.viewport[2]`.

    Type:

      int

  property visible: bool

    Window is visible

    Type:

      bool

  property vsync: bool

    vertical sync enabled/disabled

    Type:

      bool

  property width: int

    The current window width

    Type:

      int

class moderngl_window.context.base.BaseKeys

  Namespace for mapping key constants. This is simply a template for what keys should be mapped for all window libraries

  A: Any = 'undefined'
  ACTION_PRESS: Any = 'ACTION_PRESS'
  ACTION_RELEASE: Any = 'ACTION_RELEASE'
  B: Any = 'undefined'
  BACKSLASH: Any = 'undefined'
  BACKSPACE: Any = 'undefined'
  C: Any = 'undefined'
  CAPS_LOCK: Any = 'undefined'
  COMMA: Any = 'undefined'
  D: Any = 'undefined'
  DELETE: Any = 'undefined'
  DOWN: Any = 'undefined'
  E: Any = 'undefined'
  END: Any = 'undefined'
  ENTER: Any = 'undefined'
  EQUAL: Any = 'undefined'
  ESCAPE: Any = 'undefined'
  F: Any = 'undefined'
  F1: Any = 'undefined'
  F10: Any = 'undefined'
  F11: Any = 'undefined'
  F12: Any = 'undefined'
  F2: Any = 'undefined'
  F3: Any = 'undefined'
  F4: Any = 'undefined'
  F5: Any = 'undefined'
  F6: Any = 'undefined'
  F7: Any = 'undefined'
  F8: Any = 'undefined'
  F9: Any = 'undefined'
  G: Any = 'undefined'
  H: Any = 'undefined'
  HOME: Any = 'undefined'
  I: Any = 'undefined'
  INSERT: Any = 'undefined'
  J: Any = 'undefined'
  K: Any = 'undefined'
  L: Any = 'undefined'
  LEFT: Any = 'undefined'
  LEFT_BRACKET: Any = 'undefined'
  LEFT_CTRL: Any = 'undefined'
  LEFT_SHIFT: Any = 'undefined'
  M: Any = 'undefined'
  MINUS: Any = 'undefined'
  N: Any = 'undefined'
  NUMBER_0: Any = 'undefined'
  NUMBER_1: Any = 'undefined'
  NUMBER_2: Any = 'undefined'
  NUMBER_3: Any = 'undefined'
  NUMBER_4: Any = 'undefined'
  NUMBER_5: Any = 'undefined'
  NUMBER_6: Any = 'undefined'
  NUMBER_7: Any = 'undefined'
  NUMBER_8: Any = 'undefined'
  NUMBER_9: Any = 'undefined'
  NUMPAD_0: Any = 'undefined'
  NUMPAD_1: Any = 'undefined'
  NUMPAD_2: Any = 'undefined'
  NUMPAD_3: Any = 'undefined'
  NUMPAD_4: Any = 'undefined'
  NUMPAD_5: Any = 'undefined'
  NUMPAD_6: Any = 'undefined'
  NUMPAD_7: Any = 'undefined'
  NUMPAD_8: Any = 'undefined'
  NUMPAD_9: Any = 'undefined'
  O: Any = 'undefined'
  P: Any = 'undefined'
  PAGE_DOWN: Any = 'undefined'
  PAGE_UP: Any = 'undefined'
  PERIOD: Any = 'undefined'
  Q: Any = 'undefined'
  R: Any = 'undefined'
  RIGHT: Any = 'undefined'
  RIGHT_BRACKET: Any = 'undefined'
  RIGHT_SHIFT: Any = 'undefined'
  S: Any = 'undefined'
  SEMICOLON: Any = 'undefined'
  SLASH: Any = 'undefined'
  SPACE: Any = 'undefined'
  T: Any = 'undefined'
  TAB: Any = 'undefined'
  U: Any = 'undefined'
  UP: Any = 'undefined'
  V: Any = 'undefined'
  W: Any = 'undefined'
  X: Any = 'undefined'
  Y: Any = 'undefined'
  Z: Any = 'undefined'