3b1b-manim/manim_docs/modules/event_handler.md
2025-04-06 00:05:12 +05:30

2.8 KiB

Event Handler Module README

Overview

The event handler module manages user interactions and events in Manim. It provides a system for handling keyboard and mouse events, allowing for interactive animations and user input.

Key Components

1. Event Dispatcher (event_dispatcher.py)

  • Purpose: Central event management system
  • Key Features:
    • Registers and manages event listeners
    • Dispatches events to appropriate handlers
    • Handles event propagation
  • Usage:
    dispatcher = EventDispatcher()
    dispatcher.add_listener(event_type, handler)
    

2. Event Listener (event_listner.py)

  • Purpose: Handles individual event subscriptions
  • Key Features:
    • Manages event callbacks
    • Handles event priority
    • Controls event propagation
  • Usage:
    listener = EventListener(handler, priority=0)
    

3. Event Types (event_type.py)

  • Purpose: Defines different types of events
  • Key Features:
    • Keyboard events
    • Mouse events
    • Custom event types
  • Usage:
    class CustomEvent(EventType):
        pass
    

Event Types

1. Keyboard Events

  • Key press events
  • Key release events
  • Special key combinations

2. Mouse Events

  • Mouse movement
  • Mouse clicks
  • Mouse drag
  • Mouse wheel

3. Custom Events

  • Scene-specific events
  • Animation events
  • State change events

Interaction with Other Modules

  1. Scene Module:

    • Scenes register event handlers
    • Events can trigger scene changes
    • Interactive scenes use event system
  2. Animation Module:

    • Events can control animations
    • Animation state changes trigger events
    • Interactive animations use event system
  3. Mobject Module:

    • Mobjects can respond to events
    • Events can modify mobject properties
    • Interactive mobjects use event system

Best Practices

  1. Event Handling:

    • Keep handlers focused and simple
    • Use appropriate event priorities
    • Handle event propagation carefully
  2. Performance:

    • Minimize event handler complexity
    • Use event filtering when possible
    • Consider event frequency
  3. Code Organization:

    • Group related event handlers
    • Use event types appropriately
    • Document event dependencies

Example Usage

class InteractiveExample(Scene):
    def construct(self):
        # Create interactive mobject
        circle = Circle()
        self.add(circle)
        
        # Define event handlers
        def on_key_press(event):
            if event.key == "LEFT":
                circle.shift(LEFT)
            elif event.key == "RIGHT":
                circle.shift(RIGHT)
        
        # Register event handler
        self.add_key_press_handler(on_key_press)
        
        # Interactive loop
        self.wait()