kigo-gui-framework 4.2__tar.gz → 4.3__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.
Files changed (125) hide show
  1. {kigo_gui_framework-4.2/kigo_gui_framework.egg-info → kigo_gui_framework-4.3}/PKG-INFO +2 -3
  2. kigo_gui_framework-4.3/kigo/examples/HELLO_WASM.py +33 -0
  3. kigo_gui_framework-4.3/kigo/examples/demo-effects.py +123 -0
  4. kigo_gui_framework-4.3/kigo/examples/ecs_example.py +27 -0
  5. kigo_gui_framework-4.3/kigo/examples/example window.py +21 -0
  6. kigo_gui_framework-4.3/kigo/examples/example_effects.py +43 -0
  7. kigo_gui_framework-4.3/kigo/examples/example_hello_world.py +12 -0
  8. kigo_gui_framework-4.3/kigo/examples/example_networking.py +71 -0
  9. kigo_gui_framework-4.3/kigo/examples/example_physics_basic.py +20 -0
  10. kigo_gui_framework-4.3/kigo/examples/example_touch_ui.py +17 -0
  11. kigo_gui_framework-4.3/kigo/examples/example_ui_effects.py +139 -0
  12. kigo_gui_framework-4.3/kigo/examples/skins_demos.py +61 -0
  13. kigo_gui_framework-4.3/kigo/examples/smoke_example.py +21 -0
  14. kigo_gui_framework-4.3/kigo/examples/testdrive.py +541 -0
  15. kigo_gui_framework-4.3/kigo/examples/touch_example.py +29 -0
  16. kigo_gui_framework-4.3/kigo/foliage/__init__.py +15 -0
  17. kigo_gui_framework-4.3/kigo/foliage/cluster.py +32 -0
  18. kigo_gui_framework-4.3/kigo/foliage/instance.py +23 -0
  19. kigo_gui_framework-4.3/kigo/foliage/lod.py +12 -0
  20. kigo_gui_framework-4.3/kigo/foliage/manager.py +124 -0
  21. kigo_gui_framework-4.3/kigo/foliage/renderer.py +97 -0
  22. kigo_gui_framework-4.3/kigo/foliage/scatter.py +76 -0
  23. kigo_gui_framework-4.3/kigo/foliage/types.py +33 -0
  24. kigo_gui_framework-4.3/kigo/foliage/wind.py +20 -0
  25. kigo_gui_framework-4.3/kigo/render/sdfgi_resources.py +58 -0
  26. kigo_gui_framework-4.3/kigo/render/wgpu_foliage_renderer.py +436 -0
  27. kigo_gui_framework-4.3/kigo/render/wgpu_renderer.py +33 -0
  28. kigo_gui_framework-4.3/kigo/scene/__init__.py +7 -0
  29. kigo_gui_framework-4.3/kigo/scene/foliage_node.py +21 -0
  30. kigo_gui_framework-4.3/kigo/scene/node.py +22 -0
  31. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3/kigo_gui_framework.egg-info}/PKG-INFO +2 -3
  32. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo_gui_framework.egg-info/SOURCES.txt +38 -9
  33. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo_gui_framework.egg-info/requires.txt +0 -1
  34. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/pyproject.toml +2 -3
  35. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/MANIFEST.in +0 -0
  36. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/README.txt +0 -0
  37. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/DEBG/__init__.py +0 -0
  38. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/DEBG/debug_panel.py +0 -0
  39. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/_api.py +0 -0
  40. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/_init_.py +0 -0
  41. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/accelerate.py +0 -0
  42. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/android/__init__.py +0 -0
  43. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/android/info.py +0 -0
  44. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/android/lifecycle.py +0 -0
  45. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/android/ossupport.py +0 -0
  46. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/app.py +0 -0
  47. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/cli/__init__.py +0 -0
  48. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/cli/doctor.py +0 -0
  49. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/cli/main.py +0 -0
  50. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/compile/ast_opt.py +0 -0
  51. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/compile/pipeline.py +0 -0
  52. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/debug/__init__.py +0 -0
  53. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/debug/freeze.py +0 -0
  54. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/ecs/__init__.py +0 -0
  55. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/ecs/component.py +0 -0
  56. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/ecs/entity.py +0 -0
  57. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/ecs/render.py +0 -0
  58. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/ecs/system.py +0 -0
  59. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/ecs/world.py +0 -0
  60. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/fx_gl2d.py +0 -0
  61. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/fx_quick.py +0 -0
  62. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/gl/__init__.py +0 -0
  63. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/gl/ssao.py +0 -0
  64. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/gpu.py +0 -0
  65. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/hiz/hiz.py +0 -0
  66. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/hud.py +0 -0
  67. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/hwaccel.py +0 -0
  68. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/inspector/ECS/ecs_inspector.py +0 -0
  69. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/inspector/ECS/panel.py +0 -0
  70. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/inspector/ECS/tree.py +0 -0
  71. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/inspector/__init__.py +0 -0
  72. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/inspector/inspector.py +0 -0
  73. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/inspector/overlay.py +0 -0
  74. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/inspector/panel.py +0 -0
  75. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/inspector/web/bridge.py +0 -0
  76. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/inspector/web/dom_inspector.py +0 -0
  77. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/logging/__init__.py +0 -0
  78. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/logging/jsonlog.py +0 -0
  79. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/media.py +0 -0
  80. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/meshlets/build.py +0 -0
  81. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/meshlets/runtime.py +0 -0
  82. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/net/__init__.py +0 -0
  83. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/net/qnetwork.py +0 -0
  84. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/nui/node.py +0 -0
  85. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/pbr/material_system.py +0 -0
  86. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/physics/__init__.py +0 -0
  87. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/physics/_native/bindings.py +0 -0
  88. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/physics/_native/physics.dll +0 -0
  89. {kigo_gui_framework-4.2/kigo → kigo_gui_framework-4.3/kigo/physics}/qt/__init__.py +0 -0
  90. {kigo_gui_framework-4.2/kigo → kigo_gui_framework-4.3/kigo/physics}/qt/backend.py +0 -0
  91. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/physics/world.py +0 -0
  92. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/physics.py +0 -0
  93. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/physics_policy.py +0 -0
  94. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/platform.py +0 -0
  95. {kigo_gui_framework-4.2/kigo/render → kigo_gui_framework-4.3/kigo/renderer}/__init__.py +0 -0
  96. {kigo_gui_framework-4.2/kigo/render → kigo_gui_framework-4.3/kigo/renderer}/base/renderer.py +0 -0
  97. {kigo_gui_framework-4.2/kigo/render → kigo_gui_framework-4.3/kigo/renderer}/base/shader.py +0 -0
  98. {kigo_gui_framework-4.2/kigo/render → kigo_gui_framework-4.3/kigo/renderer}/dx/renderer.py +0 -0
  99. {kigo_gui_framework-4.2/kigo/render → kigo_gui_framework-4.3/kigo/renderer}/dx/ssao.py +0 -0
  100. {kigo_gui_framework-4.2/kigo/render → kigo_gui_framework-4.3/kigo/renderer}/select.py +0 -0
  101. {kigo_gui_framework-4.2/kigo/render → kigo_gui_framework-4.3/kigo/renderer}/wgpu/renderer.py +0 -0
  102. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/runtime.py +0 -0
  103. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/sdfgi/radiance.py +0 -0
  104. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/sdfgi/radiance_sample.py +0 -0
  105. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/shader_cache.py +0 -0
  106. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/shader_demo.py +0 -0
  107. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/shim.py +0 -0
  108. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/skins.py +0 -0
  109. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/streaming/loader.py +0 -0
  110. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/streaming/manager.py +0 -0
  111. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/streaming/meshlet_stream.py +0 -0
  112. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/studio/__init__.py +0 -0
  113. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/studio/core.py +0 -0
  114. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/studio/overlay.py +0 -0
  115. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/style.py +0 -0
  116. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/tree.py +0 -0
  117. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/wasm/__init__.py +0 -0
  118. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/wasm/executor.py +0 -0
  119. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/wasm/module.py +0 -0
  120. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo/widgets.py +0 -0
  121. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo_gui_framework.egg-info/dependency_links.txt +0 -0
  122. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo_gui_framework.egg-info/entry_points.txt +0 -0
  123. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/kigo_gui_framework.egg-info/top_level.txt +0 -0
  124. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/setup.cfg +0 -0
  125. {kigo_gui_framework-4.2 → kigo_gui_framework-4.3}/setup.py +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kigo-gui-framework
3
- Version: 4.2
4
- Summary: Kigo now has PBR and font atlas rendering.
3
+ Version: 4.3
4
+ Summary: SDFGI now applies to foliage. Testing took a while this time
5
5
  Author: Anand Kumar
6
6
  License: Zlib
7
7
  Keywords: gui,qt,pyqt,webengine,opengl,wasm,android,chromeos,framework
@@ -15,7 +15,6 @@ Requires-Python: >=3.9
15
15
  Description-Content-Type: text/plain
16
16
  Requires-Dist: PyQt6
17
17
  Requires-Dist: pybullet
18
- Requires-Dist: pybullet-data
19
18
  Requires-Dist: PyQt6-WebEngine
20
19
  Requires-Dist: wgpu-py
21
20
  Requires-Dist: wasmtime
@@ -0,0 +1,33 @@
1
+ from kigo.app import App
2
+ from kigo.accelerate import hot
3
+ from kigo.ui import Window, VBox, Label, Button
4
+
5
+ @hot(wasm="mul42", module="math")
6
+ def heavy(x: int) -> int:
7
+ return x * 42
8
+
9
+ class HelloWasm(App):
10
+ def on_start(self):
11
+ self.main_window = Window(
12
+ title="Hello Kigo (WASM)",
13
+ size=(500, 300)
14
+ )
15
+
16
+ self.result = Label("0")
17
+
18
+ def run():
19
+ value = self.call(heavy, 10)
20
+ self.result.set_text(str(value))
21
+
22
+ self.main_window.set_content(
23
+ VBox(
24
+ Label("Running in WASM mode"),
25
+ self.result,
26
+ Button("Run hot function", on_click=run),
27
+ spacing=16
28
+ )
29
+ )
30
+
31
+ self.main_window.show()
32
+
33
+ HelloWasm(mode="wasm", dev=True).run()
@@ -0,0 +1,123 @@
1
+ # examples/demo_css_media_tree.py
2
+
3
+ from kigo.app import App
4
+ from kigo.widgets import (
5
+ StyleManager,
6
+ KIGO_BASE_CSS,
7
+ KIGO_TOKENS_DARK,
8
+ KIGO_TOKENS_LIGHT,
9
+ TreeView,
10
+ VideoPlayerWidget,
11
+ Card,
12
+ QPushButton,
13
+ )
14
+ from kigo.qt import QtWidgets
15
+
16
+
17
+ def main():
18
+ # --------------------------------------------------
19
+ # Create Kigo app (no physics needed)
20
+ # --------------------------------------------------
21
+ app = App(
22
+ title="Kigo Demo – CSS + Media + Tree",
23
+ size=(1200, 700),
24
+ physics="No",
25
+ )
26
+
27
+ # --------------------------------------------------
28
+ # Apply CSS-like styling (dark theme)
29
+ # --------------------------------------------------
30
+ StyleManager.apply(KIGO_BASE_CSS, tokens=KIGO_TOKENS_DARK)
31
+
32
+ root = QtWidgets.QWidget()
33
+ layout = QtWidgets.QHBoxLayout(root)
34
+ layout.setSpacing(16)
35
+
36
+ # ==================================================
37
+ # LEFT: Tree / Hierarchy
38
+ # ==================================================
39
+ tree_card = Card("Hierarchy / Tree")
40
+ tree = TreeView()
41
+
42
+ tree.set_data({
43
+ "Company": {
44
+ "Engineering": {
45
+ "Frontend": ["UI", "Themes"],
46
+ "Backend": ["API", "Database"],
47
+ },
48
+ "Sales": {
49
+ "APAC": ["India", "SEA"],
50
+ "EMEA": ["EU", "MEA"],
51
+ },
52
+ "Support": {
53
+ "Tier 1": ["Tickets", "Chat"],
54
+ "Tier 2": ["Escalations"],
55
+ }
56
+ }
57
+ })
58
+
59
+ tree_card.add_widget(tree)
60
+ layout.addWidget(tree_card, 1)
61
+
62
+ # ==================================================
63
+ # RIGHT: Media Player
64
+ # ==================================================
65
+ media_card = Card("Video Player")
66
+
67
+ # ⚠️ Change this path to an actual video on your machine
68
+ VIDEO_PATH = r"C:\path\to\your\video.mp4"
69
+
70
+ try:
71
+ video = VideoPlayerWidget(VIDEO_PATH)
72
+ media_card.add_widget(video)
73
+ except ImportError as e:
74
+ # Graceful fallback if QtMultimedia is missing
75
+ error_label = QtWidgets.QLabel(
76
+ "QtMultimedia not available.\n"
77
+ "Install a Qt build with multimedia support."
78
+ )
79
+ error_label.setWordWrap(True)
80
+ media_card.add_widget(error_label)
81
+
82
+ layout.addWidget(media_card, 2)
83
+
84
+ # ==================================================
85
+ # TOP-RIGHT: Theme Toggle (CSS demo)
86
+ # ==================================================
87
+ btn_row = QtWidgets.QHBoxLayout()
88
+ btn_wrap = QtWidgets.QWidget()
89
+ btn_wrap.setLayout(btn_row)
90
+
91
+ dark_btn = QPushButton("Dark Theme")
92
+ light_btn = QPushButton("Light Theme")
93
+
94
+ dark_btn.setProperty("kigoClass", "primary")
95
+ light_btn.setProperty("kigoClass", "danger")
96
+
97
+ def set_dark():
98
+ StyleManager.apply(KIGO_BASE_CSS, tokens=KIGO_TOKENS_DARK)
99
+ StyleManager.refresh_widget(dark_btn)
100
+ StyleManager.refresh_widget(light_btn)
101
+
102
+ def set_light():
103
+ StyleManager.apply(KIGO_BASE_CSS, tokens=KIGO_TOKENS_LIGHT)
104
+ StyleManager.refresh_widget(dark_btn)
105
+ StyleManager.refresh_widget(light_btn)
106
+
107
+ dark_btn.clicked.connect(set_dark)
108
+ light_btn.clicked.connect(set_light)
109
+
110
+ btn_row.addWidget(dark_btn)
111
+ btn_row.addWidget(light_btn)
112
+
113
+ media_card.add_widget(btn_wrap)
114
+
115
+ # --------------------------------------------------
116
+ # Add everything to Kigo App
117
+ # --------------------------------------------------
118
+ app.add_widget(root)
119
+ app.run()
120
+
121
+
122
+ if __name__ == "__main__":
123
+ main()
@@ -0,0 +1,27 @@
1
+ from kigo.ecs import World, Component, System
2
+
3
+ class Position(Component):
4
+ def __init__(self, x=0, y=0):
5
+ self.x = x
6
+ self.y = y
7
+
8
+ class Velocity(Component):
9
+ def __init__(self, vx=0, vy=0):
10
+ self.vx = vx
11
+ self.vy = vy
12
+
13
+ class MovementSystem(System):
14
+ def update(self, world, dt):
15
+ for e in world.get_entities_with(Position, Velocity):
16
+ pos = world.get_component(e, Position)
17
+ vel = world.get_component(e, Velocity)
18
+ pos.x += vel.vx * dt
19
+ pos.y += vel.vy * dt
20
+
21
+ world = World()
22
+ e = world.create_entity()
23
+ world.add_component(e, Position())
24
+ world.add_component(e, Velocity(10, 0))
25
+ world.add_system(MovementSystem())
26
+
27
+ world.update(1.0)
@@ -0,0 +1,21 @@
1
+ # examples/example_build_test.py
2
+
3
+ from kigo.app import App
4
+ from kigo.widgets import TouchButton, Card
5
+ from kigo.qt import qt_info
6
+
7
+ # Print which Qt backend is active
8
+ print("Qt backend info:", qt_info())
9
+
10
+ app = App(
11
+ title="Kigo Build Test",
12
+ physics="No"
13
+ )
14
+
15
+ card = Card("Kigo Build OK ✅")
16
+ btn = TouchButton("Hello from Kigo")
17
+
18
+ card.add_widget(btn)
19
+ app.add_widget(card)
20
+
21
+ app.run()
@@ -0,0 +1,43 @@
1
+
2
+ # examples/example_effects.py
3
+ from kigo import App
4
+ from kigo.widgets import TouchButton, Card
5
+
6
+ physics = "Yes" # global toggle
7
+
8
+ app = App(
9
+ title="Kigo Effects (Bullet-driven)",
10
+ physics=physics,
11
+ physics_fps=120,
12
+ pad_x_px=28,
13
+ pad_y_px=28,
14
+ pixels_per_meter=90.0,
15
+ bullet_gui=False
16
+ )
17
+
18
+ # SPRING
19
+ spring_card = Card("spring (k=50, c=5)")
20
+ spring_card.add_widget(TouchButton("Springy"))
21
+ app.add_widget(spring_card, effect="spring", k=50.0, c=5.0)
22
+
23
+ # BOUNCE
24
+ bounce_card = Card("bounce (freq=1.0, force=14)")
25
+ bounce_card.add_widget(TouchButton("Bouncy"))
26
+ app.add_widget(bounce_card, effect="bounce", freq=1.0, force=14.0)
27
+
28
+ # FALL
29
+ fall_card = Card("fall (drops once)")
30
+ fall_card.add_widget(TouchButton("Falling"))
31
+ app.add_widget(fall_card, effect="fall")
32
+
33
+ # GRAVITY
34
+ gravity_card = Card("gravity (just gravity)")
35
+ gravity_card.add_widget(TouchButton("Gravity"))
36
+ app.add_widget(gravity_card, effect="gravity")
37
+
38
+ # MOVE (lateral)
39
+ move_card = Card("move (axis=x, freq=0.7, force=8)")
40
+ move_card.add_widget(TouchButton("Mover"))
41
+ app.add_widget(move_card, effect="move", axis="x", freq=0.7, force=8.0)
42
+
43
+ app.run()
@@ -0,0 +1,12 @@
1
+
2
+ from kigo import App, TouchButton, Card
3
+
4
+ app = App("Hello Kigo", size=(500, 400))
5
+
6
+ card = Card("Welcome to Kigo")
7
+ btn = TouchButton("Click Me")
8
+
9
+ app.add_widget(card)
10
+ app.add_widget(btn)
11
+
12
+ app.run()
@@ -0,0 +1,71 @@
1
+ from kigo.app import App
2
+ from kigo.qt.backend import QtWidgets, QtCore
3
+ from kigo.net import req
4
+
5
+
6
+ class NetworkDemo(App):
7
+ def on_start(self):
8
+ # Main window
9
+ self.win = QtWidgets.QMainWindow()
10
+ self.win.setWindowTitle("Kigo Networking Demo (req)")
11
+ self.win.resize(800, 520)
12
+
13
+ # UI
14
+ root = QtWidgets.QWidget()
15
+ layout = QtWidgets.QVBoxLayout(root)
16
+
17
+ top = QtWidgets.QHBoxLayout()
18
+ self.url = QtWidgets.QLineEdit()
19
+ self.url.setPlaceholderText("https://example.com")
20
+ self.url.setText("https://example.com")
21
+ self.fetch_btn = QtWidgets.QPushButton("Fetch")
22
+ self.fetch_btn.clicked.connect(self.fetch)
23
+
24
+ top.addWidget(self.url, 1)
25
+ top.addWidget(self.fetch_btn)
26
+
27
+ self.status = QtWidgets.QLabel("Ready.")
28
+ self.status.setStyleSheet("font-weight: bold;")
29
+
30
+ self.out = QtWidgets.QPlainTextEdit()
31
+ self.out.setReadOnly(True)
32
+
33
+ layout.addLayout(top)
34
+ layout.addWidget(self.status)
35
+ layout.addWidget(self.out, 1)
36
+
37
+ self.win.setCentralWidget(root)
38
+ self.win.show()
39
+
40
+ def fetch(self):
41
+ url = self.url.text().strip()
42
+ if not url:
43
+ return
44
+
45
+ # Basic UX feedback
46
+ self.fetch_btn.setEnabled(False)
47
+ self.status.setText("Fetching…")
48
+ QtWidgets.QApplication.processEvents()
49
+
50
+ # Optional: add a simple User-Agent for stricter sites
51
+ headers = {"User-Agent": "KigoNet/1.0 (Qt QNetworkAccessManager)"}
52
+
53
+ r = req(url, headers=headers, timeout_ms=15000)
54
+
55
+ # Display result
56
+ if r.ok:
57
+ self.status.setText(f"OK {r.status} — {r.url}")
58
+ else:
59
+ self.status.setText(f"ERROR {r.status} — {r.error or 'unknown error'}")
60
+
61
+ # Show first part of body to keep UI snappy
62
+ body = r.text
63
+ if len(body) > 20000:
64
+ body = body[:20000] + "\n\n…(truncated)…"
65
+
66
+ self.out.setPlainText(body)
67
+ self.fetch_btn.setEnabled(True)
68
+
69
+
70
+ if __name__ == "__main__":
71
+ NetworkDemo(dev=True).run()
@@ -0,0 +1,20 @@
1
+
2
+ from PyQt6.QtWidgets import QApplication
3
+ from kigo.physics import PhysicsEngine
4
+
5
+ app = QApplication([])
6
+
7
+ engine = PhysicsEngine(use_gui=True, fps=120)
8
+ engine.setup_scene()
9
+
10
+ cube = engine.spawn_object("cube", position=(0, 0, 2), size=0.3)
11
+ sphere = engine.spawn_object("sphere", position=(1, 0, 2), size=0.2)
12
+
13
+ engine.toggle_simulation(True)
14
+
15
+ def on_frame():
16
+ print("Cube height:", engine.get_pos(cube)[2])
17
+
18
+ engine.frame_updated.connect(on_frame)
19
+
20
+ app.exec()
@@ -0,0 +1,17 @@
1
+
2
+ from PyQt6.QtWidgets import QTextEdit
3
+ from kigo import App, TouchButton, Card, TouchScrollArea
4
+
5
+ app = App("Touch UI Demo")
6
+
7
+ editor = QTextEdit("Swipe to scroll...\n" * 50)
8
+ TouchScrollArea(editor)
9
+
10
+ card = Card("Touch Components Demo")
11
+ button = TouchButton("Tap Here")
12
+
13
+ card.add_widget(editor)
14
+ card.add_widget(button)
15
+
16
+ app.add_widget(card)
17
+ app.run()
@@ -0,0 +1,139 @@
1
+
2
+ # examples/example_ui_physics.py
3
+
4
+ import sys
5
+ import time
6
+
7
+ from PyQt6.QtWidgets import QApplication, QWidget, QLabel
8
+ from PyQt6.QtCore import QTimer
9
+ from PyQt6.QtGui import QMouseEvent
10
+
11
+ from kigo.physics import (
12
+ UIPhysicsWorld,
13
+ UIBody,
14
+ SnapConstraint,
15
+ OrbitConstraint,
16
+ )
17
+
18
+ # ------------------------------------------------------------
19
+ # Simple widget wrapper that binds a QLabel to a UIBody
20
+ # ------------------------------------------------------------
21
+
22
+ class PhysicsLabel(QLabel):
23
+ def __init__(self, text: str, body: UIBody, world: UIPhysicsWorld, parent=None):
24
+ super().__init__(text, parent)
25
+ self.body = body
26
+ self.world = world
27
+
28
+ self.setStyleSheet("""
29
+ QLabel {
30
+ background: #2d89ef;
31
+ color: white;
32
+ padding: 8px 14px;
33
+ border-radius: 6px;
34
+ font-size: 14px;
35
+ }
36
+ """)
37
+ self.adjustSize()
38
+ self.setMouseTracking(True)
39
+
40
+ # ---- mouse → physics interaction ----
41
+ def mousePressEvent(self, e: QMouseEvent):
42
+ if e.buttons():
43
+ self.world.drag.pointer_down(self.body, e.globalPosition().x(), e.globalPosition().y())
44
+
45
+ def mouseMoveEvent(self, e: QMouseEvent):
46
+ self.world.drag.pointer_move(e.globalPosition().x(), e.globalPosition().y())
47
+
48
+ def mouseReleaseEvent(self, e: QMouseEvent):
49
+ self.world.drag.pointer_up()
50
+
51
+ def sync_from_body(self):
52
+ self.move(int(self.body.x), int(self.body.y))
53
+
54
+
55
+ # ------------------------------------------------------------
56
+ # Main demo window
57
+ # ------------------------------------------------------------
58
+
59
+ class Demo(QWidget):
60
+ def __init__(self):
61
+ super().__init__()
62
+ self.setWindowTitle("Kigo v1.4 UI Physics Demo")
63
+ self.resize(900, 600)
64
+
65
+ # ---- Physics world ----
66
+ self.world = UIPhysicsWorld()
67
+ self.world.set_bounds(0, 0, self.width(), self.height(), bounce=0.2)
68
+
69
+ # ---- Draggable floating panel ----
70
+ panel_body = UIBody(
71
+ x=120, y=120,
72
+ w=160, h=48,
73
+ damping=0.94
74
+ )
75
+ self.world.add_body(panel_body)
76
+ self.world.add_constraint(
77
+ panel_body,
78
+ SnapConstraint(grid=16, threshold=12, snap_to_centers=True)
79
+ )
80
+
81
+ self.panel = PhysicsLabel("Drag me (snap + throw)", panel_body, self.world, self)
82
+
83
+ # ---- Center anchor (static) ----
84
+ anchor_body = UIBody(
85
+ x=420, y=260,
86
+ w=120, h=40,
87
+ mode="static"
88
+ )
89
+ self.world.add_body(anchor_body)
90
+ self.anchor = PhysicsLabel("Anchor", anchor_body, self.world, self)
91
+ self.anchor.setStyleSheet("QLabel { background: #444; color: #eee; padding: 8px; }")
92
+
93
+ # ---- Orbiting widget ----
94
+ orbiter_body = UIBody(
95
+ x=500, y=260,
96
+ w=110, h=40,
97
+ damping=0.98
98
+ )
99
+ self.world.add_body(orbiter_body)
100
+ self.world.add_constraint(
101
+ orbiter_body,
102
+ OrbitConstraint(
103
+ target=anchor_body,
104
+ radius=140,
105
+ angular_velocity=1.2,
106
+ soft=True
107
+ )
108
+ )
109
+ self.orbiter = PhysicsLabel("Orbiting", orbiter_body, self.world, self)
110
+ self.orbiter.setStyleSheet("QLabel { background: #00a300; color: white; padding: 8px; }")
111
+
112
+ # ---- render timer ----
113
+ self._last = time.perf_counter()
114
+ self.timer = QTimer(self)
115
+ self.timer.timeout.connect(self.tick)
116
+ self.timer.start(16) # ~60 FPS
117
+
118
+ def tick(self):
119
+ now = time.perf_counter()
120
+ dt = now - self._last
121
+ self._last = now
122
+
123
+ self.world.step(dt)
124
+
125
+ # sync widgets from physics bodies
126
+ self.panel.sync_from_body()
127
+ self.anchor.sync_from_body()
128
+ self.orbiter.sync_from_body()
129
+
130
+
131
+ # ------------------------------------------------------------
132
+ # Run
133
+ # ------------------------------------------------------------
134
+
135
+ if __name__ == "__main__":
136
+ app = QApplication(sys.argv)
137
+ win = Demo()
138
+ win.show()
139
+ sys.exit(app.exec())
@@ -0,0 +1,61 @@
1
+ # examples/skins_demo.py
2
+
3
+ from kigo.app import App
4
+ from kigo.widgets import SkinManager, Card, TreeView, QPushButton
5
+ from kigo.qt import QtWidgets
6
+
7
+
8
+ def main():
9
+ app = App(
10
+ title="Kigo v1.8 – Skins Demo",
11
+ size=(1100, 650),
12
+ physics="No",
13
+ )
14
+
15
+ # Start with Neon
16
+ SkinManager.apply("neon", window=app.root)
17
+
18
+ root = QtWidgets.QWidget()
19
+ layout = QtWidgets.QHBoxLayout(root)
20
+ layout.setSpacing(16)
21
+
22
+ # ---------------------------------------
23
+ # Left: Tree (shows skin styling clearly)
24
+ # ---------------------------------------
25
+ tree_card = Card("Project Tree")
26
+ tree = TreeView()
27
+ tree.set_data({
28
+ "Kigo": {
29
+ "v1.8": ["Neon", "Retro", "Glass"],
30
+ "Widgets": ["Tree", "Media", "Cards"],
31
+ "Styling": ["CSS", "Skins", "Tokens"],
32
+ }
33
+ })
34
+ tree_card.add_widget(tree)
35
+ layout.addWidget(tree_card, 2)
36
+
37
+ # ---------------------------------------
38
+ # Right: Skin Switcher
39
+ # ---------------------------------------
40
+ skin_card = Card("Skins")
41
+
42
+ btn_neon = QPushButton("Neon")
43
+ btn_retro = QPushButton("Retro")
44
+ btn_glass = QPushButton("Glass")
45
+
46
+ btn_neon.clicked.connect(lambda: SkinManager.apply("neon", window=app.root))
47
+ btn_retro.clicked.connect(lambda: SkinManager.apply("retro", window=app.root))
48
+ btn_glass.clicked.connect(lambda: SkinManager.apply("glass", window=app.root))
49
+
50
+ skin_card.add_widget(btn_neon)
51
+ skin_card.add_widget(btn_retro)
52
+ skin_card.add_widget(btn_glass)
53
+
54
+ layout.addWidget(skin_card, 1)
55
+
56
+ app.add_widget(root)
57
+ app.run()
58
+
59
+
60
+ if __name__ == "__main__":
61
+ main()
@@ -0,0 +1,21 @@
1
+ from kigo.app import App
2
+ from kigo.ui import Window
3
+ from kigo.gpu import ShaderView
4
+
5
+ shader = smoke # 🔁 swap fire / water / smoke
6
+
7
+ class SmokeDemo(App):
8
+ def on_start(self):
9
+ self.window = Window(title="Kigo Smoke Shader", size=(600, 400))
10
+ self.view = ShaderView(fragment_shader=shader)
11
+ self.window.set_content(self.view)
12
+ self.window.show()
13
+
14
+ self.t = 0.0
15
+ self.schedule(self.update)
16
+
17
+ def update(self, dt):
18
+ self.t += dt
19
+ self.view.set_uniform("time", self.t)
20
+
21
+ SmokeDemo(dev=True).run()