kigo-gui-framework 3.1__tar.gz → 3.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.
- {kigo_gui_framework-3.1/kigo_gui_framework.egg-info → kigo_gui_framework-3.2}/PKG-INFO +2 -2
- kigo_gui_framework-3.2/README.txt +2 -0
- kigo_gui_framework-3.2/kigo/debug/__init__.py +3 -0
- kigo_gui_framework-3.2/kigo/debug/freeze.py +54 -0
- kigo_gui_framework-3.2/kigo/inspector/__init__.py +3 -0
- kigo_gui_framework-3.2/kigo/inspector/inspector.py +50 -0
- kigo_gui_framework-3.2/kigo/inspector/overlay.py +36 -0
- kigo_gui_framework-3.2/kigo/inspector/panel.py +41 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2/kigo_gui_framework.egg-info}/PKG-INFO +2 -2
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo_gui_framework.egg-info/SOURCES.txt +6 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/pyproject.toml +2 -2
- kigo_gui_framework-3.1/README.txt +0 -10
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/MANIFEST.in +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/README.md +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/_init_.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/accelerate.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/android/__init__.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/android/info.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/android/lifecycle.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/android/ossupport.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/app.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/cli/__init__.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/cli/doctor.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/cli/main.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/ecs/__init__.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/ecs/component.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/ecs/entity.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/ecs/render.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/ecs/system.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/ecs/world.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/fx_gl2d.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/fx_quick.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/gpu.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/hud.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/hwaccel.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/logging/__init__.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/logging/jsonlog.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/media.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/net/__init__.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/net/qnetwork.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/physics.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/physics_policy.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/platform.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/qt/__init__.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/qt/backend.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/runtime.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/shader_demo.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/shim.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/skins.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/studio/__init__.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/studio/core.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/studio/overlay.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/style.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/tree.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/wasm/__init__.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/wasm/executor.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/wasm/module.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/widgets.py +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo_gui_framework.egg-info/dependency_links.txt +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo_gui_framework.egg-info/entry_points.txt +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo_gui_framework.egg-info/requires.txt +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo_gui_framework.egg-info/top_level.txt +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/setup.cfg +0 -0
- {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/setup.py +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kigo-gui-framework
|
|
3
|
-
Version: 3.
|
|
4
|
-
Summary: Kigo has
|
|
3
|
+
Version: 3.2
|
|
4
|
+
Summary: Kigo has Time Freeze Debugging and a Visual Inspector now.
|
|
5
5
|
Author: Anand Kumar
|
|
6
6
|
License: Zlib
|
|
7
7
|
Keywords: gui,qt,pyqt,webengine,opengl,wasm,android,chromeos,framework
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Zlib
|
|
2
|
+
# kigo/debug/freeze.py
|
|
3
|
+
|
|
4
|
+
from kigo.qt.backend import QtCore, QtWidgets
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def freeze(reason: str = "Execution paused", *, data: dict | None = None):
|
|
8
|
+
"""
|
|
9
|
+
Freeze execution while keeping the Qt event loop alive.
|
|
10
|
+
Used for visual + state debugging.
|
|
11
|
+
|
|
12
|
+
This does NOT crash or block Qt internally.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
# Dialog shown during freeze
|
|
16
|
+
dialog = QtWidgets.QDialog()
|
|
17
|
+
dialog.setWindowTitle("Kigo Time Freeze")
|
|
18
|
+
dialog.setModal(False)
|
|
19
|
+
dialog.setWindowFlags(
|
|
20
|
+
QtCore.Qt.WindowType.WindowStaysOnTopHint
|
|
21
|
+
| QtCore.Qt.WindowType.Dialog
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
layout = QtWidgets.QVBoxLayout(dialog)
|
|
25
|
+
|
|
26
|
+
label = QtWidgets.QLabel(f"🧊 {reason}")
|
|
27
|
+
label.setStyleSheet("font-weight: bold; font-size: 14px;")
|
|
28
|
+
layout.addWidget(label)
|
|
29
|
+
|
|
30
|
+
if data:
|
|
31
|
+
text = QtWidgets.QPlainTextEdit()
|
|
32
|
+
text.setReadOnly(True)
|
|
33
|
+
pretty = "\n".join(f"{k}: {v}" for k, v in data.items())
|
|
34
|
+
text.setPlainText(pretty)
|
|
35
|
+
layout.addWidget(text)
|
|
36
|
+
|
|
37
|
+
btn = QtWidgets.QPushButton("Resume")
|
|
38
|
+
layout.addWidget(btn)
|
|
39
|
+
|
|
40
|
+
# Local event loop = time freeze
|
|
41
|
+
loop = QtCore.QEventLoop()
|
|
42
|
+
|
|
43
|
+
btn.clicked.connect(loop.quit)
|
|
44
|
+
dialog.finished.connect(loop.quit)
|
|
45
|
+
|
|
46
|
+
dialog.show()
|
|
47
|
+
|
|
48
|
+
# Process paint events before freezing
|
|
49
|
+
QtWidgets.QApplication.processEvents()
|
|
50
|
+
|
|
51
|
+
# TIME FREEZE STARTS HERE
|
|
52
|
+
loop.exec()
|
|
53
|
+
|
|
54
|
+
dialog.close()
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Zlib
|
|
2
|
+
# kigo/inspector/inspector.py
|
|
3
|
+
|
|
4
|
+
from kigo.qt.backend import QtCore, QtWidgets
|
|
5
|
+
from kigo.inspector.overlay import Overlay
|
|
6
|
+
from kigo.inspector.panel import InspectorPanel
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class Inspector(QtCore.QObject):
|
|
10
|
+
def __init__(self, app: QtWidgets.QApplication):
|
|
11
|
+
super().__init__()
|
|
12
|
+
self.app = app
|
|
13
|
+
self.overlay = Overlay()
|
|
14
|
+
self.panel = InspectorPanel()
|
|
15
|
+
|
|
16
|
+
self.app.installEventFilter(self)
|
|
17
|
+
|
|
18
|
+
def attach(self):
|
|
19
|
+
for w in self.app.topLevelWidgets():
|
|
20
|
+
if isinstance(w, QtWidgets.QMainWindow):
|
|
21
|
+
w.addDockWidget(
|
|
22
|
+
QtCore.Qt.DockWidgetArea.RightDockWidgetArea,
|
|
23
|
+
self.panel,
|
|
24
|
+
)
|
|
25
|
+
self.overlay.setParent(w)
|
|
26
|
+
self.overlay.resize(w.size())
|
|
27
|
+
|
|
28
|
+
def eventFilter(self, obj, event):
|
|
29
|
+
if isinstance(event, QtCore.QEvent):
|
|
30
|
+
if event.type() == QtCore.QEvent.Type.MouseMove:
|
|
31
|
+
widget = self.app.widgetAt(event.globalPosition().toPoint())
|
|
32
|
+
if widget:
|
|
33
|
+
rect = widget.rect()
|
|
34
|
+
top_left = widget.mapToGlobal(rect.topLeft())
|
|
35
|
+
self.overlay.highlight(
|
|
36
|
+
QtCore.QRect(top_left, rect.size())
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
elif event.type() == QtCore.QEvent.Type.MouseButtonPress:
|
|
40
|
+
widget = self.app.widgetAt(event.globalPosition().toPoint())
|
|
41
|
+
self.panel.inspect(widget)
|
|
42
|
+
return True
|
|
43
|
+
|
|
44
|
+
return False
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def enable_inspector(app: QtWidgets.QApplication):
|
|
48
|
+
inspector = Inspector(app)
|
|
49
|
+
inspector.attach()
|
|
50
|
+
return inspector
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Zlib
|
|
2
|
+
# kigo/inspector/overlay.py
|
|
3
|
+
|
|
4
|
+
from kigo.qt.backend import QtWidgets, QtGui, QtCore
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Overlay(QtWidgets.QWidget):
|
|
8
|
+
def __init__(self, parent=None):
|
|
9
|
+
super().__init__(parent)
|
|
10
|
+
self.setAttribute(QtCore.Qt.WidgetAttribute.WA_TransparentForMouseEvents)
|
|
11
|
+
self.setAttribute(QtCore.Qt.WidgetAttribute.WA_NoSystemBackground)
|
|
12
|
+
self.setAttribute(QtCore.Qt.WidgetAttribute.WA_AlwaysStackOnTop)
|
|
13
|
+
self.hide()
|
|
14
|
+
|
|
15
|
+
self._rect = None
|
|
16
|
+
|
|
17
|
+
def highlight(self, rect: QtCore.QRect):
|
|
18
|
+
self._rect = rect
|
|
19
|
+
self.setGeometry(rect.adjusted(-2, -2, 2, 2))
|
|
20
|
+
self.show()
|
|
21
|
+
self.raise_()
|
|
22
|
+
self.update()
|
|
23
|
+
|
|
24
|
+
def clear(self):
|
|
25
|
+
self._rect = None
|
|
26
|
+
self.hide()
|
|
27
|
+
|
|
28
|
+
def paintEvent(self, event):
|
|
29
|
+
if not self._rect:
|
|
30
|
+
return
|
|
31
|
+
|
|
32
|
+
painter = QtGui.QPainter(self)
|
|
33
|
+
painter.setRenderHint(QtGui.QPainter.RenderHint.Antialiasing)
|
|
34
|
+
pen = QtGui.QPen(QtGui.QColor(0, 180, 255), 2, QtCore.Qt.PenStyle.DashLine)
|
|
35
|
+
painter.setPen(pen)
|
|
36
|
+
painter.drawRect(self.rect().adjusted(1, 1, -1, -1))
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Zlib
|
|
2
|
+
# kigo/inspector/panel.py
|
|
3
|
+
|
|
4
|
+
from kigo.qt.backend import QtWidgets
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class InspectorPanel(QtWidgets.QDockWidget):
|
|
8
|
+
def __init__(self):
|
|
9
|
+
super().__init__("Kigo Inspector")
|
|
10
|
+
self.setAllowedAreas(
|
|
11
|
+
self.DockWidgetArea.LeftDockWidgetArea
|
|
12
|
+
| self.DockWidgetArea.RightDockWidgetArea
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
self.text = QtWidgets.QPlainTextEdit()
|
|
16
|
+
self.text.setReadOnly(True)
|
|
17
|
+
self.setWidget(self.text)
|
|
18
|
+
|
|
19
|
+
def inspect(self, widget):
|
|
20
|
+
if widget is None:
|
|
21
|
+
self.text.setPlainText("No widget")
|
|
22
|
+
return
|
|
23
|
+
|
|
24
|
+
info = []
|
|
25
|
+
info.append(f"Class: {widget.__class__.__name__}")
|
|
26
|
+
info.append(f"ObjectName: {widget.objectName() or '(none)'}")
|
|
27
|
+
info.append(f"Visible: {widget.isVisible()}")
|
|
28
|
+
info.append(f"Enabled: {widget.isEnabled()}")
|
|
29
|
+
info.append(f"Geometry: {widget.geometry()}")
|
|
30
|
+
|
|
31
|
+
parents = []
|
|
32
|
+
p = widget.parentWidget()
|
|
33
|
+
while p:
|
|
34
|
+
parents.append(p.__class__.__name__)
|
|
35
|
+
p = p.parentWidget()
|
|
36
|
+
|
|
37
|
+
info.append("Parent chain:")
|
|
38
|
+
for name in parents:
|
|
39
|
+
info.append(f" ↳ {name}")
|
|
40
|
+
|
|
41
|
+
self.text.setPlainText("\n".join(info))
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kigo-gui-framework
|
|
3
|
-
Version: 3.
|
|
4
|
-
Summary: Kigo has
|
|
3
|
+
Version: 3.2
|
|
4
|
+
Summary: Kigo has Time Freeze Debugging and a Visual Inspector now.
|
|
5
5
|
Author: Anand Kumar
|
|
6
6
|
License: Zlib
|
|
7
7
|
Keywords: gui,qt,pyqt,webengine,opengl,wasm,android,chromeos,framework
|
|
@@ -29,12 +29,18 @@ kigo/android/ossupport.py
|
|
|
29
29
|
kigo/cli/__init__.py
|
|
30
30
|
kigo/cli/doctor.py
|
|
31
31
|
kigo/cli/main.py
|
|
32
|
+
kigo/debug/__init__.py
|
|
33
|
+
kigo/debug/freeze.py
|
|
32
34
|
kigo/ecs/__init__.py
|
|
33
35
|
kigo/ecs/component.py
|
|
34
36
|
kigo/ecs/entity.py
|
|
35
37
|
kigo/ecs/render.py
|
|
36
38
|
kigo/ecs/system.py
|
|
37
39
|
kigo/ecs/world.py
|
|
40
|
+
kigo/inspector/__init__.py
|
|
41
|
+
kigo/inspector/inspector.py
|
|
42
|
+
kigo/inspector/overlay.py
|
|
43
|
+
kigo/inspector/panel.py
|
|
38
44
|
kigo/logging/__init__.py
|
|
39
45
|
kigo/logging/jsonlog.py
|
|
40
46
|
kigo/net/__init__.py
|
|
@@ -5,8 +5,8 @@ build-backend = "setuptools.build_meta"
|
|
|
5
5
|
|
|
6
6
|
[project]
|
|
7
7
|
name = "kigo-gui-framework"
|
|
8
|
-
version = "3.
|
|
9
|
-
description = "Kigo has
|
|
8
|
+
version = "3.2"
|
|
9
|
+
description = "Kigo has Time Freeze Debugging and a Visual Inspector now."
|
|
10
10
|
readme = "README.md"
|
|
11
11
|
license = { text = "Zlib" }
|
|
12
12
|
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
{kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo_gui_framework.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo_gui_framework.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|