Files
dzgui/dzgui/views/components/toast.py
T
2025-12-08 17:32:25 +09:00

47 lines
1.2 KiB
Python

from typing import Literal
from dzgui.util import css
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib # noqa E402
class Toast(Gtk.EventBox):
def __init__(self) -> None:
super().__init__()
self.label = Gtk.Label(hexpand=True)
self.box = Gtk.Box(
orientation=Gtk.Orientation.HORIZONTAL,
halign=Gtk.Align.CENTER,
valign=Gtk.Align.CENTER,
)
self.box.add(self.label)
self.add(self.box)
self.box.set_size_request(200, 100)
css.add_class(self.box, "toast-label")
def set_text(self, text: str) -> None:
self.label.set_text(text)
def set_text_and_fade(self, text: str) -> None:
self.set_text(text)
self.pop()
self._defer_fade()
def fade_out(self) -> bool:
if self.get_opacity() == 0:
self.set_visible(False)
self.set_opacity(1)
return False
self.set_opacity(self.get_opacity() - 0.03)
return True
def pop(self) -> None:
self.set_visible(True)
def _defer_fade(self) -> Literal[False]:
GLib.timeout_add(30, self.fade_out)
return False