frontengine 1.0.1__tar.gz → 1.0.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {frontengine-1.0.1 → frontengine-1.0.2}/PKG-INFO +1 -1
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/__init__.py +3 -1
- frontengine-1.0.2/frontengine/show/pet/desktop_pet.py +178 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/dialog/choose_file_dialog.py +10 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/main_ui.py +6 -1
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/menu/preset_menu.py +1 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/control_center/control_center_ui.py +9 -2
- frontengine-1.0.2/frontengine/ui/page/pet/pet_setting_ui.py +154 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/multi_language/english.py +8 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/multi_language/traditional_chinese.py +8 -0
- frontengine-1.0.2/frontengine/utils/theme_schedule/__init__.py +0 -0
- frontengine-1.0.2/frontengine/worker/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine.egg-info/PKG-INFO +1 -1
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine.egg-info/SOURCES.txt +4 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/pyproject.toml +1 -1
- {frontengine-1.0.1 → frontengine-1.0.2}/LICENSE +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/README.md +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/__main__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/show/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/show/base_widget.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/show/gif/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/show/gif/paint_gif.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/show/image/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/show/image/paint_image.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/show/load/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/show/load/load_someone_make_ui.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/show/overlay_factory.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/show/particle/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/show/particle/particle_ui.py +0 -0
- {frontengine-1.0.1/frontengine/show/scene → frontengine-1.0.2/frontengine/show/pet}/__init__.py +0 -0
- {frontengine-1.0.1/frontengine/show/sound_player → frontengine-1.0.2/frontengine/show/scene}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/show/scene/extend_graphic_scene.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/show/scene/extend_graphic_view.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/show/scene/scene.py +0 -0
- {frontengine-1.0.1/frontengine/show/text → frontengine-1.0.2/frontengine/show/sound_player}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/show/sound_player/sound_effect.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/show/sound_player/sound_player.py +0 -0
- {frontengine-1.0.1/frontengine/show/video → frontengine-1.0.2/frontengine/show/text}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/show/text/draw_text.py +0 -0
- {frontengine-1.0.1/frontengine/show/web → frontengine-1.0.2/frontengine/show/video}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/show/video/video_player.py +0 -0
- {frontengine-1.0.1/frontengine/system_tray → frontengine-1.0.2/frontengine/show/web}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/show/web/webview.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/show/window_helpers.py +0 -0
- {frontengine-1.0.1/frontengine/ui → frontengine-1.0.2/frontengine/system_tray}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/system_tray/extend_system_tray.py +0 -0
- {frontengine-1.0.1/frontengine/ui/color → frontengine-1.0.2/frontengine/ui}/__init__.py +0 -0
- {frontengine-1.0.1/frontengine/ui/dialog → frontengine-1.0.2/frontengine/ui/color}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/color/global_color.py +0 -0
- {frontengine-1.0.1/frontengine/ui/menu → frontengine-1.0.2/frontengine/ui/dialog}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/dialog/hotkey_settings_dialog.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/dialog/save_file_dialog.py +0 -0
- {frontengine-1.0.1/frontengine/ui/page → frontengine-1.0.2/frontengine/ui/menu}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/menu/help_menu.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/menu/how_to_menu.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/menu/language_menu.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/menu/settings_menu.py +0 -0
- {frontengine-1.0.1/frontengine/ui/page/control_center → frontengine-1.0.2/frontengine/ui/page}/__init__.py +0 -0
- {frontengine-1.0.1/frontengine/ui/page/gif → frontengine-1.0.2/frontengine/ui/page/control_center}/__init__.py +0 -0
- {frontengine-1.0.1/frontengine/ui/page/image → frontengine-1.0.2/frontengine/ui/page/gif}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/gif/gif_setting_ui.py +0 -0
- {frontengine-1.0.1/frontengine/ui/page/particle → frontengine-1.0.2/frontengine/ui/page/image}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/image/image_setting_ui.py +0 -0
- {frontengine-1.0.1/frontengine/ui/page/scene_setting → frontengine-1.0.2/frontengine/ui/page/particle}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/particle/particle_setting_ui.py +0 -0
- {frontengine-1.0.1/frontengine/ui/page/scene_setting/scene_page → frontengine-1.0.2/frontengine/ui/page/pet}/__init__.py +0 -0
- {frontengine-1.0.1/frontengine/ui/page/sound_player → frontengine-1.0.2/frontengine/ui/page/scene_setting}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/scene_setting/scene_manager.py +0 -0
- {frontengine-1.0.1/frontengine/ui/page/text → frontengine-1.0.2/frontengine/ui/page/scene_setting/scene_page}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/scene_setting/scene_page/base_scene_page.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/scene_setting/scene_page/gif.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/scene_setting/scene_page/image.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/scene_setting/scene_page/registry.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/scene_setting/scene_page/sound.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/scene_setting/scene_page/text.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/scene_setting/scene_page/video.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/scene_setting/scene_page/web.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/scene_setting/scene_setting_ui.py +0 -0
- {frontengine-1.0.1/frontengine/ui/page/video → frontengine-1.0.2/frontengine/ui/page/sound_player}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/sound_player/sound_player_setting_ui.py +0 -0
- {frontengine-1.0.1/frontengine/ui/page/web → frontengine-1.0.2/frontengine/ui/page/text}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/text/text_setting_ui.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/utils.py +0 -0
- {frontengine-1.0.1/frontengine/user_setting → frontengine-1.0.2/frontengine/ui/page/video}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/video/video_setting_ui.py +0 -0
- {frontengine-1.0.1/frontengine/utils → frontengine-1.0.2/frontengine/ui/page/web}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/web/web_setting_ui.py +0 -0
- {frontengine-1.0.1/frontengine/utils/browser → frontengine-1.0.2/frontengine/user_setting}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/user_setting/preset_repository.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/user_setting/scene_setting.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/user_setting/user_setting_file.py +0 -0
- {frontengine-1.0.1/frontengine/utils/critical_exit → frontengine-1.0.2/frontengine/utils}/__init__.py +0 -0
- {frontengine-1.0.1/frontengine/utils/file → frontengine-1.0.2/frontengine/utils/browser}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/browser/browser.py +0 -0
- {frontengine-1.0.1/frontengine/utils/hotkey → frontengine-1.0.2/frontengine/utils/critical_exit}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/critical_exit/check_key_is_press.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/critical_exit/critical_exit.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/critical_exit/win32_vk.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/exception/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/exception/exception_tags.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/exception/exceptions.py +0 -0
- {frontengine-1.0.1/frontengine/utils/json → frontengine-1.0.2/frontengine/utils/file}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/file/open/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/file/open/open_file.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/file/save/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/file/save/save_file.py +0 -0
- {frontengine-1.0.1/frontengine/utils/logging → frontengine-1.0.2/frontengine/utils/hotkey}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/hotkey/hotkey_service.py +0 -0
- {frontengine-1.0.1/frontengine/utils/multi_language → frontengine-1.0.2/frontengine/utils/json}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/json/json_file.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/json/json_repository.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/json_format/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/json_format/json_process.py +0 -0
- {frontengine-1.0.1/frontengine/utils/preset_schedule → frontengine-1.0.2/frontengine/utils/logging}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/logging/loggin_instance.py +0 -0
- {frontengine-1.0.1/frontengine/utils/redirect_manager → frontengine-1.0.2/frontengine/utils/multi_language}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/multi_language/france.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/multi_language/germany.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/multi_language/italy.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/multi_language/language_wrapper.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/multi_language/russian.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/multi_language/simplified_chinese.py +0 -0
- {frontengine-1.0.1/frontengine/utils/smart_pause → frontengine-1.0.2/frontengine/utils/preset_schedule}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/preset_schedule/preset_schedule_service.py +0 -0
- {frontengine-1.0.1/frontengine/utils/theme_schedule → frontengine-1.0.2/frontengine/utils/redirect_manager}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/redirect_manager/redirect_manager_class.py +0 -0
- {frontengine-1.0.1/frontengine/worker → frontengine-1.0.2/frontengine/utils/smart_pause}/__init__.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/smart_pause/smart_pause_service.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/theme_schedule/theme_schedule_service.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/web_url.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine/worker/qthread_worker.py +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine.egg-info/dependency_links.txt +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine.egg-info/entry_points.txt +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine.egg-info/requires.txt +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/frontengine.egg-info/top_level.txt +0 -0
- {frontengine-1.0.1 → frontengine-1.0.2}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: frontengine
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.2
|
|
4
4
|
Summary: FrontEngine is use-define frontview or only use like screen saver
|
|
5
5
|
Author-email: JE-Chen <jechenmailman@gmail.com>
|
|
6
6
|
Project-URL: Homepage, https://github.com/Intergration-Automation-Testing/FrontEngine
|
|
@@ -4,6 +4,7 @@ from frontengine.show.load.load_someone_make_ui import load_extend_ui_file
|
|
|
4
4
|
from frontengine.show.load.load_someone_make_ui import load_ui_file
|
|
5
5
|
from frontengine.show.sound_player.sound_effect import SoundEffectWidget
|
|
6
6
|
from frontengine.show.sound_player.sound_player import SoundPlayer
|
|
7
|
+
from frontengine.show.pet.desktop_pet import DesktopPetWidget
|
|
7
8
|
from frontengine.show.text.draw_text import TextWidget
|
|
8
9
|
from frontengine.show.video.video_player import VideoWidget
|
|
9
10
|
from frontengine.show.web.webview import WebWidget
|
|
@@ -16,6 +17,7 @@ from frontengine.ui.page.image.image_setting_ui import ImageSettingUI
|
|
|
16
17
|
from frontengine.ui.page.sound_player.sound_player_setting_ui import SoundPlayerSettingUI
|
|
17
18
|
from frontengine.ui.page.video.video_setting_ui import VideoSettingUI
|
|
18
19
|
from frontengine.ui.page.control_center.control_center_ui import ControlCenterUI
|
|
20
|
+
from frontengine.ui.page.pet.pet_setting_ui import PetSettingUI
|
|
19
21
|
from frontengine.ui.page.scene_setting.scene_setting_ui import SceneSettingUI
|
|
20
22
|
from frontengine.ui.main_ui import FrontEngineMainUI
|
|
21
23
|
from frontengine.ui.main_ui import FrontEngine_EXTEND_TAB
|
|
@@ -26,5 +28,5 @@ __all__ = [
|
|
|
26
28
|
"WebWidget", "ImageWidget", "VideoWidget", "language_wrapper", "load_extend_ui_file", "load_ui_file",
|
|
27
29
|
"TextSettingUI", "WEBSettingUI", "GIFSettingUI", "ImageSettingUI", "SoundPlayerSettingUI",
|
|
28
30
|
"VideoSettingUI", "ControlCenterUI", "SceneSettingUI", "FrontEngineMainUI",
|
|
29
|
-
"FrontEngine_EXTEND_TAB", "RedirectManager"
|
|
31
|
+
"FrontEngine_EXTEND_TAB", "RedirectManager", "DesktopPetWidget", "PetSettingUI"
|
|
30
32
|
]
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
from typing import Optional, Tuple
|
|
3
|
+
|
|
4
|
+
from PySide6.QtCore import Qt, QRect, QTimer
|
|
5
|
+
from PySide6.QtGui import QAction, QMovie, QPainter, QPixmap, QTransform
|
|
6
|
+
from PySide6.QtWidgets import QMenu, QMessageBox
|
|
7
|
+
|
|
8
|
+
from frontengine.show.base_widget import BaseWidget
|
|
9
|
+
from frontengine.show.window_helpers import apply_overlay_window_flags
|
|
10
|
+
from frontengine.utils.logging.loggin_instance import front_engine_logger
|
|
11
|
+
from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class PetMotion:
|
|
15
|
+
"""
|
|
16
|
+
純邏輯的移動模型(不依賴 Qt,便於測試)。gravity=True 時寵物沿著底部
|
|
17
|
+
行走並在左右邊緣轉向;否則在四邊之間自由彈跳。
|
|
18
|
+
Pure movement model (no Qt, easy to test). With gravity the pet walks
|
|
19
|
+
along the floor and turns at the left/right edges; otherwise it bounces
|
|
20
|
+
freely between all four edges.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
def __init__(
|
|
24
|
+
self,
|
|
25
|
+
x: int,
|
|
26
|
+
y: int,
|
|
27
|
+
width: int,
|
|
28
|
+
height: int,
|
|
29
|
+
bounds: Tuple[int, int, int, int],
|
|
30
|
+
speed: int = 3,
|
|
31
|
+
gravity: bool = True,
|
|
32
|
+
) -> None:
|
|
33
|
+
self.x = float(x)
|
|
34
|
+
self.y = float(y)
|
|
35
|
+
self.width = int(width)
|
|
36
|
+
self.height = int(height)
|
|
37
|
+
self.bounds = bounds # (left, top, right, bottom)
|
|
38
|
+
self.speed = max(1, int(speed))
|
|
39
|
+
self.gravity = bool(gravity)
|
|
40
|
+
self.vx = float(self.speed)
|
|
41
|
+
self.vy = 0.0 if gravity else float(self.speed)
|
|
42
|
+
|
|
43
|
+
@property
|
|
44
|
+
def facing_left(self) -> bool:
|
|
45
|
+
return self.vx < 0
|
|
46
|
+
|
|
47
|
+
def set_bounds(self, bounds: Tuple[int, int, int, int]) -> None:
|
|
48
|
+
self.bounds = bounds
|
|
49
|
+
|
|
50
|
+
def step(self) -> Tuple[int, int]:
|
|
51
|
+
left, top, right, bottom = self.bounds
|
|
52
|
+
self.x += self.vx
|
|
53
|
+
if self.gravity:
|
|
54
|
+
self.y = float(bottom - self.height)
|
|
55
|
+
else:
|
|
56
|
+
self.y += self.vy
|
|
57
|
+
if self.y <= top:
|
|
58
|
+
self.y = float(top)
|
|
59
|
+
self.vy = abs(self.vy)
|
|
60
|
+
elif self.y + self.height >= bottom:
|
|
61
|
+
self.y = float(bottom - self.height)
|
|
62
|
+
self.vy = -abs(self.vy)
|
|
63
|
+
if self.x <= left:
|
|
64
|
+
self.x = float(left)
|
|
65
|
+
self.vx = abs(self.vx)
|
|
66
|
+
elif self.x + self.width >= right:
|
|
67
|
+
self.x = float(right - self.width)
|
|
68
|
+
self.vx = -abs(self.vx)
|
|
69
|
+
return int(self.x), int(self.y)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class DesktopPetWidget(BaseWidget):
|
|
73
|
+
"""
|
|
74
|
+
桌面寵物:可自主走動、可拖曳的動畫精靈。支援 GIF(QMovie)與靜態圖。
|
|
75
|
+
A draggable, self-walking animated sprite. Supports GIF (QMovie) and
|
|
76
|
+
static images.
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
def __init__(self, image_path: str, size: int = 128, speed: int = 3, gravity: bool = True):
|
|
80
|
+
front_engine_logger.info(
|
|
81
|
+
f"[DesktopPetWidget] Init | path={image_path}, size={size}, speed={speed}, gravity={gravity}"
|
|
82
|
+
)
|
|
83
|
+
super().__init__()
|
|
84
|
+
self.opacity = 1.0
|
|
85
|
+
self.pet_size: int = max(16, int(size))
|
|
86
|
+
self.image_path: Path = Path(image_path)
|
|
87
|
+
self.movie: Optional[QMovie] = None
|
|
88
|
+
self.pixmap: Optional[QPixmap] = None
|
|
89
|
+
self._dragging: bool = False
|
|
90
|
+
self._drag_offset = None
|
|
91
|
+
|
|
92
|
+
if self.image_path.exists() and self.image_path.is_file():
|
|
93
|
+
if self.image_path.suffix.lower() in (".gif", ".webp"):
|
|
94
|
+
self.movie = QMovie(str(self.image_path))
|
|
95
|
+
self.movie.frameChanged.connect(self.update)
|
|
96
|
+
self.movie.start()
|
|
97
|
+
else:
|
|
98
|
+
self.pixmap = QPixmap(str(self.image_path))
|
|
99
|
+
else:
|
|
100
|
+
front_engine_logger.error(f"[DesktopPetWidget] File not found: {self.image_path}")
|
|
101
|
+
message_box = QMessageBox(self)
|
|
102
|
+
message_box.setText(language_wrapper.language_word_dict.get("pet_message_box_text", "Pet image not found"))
|
|
103
|
+
message_box.show()
|
|
104
|
+
|
|
105
|
+
self.resize(self.pet_size, self.pet_size)
|
|
106
|
+
self.motion = PetMotion(0, 0, self.pet_size, self.pet_size, (0, 0, 1920, 1080), speed, gravity)
|
|
107
|
+
|
|
108
|
+
self._timer = QTimer(self)
|
|
109
|
+
self._timer.timeout.connect(self._on_tick)
|
|
110
|
+
|
|
111
|
+
# Right-click to close
|
|
112
|
+
self.close_action = QAction(language_wrapper.language_word_dict.get("control_center_close_all", "Close"), self)
|
|
113
|
+
self.close_action.triggered.connect(self.close)
|
|
114
|
+
self.menu = QMenu(self)
|
|
115
|
+
self.menu.addAction(self.close_action)
|
|
116
|
+
|
|
117
|
+
def set_pet_window_flag(self) -> None:
|
|
118
|
+
"""寵物需接收滑鼠以便拖曳,故 allow_input=True 並置頂。"""
|
|
119
|
+
apply_overlay_window_flags(self, show_on_bottom=False, allow_input=True)
|
|
120
|
+
|
|
121
|
+
def _current_pixmap(self) -> Optional[QPixmap]:
|
|
122
|
+
if self.movie is not None:
|
|
123
|
+
return self.movie.currentPixmap()
|
|
124
|
+
return self.pixmap
|
|
125
|
+
|
|
126
|
+
def draw_content(self, painter: QPainter) -> None:
|
|
127
|
+
pixmap = self._current_pixmap()
|
|
128
|
+
if pixmap is None or pixmap.isNull():
|
|
129
|
+
return
|
|
130
|
+
if self.motion.facing_left:
|
|
131
|
+
# Mirror horizontally so the sprite faces its walking direction.
|
|
132
|
+
pixmap = pixmap.transformed(QTransform().scale(-1, 1))
|
|
133
|
+
painter.drawPixmap(QRect(0, 0, self.width(), self.height()), pixmap)
|
|
134
|
+
|
|
135
|
+
def start_moving(self, bounds: Tuple[int, int, int, int], interval_ms: int = 33) -> None:
|
|
136
|
+
"""在指定範圍內開始走動 / Start walking within `bounds` (left, top, right, bottom)."""
|
|
137
|
+
front_engine_logger.info(f"[DesktopPetWidget] start_moving | bounds={bounds}")
|
|
138
|
+
left, top, right, bottom = bounds
|
|
139
|
+
self.motion.set_bounds(bounds)
|
|
140
|
+
self.motion.x = float(left)
|
|
141
|
+
self.motion.y = float(bottom - self.pet_size)
|
|
142
|
+
self.move(int(self.motion.x), int(self.motion.y))
|
|
143
|
+
self._timer.start(max(10, int(interval_ms)))
|
|
144
|
+
|
|
145
|
+
def _on_tick(self) -> None:
|
|
146
|
+
if self._dragging:
|
|
147
|
+
return
|
|
148
|
+
x, y = self.motion.step()
|
|
149
|
+
self.move(x, y)
|
|
150
|
+
|
|
151
|
+
# --- dragging ---
|
|
152
|
+
def mousePressEvent(self, event) -> None:
|
|
153
|
+
if event.button() == Qt.MouseButton.LeftButton:
|
|
154
|
+
self._dragging = True
|
|
155
|
+
self._drag_offset = event.globalPosition().toPoint() - self.frameGeometry().topLeft()
|
|
156
|
+
super().mousePressEvent(event)
|
|
157
|
+
|
|
158
|
+
def mouseMoveEvent(self, event) -> None:
|
|
159
|
+
if self._dragging and self._drag_offset is not None:
|
|
160
|
+
self.move(event.globalPosition().toPoint() - self._drag_offset)
|
|
161
|
+
super().mouseMoveEvent(event)
|
|
162
|
+
|
|
163
|
+
def mouseReleaseEvent(self, event) -> None:
|
|
164
|
+
if self._dragging:
|
|
165
|
+
self._dragging = False
|
|
166
|
+
self.motion.x = float(self.x())
|
|
167
|
+
self.motion.y = float(self.y())
|
|
168
|
+
super().mouseReleaseEvent(event)
|
|
169
|
+
|
|
170
|
+
def contextMenuEvent(self, event) -> None:
|
|
171
|
+
self.menu.popup(event.globalPos())
|
|
172
|
+
|
|
173
|
+
def closeEvent(self, event) -> None:
|
|
174
|
+
if self._timer.isActive():
|
|
175
|
+
self._timer.stop()
|
|
176
|
+
if self.movie is not None:
|
|
177
|
+
self.movie.stop()
|
|
178
|
+
super().closeEvent(event)
|
|
@@ -85,6 +85,16 @@ def choose_player_sound(trigger_ui: QWidget) -> Optional[str]:
|
|
|
85
85
|
)
|
|
86
86
|
|
|
87
87
|
|
|
88
|
+
def choose_pet(trigger_ui: QWidget) -> Optional[str]:
|
|
89
|
+
"""選擇桌面寵物圖片 (gif/webp/png/jpg) / Choose a desktop-pet sprite."""
|
|
90
|
+
return choose_file(
|
|
91
|
+
trigger_ui,
|
|
92
|
+
file_filter="Pet sprite (*.gif;*.webp;*.png;*.jpg)",
|
|
93
|
+
extensions=[".gif", ".webp", ".png", ".jpg"],
|
|
94
|
+
warning_message=language_wrapper.language_word_dict.get("gif_setting_message_box")
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
|
|
88
98
|
def choose_video(trigger_ui: QWidget) -> Optional[str]:
|
|
89
99
|
"""選擇影片檔案 (mp4) / Choose video file"""
|
|
90
100
|
return choose_file(
|
|
@@ -18,6 +18,7 @@ from frontengine.ui.page.control_center.control_center_ui import ControlCenterUI
|
|
|
18
18
|
from frontengine.ui.page.gif.gif_setting_ui import GIFSettingUI
|
|
19
19
|
from frontengine.ui.page.image.image_setting_ui import ImageSettingUI
|
|
20
20
|
from frontengine.ui.page.particle.particle_setting_ui import ParticleSettingUI
|
|
21
|
+
from frontengine.ui.page.pet.pet_setting_ui import PetSettingUI
|
|
21
22
|
from frontengine.ui.page.scene_setting.scene_setting_ui import SceneSettingUI
|
|
22
23
|
from frontengine.ui.page.sound_player.sound_player_setting_ui import SoundPlayerSettingUI
|
|
23
24
|
from frontengine.ui.page.text.text_setting_ui import TextSettingUI
|
|
@@ -98,6 +99,7 @@ class FrontEngineMainUI(QMainWindow):
|
|
|
98
99
|
self.text_setting_ui = TextSettingUI()
|
|
99
100
|
self.scene_setting_ui = SceneSettingUI()
|
|
100
101
|
self.particle_setting_ui = ParticleSettingUI()
|
|
102
|
+
self.pet_setting_ui = PetSettingUI()
|
|
101
103
|
|
|
102
104
|
# 控制中心
|
|
103
105
|
# Control Center
|
|
@@ -110,7 +112,8 @@ class FrontEngineMainUI(QMainWindow):
|
|
|
110
112
|
self.text_setting_ui,
|
|
111
113
|
self.scene_setting_ui,
|
|
112
114
|
self.particle_setting_ui,
|
|
113
|
-
redirect_output
|
|
115
|
+
redirect_output,
|
|
116
|
+
pet_setting_ui=self.pet_setting_ui,
|
|
114
117
|
)
|
|
115
118
|
|
|
116
119
|
# Menu Bar
|
|
@@ -200,6 +203,7 @@ class FrontEngineMainUI(QMainWindow):
|
|
|
200
203
|
(self.text_setting_ui, "tab_text_text"),
|
|
201
204
|
(self.scene_setting_ui, "tab_scene_text"),
|
|
202
205
|
(self.particle_setting_ui, "tab_particle_text"),
|
|
206
|
+
(self.pet_setting_ui, "tab_pet_text"),
|
|
203
207
|
(self.control_center_ui, "tab_control_center_text"),
|
|
204
208
|
]
|
|
205
209
|
|
|
@@ -351,6 +355,7 @@ class FrontEngineMainUI(QMainWindow):
|
|
|
351
355
|
self.sound_player_setting_ui.sound_widget_list.clear()
|
|
352
356
|
self.text_setting_ui.text_widget_list.clear()
|
|
353
357
|
self.particle_setting_ui.particle_list.clear()
|
|
358
|
+
self.pet_setting_ui.pet_list.clear()
|
|
354
359
|
self.scene_setting_ui.close_scene()
|
|
355
360
|
super().close()
|
|
356
361
|
if self.main_app:
|
{frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/control_center/control_center_ui.py
RENAMED
|
@@ -31,7 +31,8 @@ class ControlCenterUI(QWidget):
|
|
|
31
31
|
text_setting_ui: TextSettingUI,
|
|
32
32
|
scene_setting_ui: SceneSettingUI,
|
|
33
33
|
particle_setting_ui: ParticleSettingUI,
|
|
34
|
-
redirect_output: bool = True
|
|
34
|
+
redirect_output: bool = True,
|
|
35
|
+
pet_setting_ui=None,
|
|
35
36
|
):
|
|
36
37
|
front_engine_logger.info(
|
|
37
38
|
f"[ControlCenterUI] Init | video={video_setting_ui}, image={image_setting_ui}, web={web_setting_ui}, "
|
|
@@ -54,6 +55,7 @@ class ControlCenterUI(QWidget):
|
|
|
54
55
|
self.text_setting_ui = text_setting_ui
|
|
55
56
|
self.scene_setting_ui = scene_setting_ui
|
|
56
57
|
self.particle_setting_ui = particle_setting_ui
|
|
58
|
+
self.pet_setting_ui = pet_setting_ui
|
|
57
59
|
|
|
58
60
|
# Buttons
|
|
59
61
|
self.clear_video_button = self._create_button("control_center_close_all_video", self.clear_video)
|
|
@@ -151,11 +153,13 @@ class ControlCenterUI(QWidget):
|
|
|
151
153
|
self.sound_player_setting_ui.sound_widget_list.clear()
|
|
152
154
|
self.text_setting_ui.text_widget_list.clear()
|
|
153
155
|
self.particle_setting_ui.particle_list.clear()
|
|
156
|
+
if self.pet_setting_ui is not None:
|
|
157
|
+
self.pet_setting_ui.pet_list.clear()
|
|
154
158
|
self.scene_setting_ui.close_scene()
|
|
155
159
|
|
|
156
160
|
def _all_overlay_widget_lists(self) -> list:
|
|
157
161
|
"""回傳所有覆蓋層 widget 清單 / All overlay widget lists."""
|
|
158
|
-
|
|
162
|
+
lists = [
|
|
159
163
|
self.video_setting_ui.video_widget_list,
|
|
160
164
|
self.image_setting_ui.image_widget_list,
|
|
161
165
|
self.web_setting_ui.web_widget_list,
|
|
@@ -164,6 +168,9 @@ class ControlCenterUI(QWidget):
|
|
|
164
168
|
self.text_setting_ui.text_widget_list,
|
|
165
169
|
self.particle_setting_ui.particle_list,
|
|
166
170
|
]
|
|
171
|
+
if self.pet_setting_ui is not None:
|
|
172
|
+
lists.append(self.pet_setting_ui.pet_list)
|
|
173
|
+
return lists
|
|
167
174
|
|
|
168
175
|
def _for_each_overlay(self, action) -> None:
|
|
169
176
|
"""
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from PySide6.QtGui import QGuiApplication
|
|
4
|
+
from PySide6.QtWidgets import (
|
|
5
|
+
QWidget, QGridLayout, QLabel, QPushButton, QMessageBox, QCheckBox, QComboBox,
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
from frontengine.show.pet.desktop_pet import DesktopPetWidget
|
|
9
|
+
from frontengine.ui.dialog.choose_file_dialog import choose_pet
|
|
10
|
+
from frontengine.ui.page.utils import (
|
|
11
|
+
build_recent_combobox,
|
|
12
|
+
enable_file_drop,
|
|
13
|
+
reload_recent_combobox,
|
|
14
|
+
)
|
|
15
|
+
from frontengine.user_setting.user_setting_file import add_recent_file
|
|
16
|
+
from frontengine.utils.logging.loggin_instance import front_engine_logger
|
|
17
|
+
from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
|
18
|
+
|
|
19
|
+
_PET_EXTENSIONS = (".gif", ".webp", ".png", ".jpg")
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class PetSettingUI(QWidget):
|
|
23
|
+
def __init__(self):
|
|
24
|
+
front_engine_logger.info("[PetSettingUI] Init")
|
|
25
|
+
super().__init__()
|
|
26
|
+
self.grid_layout = QGridLayout(self)
|
|
27
|
+
self.grid_layout.setContentsMargins(0, 0, 0, 0)
|
|
28
|
+
|
|
29
|
+
# Init variable
|
|
30
|
+
self.pet_list: list = []
|
|
31
|
+
self.ready_to_play = False
|
|
32
|
+
self.pet_image_path: Optional[str] = None
|
|
33
|
+
|
|
34
|
+
# Choose file
|
|
35
|
+
self.choose_file_button = QPushButton(
|
|
36
|
+
language_wrapper.language_word_dict.get("pet_choose_file", "Choose pet sprite")
|
|
37
|
+
)
|
|
38
|
+
self.choose_file_button.clicked.connect(self.choose_and_play)
|
|
39
|
+
self.ready_label = QLabel(language_wrapper.language_word_dict.get("Not Ready"))
|
|
40
|
+
|
|
41
|
+
# Size
|
|
42
|
+
self.size_label = QLabel(language_wrapper.language_word_dict.get("pet_size_label", "Size"))
|
|
43
|
+
self.size_combobox = QComboBox()
|
|
44
|
+
self.size_combobox.addItems(["64", "96", "128", "192", "256"])
|
|
45
|
+
self.size_combobox.setCurrentText("128")
|
|
46
|
+
|
|
47
|
+
# Speed
|
|
48
|
+
self.speed_label = QLabel(language_wrapper.language_word_dict.get("pet_speed_label", "Speed"))
|
|
49
|
+
self.speed_combobox = QComboBox()
|
|
50
|
+
self.speed_combobox.addItems([str(n) for n in range(1, 11)])
|
|
51
|
+
self.speed_combobox.setCurrentText("3")
|
|
52
|
+
|
|
53
|
+
# Gravity / walk on floor
|
|
54
|
+
self.gravity_checkbox = QCheckBox(language_wrapper.language_word_dict.get("pet_gravity_label", "Walk on floor"))
|
|
55
|
+
self.gravity_checkbox.setChecked(True)
|
|
56
|
+
|
|
57
|
+
# Start
|
|
58
|
+
self.start_button = QPushButton(language_wrapper.language_word_dict.get("pet_start", "Spawn pet"))
|
|
59
|
+
self.start_button.clicked.connect(self.start_play_pet)
|
|
60
|
+
|
|
61
|
+
# Recent files
|
|
62
|
+
self.recent_files_label = QLabel(language_wrapper.language_word_dict.get("recent_files_label", "Recent"))
|
|
63
|
+
self.recent_files_combobox = build_recent_combobox("pet")
|
|
64
|
+
self.recent_files_combobox.activated.connect(self._apply_recent_file)
|
|
65
|
+
|
|
66
|
+
# Drag and drop
|
|
67
|
+
self._drop_filter = enable_file_drop(self, _PET_EXTENSIONS, self._on_file_dropped)
|
|
68
|
+
|
|
69
|
+
# Layout
|
|
70
|
+
self.grid_layout.addWidget(self.choose_file_button, 0, 0)
|
|
71
|
+
self.grid_layout.addWidget(self.ready_label, 0, 1)
|
|
72
|
+
self.grid_layout.addWidget(self.size_label, 1, 0)
|
|
73
|
+
self.grid_layout.addWidget(self.size_combobox, 1, 1)
|
|
74
|
+
self.grid_layout.addWidget(self.speed_label, 2, 0)
|
|
75
|
+
self.grid_layout.addWidget(self.speed_combobox, 2, 1)
|
|
76
|
+
self.grid_layout.addWidget(self.gravity_checkbox, 3, 0)
|
|
77
|
+
self.grid_layout.addWidget(self.start_button, 4, 0)
|
|
78
|
+
self.grid_layout.addWidget(self.recent_files_label, 5, 0)
|
|
79
|
+
self.grid_layout.addWidget(self.recent_files_combobox, 5, 1)
|
|
80
|
+
|
|
81
|
+
def _create_pet_widget(self) -> DesktopPetWidget:
|
|
82
|
+
pet = DesktopPetWidget(
|
|
83
|
+
image_path=self.pet_image_path,
|
|
84
|
+
size=int(self.size_combobox.currentText()),
|
|
85
|
+
speed=int(self.speed_combobox.currentText()),
|
|
86
|
+
gravity=self.gravity_checkbox.isChecked(),
|
|
87
|
+
)
|
|
88
|
+
pet.set_pet_window_flag()
|
|
89
|
+
self.pet_list.append(pet)
|
|
90
|
+
return pet
|
|
91
|
+
|
|
92
|
+
def start_play_pet(self) -> None:
|
|
93
|
+
front_engine_logger.info("[PetSettingUI] start_play_pet")
|
|
94
|
+
if not self.pet_image_path or not self.ready_to_play:
|
|
95
|
+
message_box = QMessageBox(self)
|
|
96
|
+
message_box.setText(language_wrapper.language_word_dict.get("not_prepare"))
|
|
97
|
+
message_box.exec()
|
|
98
|
+
return
|
|
99
|
+
pet = self._create_pet_widget()
|
|
100
|
+
screen = QGuiApplication.primaryScreen()
|
|
101
|
+
geometry = screen.availableGeometry() if screen is not None else None
|
|
102
|
+
pet.show()
|
|
103
|
+
if geometry is not None:
|
|
104
|
+
bounds = (geometry.left(), geometry.top(), geometry.right(), geometry.bottom())
|
|
105
|
+
pet.start_moving(bounds)
|
|
106
|
+
|
|
107
|
+
def choose_and_play(self) -> None:
|
|
108
|
+
front_engine_logger.info("[PetSettingUI] choose_and_play")
|
|
109
|
+
self.ready_label.setText(language_wrapper.language_word_dict.get("Not Ready"))
|
|
110
|
+
self.ready_to_play = False
|
|
111
|
+
self.pet_image_path = choose_pet(self)
|
|
112
|
+
if self.pet_image_path:
|
|
113
|
+
self.ready_label.setText(language_wrapper.language_word_dict.get("Ready"))
|
|
114
|
+
self.ready_to_play = True
|
|
115
|
+
add_recent_file("pet", self.pet_image_path)
|
|
116
|
+
reload_recent_combobox(self.recent_files_combobox, "pet")
|
|
117
|
+
|
|
118
|
+
def _apply_recent_file(self, _index: int = 0) -> None:
|
|
119
|
+
path = self.recent_files_combobox.currentData()
|
|
120
|
+
self.recent_files_combobox.setCurrentIndex(0)
|
|
121
|
+
if not path:
|
|
122
|
+
return
|
|
123
|
+
self.pet_image_path = path
|
|
124
|
+
self.ready_to_play = True
|
|
125
|
+
self.ready_label.setText(language_wrapper.language_word_dict.get("Ready"))
|
|
126
|
+
|
|
127
|
+
def _on_file_dropped(self, path: str) -> None:
|
|
128
|
+
front_engine_logger.info(f"[PetSettingUI] _on_file_dropped | path={path}")
|
|
129
|
+
self.pet_image_path = path
|
|
130
|
+
self.ready_to_play = True
|
|
131
|
+
self.ready_label.setText(language_wrapper.language_word_dict.get("Ready"))
|
|
132
|
+
add_recent_file("pet", path)
|
|
133
|
+
reload_recent_combobox(self.recent_files_combobox, "pet")
|
|
134
|
+
|
|
135
|
+
def get_state(self) -> dict:
|
|
136
|
+
return {
|
|
137
|
+
"pet_image_path": self.pet_image_path,
|
|
138
|
+
"size": self.size_combobox.currentText(),
|
|
139
|
+
"speed": self.speed_combobox.currentText(),
|
|
140
|
+
"gravity": self.gravity_checkbox.isChecked(),
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
def set_state(self, state: dict) -> None:
|
|
144
|
+
if state.get("pet_image_path"):
|
|
145
|
+
self.pet_image_path = state["pet_image_path"]
|
|
146
|
+
self.ready_to_play = True
|
|
147
|
+
self.ready_label.setText(language_wrapper.language_word_dict.get("Ready"))
|
|
148
|
+
for combobox, key in ((self.size_combobox, "size"), (self.speed_combobox, "speed")):
|
|
149
|
+
if state.get(key) is not None:
|
|
150
|
+
index = combobox.findText(str(state[key]))
|
|
151
|
+
if index >= 0:
|
|
152
|
+
combobox.setCurrentIndex(index)
|
|
153
|
+
if "gravity" in state:
|
|
154
|
+
self.gravity_checkbox.setChecked(bool(state["gravity"]))
|
|
@@ -214,4 +214,12 @@ english_word_dict = {
|
|
|
214
214
|
"web_zoom_label": "Zoom",
|
|
215
215
|
"web_refresh_label": "Auto refresh",
|
|
216
216
|
"web_refresh_off": "Off",
|
|
217
|
+
# Desktop pet
|
|
218
|
+
"tab_pet_text": "Pet",
|
|
219
|
+
"pet_choose_file": "Choose pet sprite",
|
|
220
|
+
"pet_size_label": "Size",
|
|
221
|
+
"pet_speed_label": "Speed",
|
|
222
|
+
"pet_gravity_label": "Walk on floor",
|
|
223
|
+
"pet_start": "Spawn pet",
|
|
224
|
+
"pet_message_box_text": "Pet image not found",
|
|
217
225
|
}
|
{frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/multi_language/traditional_chinese.py
RENAMED
|
@@ -215,4 +215,12 @@ traditional_chinese_word_dict = {
|
|
|
215
215
|
"web_zoom_label": "縮放",
|
|
216
216
|
"web_refresh_label": "自動重新整理",
|
|
217
217
|
"web_refresh_off": "關閉",
|
|
218
|
+
# Desktop pet
|
|
219
|
+
"tab_pet_text": "桌面寵物",
|
|
220
|
+
"pet_choose_file": "選擇寵物圖片",
|
|
221
|
+
"pet_size_label": "大小",
|
|
222
|
+
"pet_speed_label": "速度",
|
|
223
|
+
"pet_gravity_label": "沿底部行走",
|
|
224
|
+
"pet_start": "召喚寵物",
|
|
225
|
+
"pet_message_box_text": "找不到寵物圖片",
|
|
218
226
|
}
|
|
File without changes
|
|
File without changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: frontengine
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.2
|
|
4
4
|
Summary: FrontEngine is use-define frontview or only use like screen saver
|
|
5
5
|
Author-email: JE-Chen <jechenmailman@gmail.com>
|
|
6
6
|
Project-URL: Homepage, https://github.com/Intergration-Automation-Testing/FrontEngine
|
|
@@ -21,6 +21,8 @@ frontengine/show/load/__init__.py
|
|
|
21
21
|
frontengine/show/load/load_someone_make_ui.py
|
|
22
22
|
frontengine/show/particle/__init__.py
|
|
23
23
|
frontengine/show/particle/particle_ui.py
|
|
24
|
+
frontengine/show/pet/__init__.py
|
|
25
|
+
frontengine/show/pet/desktop_pet.py
|
|
24
26
|
frontengine/show/scene/__init__.py
|
|
25
27
|
frontengine/show/scene/extend_graphic_scene.py
|
|
26
28
|
frontengine/show/scene/extend_graphic_view.py
|
|
@@ -60,6 +62,8 @@ frontengine/ui/page/image/__init__.py
|
|
|
60
62
|
frontengine/ui/page/image/image_setting_ui.py
|
|
61
63
|
frontengine/ui/page/particle/__init__.py
|
|
62
64
|
frontengine/ui/page/particle/particle_setting_ui.py
|
|
65
|
+
frontengine/ui/page/pet/__init__.py
|
|
66
|
+
frontengine/ui/page/pet/pet_setting_ui.py
|
|
63
67
|
frontengine/ui/page/scene_setting/__init__.py
|
|
64
68
|
frontengine/ui/page/scene_setting/scene_manager.py
|
|
65
69
|
frontengine/ui/page/scene_setting/scene_setting_ui.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine-1.0.1/frontengine/show/scene → frontengine-1.0.2/frontengine/show/pet}/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine-1.0.1/frontengine/show/video → frontengine-1.0.2/frontengine/show/text}/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{frontengine-1.0.1/frontengine/show/web → frontengine-1.0.2/frontengine/show/video}/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{frontengine-1.0.1/frontengine/system_tray → frontengine-1.0.2/frontengine/show/web}/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine-1.0.1/frontengine/ui/dialog → frontengine-1.0.2/frontengine/ui/color}/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{frontengine-1.0.1/frontengine/ui/menu → frontengine-1.0.2/frontengine/ui/dialog}/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/scene_setting/scene_page/image.py
RENAMED
|
File without changes
|
{frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/scene_setting/scene_page/registry.py
RENAMED
|
File without changes
|
{frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/scene_setting/scene_page/sound.py
RENAMED
|
File without changes
|
{frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/scene_setting/scene_page/text.py
RENAMED
|
File without changes
|
{frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/scene_setting/scene_page/video.py
RENAMED
|
File without changes
|
|
File without changes
|
{frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/scene_setting/scene_setting_ui.py
RENAMED
|
File without changes
|
|
File without changes
|
{frontengine-1.0.1 → frontengine-1.0.2}/frontengine/ui/page/sound_player/sound_player_setting_ui.py
RENAMED
|
File without changes
|
{frontengine-1.0.1/frontengine/ui/page/web → frontengine-1.0.2/frontengine/ui/page/text}/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine-1.0.1/frontengine/utils → frontengine-1.0.2/frontengine/ui/page/web}/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine-1.0.1/frontengine/utils/file → frontengine-1.0.2/frontengine/utils/browser}/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/critical_exit/check_key_is_press.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine-1.0.1/frontengine/utils/json → frontengine-1.0.2/frontengine/utils/file}/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/multi_language/language_wrapper.py
RENAMED
|
File without changes
|
|
File without changes
|
{frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/multi_language/simplified_chinese.py
RENAMED
|
File without changes
|
|
File without changes
|
{frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/preset_schedule/preset_schedule_service.py
RENAMED
|
File without changes
|
|
File without changes
|
{frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/redirect_manager/redirect_manager_class.py
RENAMED
|
File without changes
|
{frontengine-1.0.1/frontengine/worker → frontengine-1.0.2/frontengine/utils/smart_pause}/__init__.py
RENAMED
|
File without changes
|
{frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/smart_pause/smart_pause_service.py
RENAMED
|
File without changes
|
{frontengine-1.0.1 → frontengine-1.0.2}/frontengine/utils/theme_schedule/theme_schedule_service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|