8.1 Eventos del sistema

El hardware moderno integrado System On a Chip (SOC) tiene muchos circuitos que están activos al mismo tiempo. Por lo tanto, un tipo de evento es detectar algo que está sucediendo en el mundo. La clase EventSensor gestiona las pulsaciones del teclado y las interrupciones de hardware del ratón, traduciendo entre las señales del hardware y los objetos de eventos del software.

Básicamente, un morph levanta la mano y dice qué eventos, si los hay, le interesan recibir. A continuación, implementa métodos para obtener los objetos de evento que contienen la información de los eventos capturados. En Cuis-Smalltalk, la clase MorphicEvent y sus subclases representan la diversidad de eventos del sistema.

MorphicEvent
   DropEvent
   DropFilesEvent
   UserInputEvent
      KeyboardEvent
      MouseEvent
         MouseButtonEvent
         MouseMoveEvent
         MouseScrollEvent
      WindowEvent

A medida que se generan los eventos MouseMoveEvents, el HandMorph ajusta su posición en la pantalla. Cuando llegan eventos del ratón y pulsaciones de teclas, el HandMorph coordina el «envío» de eventos al morph adecuado bajo el cursor, además de mostrar información sobre herramientas y transportar morphs en tránsito durante las operaciones de arrastre.

Como vimos en el capítulo anterior con ColorClickEllipse, cualquier morph puede anular los métodos predeterminados de Morph para afirmar que gestiona diversos eventos de usuario y los métodos que toman los objetos de evento asociados cuando llegan los eventos.

Básicamente, se generan eventos de entrada del usuario, un HandMorph refleja cualquier movimiento del cursor, los morphs reaccionan a los eventos, cada tarea de larga duración obtiene un intervalo de tiempo y avanza, cualquier cambio en la visualización se actualiza en la pantalla y se pasa al siguiente paso. El tiempo avanza un paso.

Esto ocurre una y otra vez, manteniendo la ilusión del malabarista de que todas las pelotas en el aire se mueven al mismo tiempo. Por debajo, cada una de las pelotas se mueve ligeramente, en secuencia.