mirror of
https://github.com/3b1b/manim.git
synced 2025-08-05 16:49:03 +00:00
Merge pull request #2233 from mitkonikov/modifier-keys-fix
Properly check modifier keys.
This commit is contained in:
commit
1248abd922
3 changed files with 23 additions and 27 deletions
|
@ -92,10 +92,6 @@ COMMAND_SYMBOL: int = 65517
|
|||
DELETE_SYMBOL: int = 65288
|
||||
ARROW_SYMBOLS: list[int] = list(range(65361, 65365))
|
||||
|
||||
SHIFT_MODIFIER: int = 1
|
||||
CTRL_MODIFIER: int = 2
|
||||
COMMAND_MODIFIER: int = 64
|
||||
|
||||
# Colors
|
||||
|
||||
BLUE_E: ManimColor = "#1C758A"
|
||||
|
|
|
@ -4,10 +4,10 @@ import itertools as it
|
|||
import numpy as np
|
||||
import pyperclip
|
||||
from IPython.core.getipython import get_ipython
|
||||
from pyglet.window import key as PygletWindowKeys
|
||||
|
||||
from manimlib.animation.fading import FadeIn
|
||||
from manimlib.constants import ARROW_SYMBOLS, CTRL_SYMBOL, DELETE_SYMBOL, SHIFT_SYMBOL
|
||||
from manimlib.constants import COMMAND_MODIFIER, SHIFT_MODIFIER
|
||||
from manimlib.constants import DL, DOWN, DR, LEFT, ORIGIN, RIGHT, UL, UP, UR
|
||||
from manimlib.constants import FRAME_WIDTH, FRAME_HEIGHT, SMALL_BUFF
|
||||
from manimlib.constants import PI
|
||||
|
@ -50,6 +50,7 @@ INFORMATION_KEY = 'i'
|
|||
CURSOR_KEY = 'k'
|
||||
COPY_FRAME_POSITION_KEY = 'p'
|
||||
|
||||
ALL_MODIFIERS = PygletWindowKeys.MOD_CTRL | PygletWindowKeys.MOD_COMMAND | PygletWindowKeys.MOD_SHIFT
|
||||
|
||||
# Note, a lot of the functionality here is still buggy and very much a work in progress.
|
||||
|
||||
|
@ -470,49 +471,49 @@ class InteractiveScene(Scene):
|
|||
def on_key_press(self, symbol: int, modifiers: int) -> None:
|
||||
super().on_key_press(symbol, modifiers)
|
||||
char = chr(symbol)
|
||||
if char == SELECT_KEY and modifiers == 0:
|
||||
if char == SELECT_KEY and (modifiers & ALL_MODIFIERS) == 0:
|
||||
self.enable_selection()
|
||||
if char == UNSELECT_KEY:
|
||||
self.clear_selection()
|
||||
elif char in GRAB_KEYS and modifiers == 0:
|
||||
elif char in GRAB_KEYS and (modifiers & ALL_MODIFIERS) == 0:
|
||||
self.prepare_grab()
|
||||
elif char == RESIZE_KEY and modifiers in [0, SHIFT_MODIFIER]:
|
||||
self.prepare_resizing(about_corner=(modifiers == SHIFT_MODIFIER))
|
||||
elif char == RESIZE_KEY and (modifiers & PygletWindowKeys.MOD_SHIFT):
|
||||
self.prepare_resizing(about_corner=((modifiers & PygletWindowKeys.MOD_SHIFT) > 0))
|
||||
elif symbol == SHIFT_SYMBOL:
|
||||
if self.window.is_key_pressed(ord("t")):
|
||||
self.prepare_resizing(about_corner=True)
|
||||
elif char == COLOR_KEY and modifiers == 0:
|
||||
elif char == COLOR_KEY and (modifiers & ALL_MODIFIERS) == 0:
|
||||
self.toggle_color_palette()
|
||||
elif char == INFORMATION_KEY and modifiers == 0:
|
||||
elif char == INFORMATION_KEY and (modifiers & ALL_MODIFIERS) == 0:
|
||||
self.display_information()
|
||||
elif char == "c" and modifiers == COMMAND_MODIFIER:
|
||||
elif char == "c" and (modifiers & (PygletWindowKeys.MOD_COMMAND | PygletWindowKeys.MOD_CTRL)):
|
||||
self.copy_selection()
|
||||
elif char == "v" and modifiers == COMMAND_MODIFIER:
|
||||
elif char == "v" and (modifiers & (PygletWindowKeys.MOD_COMMAND | PygletWindowKeys.MOD_CTRL)):
|
||||
self.paste_selection()
|
||||
elif char == "x" and modifiers == COMMAND_MODIFIER:
|
||||
elif char == "x" and (modifiers & (PygletWindowKeys.MOD_COMMAND | PygletWindowKeys.MOD_CTRL)):
|
||||
self.copy_selection()
|
||||
self.delete_selection()
|
||||
elif symbol == DELETE_SYMBOL:
|
||||
self.delete_selection()
|
||||
elif char == "a" and modifiers == COMMAND_MODIFIER:
|
||||
elif char == "a" and (modifiers & (PygletWindowKeys.MOD_COMMAND | PygletWindowKeys.MOD_CTRL)):
|
||||
self.clear_selection()
|
||||
self.add_to_selection(*self.mobjects)
|
||||
elif char == "g" and modifiers == COMMAND_MODIFIER:
|
||||
elif char == "g" and (modifiers & (PygletWindowKeys.MOD_COMMAND | PygletWindowKeys.MOD_CTRL)):
|
||||
self.group_selection()
|
||||
elif char == "g" and modifiers == COMMAND_MODIFIER | SHIFT_MODIFIER:
|
||||
elif char == "g" and (modifiers & (PygletWindowKeys.MOD_COMMAND | PygletWindowKeys.MOD_CTRL | PygletWindowKeys.MOD_SHIFT)):
|
||||
self.ungroup_selection()
|
||||
elif char == "t" and modifiers == COMMAND_MODIFIER:
|
||||
elif char == "t" and (modifiers & (PygletWindowKeys.MOD_COMMAND | PygletWindowKeys.MOD_CTRL)):
|
||||
self.toggle_selection_mode()
|
||||
elif char == "s" and modifiers == COMMAND_MODIFIER:
|
||||
elif char == "s" and (modifiers & (PygletWindowKeys.MOD_COMMAND | PygletWindowKeys.MOD_CTRL)):
|
||||
self.save_selection_to_file()
|
||||
elif char == "d" and modifiers == SHIFT_MODIFIER:
|
||||
elif char == "d" and (modifiers & PygletWindowKeys.MOD_SHIFT):
|
||||
self.copy_frame_positioning()
|
||||
elif char == "c" and modifiers == SHIFT_MODIFIER:
|
||||
elif char == "c" and (modifiers & PygletWindowKeys.MOD_SHIFT):
|
||||
self.copy_cursor_position()
|
||||
elif symbol in ARROW_SYMBOLS:
|
||||
self.nudge_selection(
|
||||
vect=[LEFT, UP, RIGHT, DOWN][ARROW_SYMBOLS.index(symbol)],
|
||||
large=(modifiers & SHIFT_MODIFIER),
|
||||
large=(modifiers & PygletWindowKeys.MOD_SHIFT),
|
||||
)
|
||||
# Adding crosshair
|
||||
if char == CURSOR_KEY:
|
||||
|
|
|
@ -13,6 +13,7 @@ from functools import wraps
|
|||
from IPython.terminal import pt_inputhooks
|
||||
from IPython.terminal.embed import InteractiveShellEmbed
|
||||
from IPython.core.getipython import get_ipython
|
||||
from pyglet.window import key as PygletWindowKeys
|
||||
|
||||
import numpy as np
|
||||
from tqdm.auto import tqdm as ProgressDisplay
|
||||
|
@ -24,8 +25,6 @@ from manimlib.camera.camera_frame import CameraFrame
|
|||
from manimlib.config import get_module
|
||||
from manimlib.constants import ARROW_SYMBOLS
|
||||
from manimlib.constants import DEFAULT_WAIT_TIME
|
||||
from manimlib.constants import COMMAND_MODIFIER
|
||||
from manimlib.constants import SHIFT_MODIFIER
|
||||
from manimlib.constants import RED
|
||||
from manimlib.event_handler import EVENT_DISPATCHER
|
||||
from manimlib.event_handler.event_type import EventType
|
||||
|
@ -963,12 +962,12 @@ class Scene(object):
|
|||
|
||||
if char == RESET_FRAME_KEY:
|
||||
self.play(self.camera.frame.animate.to_default_state())
|
||||
elif char == "z" and modifiers == COMMAND_MODIFIER:
|
||||
elif char == "z" and (modifiers & (PygletWindowKeys.MOD_COMMAND | PygletWindowKeys.MOD_CTRL)):
|
||||
self.undo()
|
||||
elif char == "z" and modifiers == COMMAND_MODIFIER | SHIFT_MODIFIER:
|
||||
elif char == "z" and (modifiers & (PygletWindowKeys.MOD_COMMAND | PygletWindowKeys.MOD_CTRL | PygletWindowKeys.MOD_SHIFT)):
|
||||
self.redo()
|
||||
# command + q
|
||||
elif char == QUIT_KEY and modifiers == COMMAND_MODIFIER:
|
||||
elif char == QUIT_KEY and (modifiers & (PygletWindowKeys.MOD_COMMAND | PygletWindowKeys.MOD_CTRL)):
|
||||
self.quit_interaction = True
|
||||
# Space or right arrow
|
||||
elif char == " " or symbol == ARROW_SYMBOLS[2]:
|
||||
|
|
Loading…
Add table
Reference in a new issue