mirror of
https://github.com/3b1b/manim.git
synced 2025-04-13 09:47:07 +00:00
chore: add type hints to manimlib.window
This commit is contained in:
parent
91ffdeb2d4
commit
f085e6c2dd
1 changed files with 31 additions and 15 deletions
|
@ -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)
|
||||||
|
|
Loading…
Add table
Reference in a new issue