frontengine-dev 0.0.97__tar.gz → 1.0.0__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_dev-0.0.97/frontengine_dev.egg-info → frontengine_dev-1.0.0}/PKG-INFO +1 -1
- frontengine_dev-1.0.0/frontengine/show/particle/particle_ui.py +175 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/main_ui.py +1 -1
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/particle/particle_setting_ui.py +4 -5
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0/frontengine_dev.egg-info}/PKG-INFO +1 -1
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/pyproject.toml +1 -1
- frontengine_dev-0.0.97/frontengine/show/particle/particle_ui.py +0 -212
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/LICENSE +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/README.md +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/base_widget.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/gif/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/gif/paint_gif.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/image/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/image/paint_image.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/load/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/load/load_someone_make_ui.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/particle/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/scene/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/scene/extend_graphic_scene.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/scene/extend_graphic_view.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/scene/scene.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/sound_player/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/sound_player/sound_effect.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/sound_player/sound_player.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/text/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/text/draw_text.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/video/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/video/video_player.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/web/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/web/webview.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/system_tray/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/system_tray/extend_system_tray.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/color/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/color/global_color.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/dialog/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/dialog/choose_file_dialog.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/dialog/save_file_dialog.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/menu/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/menu/help_menu.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/menu/how_to_menu.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/menu/language_menu.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/control_center/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/control_center/control_center_ui.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/gif/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/gif/gif_setting_ui.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/image/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/image/image_setting_ui.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/particle/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/scene_setting/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/scene_setting/scene_manager.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/scene_setting/scene_page/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/scene_setting/scene_page/gif.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/scene_setting/scene_page/image.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/scene_setting/scene_page/sound.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/scene_setting/scene_page/text.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/scene_setting/scene_page/video.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/scene_setting/scene_page/web.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/scene_setting/scene_setting_ui.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/sound_player/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/sound_player/sound_player_setting_ui.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/text/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/text/text_setting_ui.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/utils.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/video/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/video/video_setting_ui.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/web/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/web/web_setting_ui.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/user_setting/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/user_setting/scene_setting.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/user_setting/user_setting_file.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/browser/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/browser/browser.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/critical_exit/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/critical_exit/check_key_is_press.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/critical_exit/critical_exit.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/critical_exit/win32_vk.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/exception/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/exception/exception_tags.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/exception/exceptions.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/file/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/file/open/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/file/open/open_file.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/file/save/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/file/save/save_file.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/json/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/json/json_file.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/json_format/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/json_format/json_process.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/logging/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/logging/loggin_instance.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/multi_language/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/multi_language/english.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/multi_language/france.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/multi_language/germany.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/multi_language/italy.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/multi_language/language_wrapper.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/multi_language/russian.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/multi_language/simplified_chinese.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/multi_language/traditional_chinese.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/redirect_manager/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/redirect_manager/redirect_manager_class.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/worker/__init__.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/worker/qthread_worker.py +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine_dev.egg-info/SOURCES.txt +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine_dev.egg-info/dependency_links.txt +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine_dev.egg-info/requires.txt +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine_dev.egg-info/top_level.txt +0 -0
- {frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: frontengine_dev
|
|
3
|
-
Version: 0.0
|
|
3
|
+
Version: 1.0.0
|
|
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
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import random
|
|
2
|
+
|
|
3
|
+
from OpenGL.GL import *
|
|
4
|
+
from PySide6.QtCore import Qt, QTimer
|
|
5
|
+
from PySide6.QtGui import QSurfaceFormat, QPixmap
|
|
6
|
+
from PySide6.QtOpenGLWidgets import QOpenGLWidget
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class ParticleOpenGLWidget(QOpenGLWidget):
|
|
10
|
+
def __init__(self,
|
|
11
|
+
pixmap: QPixmap,
|
|
12
|
+
particle_size: int,
|
|
13
|
+
particle_direction: str = "down",
|
|
14
|
+
particle_count: int = 50,
|
|
15
|
+
opacity: float = 0.2,
|
|
16
|
+
screen_height: int = 1080,
|
|
17
|
+
screen_width: int = 1920,
|
|
18
|
+
particle_speed: float = 0.003):
|
|
19
|
+
|
|
20
|
+
fmt = QSurfaceFormat()
|
|
21
|
+
fmt.setAlphaBufferSize(8)
|
|
22
|
+
fmt.setRenderableType(QSurfaceFormat.RenderableType.OpenGL)
|
|
23
|
+
fmt.setProfile(QSurfaceFormat.OpenGLContextProfile.CompatibilityProfile)
|
|
24
|
+
QSurfaceFormat.setDefaultFormat(fmt)
|
|
25
|
+
super().__init__()
|
|
26
|
+
|
|
27
|
+
self.setWindowFlag(
|
|
28
|
+
Qt.WindowType.WindowTransparentForInput |
|
|
29
|
+
Qt.WindowType.FramelessWindowHint |
|
|
30
|
+
Qt.WindowType.WindowStaysOnTopHint |
|
|
31
|
+
Qt.WindowType.Tool
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
# 視窗大小
|
|
35
|
+
self.resize(screen_width, screen_height)
|
|
36
|
+
|
|
37
|
+
# Qt 透明背景設定
|
|
38
|
+
self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground)
|
|
39
|
+
self.setAttribute(Qt.WidgetAttribute.WA_NoSystemBackground)
|
|
40
|
+
self.setAutoFillBackground(False)
|
|
41
|
+
|
|
42
|
+
self.setWindowFlags(
|
|
43
|
+
Qt.WindowType.FramelessWindowHint |
|
|
44
|
+
Qt.WindowType.WindowStaysOnTopHint |
|
|
45
|
+
Qt.WindowType.Tool
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
# 縮放 pixmap 成 particle_size(保持比例)
|
|
49
|
+
target_size = pixmap.size().scaled(
|
|
50
|
+
particle_size, particle_size,
|
|
51
|
+
Qt.AspectRatioMode.KeepAspectRatio
|
|
52
|
+
)
|
|
53
|
+
scaled_pixmap = pixmap.scaled(
|
|
54
|
+
target_size,
|
|
55
|
+
Qt.AspectRatioMode.KeepAspectRatio,
|
|
56
|
+
Qt.TransformationMode.SmoothTransformation
|
|
57
|
+
)
|
|
58
|
+
self.image = scaled_pixmap.toImage()
|
|
59
|
+
|
|
60
|
+
self.particle_count = particle_count
|
|
61
|
+
self.particle_direction = particle_direction
|
|
62
|
+
self.opacity = opacity
|
|
63
|
+
self.particle_speed = particle_speed
|
|
64
|
+
|
|
65
|
+
# 粒子狀態 [x, y]
|
|
66
|
+
self.particles = [
|
|
67
|
+
[random.uniform(-1, 1), random.uniform(-1, 1)]
|
|
68
|
+
for _ in range(particle_count)
|
|
69
|
+
]
|
|
70
|
+
|
|
71
|
+
self.texture_id = None
|
|
72
|
+
|
|
73
|
+
self.timer = QTimer(self)
|
|
74
|
+
self.timer.timeout.connect(self.update_particles)
|
|
75
|
+
self.timer.start(16)
|
|
76
|
+
|
|
77
|
+
QTimer.singleShot(0, self.apply_winapi)
|
|
78
|
+
|
|
79
|
+
def apply_winapi(self):
|
|
80
|
+
hwnd = int(self.winId())
|
|
81
|
+
GWL_EXSTYLE = -20
|
|
82
|
+
WS_EX_LAYERED = 0x80000
|
|
83
|
+
style = ctypes.windll.user32.GetWindowLongW(hwnd, GWL_EXSTYLE)
|
|
84
|
+
ctypes.windll.user32.SetWindowLongW(hwnd, GWL_EXSTYLE, style | WS_EX_LAYERED)
|
|
85
|
+
|
|
86
|
+
def initializeGL(self):
|
|
87
|
+
glDisable(GL_DEPTH_TEST)
|
|
88
|
+
glDisable(GL_CULL_FACE)
|
|
89
|
+
glEnable(GL_BLEND)
|
|
90
|
+
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
|
|
91
|
+
glEnable(GL_TEXTURE_2D)
|
|
92
|
+
|
|
93
|
+
w, h = self.image.width(), self.image.height()
|
|
94
|
+
|
|
95
|
+
self.texture_id = glGenTextures(1)
|
|
96
|
+
glBindTexture(GL_TEXTURE_2D, self.texture_id)
|
|
97
|
+
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, self.image.bits())
|
|
98
|
+
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
|
|
99
|
+
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
|
|
100
|
+
|
|
101
|
+
def update_particles(self):
|
|
102
|
+
for p in self.particles:
|
|
103
|
+
x, y = p
|
|
104
|
+
if self.particle_direction == "down":
|
|
105
|
+
y -= self.particle_speed
|
|
106
|
+
if y < -1:
|
|
107
|
+
y = 1
|
|
108
|
+
x = random.uniform(-1, 1)
|
|
109
|
+
|
|
110
|
+
elif self.particle_direction == "up":
|
|
111
|
+
y += self.particle_speed
|
|
112
|
+
if y > 1:
|
|
113
|
+
y = -1
|
|
114
|
+
x = random.uniform(-1, 1)
|
|
115
|
+
|
|
116
|
+
elif self.particle_direction == "left":
|
|
117
|
+
x -= self.particle_speed
|
|
118
|
+
if x < -1:
|
|
119
|
+
x = 1
|
|
120
|
+
y = random.uniform(-1, 1)
|
|
121
|
+
|
|
122
|
+
elif self.particle_direction == "right":
|
|
123
|
+
x += self.particle_speed
|
|
124
|
+
if x > 1:
|
|
125
|
+
x = -1
|
|
126
|
+
y = random.uniform(-1, 1)
|
|
127
|
+
|
|
128
|
+
# 你可以自行擴充其他方向
|
|
129
|
+
|
|
130
|
+
p[0] = x
|
|
131
|
+
p[1] = y
|
|
132
|
+
|
|
133
|
+
self.update()
|
|
134
|
+
|
|
135
|
+
def paintGL(self):
|
|
136
|
+
glClearColor(0, 0, 0, 0)
|
|
137
|
+
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
|
|
138
|
+
|
|
139
|
+
glBindTexture(GL_TEXTURE_2D, self.texture_id)
|
|
140
|
+
glColor4f(1, 1, 1, self.opacity)
|
|
141
|
+
|
|
142
|
+
size_x = self.image.width() / 2000 # 根據解析度調整大小
|
|
143
|
+
size_y = self.image.height() / 2000
|
|
144
|
+
|
|
145
|
+
for x, y in self.particles:
|
|
146
|
+
glLoadIdentity()
|
|
147
|
+
glTranslatef(x, y, 0)
|
|
148
|
+
|
|
149
|
+
glBegin(GL_QUADS)
|
|
150
|
+
glTexCoord2f(0, 1)
|
|
151
|
+
glVertex2f(-size_x, -size_y)
|
|
152
|
+
glTexCoord2f(1, 1)
|
|
153
|
+
glVertex2f(size_x, -size_y)
|
|
154
|
+
glTexCoord2f(1, 0)
|
|
155
|
+
glVertex2f(size_x, size_y)
|
|
156
|
+
glTexCoord2f(0, 0)
|
|
157
|
+
glVertex2f(-size_x, size_y)
|
|
158
|
+
glEnd()
|
|
159
|
+
|
|
160
|
+
def resizeGL(self, w, h):
|
|
161
|
+
glViewport(0, 0, w, h)
|
|
162
|
+
glMatrixMode(GL_PROJECTION)
|
|
163
|
+
glLoadIdentity()
|
|
164
|
+
glOrtho(-1, 1, -1, 1, -1, 1)
|
|
165
|
+
glMatrixMode(GL_MODELVIEW)
|
|
166
|
+
glLoadIdentity()
|
|
167
|
+
|
|
168
|
+
def set_ui_window_flag(self) -> None:
|
|
169
|
+
""" 設定視窗旗標 (保持最上層或最下層) Set window flags (stay on top or bottom) """
|
|
170
|
+
self.setWindowFlag(
|
|
171
|
+
Qt.WindowType.Window |
|
|
172
|
+
Qt.WindowType.WindowTransparentForInput |
|
|
173
|
+
Qt.WindowType.FramelessWindowHint |
|
|
174
|
+
Qt.WindowType.WindowStaysOnTopHint |
|
|
175
|
+
Qt.WindowType.Tool)
|
|
@@ -4,7 +4,7 @@ from pathlib import Path
|
|
|
4
4
|
from typing import Dict, Type
|
|
5
5
|
|
|
6
6
|
from PySide6.QtCore import QTimer, QCoreApplication
|
|
7
|
-
from PySide6.QtGui import QIcon, Qt
|
|
7
|
+
from PySide6.QtGui import QIcon, Qt, QSurfaceFormat
|
|
8
8
|
from PySide6.QtWidgets import QMainWindow, QApplication, QGridLayout, QTabWidget, QMenuBar, QWidget
|
|
9
9
|
from qt_material import apply_stylesheet
|
|
10
10
|
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/particle/particle_setting_ui.py
RENAMED
|
@@ -45,8 +45,7 @@ class ParticleSettingUI(QWidget):
|
|
|
45
45
|
self.choose_direction_label = QLabel(language_wrapper.language_word_dict.get("choose_particle_direction"))
|
|
46
46
|
self.choose_direction_combobox = QComboBox()
|
|
47
47
|
self.choose_direction_combobox.addItems(
|
|
48
|
-
["down", "up", "left", "right"
|
|
49
|
-
"random_minus", "random_add", "random"]
|
|
48
|
+
["down", "up", "left", "right"]
|
|
50
49
|
)
|
|
51
50
|
|
|
52
51
|
# Particle size
|
|
@@ -130,7 +129,7 @@ class ParticleSettingUI(QWidget):
|
|
|
130
129
|
monitors[0].availableGeometry().width(),
|
|
131
130
|
monitors[0].availableGeometry().height()
|
|
132
131
|
)
|
|
133
|
-
particle_widget.
|
|
132
|
+
particle_widget.showMaximized()
|
|
134
133
|
|
|
135
134
|
elif not self.show_all_screen and len(monitors) >= 2:
|
|
136
135
|
input_dialog, combobox = create_monitor_selection_dialog(self, monitors)
|
|
@@ -145,7 +144,7 @@ class ParticleSettingUI(QWidget):
|
|
|
145
144
|
)
|
|
146
145
|
particle_widget.setScreen(monitor)
|
|
147
146
|
particle_widget.move(monitor.availableGeometry().topLeft())
|
|
148
|
-
particle_widget.
|
|
147
|
+
particle_widget.showMaximized()
|
|
149
148
|
|
|
150
149
|
else:
|
|
151
150
|
for monitor in monitors:
|
|
@@ -155,7 +154,7 @@ class ParticleSettingUI(QWidget):
|
|
|
155
154
|
)
|
|
156
155
|
particle_widget.setScreen(monitor)
|
|
157
156
|
particle_widget.move(monitor.availableGeometry().topLeft())
|
|
158
|
-
particle_widget.
|
|
157
|
+
particle_widget.showMaximized()
|
|
159
158
|
|
|
160
159
|
def choose_and_copy_file_to_cwd_image_dir_then_play(self) -> None:
|
|
161
160
|
front_engine_logger.info("[ParticleSettingUI] choose_and_copy_file_to_cwd_image_dir_then_play")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: frontengine_dev
|
|
3
|
-
Version: 0.0
|
|
3
|
+
Version: 1.0.0
|
|
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
|
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
import random
|
|
2
|
-
import ctypes
|
|
3
|
-
import sys
|
|
4
|
-
|
|
5
|
-
from OpenGL.GL import *
|
|
6
|
-
from PySide6.QtCore import QTimer
|
|
7
|
-
from PySide6.QtGui import QImage, QPixmap, Qt
|
|
8
|
-
from PySide6.QtOpenGLWidgets import QOpenGLWidget
|
|
9
|
-
|
|
10
|
-
from frontengine.utils.logging.loggin_instance import front_engine_logger
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
class ParticleOpenGLWidget(QOpenGLWidget):
|
|
14
|
-
"""
|
|
15
|
-
OpenGL-based particle widget
|
|
16
|
-
(Replacement for QGraphicsView + QGraphicsScene)
|
|
17
|
-
"""
|
|
18
|
-
|
|
19
|
-
def __init__(self,
|
|
20
|
-
pixmap: QPixmap,
|
|
21
|
-
particle_size: int,
|
|
22
|
-
particle_direction: str = "down",
|
|
23
|
-
particle_count: int = 50,
|
|
24
|
-
opacity: float = 0.2,
|
|
25
|
-
screen_height: int = 1080,
|
|
26
|
-
screen_width: int = 1920,
|
|
27
|
-
particle_speed: float = 0.003):
|
|
28
|
-
super().__init__()
|
|
29
|
-
|
|
30
|
-
# Window size
|
|
31
|
-
self.width = screen_width
|
|
32
|
-
self.height = screen_height
|
|
33
|
-
|
|
34
|
-
# ---- QWidget attributes (對齊原本 ParticleWidget) ----
|
|
35
|
-
self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground)
|
|
36
|
-
self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
|
|
37
|
-
self.setAttribute(Qt.WidgetAttribute.WA_NoSystemBackground)
|
|
38
|
-
self.setAutoFillBackground(False)
|
|
39
|
-
|
|
40
|
-
hwnd = int(self.winId())
|
|
41
|
-
extended_style = ctypes.windll.user32.GetWindowLongW(hwnd, -20)
|
|
42
|
-
ctypes.windll.user32.SetWindowLongW(hwnd, -20,
|
|
43
|
-
extended_style | 0x80000 | 0x20) # WS_EX_LAYERED | WS_EX_TRANSPARENT
|
|
44
|
-
|
|
45
|
-
# ---- Particle image ----
|
|
46
|
-
target_size = pixmap.size().scaled(
|
|
47
|
-
particle_size, particle_size,
|
|
48
|
-
Qt.AspectRatioMode.KeepAspectRatio
|
|
49
|
-
)
|
|
50
|
-
self.image = pixmap.toImage().scaled(target_size)
|
|
51
|
-
|
|
52
|
-
# ---- Particle parameters ----
|
|
53
|
-
self.particle_count = particle_count
|
|
54
|
-
self.particle_speed = particle_speed
|
|
55
|
-
self.opacity = opacity
|
|
56
|
-
self.direction = particle_direction
|
|
57
|
-
|
|
58
|
-
# ---- Particle state (Scene replacement) ----
|
|
59
|
-
self.particles = [
|
|
60
|
-
[random.uniform(-1, 1), random.uniform(-1, 1)]
|
|
61
|
-
for _ in range(particle_count)
|
|
62
|
-
]
|
|
63
|
-
|
|
64
|
-
self.texture_id = None
|
|
65
|
-
|
|
66
|
-
# ---- Animation timer ----
|
|
67
|
-
self.timer = QTimer(self)
|
|
68
|
-
self.timer.timeout.connect(self.update)
|
|
69
|
-
self.timer.start(16)
|
|
70
|
-
|
|
71
|
-
# ================= OpenGL lifecycle =================
|
|
72
|
-
|
|
73
|
-
def initializeGL(self):
|
|
74
|
-
glEnable(GL_BLEND)
|
|
75
|
-
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
|
|
76
|
-
glEnable(GL_TEXTURE_2D)
|
|
77
|
-
|
|
78
|
-
image = self.image.convertToFormat(QImage.Format.Format_RGBA8888)
|
|
79
|
-
width, height = image.width(), image.height()
|
|
80
|
-
|
|
81
|
-
self.texture_id = glGenTextures(1)
|
|
82
|
-
glBindTexture(GL_TEXTURE_2D, self.texture_id)
|
|
83
|
-
|
|
84
|
-
glTexImage2D(
|
|
85
|
-
GL_TEXTURE_2D, 0, GL_RGBA,
|
|
86
|
-
width, height, 0,
|
|
87
|
-
GL_RGBA, GL_UNSIGNED_BYTE,
|
|
88
|
-
image.bits()
|
|
89
|
-
)
|
|
90
|
-
|
|
91
|
-
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
|
|
92
|
-
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
|
|
93
|
-
|
|
94
|
-
def paintGL(self):
|
|
95
|
-
glClearColor(0, 0, 0, 0)
|
|
96
|
-
glClear(GL_COLOR_BUFFER_BIT)
|
|
97
|
-
glBindTexture(GL_TEXTURE_2D, self.texture_id)
|
|
98
|
-
glColor4f(1.0, 1.0, 1.0, self.opacity)
|
|
99
|
-
|
|
100
|
-
size = 0.04
|
|
101
|
-
|
|
102
|
-
glBegin(GL_QUADS)
|
|
103
|
-
for x, y in self.particles:
|
|
104
|
-
glTexCoord2f(0, 0)
|
|
105
|
-
glVertex2f(x - size, y - size)
|
|
106
|
-
glTexCoord2f(1, 0)
|
|
107
|
-
glVertex2f(x + size, y - size)
|
|
108
|
-
glTexCoord2f(1, 1)
|
|
109
|
-
glVertex2f(x + size, y + size)
|
|
110
|
-
glTexCoord2f(0, 1)
|
|
111
|
-
glVertex2f(x - size, y + size)
|
|
112
|
-
glEnd()
|
|
113
|
-
|
|
114
|
-
self._update_particles()
|
|
115
|
-
|
|
116
|
-
def resizeGL(self, w, h):
|
|
117
|
-
glViewport(0, 0, w, h)
|
|
118
|
-
glMatrixMode(GL_PROJECTION)
|
|
119
|
-
glLoadIdentity()
|
|
120
|
-
glOrtho(-1, 1, -1, 1, -1, 1)
|
|
121
|
-
glMatrixMode(GL_MODELVIEW)
|
|
122
|
-
glLoadIdentity()
|
|
123
|
-
|
|
124
|
-
# ================= Logic (Scene replacement) =================
|
|
125
|
-
|
|
126
|
-
def _update_particles(self):
|
|
127
|
-
|
|
128
|
-
for p in self.particles:
|
|
129
|
-
if self.direction == "down":
|
|
130
|
-
p[1] -= self.particle_speed
|
|
131
|
-
if p[1] < -1:
|
|
132
|
-
p[1] = 1
|
|
133
|
-
p[0] = random.uniform(-1, 1)
|
|
134
|
-
|
|
135
|
-
elif self.direction == "up":
|
|
136
|
-
p[1] += self.particle_speed
|
|
137
|
-
if p[1] > 1:
|
|
138
|
-
p[1] = -1
|
|
139
|
-
p[0] = random.uniform(-1, 1)
|
|
140
|
-
|
|
141
|
-
elif self.direction == "left":
|
|
142
|
-
p[0] -= self.particle_speed
|
|
143
|
-
if p[0] < -1:
|
|
144
|
-
p[0] = 1
|
|
145
|
-
p[1] = random.uniform(-1, 1)
|
|
146
|
-
|
|
147
|
-
elif self.direction == "right":
|
|
148
|
-
p[0] += self.particle_speed
|
|
149
|
-
if p[0] > 1:
|
|
150
|
-
p[0] = -1
|
|
151
|
-
p[1] = random.uniform(-1, 1)
|
|
152
|
-
|
|
153
|
-
# Diagonal directions
|
|
154
|
-
elif self.direction == "left_down":
|
|
155
|
-
p[0] -= self.particle_speed
|
|
156
|
-
p[1] -= self.particle_speed
|
|
157
|
-
if p[0] < -1 or p[1] < -1:
|
|
158
|
-
p[0] = random.uniform(-1, 1)
|
|
159
|
-
p[1] = 1
|
|
160
|
-
|
|
161
|
-
elif self.direction == "left_up":
|
|
162
|
-
p[0] -= self.particle_speed
|
|
163
|
-
p[1] += self.particle_speed
|
|
164
|
-
if p[0] < -1 or p[1] > 1:
|
|
165
|
-
p[0] = random.uniform(-1, 1)
|
|
166
|
-
p[1] = -1
|
|
167
|
-
|
|
168
|
-
elif self.direction == "right_down":
|
|
169
|
-
p[0] += self.particle_speed
|
|
170
|
-
p[1] -= self.particle_speed
|
|
171
|
-
if p[0] > 1 or p[1] < -1:
|
|
172
|
-
p[0] = random.uniform(-1, 1)
|
|
173
|
-
p[1] = 1
|
|
174
|
-
|
|
175
|
-
elif self.direction == "right_up":
|
|
176
|
-
p[0] += self.particle_speed
|
|
177
|
-
p[1] += self.particle_speed
|
|
178
|
-
if p[0] > 1 or p[1] > 1:
|
|
179
|
-
p[0] = random.uniform(-1, 1)
|
|
180
|
-
p[1] = -1
|
|
181
|
-
|
|
182
|
-
# Randomized modes
|
|
183
|
-
elif self.direction == "random_minus":
|
|
184
|
-
p[0] -= random.uniform(0, self.particle_speed)
|
|
185
|
-
p[1] -= random.uniform(0, self.particle_speed)
|
|
186
|
-
if p[0] < -1 or p[1] < -1:
|
|
187
|
-
p[0] = random.uniform(-1, 1)
|
|
188
|
-
p[1] = random.uniform(-1, 1)
|
|
189
|
-
|
|
190
|
-
elif self.direction == "random_add":
|
|
191
|
-
p[0] += random.uniform(0, self.particle_speed)
|
|
192
|
-
p[1] += random.uniform(0, self.particle_speed)
|
|
193
|
-
if p[0] > 1 or p[1] > 1:
|
|
194
|
-
p[0] = random.uniform(-1, 1)
|
|
195
|
-
p[1] = random.uniform(-1, 1)
|
|
196
|
-
|
|
197
|
-
elif self.direction == "random":
|
|
198
|
-
p[0] += random.uniform(-self.particle_speed, self.particle_speed)
|
|
199
|
-
p[1] += random.uniform(-self.particle_speed, self.particle_speed)
|
|
200
|
-
# Wrap-around if out of bounds
|
|
201
|
-
if p[0] < -1 or p[0] > 1 or p[1] < -1 or p[1] > 1:
|
|
202
|
-
p[0] = random.uniform(-1, 1)
|
|
203
|
-
p[1] = random.uniform(-1, 1)
|
|
204
|
-
|
|
205
|
-
def set_ui_window_flag(self) -> None:
|
|
206
|
-
""" 設定視窗旗標 (保持最上層或最下層) Set window flags (stay on top or bottom) """
|
|
207
|
-
front_engine_logger.info(f"[ParticleWidget] set_ui_window_flag")
|
|
208
|
-
self.setWindowFlag(
|
|
209
|
-
Qt.WindowType.WindowTransparentForInput |
|
|
210
|
-
Qt.WindowType.FramelessWindowHint |
|
|
211
|
-
Qt.WindowType.WindowStaysOnTopHint |
|
|
212
|
-
Qt.WindowType.Tool)
|
|
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_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/load/load_someone_make_ui.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/scene/extend_graphic_scene.py
RENAMED
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/scene/extend_graphic_view.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/sound_player/sound_effect.py
RENAMED
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/show/sound_player/sound_player.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_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/system_tray/extend_system_tray.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/dialog/choose_file_dialog.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/control_center/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/image/image_setting_ui.py
RENAMED
|
File without changes
|
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/scene_setting/__init__.py
RENAMED
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/scene_setting/scene_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/scene_setting/scene_page/gif.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/scene_setting/scene_page/web.py
RENAMED
|
File without changes
|
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/sound_player/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/text/text_setting_ui.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/ui/page/video/video_setting_ui.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/user_setting/user_setting_file.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/critical_exit/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/critical_exit/critical_exit.py
RENAMED
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/critical_exit/win32_vk.py
RENAMED
|
File without changes
|
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/exception/exception_tags.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
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/json_format/json_process.py
RENAMED
|
File without changes
|
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/logging/loggin_instance.py
RENAMED
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/multi_language/__init__.py
RENAMED
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/multi_language/english.py
RENAMED
|
File without changes
|
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/multi_language/germany.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/multi_language/russian.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine/utils/redirect_manager/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine_dev-0.0.97 → frontengine_dev-1.0.0}/frontengine_dev.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|