mirror of https://github.com/JoshKarpel/spiel
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.1 KiB
Python
86 lines
2.1 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Type
|
|
|
|
from textual.app import ComposeResult
|
|
from textual.reactive import reactive
|
|
|
|
from spiel.screens.screen import SpielScreen
|
|
from spiel.slide import Slide
|
|
from spiel.transitions.protocol import Direction, Transition
|
|
from spiel.triggers import Triggers
|
|
from spiel.widgets.fixed_slide import FixedSlideWidget
|
|
from spiel.widgets.footer import Footer
|
|
|
|
|
|
class SlideTransitionScreen(SpielScreen):
|
|
DEFAULT_CSS = """\
|
|
SlideTransitionScreen {
|
|
layout: vertical;
|
|
overflow: hidden hidden;
|
|
layers: below above;
|
|
}
|
|
|
|
FixedSlideWidget#from {
|
|
layer: above;
|
|
}
|
|
|
|
FixedSlideWidget#to {
|
|
layer: below;
|
|
}
|
|
|
|
Footer {
|
|
layer: above;
|
|
}
|
|
|
|
Footer#dummy {
|
|
layer: below;
|
|
}
|
|
"""
|
|
progress = reactive(0, init=False, layout=True)
|
|
|
|
def __init__(
|
|
self,
|
|
from_slide: Slide,
|
|
from_triggers: Triggers,
|
|
to_slide: Slide,
|
|
transition: Type[Transition],
|
|
direction: Direction,
|
|
):
|
|
super().__init__()
|
|
|
|
self.from_slide = from_slide
|
|
self.from_triggers = from_triggers
|
|
self.to_slide = to_slide
|
|
self.transition = transition()
|
|
self.direction = direction
|
|
|
|
def compose(self) -> ComposeResult:
|
|
from_widget = FixedSlideWidget(self.from_slide, triggers=self.from_triggers, id="from")
|
|
to_widget = FixedSlideWidget(self.to_slide, id="to")
|
|
|
|
self.transition.initialize(
|
|
from_widget=from_widget,
|
|
to_widget=to_widget,
|
|
direction=self.direction,
|
|
)
|
|
|
|
yield from_widget
|
|
yield to_widget
|
|
|
|
yield Footer()
|
|
yield Footer(
|
|
id="dummy"
|
|
) # a dummy footer to hold space on the "below" layer, won't be displayed
|
|
|
|
def watch_progress(self, new_progress: float) -> None:
|
|
from_widget = self.query_one("#from")
|
|
to_widget = self.query_one("#to")
|
|
|
|
self.transition.progress(
|
|
from_widget=from_widget,
|
|
to_widget=to_widget,
|
|
direction=self.direction,
|
|
progress=new_progress,
|
|
)
|