class

Anvil::Loop

Inherits Reference < Object

Die Ereignisschleife: Takt, Neuzeichnen und die zwei Feinheiten, die man sonst in jedem Projekt neu lernt — Drift-Korrektur und Resize-Entprellung.

Steht getrennt von App, damit eine Vollbild-Anwendung sie ohne die Block- und Modal-Maschinerie benutzen kann.

Constants

RESIZE_SETTLE_TICKS = 3

Ein Fenster am Rand zu ziehen liefert ein WINCH pro Schritt. Auf jedes davon neu zu zeichnen ist verschwendete Arbeit und sieht wie Flackern aus; stattdessen wird abgewartet, bis so viele Poll-Fenster still geblieben sind.

Constructors

for(backend : Backend, **options) : Loop

Die Ereignisquelle ist ein Proc statt des Backends, damit sich die Schleife ohne Terminal prüfen lässt — Takt und Entprellung sind genau die Logik, die man testen will, und sie hat mit echter Eingabe nichts zu tun.

Source
new(poll : Proc(Time::Span, Termisu::Event::Any | Nil), *, target_fps : Int32 = 60, animating : Bool = false, poll_interval : Time::Span = 50.milliseconds)
Source

Instance methods

animating=(value : Bool) : Nil

Im Animationsbetrieb wird jeder Frame gezeichnet, sonst nur wenn etwas als schmutzig gemeldet wurde. Für eine Inline-App ist Letzteres richtig: im Leerlauf gibt es nichts zu zeichnen, und ein Werkzeug, das ohne Grund 60-mal pro Sekunde aufwacht, ist auf einem Laptop unhöflich.

Source
animating?
Source
closed?
Source
dirty?
Source
input_closed!

Die Eingabequelle ist versiegt — ein geschlossenes Terminal, eine abgespielte Skriptdatei. Anders als stop ist das eine Aussage über die Welt, und alles, was auf eine Taste wartet, muss aufhören zu warten: sonst hängt ein Fiber für immer an einer Frage, die niemand mehr beantworten kann.

Source
mark_dirty
Source
on_draw
Source
on_event
Source
on_resize

Wird gerufen, wenn die Größenänderung zur Ruhe gekommen ist — nicht bei jedem einzelnen WINCH.

Source
poll(timeout : Time::Span) : Termisu::Event::Any | Nil

Ein einzelnes Ereignis abholen, ohne die Schleife zu fahren — für Abfragen, die vor run beantwortet werden müssen (ein Vertrauens- Dialog beim Start etwa).

Source
poll_interval
Source
poll_interval=(poll_interval : Time::Span)
Source
running?
Source
stop
Source