meltygui 0.1.0__py3-none-any.whl

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 (372) hide show
  1. meltygui/__init__.py +107 -0
  2. meltygui/accounts/__init__.py +0 -0
  3. meltygui/accounts/internet_accounts.py +1355 -0
  4. meltygui/chat/__init__.py +91 -0
  5. meltygui/chat/activity.py +75 -0
  6. meltygui/chat/backends.py +36 -0
  7. meltygui/chat/chat_interface.py +732 -0
  8. meltygui/chat/chat_proxy.py +352 -0
  9. meltygui/chat/codex_proxy.py +592 -0
  10. meltygui/chat/codex_settings.py +100 -0
  11. meltygui/chat/codex_transport.py +60 -0
  12. meltygui/chat/command_parser.py +204 -0
  13. meltygui/chat/images.py +227 -0
  14. meltygui/chat/messages.py +417 -0
  15. meltygui/chat/metadata.py +139 -0
  16. meltygui/chat/writer_locks.py +64 -0
  17. meltygui/code/__init__.py +0 -0
  18. meltygui/code/basic_converters.py +533 -0
  19. meltygui/code/chain_converters.py +2111 -0
  20. meltygui/code/code_checks.py +2209 -0
  21. meltygui/code/core_syntax.py +1430 -0
  22. meltygui/code/file_converters.py +1933 -0
  23. meltygui/code/fileref.py +702 -0
  24. meltygui/code/hotswap_guard.py +144 -0
  25. meltygui/code/libcst_conversion.py +9724 -0
  26. meltygui/code/live_instrument.py +392 -0
  27. meltygui/code/live_view.py +2490 -0
  28. meltygui/code/melty_scan.py +2684 -0
  29. meltygui/code/new_codecs.py +1255 -0
  30. meltygui/code/new_converters.py +3017 -0
  31. meltygui/code/project_code.py +278 -0
  32. meltygui/code/source_context.py +63 -0
  33. meltygui/code/symbol_roster.py +1588 -0
  34. meltygui/code/syntax_check.py +34 -0
  35. meltygui/code/syntax_check_worker.py +114 -0
  36. meltygui/completion/__init__.py +0 -0
  37. meltygui/completion/fim.py +1232 -0
  38. meltygui/completion/fim_context.py +481 -0
  39. meltygui/completion/providers/__init__.py +0 -0
  40. meltygui/completion/providers/anthropic_oauth.py +446 -0
  41. meltygui/completion/providers/anthropic_requests.py +69 -0
  42. meltygui/completion/providers/claude.py +203 -0
  43. meltygui/completion/providers/claude_usage.py +499 -0
  44. meltygui/completion/providers/codex_accounts.py +180 -0
  45. meltygui/completion/providers/copilot.py +617 -0
  46. meltygui/completion/providers/oauth_popup.py +220 -0
  47. meltygui/completion/providers/ollama.py +320 -0
  48. meltygui/completion/providers/profiles.py +23 -0
  49. meltygui/core/README.md +88 -0
  50. meltygui/core/__init__.py +1 -0
  51. meltygui/core/automation/__init__.py +1 -0
  52. meltygui/core/automation/action_core.py +153 -0
  53. meltygui/core/automation/collection_action.py +45 -0
  54. meltygui/core/automation/mcp_eval.py +167 -0
  55. meltygui/core/automation/mcp_hotswap.py +107 -0
  56. meltygui/core/automation/mcp_query.py +552 -0
  57. meltygui/core/automation/mcp_server.py +657 -0
  58. meltygui/core/automation/orchestration_core.py +2636 -0
  59. meltygui/core/automation/query_core.py +124 -0
  60. meltygui/core/automation/search_core.py +26 -0
  61. meltygui/core/automation/selector_core.py +340 -0
  62. meltygui/core/automation/value_core.py +1752 -0
  63. meltygui/core/cache/__init__.py +1 -0
  64. meltygui/core/cache/cache_diagnostics.py +0 -0
  65. meltygui/core/cache/invalidation_decoration.py +153 -0
  66. meltygui/core/cache/invalidation_tracker.py +43 -0
  67. meltygui/core/cache/tile_cache.py +5968 -0
  68. meltygui/core/conversion/__init__.py +1 -0
  69. meltygui/core/conversion/bubbling.py +599 -0
  70. meltygui/core/conversion/cache_tree.py +188 -0
  71. meltygui/core/conversion/chain.py +113 -0
  72. meltygui/core/conversion/converter_register.py +145 -0
  73. meltygui/core/conversion/data_decoration.py +67 -0
  74. meltygui/core/conversion/dict_conversion.py +1815 -0
  75. meltygui/core/conversion/dict_conversion_util.py +177 -0
  76. meltygui/core/conversion/dynamic_obj.py +89 -0
  77. meltygui/core/conversion/graph_compare.py +183 -0
  78. meltygui/core/conversion/load_save_v2.py +1032 -0
  79. meltygui/core/conversion/missing_saved_class.py +39 -0
  80. meltygui/core/conversion/path_finder.py +606 -0
  81. meltygui/core/conversion/render_host.py +1083 -0
  82. meltygui/core/core_render.py +6537 -0
  83. meltygui/core/definition_hotswap.py +231 -0
  84. meltygui/core/diagnostics/__init__.py +1 -0
  85. meltygui/core/diagnostics/attribute_churn.py +38 -0
  86. meltygui/core/diagnostics/fps_counter.py +39 -0
  87. meltygui/core/diagnostics/gpu_frame_timer.py +103 -0
  88. meltygui/core/diagnostics/inspection_core.py +169 -0
  89. meltygui/core/diagnostics/monitor_core.py +105 -0
  90. meltygui/core/diagnostics/notifications.py +706 -0
  91. meltygui/core/diagnostics/perf_trace.py +281 -0
  92. meltygui/core/diagnostics/profile_decoration.py +88 -0
  93. meltygui/core/diagnostics/resize_trace.py +62 -0
  94. meltygui/core/diagnostics/screenshot_core.py +247 -0
  95. meltygui/core/diagnostics/session_status.py +98 -0
  96. meltygui/core/diagnostics/trace_core.py +445 -0
  97. meltygui/core/files/__init__.py +1 -0
  98. meltygui/core/files/file_core.py +208 -0
  99. meltygui/core/files/file_explorer_core.py +104 -0
  100. meltygui/core/files/file_tree_core.py +198 -0
  101. meltygui/core/files/file_watch_core.py +43 -0
  102. meltygui/core/files/import_graph_core.py +43 -0
  103. meltygui/core/files/metadata_core.py +51 -0
  104. meltygui/core/graphics/__init__.py +1 -0
  105. meltygui/core/graphics/cuda_context_core.py +166 -0
  106. meltygui/core/graphics/cuda_interop_core.py +136 -0
  107. meltygui/core/graphics/cuda_kernel_core.py +91 -0
  108. meltygui/core/graphics/framebuffer_recorder.py +337 -0
  109. meltygui/core/graphics/gl_state.py +658 -0
  110. meltygui/core/graphics/lut_core.py +52 -0
  111. meltygui/core/graphics/overlay_renderer.py +984 -0
  112. meltygui/core/graphics/scene_target.py +180 -0
  113. meltygui/core/graphics/screenshot.py +439 -0
  114. meltygui/core/graphics/shader_func.py +478 -0
  115. meltygui/core/graphics/tensor_core.py +45 -0
  116. meltygui/core/graphics/text_texture.py +329 -0
  117. meltygui/core/graphics/wayland_color.py +635 -0
  118. meltygui/core/input/__init__.py +1 -0
  119. meltygui/core/input/collision.py +165 -0
  120. meltygui/core/input/drag_drop_core.py +1525 -0
  121. meltygui/core/input/hypr_left_drag.py +323 -0
  122. meltygui/core/input/input_core.py +245 -0
  123. meltygui/core/input/input_handler.py +1101 -0
  124. meltygui/core/input/mouse_cursor.py +355 -0
  125. meltygui/core/input/pynput_backend.py +1054 -0
  126. meltygui/core/input/space_mouse.py +338 -0
  127. meltygui/core/input/touchpad_backend.py +393 -0
  128. meltygui/core/input/view_selection.py +177 -0
  129. meltygui/core/layout/__init__.py +1 -0
  130. meltygui/core/layout/column_core.py +2153 -0
  131. meltygui/core/layout/cursor_core.py +161 -0
  132. meltygui/core/layout/dropdown_core.py +278 -0
  133. meltygui/core/layout/edge_constraints.py +155 -0
  134. meltygui/core/layout/grid_core.py +117 -0
  135. meltygui/core/layout/header_core.py +23 -0
  136. meltygui/core/layout/header_runtime.py +67 -0
  137. meltygui/core/layout/layout_core.py +87 -0
  138. meltygui/core/layout/tile_manager_core.py +591 -0
  139. meltygui/core/melty.py +6726 -0
  140. meltygui/core/module_map.json +896 -0
  141. meltygui/core/module_names.py +19 -0
  142. meltygui/core/rendering/__init__.py +1 -0
  143. meltygui/core/rendering/core_decoration.py +431 -0
  144. meltygui/core/rendering/core_render_helpers.py +328 -0
  145. meltygui/core/rendering/func_metadata.py +398 -0
  146. meltygui/core/rendering/mode.py +818 -0
  147. meltygui/core/rendering/mode_defaults.py +41 -0
  148. meltygui/core/rendering/modes.py +136 -0
  149. meltygui/core/rendering/parameter_core.py +1665 -0
  150. meltygui/core/rendering/render_dispatch.py +1891 -0
  151. meltygui/core/rendering/render_funcs.py +273 -0
  152. meltygui/core/rendering/shaped.py +312 -0
  153. meltygui/core/rendering/window_decoration.py +25 -0
  154. meltygui/core/runtime/__init__.py +1 -0
  155. meltygui/core/runtime/app.py +735 -0
  156. meltygui/core/runtime/app_session.py +140 -0
  157. meltygui/core/runtime/background.py +564 -0
  158. meltygui/core/runtime/extensions.py +53 -0
  159. meltygui/core/runtime/gc_manager.py +1163 -0
  160. meltygui/core/runtime/lifecycle.py +21 -0
  161. meltygui/core/runtime/paths.py +27 -0
  162. meltygui/core/runtime/settings.py +14 -0
  163. meltygui/core/runtime/singleton.py +16 -0
  164. meltygui/core/runtime/thread_safe_bool.py +24 -0
  165. meltygui/core/runtime/thread_signal.py +30 -0
  166. meltygui/core/runtime/toggles.py +3115 -0
  167. meltygui/core/services/__init__.py +1 -0
  168. meltygui/core/services/account_core.py +10 -0
  169. meltygui/core/services/chat_core.py +19 -0
  170. meltygui/core/services/claude_terminal_core.py +346 -0
  171. meltygui/core/services/terminal_core.py +458 -0
  172. meltygui/core/services/terminal_runtime.py +78 -0
  173. meltygui/core/styling/__init__.py +1 -0
  174. meltygui/core/styling/color_core.py +46 -0
  175. meltygui/core/styling/fonts.py +639 -0
  176. meltygui/core/styling/global_style.py +338 -0
  177. meltygui/core/styling/style.py +198 -0
  178. meltygui/core/styling/style_core.py +522 -0
  179. meltygui/core/styling/warm_start.py +149 -0
  180. meltygui/core/windowing/__init__.py +1 -0
  181. meltygui/core/windowing/backends/PYIMGUI_LICENSE +28 -0
  182. meltygui/core/windowing/backends/__init__.py +1 -0
  183. meltygui/core/windowing/backends/imgui_renderer.py +138 -0
  184. meltygui/core/windowing/backends/native_wayland.py +850 -0
  185. meltygui/core/windowing/backends/protocols/xdg-decoration-unstable-v1.xml +156 -0
  186. meltygui/core/windowing/backends/protocols/xdg-shell.xml +1420 -0
  187. meltygui/core/windowing/backends/wayland_protocol.py +101 -0
  188. meltygui/core/windowing/dock_core.py +182 -0
  189. meltygui/core/windowing/frame_geometry.py +42 -0
  190. meltygui/core/windowing/geometry_feed.py +864 -0
  191. meltygui/core/windowing/glfw_utils.py +1343 -0
  192. meltygui/core/windowing/os_frame.py +1552 -0
  193. meltygui/core/windowing/surface.py +643 -0
  194. meltygui/core/windowing/titlebar.py +1560 -0
  195. meltygui/core/windowing/titlebar_buttons.py +281 -0
  196. meltygui/core/windowing/wayland_move.py +932 -0
  197. meltygui/core/windowing/window_api.py +62 -0
  198. meltygui/core/windowing/window_constants.py +339 -0
  199. meltygui/core/windowing/window_visibility.py +162 -0
  200. meltygui/debug/__init__.py +0 -0
  201. meltygui/debug/app_view_utils.py +9 -0
  202. meltygui/editor/__init__.py +0 -0
  203. meltygui/editor/bash_syntax.py +30 -0
  204. meltygui/editor/code_line_fast.py +152 -0
  205. meltygui/editor/diff.py +139 -0
  206. meltygui/editor/external_changes.py +159 -0
  207. meltygui/editor/file_header.py +41 -0
  208. meltygui/editor/live_usage.py +169 -0
  209. meltygui/editor/live_view_views.py +1803 -0
  210. meltygui/editor/pending_save.py +1351 -0
  211. meltygui/editor/roster_tints.py +547 -0
  212. meltygui/editor/source_preview.py +16 -0
  213. meltygui/editor/source_tools.py +10 -0
  214. meltygui/editor/source_ui.py +70 -0
  215. meltygui/editor/spell_check.py +77 -0
  216. meltygui/editor/text_editor.py +9076 -0
  217. meltygui/editor/usage_picker.py +538 -0
  218. meltygui/events/__init__.py +0 -0
  219. meltygui/events/example.py +118 -0
  220. meltygui/examples/__init__.py +0 -0
  221. meltygui/examples/columns_demo.py +33 -0
  222. meltygui/examples/columns_window_demo.py +60 -0
  223. meltygui/examples/context_menu_demo.py +24 -0
  224. meltygui/examples/context_menu_window_demo.py +49 -0
  225. meltygui/examples/gui_playground.py +127 -0
  226. meltygui/examples/live_view_playground.py +256 -0
  227. meltygui/examples/lora.py +43 -0
  228. meltygui/examples/lora_data.py +59 -0
  229. meltygui/examples/lora_policies.py +67 -0
  230. meltygui/examples/mode_demo.py +49 -0
  231. meltygui/examples/modifies_demo.py +119 -0
  232. meltygui/examples/scalar_policies.py +60 -0
  233. meltygui/examples/style_layouts.py +149 -0
  234. meltygui/examples/tile_manager_demo.py +74 -0
  235. meltygui/examples/tint_demo.py +160 -0
  236. meltygui/examples/tint_functions.py +56 -0
  237. meltygui/examples/trace_demo.py +88 -0
  238. meltygui/examples/two_windows.py +36 -0
  239. meltygui/files/__init__.py +0 -0
  240. meltygui/files/fast_file_explorer.py +439 -0
  241. meltygui/gnome_extension/lsd-window-geometry@latent-descent/extension.js +237 -0
  242. meltygui/gnome_extension/lsd-window-geometry@latent-descent/lsd-window-geometry@latent-descent.iml +9 -0
  243. meltygui/gnome_extension/lsd-window-geometry@latent-descent/metadata.json +7 -0
  244. meltygui/graphics/__init__.py +6 -0
  245. meltygui/graphics/base.py +85 -0
  246. meltygui/graphics/examples.py +507 -0
  247. meltygui/graphics/executor.py +520 -0
  248. meltygui/graphics/filter.py +667 -0
  249. meltygui/graphics/filter.pyi +856 -0
  250. meltygui/graphics/generate_stubs.py +22 -0
  251. meltygui/graphics/registry.py +203 -0
  252. meltygui/graphics/shader_compiler.py +155 -0
  253. meltygui/graphics/shaders.py +1302 -0
  254. meltygui/graphics/stub_generator.py +250 -0
  255. meltygui/graphics/texture_manager.py +170 -0
  256. meltygui/graphics/texture_min_max.py +295 -0
  257. meltygui/hdr_color.py +757 -0
  258. meltygui/image_load.py +308 -0
  259. meltygui/model/__init__.py +1 -0
  260. meltygui/model/account_model.py +142 -0
  261. meltygui/model/camera_model.py +159 -0
  262. meltygui/model/chat_model.py +86 -0
  263. meltygui/model/code_model.py +62 -0
  264. meltygui/model/code_proxy_model.py +876 -0
  265. meltygui/model/collection_model.py +41 -0
  266. meltygui/model/color_model.py +127 -0
  267. meltygui/model/cuda_tensor_model.py +36 -0
  268. meltygui/model/cuda_texture_model.py +149 -0
  269. meltygui/model/dropdown_model.py +137 -0
  270. meltygui/model/file_metadata_model.py +73 -0
  271. meltygui/model/file_model.py +289 -0
  272. meltygui/model/format_model.py +390 -0
  273. meltygui/model/graph_model.py +98 -0
  274. meltygui/model/icon_model.py +1024 -0
  275. meltygui/model/import_graph_model.py +468 -0
  276. meltygui/model/layout_model.py +15 -0
  277. meltygui/model/lut_model.py +266 -0
  278. meltygui/model/search_model.py +173 -0
  279. meltygui/model/tensor_model.py +402 -0
  280. meltygui/model/terminal_model.py +329 -0
  281. meltygui/model/texture_model.py +146 -0
  282. meltygui/model/tile_model.py +24 -0
  283. meltygui/model/trace_model.py +198 -0
  284. meltygui/model/trace_report_model.py +146 -0
  285. meltygui/models/__init__.py +0 -0
  286. meltygui/models/file_meta.py +613 -0
  287. meltygui/models/function_console.py +184 -0
  288. meltygui/models/orchestration.py +48 -0
  289. meltygui/pbr.py +1576 -0
  290. meltygui/png_unfilter.c +49 -0
  291. meltygui/resources/JetBrainsMono-Regular.ttf +0 -0
  292. meltygui/resources/THIRD_PARTY_NOTICES.md +21 -0
  293. meltygui/resources/dejavu/DejaVuSans-Bold.ttf +0 -0
  294. meltygui/resources/dejavu/DejaVuSans-ExtraLight.ttf +0 -0
  295. meltygui/resources/dejavu/DejaVuSans.ttf +0 -0
  296. meltygui/resources/dejavu/LICENSE.txt +78 -0
  297. meltygui/resources/fontawesome-LICENSE.txt +121 -0
  298. meltygui/resources/fontawesome-webfont.ttf +0 -0
  299. meltygui/resources/hdri/studio_small_09_1k.hdr +0 -0
  300. meltygui/resources/jetbrains-weights/JetBrainsMono-Bold.ttf +0 -0
  301. meltygui/resources/jetbrains-weights/JetBrainsMono-ExtraBold.ttf +0 -0
  302. meltygui/resources/jetbrains-weights/JetBrainsMono-ExtraLight.ttf +0 -0
  303. meltygui/resources/jetbrains-weights/JetBrainsMono-Light.ttf +0 -0
  304. meltygui/resources/jetbrains-weights/JetBrainsMono-Medium.ttf +0 -0
  305. meltygui/resources/jetbrains-weights/JetBrainsMono-SemiBold.ttf +0 -0
  306. meltygui/resources/jetbrains-weights/JetBrainsMono-Thin.ttf +0 -0
  307. meltygui/resources/jetbrains-weights/OFL.txt +93 -0
  308. meltygui/resources/jetbrains-weights/README.md +2 -0
  309. meltygui/state/__init__.py +0 -0
  310. meltygui/state/account_state.py +22 -0
  311. meltygui/state/animation_state.py +97 -0
  312. meltygui/state/annotation_state.py +22 -0
  313. meltygui/state/chat_state.py +36 -0
  314. meltygui/state/code_state.py +10 -0
  315. meltygui/state/core_enums.py +59 -0
  316. meltygui/state/core_markers.py +115 -0
  317. meltygui/state/core_undo.py +1075 -0
  318. meltygui/state/file_state.py +75 -0
  319. meltygui/state/graph_state.py +26 -0
  320. meltygui/state/inspection_state.py +47 -0
  321. meltygui/state/menu_state.py +10 -0
  322. meltygui/state/model_enums.py +11 -0
  323. meltygui/state/new_core_model.py +2394 -0
  324. meltygui/state/orchestration_state.py +14 -0
  325. meltygui/state/query_state.py +24 -0
  326. meltygui/state/tensor_state.py +10 -0
  327. meltygui/state/terminal_state.py +23 -0
  328. meltygui/state/trace_state.py +32 -0
  329. meltygui/state/voxel_state.py +12 -0
  330. meltygui/text_index.py +816 -0
  331. meltygui/utils/__init__.py +0 -0
  332. meltygui/utils/jump_to_code.py +344 -0
  333. meltygui/utils/pkl_inspect.py +90 -0
  334. meltygui/utils/render_utils.py +1419 -0
  335. meltygui/view/__init__.py +1 -0
  336. meltygui/view/account_view.py +524 -0
  337. meltygui/view/action_view.py +73 -0
  338. meltygui/view/chat_decoration_view.py +112 -0
  339. meltygui/view/chat_view.py +1703 -0
  340. meltygui/view/code_view.py +2677 -0
  341. meltygui/view/collection_view.py +1185 -0
  342. meltygui/view/color_view.py +824 -0
  343. meltygui/view/control_view.py +559 -0
  344. meltygui/view/decoration_view.py +439 -0
  345. meltygui/view/diagnostic_view.py +177 -0
  346. meltygui/view/dropdown_view.py +1082 -0
  347. meltygui/view/file_view.py +1599 -0
  348. meltygui/view/graph_cuda_view.py +105 -0
  349. meltygui/view/graph_view.py +882 -0
  350. meltygui/view/header_view.py +848 -0
  351. meltygui/view/input_view.py +238 -0
  352. meltygui/view/inspection_view.py +1783 -0
  353. meltygui/view/layout_view.py +596 -0
  354. meltygui/view/lut_view.py +45 -0
  355. meltygui/view/menu_view.py +212 -0
  356. meltygui/view/orchestration_view.py +658 -0
  357. meltygui/view/query_view.py +118 -0
  358. meltygui/view/search_view.py +342 -0
  359. meltygui/view/tab_view.py +258 -0
  360. meltygui/view/tensor_view.py +430 -0
  361. meltygui/view/terminal_view.py +355 -0
  362. meltygui/view/text_view.py +8031 -0
  363. meltygui/view/texture_view.py +480 -0
  364. meltygui/view/tile_view.py +38 -0
  365. meltygui/view/trace_view.py +923 -0
  366. meltygui/view/voxel_cuda_view.py +824 -0
  367. meltygui/view/voxel_view.py +1860 -0
  368. meltygui/view/window_view.py +111 -0
  369. meltygui-0.1.0.dist-info/METADATA +143 -0
  370. meltygui-0.1.0.dist-info/RECORD +372 -0
  371. meltygui-0.1.0.dist-info/WHEEL +4 -0
  372. meltygui-0.1.0.dist-info/licenses/LICENSE +202 -0
@@ -0,0 +1,117 @@
1
+ import numpy as np
2
+ from OpenGL.GL import *
3
+
4
+ from meltygui.core.styling.global_style import BackgroundSettings
5
+
6
+
7
+ class GridDotsBackground:
8
+ def __init__(self, dot_spacing=15.0, dot_size=1.0, emphasis_size=1.2, dot_color=(0.2, 0.23, 0.3, 1.0),
9
+ bg_color=(0.05, 0.055, 0.07, 1.0)):
10
+ self.dot_spacing = dot_spacing
11
+ self.dot_size = dot_size
12
+ self.emphasis_size = emphasis_size
13
+ self.dot_color = dot_color
14
+ self.bg_color = bg_color
15
+ self.root = None
16
+
17
+ vertex_shader = """
18
+ #version 330 core
19
+ layout (location = 0) in vec2 position;
20
+ uniform vec2 resolution;
21
+ void main() {
22
+ gl_Position = vec4(position, 0.0, 1.0);
23
+ }
24
+ """
25
+
26
+ fragment_shader = """
27
+ #version 330 core
28
+ out vec4 FragColor;
29
+ uniform vec2 resolution;
30
+ uniform float dotSpacing;
31
+ uniform float dotSize;
32
+ uniform float emphasisSize;
33
+ uniform vec4 dotColor;
34
+ uniform vec4 bgColor;
35
+
36
+ void main() {
37
+ vec2 pos = gl_FragCoord.xy;
38
+ vec2 grid = mod(pos, dotSpacing * 5.0);
39
+ vec2 smallGrid = mod(pos, dotSpacing);
40
+
41
+ // Check if this is an emphasis point (every 5th dot)
42
+ bool isEmphasis = grid.x < dotSpacing && grid.y < dotSpacing;
43
+ float currentDotSize = isEmphasis ? dotSize * emphasisSize : dotSize;
44
+
45
+ float dist = length(smallGrid - dotSpacing/2.0);
46
+ float dot = 1.0 - smoothstep(currentDotSize - 1.0, currentDotSize, dist);
47
+ vec4 bg = vec4(0.05, 0.055, 0.07, 1.0);
48
+
49
+ FragColor = mix(bgColor, dotColor, dot);
50
+ }
51
+ """
52
+ self.shader = self.create_shader_program(vertex_shader, fragment_shader)
53
+
54
+ vertices = np.array([
55
+ -1.0, -1.0,
56
+ 1.0, -1.0,
57
+ 1.0, 1.0,
58
+ -1.0, 1.0
59
+ ], dtype=np.float32)
60
+
61
+ self.vao = glGenVertexArrays(1)
62
+ self.vbo = glGenBuffers(1)
63
+
64
+ glBindVertexArray(self.vao)
65
+ glBindBuffer(GL_ARRAY_BUFFER, self.vbo)
66
+ glBufferData(GL_ARRAY_BUFFER, vertices.nbytes, vertices, GL_STATIC_DRAW)
67
+ glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, None)
68
+ glEnableVertexAttribArray(0)
69
+
70
+ def set_root(self, root):
71
+ self.root = root
72
+
73
+ def create_shader_program(self, vertex_src, fragment_src):
74
+ vertex_shader = glCreateShader(GL_VERTEX_SHADER)
75
+ glShaderSource(vertex_shader, vertex_src)
76
+ glCompileShader(vertex_shader)
77
+
78
+ fragment_shader = glCreateShader(GL_FRAGMENT_SHADER)
79
+ glShaderSource(fragment_shader, fragment_src)
80
+ glCompileShader(fragment_shader)
81
+
82
+ program = glCreateProgram()
83
+ glAttachShader(program, vertex_shader)
84
+ glAttachShader(program, fragment_shader)
85
+ glLinkProgram(program)
86
+
87
+ glDeleteShader(vertex_shader)
88
+ glDeleteShader(fragment_shader)
89
+
90
+ return program
91
+
92
+ def render(self, width, height):
93
+ if self.root is not None:
94
+ glUseProgram(self.shader)
95
+ glUniform2f(glGetUniformLocation(self.shader, "resolution"), width, height)
96
+ glUniform1f(glGetUniformLocation(self.shader, "dotSpacing"), BackgroundSettings.dot_spacing)
97
+ glUniform1f(glGetUniformLocation(self.shader, "dotSize"), BackgroundSettings.dot_size)
98
+ glUniform1f(glGetUniformLocation(self.shader, "emphasisSize"), BackgroundSettings.emphasis_size)
99
+ glUniform4f(glGetUniformLocation(self.shader, "dotColor"), *BackgroundSettings.dot_color)
100
+ glUniform4f(glGetUniformLocation(self.shader, "bgColor"), *BackgroundSettings.bg_color)
101
+
102
+ glBindVertexArray(self.vao)
103
+ glDrawArrays(GL_TRIANGLE_FAN, 0, 4)
104
+ else:
105
+
106
+ glUseProgram(self.shader)
107
+ glUniform2f(glGetUniformLocation(self.shader, "resolution"), width, height)
108
+ glUniform1f(glGetUniformLocation(self.shader, "dotSpacing"), self.dot_spacing)
109
+ glUniform1f(glGetUniformLocation(self.shader, "dotSize"), self.dot_size)
110
+ glUniform1f(glGetUniformLocation(self.shader, "emphasisSize"), self.emphasis_size)
111
+ glUniform4f(glGetUniformLocation(self.shader, "dotColor"), *self.dot_color)
112
+ glUniform4f(glGetUniformLocation(self.shader, "bgColor"), *self.bg_color)
113
+
114
+ # vec4 bgColor = vec4(0.05, 0.055, 0.07, 1.0);
115
+
116
+ glBindVertexArray(self.vao)
117
+ glDrawArrays(GL_TRIANGLE_FAN, 0, 4)
@@ -0,0 +1,23 @@
1
+ """Header core functions and supporting definitions."""
2
+
3
+
4
+
5
+ def _jump_to_view_source(draw_state):
6
+ """Open the code editor on the def of the function that renders
7
+ `draw_state` — the raw function under the @render_func wrapper, resolved
8
+ the way the context menu's inputs tab does (`inspect.unwrap`). A view
9
+ with no source file (a lambda, a C function) does nothing."""
10
+ import inspect
11
+ from pathlib import Path
12
+ view_fn = getattr(draw_state, "_view_func", None)
13
+ if view_fn is None:
14
+ return
15
+ try:
16
+ view_fn = inspect.unwrap(view_fn)
17
+ fn_file = inspect.getsourcefile(view_fn)
18
+ except (TypeError, ValueError):
19
+ return
20
+ if not fn_file:
21
+ return
22
+ from meltygui.core.runtime.extensions import jump_to_symbol as _jump_to_symbol_def
23
+ _jump_to_symbol_def(view_fn, Path(fn_file))
@@ -0,0 +1,67 @@
1
+ import colorsys
2
+ import os
3
+ import sys
4
+ import types
5
+ from types import NoneType
6
+ from typing import MutableMapping
7
+
8
+ import meltygui.core.windowing.window_api as glfw
9
+ import meltygui_imgui as imgui
10
+ from meltygui.hdr_color import pack_color
11
+ from meltygui.core.styling.style import Style
12
+ from meltygui_imgui.core import _DrawList
13
+
14
+ import meltygui.core.input.mouse_cursor as mouse_cursor
15
+ from meltygui.core.styling.global_style import GlobalStyle
16
+ from meltygui.core.melty import Melty
17
+ from meltygui.core.melty import add_to_collection
18
+ from meltygui.core.rendering.render_funcs import RenderFuncs
19
+ from meltygui.core.runtime.toggles import Toggles
20
+ from meltygui.core.runtime.toggles import Tint
21
+ from meltygui.utils.render_utils import push_style_var
22
+ from meltygui.utils.render_utils import push_style_color
23
+ from meltygui.utils.render_utils import pop_style_color
24
+ from meltygui.utils.render_utils import pop_style_var
25
+ from meltygui.core.windowing.glfw_utils import request_render
26
+ from meltygui.core.windowing.glfw_utils import print_stack_trace
27
+ from meltygui.core.conversion.bubbling import _BubblingDict
28
+ from meltygui.core.layout.cursor_core import same_line
29
+ from meltygui.core.cache.tile_cache import add_shadow
30
+ from meltygui.core.rendering.window_decoration import window
31
+
32
+
33
+ def open_file(path, app=None):
34
+ def default_file_manager():
35
+ # Detect platform
36
+ if sys.platform.startswith('darwin'):
37
+ return "open"
38
+ elif os.name == 'nt':
39
+ return "explorer"
40
+ elif os.name == 'posix':
41
+ return "nemo"
42
+
43
+ if app is None:
44
+ app = default_file_manager()
45
+
46
+ import subprocess
47
+ if os.path.exists(path):
48
+ subprocess.Popen([app, path])
49
+ else:
50
+ print(f"Path does not exist: {path}")
51
+
52
+
53
+ def _brightness_clamp_fn():
54
+ """Compatibility accessor for the shared color model."""
55
+ from meltygui.model.color_model import _brightness_clamp
56
+ return _brightness_clamp
57
+
58
+
59
+ # (r, g, b, hovered) → label rgb for flat_button's explicit text_color path
60
+ _TEXT_COLOR_MEMO = globals().get("_TEXT_COLOR_MEMO", {})
61
+
62
+
63
+ from meltygui.view.header_view import flat_button
64
+ flat_button = window(tint=(0.0, 0.335, 0.772, 1.0))(flat_button)
65
+
66
+
67
+ from meltygui.core.layout.header_core import _jump_to_view_source
@@ -0,0 +1,87 @@
1
+ """Layout core functions and supporting definitions."""
2
+ from meltygui.core.melty import Melty
3
+ from meltygui.core.runtime.toggles import Toggles
4
+ import meltygui_imgui as imgui
5
+
6
+
7
+ def dock_header(draw_state=None, style_manager=None, **kwargs):
8
+ """The Fast Dock's window header: the standard chrome plus the All /
9
+ Important tab strip drawn IN the header band. Drawn from the body the
10
+ strip was clipped whenever tab_pad_y lifted it above the content rect;
11
+ as header content it owns the band legitimately. This function is
12
+ draw-only: it stamps each tab's screen rect on
13
+ draw_state._dock_tab_rects and the BODY resolves clicks there, where
14
+ the left_mouse_down event reliably arrives."""
15
+ from meltygui.view.header_view import draw_header
16
+ from meltygui.core.cache.tile_cache import add_shadow
17
+ from meltygui.core.windowing.dock_core import _color_u32
18
+ from meltygui.core.windowing.dock_core import _floor_value
19
+
20
+ # The wrapper hands us the cursor already parked at the header origin -
21
+ # capture it BEFORE the chrome draws and moves it.
22
+ header_x, header_y = imgui.get_cursor_screen_pos()
23
+ changed = draw_header(draw_state=draw_state, style_manager=style_manager, **kwargs)
24
+
25
+ # ---- layout (same px discipline as the body) ----
26
+ px = Melty.px
27
+ # [tint=(0.35, 0.85, 0.94)]
28
+ tab_strip_x = px(30.0) # left inset: sits right of the tint widget
29
+ tab_height = px(26.0)
30
+ tab_gap = px(6.6) # gap between tabs
31
+ tab_pad_x = px(10.0) # tab label side padding
32
+ tab_nudge_y = px(0.0) # vertical trim from the header band
33
+ corner = px(6.0)
34
+ text_nudge_x, text_nudge_y = px(2.0), px(-1.0) # optical centering of glyphs
35
+
36
+ # ---- styling (the body's open/closed row families) ----
37
+ open_bg_value, open_text_value = 0.16, 1.357
38
+ closed_bg_value, closed_text_value = 0.045, 0.463
39
+ hover_bg_boost, hover_text_boost = 0.05, 1.5
40
+ open_saturation, text_saturation = 1.315, 0.8
41
+
42
+ if style_manager is None:
43
+ style_manager = Melty.style_manager
44
+ draw_list = imgui.get_window_draw_list()
45
+ mouse_x, mouse_y = imgui.get_mouse_pos()
46
+ hover_ok = draw_state._bounding_hovered
47
+ dock_tab = getattr(draw_state, "dock_tab", None) or "all"
48
+ clip = getattr(draw_state, "abs_clip_rect", None)
49
+
50
+ tab_left = header_x + tab_strip_x
51
+ tab_top = header_y + tab_nudge_y
52
+ tab_bottom = tab_top + tab_height
53
+ tab_rects = []
54
+ for tab_key, tab_label in (("all", "All"), ("important", "Important")):
55
+ tab_width = imgui.calc_text_size(tab_label)[0] + 2.0 * tab_pad_x
56
+ tab_right = tab_left + tab_width
57
+ is_active = dock_tab == tab_key
58
+ tab_hovered = (hover_ok and tab_left <= mouse_x <= tab_right
59
+ and tab_top <= mouse_y <= tab_bottom)
60
+ bg_value = (open_bg_value if is_active else closed_bg_value) \
61
+ + (hover_bg_boost if tab_hovered else 0.0)
62
+ text_value = (open_text_value if is_active else closed_text_value) \
63
+ + (hover_text_boost if tab_hovered else 0.0)
64
+ if is_active:
65
+ add_shadow((tab_left, tab_top, tab_width, tab_height), offset=11,
66
+ corner_radius=corner, clip=clip)
67
+ # Tabs carry no tint of their own: factor=1.0 makes make_color_rgb
68
+ # ignore the rgb args and return the window's current tint at the
69
+ # desired value/saturation - the strip follows the header tint.
70
+ if is_active or tab_hovered:
71
+ tab_bg = style_manager.make_color_rgb(0.0, 0.0, 0.0, value=bg_value, factor=1.0,
72
+ saturation_scale=open_saturation)
73
+ draw_list.add_rect_filled(tab_left, tab_top, tab_right, tab_bottom,
74
+ _color_u32(tab_bg), rounding=corner)
75
+ tab_text = _floor_value(
76
+ style_manager.make_color_rgb(0.0, 0.0, 0.0, value=text_value, factor=1.0,
77
+ saturation_scale=text_saturation),
78
+ Toggles.FastDock.active_text_min_brightness if is_active
79
+ else Toggles.FastDock.inactive_text_min_brightness)
80
+ label_size = imgui.calc_text_size(tab_label)
81
+ draw_list.add_text(tab_left + tab_pad_x + text_nudge_x,
82
+ tab_top + (tab_height - label_size[1]) / 2.0 + text_nudge_y,
83
+ _color_u32(tab_text), tab_label)
84
+ tab_rects.append((tab_key, (tab_left, tab_top, tab_right, tab_bottom)))
85
+ tab_left = tab_right + tab_gap
86
+ draw_state._dock_tab_rects = tuple(tab_rects)
87
+ return changed