chore: add type hints to manimlib.window

This commit is contained in:
TonyCrane 2022-02-15 14:55:35 +08:00
parent 91ffdeb2d4
commit f085e6c2dd
No known key found for this signature in database
GPG key ID: 2313A5058A9C637C

View file

@ -1,3 +1,5 @@
from __future__ import annotations
import numpy as np import numpy as np
import moderngl_window as mglw import moderngl_window as mglw
from moderngl_window.context.pyglet.window import Window as PygletWindow from moderngl_window.context.pyglet.window import Window as PygletWindow
@ -7,6 +9,10 @@ from screeninfo import get_monitors
from manimlib.utils.config_ops import digest_config from manimlib.utils.config_ops import digest_config
from manimlib.utils.customization import get_customization from manimlib.utils.customization import get_customization
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from manimlib.scene.scene import Scene
class Window(PygletWindow): class Window(PygletWindow):
fullscreen = False fullscreen = False
@ -15,7 +21,12 @@ class Window(PygletWindow):
vsync = True vsync = True
cursor = True cursor = True
def __init__(self, scene, size=(1280, 720), **kwargs): def __init__(
self,
scene: Scene,
size: tuple[int, int] = (1280, 720),
**kwargs
):
super().__init__(size=size) super().__init__(size=size)
digest_config(self, kwargs) digest_config(self, kwargs)
@ -37,7 +48,7 @@ class Window(PygletWindow):
self.position = initial_position self.position = initial_position
self.position = initial_position self.position = initial_position
def find_initial_position(self, size): def find_initial_position(self, size: tuple[int, int]) -> tuple[int, int]:
custom_position = get_customization()["window_position"] custom_position = get_customization()["window_position"]
monitors = get_monitors() monitors = get_monitors()
mon_index = get_customization()["window_monitor"] mon_index = get_customization()["window_monitor"]
@ -59,7 +70,12 @@ class Window(PygletWindow):
) )
# Delegate event handling to scene # Delegate event handling to scene
def pixel_coords_to_space_coords(self, px, py, relative=False): def pixel_coords_to_space_coords(
self,
px: int,
py: int,
relative: bool = False
) -> np.ndarray:
pw, ph = self.size pw, ph = self.size
fw, fh = self.scene.camera.get_frame_shape() fw, fh = self.scene.camera.get_frame_shape()
fc = self.scene.camera.get_frame_center() fc = self.scene.camera.get_frame_center()
@ -72,59 +88,59 @@ class Window(PygletWindow):
0 0
]) ])
def on_mouse_motion(self, x, y, dx, dy): def on_mouse_motion(self, x: int, y: int, dx: int, dy: int) -> None:
super().on_mouse_motion(x, y, dx, dy) super().on_mouse_motion(x, y, dx, dy)
point = self.pixel_coords_to_space_coords(x, y) point = self.pixel_coords_to_space_coords(x, y)
d_point = self.pixel_coords_to_space_coords(dx, dy, relative=True) d_point = self.pixel_coords_to_space_coords(dx, dy, relative=True)
self.scene.on_mouse_motion(point, d_point) self.scene.on_mouse_motion(point, d_point)
def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers): def on_mouse_drag(self, x: int, y: int, dx: int, dy: int, buttons: int, modifiers: int) -> None:
super().on_mouse_drag(x, y, dx, dy, buttons, modifiers) super().on_mouse_drag(x, y, dx, dy, buttons, modifiers)
point = self.pixel_coords_to_space_coords(x, y) point = self.pixel_coords_to_space_coords(x, y)
d_point = self.pixel_coords_to_space_coords(dx, dy, relative=True) d_point = self.pixel_coords_to_space_coords(dx, dy, relative=True)
self.scene.on_mouse_drag(point, d_point, buttons, modifiers) self.scene.on_mouse_drag(point, d_point, buttons, modifiers)
def on_mouse_press(self, x: int, y: int, button, mods): def on_mouse_press(self, x: int, y: int, button: int, mods: int) -> None:
super().on_mouse_press(x, y, button, mods) super().on_mouse_press(x, y, button, mods)
point = self.pixel_coords_to_space_coords(x, y) point = self.pixel_coords_to_space_coords(x, y)
self.scene.on_mouse_press(point, button, mods) self.scene.on_mouse_press(point, button, mods)
def on_mouse_release(self, x: int, y: int, button, mods): def on_mouse_release(self, x: int, y: int, button: int, mods: int) -> None:
super().on_mouse_release(x, y, button, mods) super().on_mouse_release(x, y, button, mods)
point = self.pixel_coords_to_space_coords(x, y) point = self.pixel_coords_to_space_coords(x, y)
self.scene.on_mouse_release(point, button, mods) self.scene.on_mouse_release(point, button, mods)
def on_mouse_scroll(self, x, y, x_offset: float, y_offset: float): def on_mouse_scroll(self, x: int, y: int, x_offset: float, y_offset: float) -> None:
super().on_mouse_scroll(x, y, x_offset, y_offset) super().on_mouse_scroll(x, y, x_offset, y_offset)
point = self.pixel_coords_to_space_coords(x, y) point = self.pixel_coords_to_space_coords(x, y)
offset = self.pixel_coords_to_space_coords(x_offset, y_offset, relative=True) offset = self.pixel_coords_to_space_coords(x_offset, y_offset, relative=True)
self.scene.on_mouse_scroll(point, offset) self.scene.on_mouse_scroll(point, offset)
def on_key_press(self, symbol, modifiers): def on_key_press(self, symbol: int, modifiers: int) -> None:
self.pressed_keys.add(symbol) # Modifiers? self.pressed_keys.add(symbol) # Modifiers?
super().on_key_press(symbol, modifiers) super().on_key_press(symbol, modifiers)
self.scene.on_key_press(symbol, modifiers) self.scene.on_key_press(symbol, modifiers)
def on_key_release(self, symbol, modifiers): def on_key_release(self, symbol: int, modifiers: int) -> None:
self.pressed_keys.difference_update({symbol}) # Modifiers? self.pressed_keys.difference_update({symbol}) # Modifiers?
super().on_key_release(symbol, modifiers) super().on_key_release(symbol, modifiers)
self.scene.on_key_release(symbol, modifiers) self.scene.on_key_release(symbol, modifiers)
def on_resize(self, width: int, height: int): def on_resize(self, width: int, height: int) -> None:
super().on_resize(width, height) super().on_resize(width, height)
self.scene.on_resize(width, height) self.scene.on_resize(width, height)
def on_show(self): def on_show(self) -> None:
super().on_show() super().on_show()
self.scene.on_show() self.scene.on_show()
def on_hide(self): def on_hide(self) -> None:
super().on_hide() super().on_hide()
self.scene.on_hide() self.scene.on_hide()
def on_close(self): def on_close(self) -> None:
super().on_close() super().on_close()
self.scene.on_close() self.scene.on_close()
def is_key_pressed(self, symbol): def is_key_pressed(self, symbol: int) -> bool:
return (symbol in self.pressed_keys) return (symbol in self.pressed_keys)