| 6 | |
| 7 | |
| 8 | class Live2DDesktopPuppet(DesktopPuppet): |
| 9 | _wait_js : threading.Event |
| 10 | _wait_js2 : threading.Event |
| 11 | def __init__(self) -> None: |
| 12 | super().__init__() |
| 13 | self._wait_js = threading.Event() |
| 14 | self._wait_js2 = threading.Event() |
| 15 | self._expressions_raw = [] |
| 16 | self._motions_raw = [] |
| 17 | self.loaded = False |
| 18 | # Extra settings |
| 19 | self.address = "http://127.0.0.1:8000" |
| 20 | self.extra_scale_w = 0.56 |
| 21 | self.extra_scale_h = 1 |
| 22 | self.model = None |
| 23 | self.scale = 100 |
| 24 | |
| 25 | def get_gtk_widget(self): |
| 26 | self.box = Gtk.Box() |
| 27 | return self.box |
| 28 | |
| 29 | def load_webview(self): |
| 30 | webview = WebKit.WebView() |
| 31 | color = Gdk.RGBA() |
| 32 | color.red = 0 |
| 33 | color.green = 0 |
| 34 | color.blue = 0 |
| 35 | color.alpha = 0 |
| 36 | webview.set_background_color(color) |
| 37 | |
| 38 | scale = int(self.scale)/100 |
| 39 | q = urlencode({"model": self.model, "bg": "transparent", "scale": scale}) |
| 40 | print(q) |
| 41 | webview.load_uri(urljoin(self.address, f"?{q}")) |
| 42 | webview.set_hexpand(True) |
| 43 | webview.set_vexpand(True) |
| 44 | def monitor_loading(wb, event): |
| 45 | if event == WebKit.LoadEvent.FINISHED: |
| 46 | self.loaded = True |
| 47 | webview.connect("load-changed", monitor_loading) |
| 48 | self.webview = webview |
| 49 | |
| 50 | def change_address(self): |
| 51 | if hasattr(self, "webview"): |
| 52 | self.box.remove(self.webview) |
| 53 | self.load_webview() |
| 54 | self.box.append(self.webview) |
| 55 | |
| 56 | def look(self, x, y): |
| 57 | if not self.loaded: |
| 58 | return |
| 59 | script = "model_proxy.focus({x}, {y});" |
| 60 | script = script.format(x=x, y=y) |
| 61 | self.webview.evaluate_javascript(script, len(script)) |
| 62 | |
| 63 | def update_area(self): |
| 64 | if not self.loaded: |
| 65 | return |