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.
- meltygui/__init__.py +107 -0
- meltygui/accounts/__init__.py +0 -0
- meltygui/accounts/internet_accounts.py +1355 -0
- meltygui/chat/__init__.py +91 -0
- meltygui/chat/activity.py +75 -0
- meltygui/chat/backends.py +36 -0
- meltygui/chat/chat_interface.py +732 -0
- meltygui/chat/chat_proxy.py +352 -0
- meltygui/chat/codex_proxy.py +592 -0
- meltygui/chat/codex_settings.py +100 -0
- meltygui/chat/codex_transport.py +60 -0
- meltygui/chat/command_parser.py +204 -0
- meltygui/chat/images.py +227 -0
- meltygui/chat/messages.py +417 -0
- meltygui/chat/metadata.py +139 -0
- meltygui/chat/writer_locks.py +64 -0
- meltygui/code/__init__.py +0 -0
- meltygui/code/basic_converters.py +533 -0
- meltygui/code/chain_converters.py +2111 -0
- meltygui/code/code_checks.py +2209 -0
- meltygui/code/core_syntax.py +1430 -0
- meltygui/code/file_converters.py +1933 -0
- meltygui/code/fileref.py +702 -0
- meltygui/code/hotswap_guard.py +144 -0
- meltygui/code/libcst_conversion.py +9724 -0
- meltygui/code/live_instrument.py +392 -0
- meltygui/code/live_view.py +2490 -0
- meltygui/code/melty_scan.py +2684 -0
- meltygui/code/new_codecs.py +1255 -0
- meltygui/code/new_converters.py +3017 -0
- meltygui/code/project_code.py +278 -0
- meltygui/code/source_context.py +63 -0
- meltygui/code/symbol_roster.py +1588 -0
- meltygui/code/syntax_check.py +34 -0
- meltygui/code/syntax_check_worker.py +114 -0
- meltygui/completion/__init__.py +0 -0
- meltygui/completion/fim.py +1232 -0
- meltygui/completion/fim_context.py +481 -0
- meltygui/completion/providers/__init__.py +0 -0
- meltygui/completion/providers/anthropic_oauth.py +446 -0
- meltygui/completion/providers/anthropic_requests.py +69 -0
- meltygui/completion/providers/claude.py +203 -0
- meltygui/completion/providers/claude_usage.py +499 -0
- meltygui/completion/providers/codex_accounts.py +180 -0
- meltygui/completion/providers/copilot.py +617 -0
- meltygui/completion/providers/oauth_popup.py +220 -0
- meltygui/completion/providers/ollama.py +320 -0
- meltygui/completion/providers/profiles.py +23 -0
- meltygui/core/README.md +88 -0
- meltygui/core/__init__.py +1 -0
- meltygui/core/automation/__init__.py +1 -0
- meltygui/core/automation/action_core.py +153 -0
- meltygui/core/automation/collection_action.py +45 -0
- meltygui/core/automation/mcp_eval.py +167 -0
- meltygui/core/automation/mcp_hotswap.py +107 -0
- meltygui/core/automation/mcp_query.py +552 -0
- meltygui/core/automation/mcp_server.py +657 -0
- meltygui/core/automation/orchestration_core.py +2636 -0
- meltygui/core/automation/query_core.py +124 -0
- meltygui/core/automation/search_core.py +26 -0
- meltygui/core/automation/selector_core.py +340 -0
- meltygui/core/automation/value_core.py +1752 -0
- meltygui/core/cache/__init__.py +1 -0
- meltygui/core/cache/cache_diagnostics.py +0 -0
- meltygui/core/cache/invalidation_decoration.py +153 -0
- meltygui/core/cache/invalidation_tracker.py +43 -0
- meltygui/core/cache/tile_cache.py +5968 -0
- meltygui/core/conversion/__init__.py +1 -0
- meltygui/core/conversion/bubbling.py +599 -0
- meltygui/core/conversion/cache_tree.py +188 -0
- meltygui/core/conversion/chain.py +113 -0
- meltygui/core/conversion/converter_register.py +145 -0
- meltygui/core/conversion/data_decoration.py +67 -0
- meltygui/core/conversion/dict_conversion.py +1815 -0
- meltygui/core/conversion/dict_conversion_util.py +177 -0
- meltygui/core/conversion/dynamic_obj.py +89 -0
- meltygui/core/conversion/graph_compare.py +183 -0
- meltygui/core/conversion/load_save_v2.py +1032 -0
- meltygui/core/conversion/missing_saved_class.py +39 -0
- meltygui/core/conversion/path_finder.py +606 -0
- meltygui/core/conversion/render_host.py +1083 -0
- meltygui/core/core_render.py +6537 -0
- meltygui/core/definition_hotswap.py +231 -0
- meltygui/core/diagnostics/__init__.py +1 -0
- meltygui/core/diagnostics/attribute_churn.py +38 -0
- meltygui/core/diagnostics/fps_counter.py +39 -0
- meltygui/core/diagnostics/gpu_frame_timer.py +103 -0
- meltygui/core/diagnostics/inspection_core.py +169 -0
- meltygui/core/diagnostics/monitor_core.py +105 -0
- meltygui/core/diagnostics/notifications.py +706 -0
- meltygui/core/diagnostics/perf_trace.py +281 -0
- meltygui/core/diagnostics/profile_decoration.py +88 -0
- meltygui/core/diagnostics/resize_trace.py +62 -0
- meltygui/core/diagnostics/screenshot_core.py +247 -0
- meltygui/core/diagnostics/session_status.py +98 -0
- meltygui/core/diagnostics/trace_core.py +445 -0
- meltygui/core/files/__init__.py +1 -0
- meltygui/core/files/file_core.py +208 -0
- meltygui/core/files/file_explorer_core.py +104 -0
- meltygui/core/files/file_tree_core.py +198 -0
- meltygui/core/files/file_watch_core.py +43 -0
- meltygui/core/files/import_graph_core.py +43 -0
- meltygui/core/files/metadata_core.py +51 -0
- meltygui/core/graphics/__init__.py +1 -0
- meltygui/core/graphics/cuda_context_core.py +166 -0
- meltygui/core/graphics/cuda_interop_core.py +136 -0
- meltygui/core/graphics/cuda_kernel_core.py +91 -0
- meltygui/core/graphics/framebuffer_recorder.py +337 -0
- meltygui/core/graphics/gl_state.py +658 -0
- meltygui/core/graphics/lut_core.py +52 -0
- meltygui/core/graphics/overlay_renderer.py +984 -0
- meltygui/core/graphics/scene_target.py +180 -0
- meltygui/core/graphics/screenshot.py +439 -0
- meltygui/core/graphics/shader_func.py +478 -0
- meltygui/core/graphics/tensor_core.py +45 -0
- meltygui/core/graphics/text_texture.py +329 -0
- meltygui/core/graphics/wayland_color.py +635 -0
- meltygui/core/input/__init__.py +1 -0
- meltygui/core/input/collision.py +165 -0
- meltygui/core/input/drag_drop_core.py +1525 -0
- meltygui/core/input/hypr_left_drag.py +323 -0
- meltygui/core/input/input_core.py +245 -0
- meltygui/core/input/input_handler.py +1101 -0
- meltygui/core/input/mouse_cursor.py +355 -0
- meltygui/core/input/pynput_backend.py +1054 -0
- meltygui/core/input/space_mouse.py +338 -0
- meltygui/core/input/touchpad_backend.py +393 -0
- meltygui/core/input/view_selection.py +177 -0
- meltygui/core/layout/__init__.py +1 -0
- meltygui/core/layout/column_core.py +2153 -0
- meltygui/core/layout/cursor_core.py +161 -0
- meltygui/core/layout/dropdown_core.py +278 -0
- meltygui/core/layout/edge_constraints.py +155 -0
- meltygui/core/layout/grid_core.py +117 -0
- meltygui/core/layout/header_core.py +23 -0
- meltygui/core/layout/header_runtime.py +67 -0
- meltygui/core/layout/layout_core.py +87 -0
- meltygui/core/layout/tile_manager_core.py +591 -0
- meltygui/core/melty.py +6726 -0
- meltygui/core/module_map.json +896 -0
- meltygui/core/module_names.py +19 -0
- meltygui/core/rendering/__init__.py +1 -0
- meltygui/core/rendering/core_decoration.py +431 -0
- meltygui/core/rendering/core_render_helpers.py +328 -0
- meltygui/core/rendering/func_metadata.py +398 -0
- meltygui/core/rendering/mode.py +818 -0
- meltygui/core/rendering/mode_defaults.py +41 -0
- meltygui/core/rendering/modes.py +136 -0
- meltygui/core/rendering/parameter_core.py +1665 -0
- meltygui/core/rendering/render_dispatch.py +1891 -0
- meltygui/core/rendering/render_funcs.py +273 -0
- meltygui/core/rendering/shaped.py +312 -0
- meltygui/core/rendering/window_decoration.py +25 -0
- meltygui/core/runtime/__init__.py +1 -0
- meltygui/core/runtime/app.py +735 -0
- meltygui/core/runtime/app_session.py +140 -0
- meltygui/core/runtime/background.py +564 -0
- meltygui/core/runtime/extensions.py +53 -0
- meltygui/core/runtime/gc_manager.py +1163 -0
- meltygui/core/runtime/lifecycle.py +21 -0
- meltygui/core/runtime/paths.py +27 -0
- meltygui/core/runtime/settings.py +14 -0
- meltygui/core/runtime/singleton.py +16 -0
- meltygui/core/runtime/thread_safe_bool.py +24 -0
- meltygui/core/runtime/thread_signal.py +30 -0
- meltygui/core/runtime/toggles.py +3115 -0
- meltygui/core/services/__init__.py +1 -0
- meltygui/core/services/account_core.py +10 -0
- meltygui/core/services/chat_core.py +19 -0
- meltygui/core/services/claude_terminal_core.py +346 -0
- meltygui/core/services/terminal_core.py +458 -0
- meltygui/core/services/terminal_runtime.py +78 -0
- meltygui/core/styling/__init__.py +1 -0
- meltygui/core/styling/color_core.py +46 -0
- meltygui/core/styling/fonts.py +639 -0
- meltygui/core/styling/global_style.py +338 -0
- meltygui/core/styling/style.py +198 -0
- meltygui/core/styling/style_core.py +522 -0
- meltygui/core/styling/warm_start.py +149 -0
- meltygui/core/windowing/__init__.py +1 -0
- meltygui/core/windowing/backends/PYIMGUI_LICENSE +28 -0
- meltygui/core/windowing/backends/__init__.py +1 -0
- meltygui/core/windowing/backends/imgui_renderer.py +138 -0
- meltygui/core/windowing/backends/native_wayland.py +850 -0
- meltygui/core/windowing/backends/protocols/xdg-decoration-unstable-v1.xml +156 -0
- meltygui/core/windowing/backends/protocols/xdg-shell.xml +1420 -0
- meltygui/core/windowing/backends/wayland_protocol.py +101 -0
- meltygui/core/windowing/dock_core.py +182 -0
- meltygui/core/windowing/frame_geometry.py +42 -0
- meltygui/core/windowing/geometry_feed.py +864 -0
- meltygui/core/windowing/glfw_utils.py +1343 -0
- meltygui/core/windowing/os_frame.py +1552 -0
- meltygui/core/windowing/surface.py +643 -0
- meltygui/core/windowing/titlebar.py +1560 -0
- meltygui/core/windowing/titlebar_buttons.py +281 -0
- meltygui/core/windowing/wayland_move.py +932 -0
- meltygui/core/windowing/window_api.py +62 -0
- meltygui/core/windowing/window_constants.py +339 -0
- meltygui/core/windowing/window_visibility.py +162 -0
- meltygui/debug/__init__.py +0 -0
- meltygui/debug/app_view_utils.py +9 -0
- meltygui/editor/__init__.py +0 -0
- meltygui/editor/bash_syntax.py +30 -0
- meltygui/editor/code_line_fast.py +152 -0
- meltygui/editor/diff.py +139 -0
- meltygui/editor/external_changes.py +159 -0
- meltygui/editor/file_header.py +41 -0
- meltygui/editor/live_usage.py +169 -0
- meltygui/editor/live_view_views.py +1803 -0
- meltygui/editor/pending_save.py +1351 -0
- meltygui/editor/roster_tints.py +547 -0
- meltygui/editor/source_preview.py +16 -0
- meltygui/editor/source_tools.py +10 -0
- meltygui/editor/source_ui.py +70 -0
- meltygui/editor/spell_check.py +77 -0
- meltygui/editor/text_editor.py +9076 -0
- meltygui/editor/usage_picker.py +538 -0
- meltygui/events/__init__.py +0 -0
- meltygui/events/example.py +118 -0
- meltygui/examples/__init__.py +0 -0
- meltygui/examples/columns_demo.py +33 -0
- meltygui/examples/columns_window_demo.py +60 -0
- meltygui/examples/context_menu_demo.py +24 -0
- meltygui/examples/context_menu_window_demo.py +49 -0
- meltygui/examples/gui_playground.py +127 -0
- meltygui/examples/live_view_playground.py +256 -0
- meltygui/examples/lora.py +43 -0
- meltygui/examples/lora_data.py +59 -0
- meltygui/examples/lora_policies.py +67 -0
- meltygui/examples/mode_demo.py +49 -0
- meltygui/examples/modifies_demo.py +119 -0
- meltygui/examples/scalar_policies.py +60 -0
- meltygui/examples/style_layouts.py +149 -0
- meltygui/examples/tile_manager_demo.py +74 -0
- meltygui/examples/tint_demo.py +160 -0
- meltygui/examples/tint_functions.py +56 -0
- meltygui/examples/trace_demo.py +88 -0
- meltygui/examples/two_windows.py +36 -0
- meltygui/files/__init__.py +0 -0
- meltygui/files/fast_file_explorer.py +439 -0
- meltygui/gnome_extension/lsd-window-geometry@latent-descent/extension.js +237 -0
- meltygui/gnome_extension/lsd-window-geometry@latent-descent/lsd-window-geometry@latent-descent.iml +9 -0
- meltygui/gnome_extension/lsd-window-geometry@latent-descent/metadata.json +7 -0
- meltygui/graphics/__init__.py +6 -0
- meltygui/graphics/base.py +85 -0
- meltygui/graphics/examples.py +507 -0
- meltygui/graphics/executor.py +520 -0
- meltygui/graphics/filter.py +667 -0
- meltygui/graphics/filter.pyi +856 -0
- meltygui/graphics/generate_stubs.py +22 -0
- meltygui/graphics/registry.py +203 -0
- meltygui/graphics/shader_compiler.py +155 -0
- meltygui/graphics/shaders.py +1302 -0
- meltygui/graphics/stub_generator.py +250 -0
- meltygui/graphics/texture_manager.py +170 -0
- meltygui/graphics/texture_min_max.py +295 -0
- meltygui/hdr_color.py +757 -0
- meltygui/image_load.py +308 -0
- meltygui/model/__init__.py +1 -0
- meltygui/model/account_model.py +142 -0
- meltygui/model/camera_model.py +159 -0
- meltygui/model/chat_model.py +86 -0
- meltygui/model/code_model.py +62 -0
- meltygui/model/code_proxy_model.py +876 -0
- meltygui/model/collection_model.py +41 -0
- meltygui/model/color_model.py +127 -0
- meltygui/model/cuda_tensor_model.py +36 -0
- meltygui/model/cuda_texture_model.py +149 -0
- meltygui/model/dropdown_model.py +137 -0
- meltygui/model/file_metadata_model.py +73 -0
- meltygui/model/file_model.py +289 -0
- meltygui/model/format_model.py +390 -0
- meltygui/model/graph_model.py +98 -0
- meltygui/model/icon_model.py +1024 -0
- meltygui/model/import_graph_model.py +468 -0
- meltygui/model/layout_model.py +15 -0
- meltygui/model/lut_model.py +266 -0
- meltygui/model/search_model.py +173 -0
- meltygui/model/tensor_model.py +402 -0
- meltygui/model/terminal_model.py +329 -0
- meltygui/model/texture_model.py +146 -0
- meltygui/model/tile_model.py +24 -0
- meltygui/model/trace_model.py +198 -0
- meltygui/model/trace_report_model.py +146 -0
- meltygui/models/__init__.py +0 -0
- meltygui/models/file_meta.py +613 -0
- meltygui/models/function_console.py +184 -0
- meltygui/models/orchestration.py +48 -0
- meltygui/pbr.py +1576 -0
- meltygui/png_unfilter.c +49 -0
- meltygui/resources/JetBrainsMono-Regular.ttf +0 -0
- meltygui/resources/THIRD_PARTY_NOTICES.md +21 -0
- meltygui/resources/dejavu/DejaVuSans-Bold.ttf +0 -0
- meltygui/resources/dejavu/DejaVuSans-ExtraLight.ttf +0 -0
- meltygui/resources/dejavu/DejaVuSans.ttf +0 -0
- meltygui/resources/dejavu/LICENSE.txt +78 -0
- meltygui/resources/fontawesome-LICENSE.txt +121 -0
- meltygui/resources/fontawesome-webfont.ttf +0 -0
- meltygui/resources/hdri/studio_small_09_1k.hdr +0 -0
- meltygui/resources/jetbrains-weights/JetBrainsMono-Bold.ttf +0 -0
- meltygui/resources/jetbrains-weights/JetBrainsMono-ExtraBold.ttf +0 -0
- meltygui/resources/jetbrains-weights/JetBrainsMono-ExtraLight.ttf +0 -0
- meltygui/resources/jetbrains-weights/JetBrainsMono-Light.ttf +0 -0
- meltygui/resources/jetbrains-weights/JetBrainsMono-Medium.ttf +0 -0
- meltygui/resources/jetbrains-weights/JetBrainsMono-SemiBold.ttf +0 -0
- meltygui/resources/jetbrains-weights/JetBrainsMono-Thin.ttf +0 -0
- meltygui/resources/jetbrains-weights/OFL.txt +93 -0
- meltygui/resources/jetbrains-weights/README.md +2 -0
- meltygui/state/__init__.py +0 -0
- meltygui/state/account_state.py +22 -0
- meltygui/state/animation_state.py +97 -0
- meltygui/state/annotation_state.py +22 -0
- meltygui/state/chat_state.py +36 -0
- meltygui/state/code_state.py +10 -0
- meltygui/state/core_enums.py +59 -0
- meltygui/state/core_markers.py +115 -0
- meltygui/state/core_undo.py +1075 -0
- meltygui/state/file_state.py +75 -0
- meltygui/state/graph_state.py +26 -0
- meltygui/state/inspection_state.py +47 -0
- meltygui/state/menu_state.py +10 -0
- meltygui/state/model_enums.py +11 -0
- meltygui/state/new_core_model.py +2394 -0
- meltygui/state/orchestration_state.py +14 -0
- meltygui/state/query_state.py +24 -0
- meltygui/state/tensor_state.py +10 -0
- meltygui/state/terminal_state.py +23 -0
- meltygui/state/trace_state.py +32 -0
- meltygui/state/voxel_state.py +12 -0
- meltygui/text_index.py +816 -0
- meltygui/utils/__init__.py +0 -0
- meltygui/utils/jump_to_code.py +344 -0
- meltygui/utils/pkl_inspect.py +90 -0
- meltygui/utils/render_utils.py +1419 -0
- meltygui/view/__init__.py +1 -0
- meltygui/view/account_view.py +524 -0
- meltygui/view/action_view.py +73 -0
- meltygui/view/chat_decoration_view.py +112 -0
- meltygui/view/chat_view.py +1703 -0
- meltygui/view/code_view.py +2677 -0
- meltygui/view/collection_view.py +1185 -0
- meltygui/view/color_view.py +824 -0
- meltygui/view/control_view.py +559 -0
- meltygui/view/decoration_view.py +439 -0
- meltygui/view/diagnostic_view.py +177 -0
- meltygui/view/dropdown_view.py +1082 -0
- meltygui/view/file_view.py +1599 -0
- meltygui/view/graph_cuda_view.py +105 -0
- meltygui/view/graph_view.py +882 -0
- meltygui/view/header_view.py +848 -0
- meltygui/view/input_view.py +238 -0
- meltygui/view/inspection_view.py +1783 -0
- meltygui/view/layout_view.py +596 -0
- meltygui/view/lut_view.py +45 -0
- meltygui/view/menu_view.py +212 -0
- meltygui/view/orchestration_view.py +658 -0
- meltygui/view/query_view.py +118 -0
- meltygui/view/search_view.py +342 -0
- meltygui/view/tab_view.py +258 -0
- meltygui/view/tensor_view.py +430 -0
- meltygui/view/terminal_view.py +355 -0
- meltygui/view/text_view.py +8031 -0
- meltygui/view/texture_view.py +480 -0
- meltygui/view/tile_view.py +38 -0
- meltygui/view/trace_view.py +923 -0
- meltygui/view/voxel_cuda_view.py +824 -0
- meltygui/view/voxel_view.py +1860 -0
- meltygui/view/window_view.py +111 -0
- meltygui-0.1.0.dist-info/METADATA +143 -0
- meltygui-0.1.0.dist-info/RECORD +372 -0
- meltygui-0.1.0.dist-info/WHEEL +4 -0
- meltygui-0.1.0.dist-info/licenses/LICENSE +202 -0
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
from meltygui.core.rendering.window_decoration import window
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@window
|
|
7
|
+
class BackgroundSettings:
|
|
8
|
+
dot_spacing = 4.917
|
|
9
|
+
dot_size = 1.798
|
|
10
|
+
emphasis_size = 1.2
|
|
11
|
+
dot_color = (0.2, 0.23, 0.3, 1.0)
|
|
12
|
+
bg_color = (0.027, 0.055, 0.07, 1.0)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class GlobalStyle:
|
|
16
|
+
object_corner_radius = 5.0
|
|
17
|
+
window_corner_radius = 5.0
|
|
18
|
+
item_corner_radius = 5.0
|
|
19
|
+
|
|
20
|
+
attr_name_indent = 20
|
|
21
|
+
base_value = 0.3
|
|
22
|
+
secondary_value = 0.5
|
|
23
|
+
background_settings = BackgroundSettings()
|
|
24
|
+
widget_styles = {}
|
|
25
|
+
excluded_names = set()
|
|
26
|
+
skip_if_none = set()
|
|
27
|
+
profiler = {
|
|
28
|
+
"object_attr": {
|
|
29
|
+
'dynamic_value': 0.042,
|
|
30
|
+
'dynamic_offset': -3.855,
|
|
31
|
+
'dynamic_saturation_factor': -3.855,
|
|
32
|
+
'dynamic_saturation_offset': -3.855,
|
|
33
|
+
'value': -3.855,
|
|
34
|
+
'saturation': 0.5
|
|
35
|
+
},
|
|
36
|
+
}
|
|
37
|
+
dropdown = {
|
|
38
|
+
"standard": {
|
|
39
|
+
"background": {
|
|
40
|
+
"value": 0.01,
|
|
41
|
+
"saturation": 1.0,
|
|
42
|
+
"alpha": 1.0,
|
|
43
|
+
'max_value': 1.0
|
|
44
|
+
},
|
|
45
|
+
"text": {
|
|
46
|
+
"value": 0.01,
|
|
47
|
+
"saturation": 1.0,
|
|
48
|
+
"alpha": 1.0,
|
|
49
|
+
'max_value': 1.0
|
|
50
|
+
},
|
|
51
|
+
"button": {
|
|
52
|
+
"value": 0.12,
|
|
53
|
+
"saturation": 0.9,
|
|
54
|
+
"alpha": 1.0,
|
|
55
|
+
'max_value': 1.0
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"hovered": {
|
|
59
|
+
"background": {
|
|
60
|
+
"value": 0.066,
|
|
61
|
+
"saturation": 1.0,
|
|
62
|
+
"alpha": 1.0,
|
|
63
|
+
'max_value': 1.0
|
|
64
|
+
},
|
|
65
|
+
"text": {
|
|
66
|
+
"value": 0.01,
|
|
67
|
+
"saturation": 1.0,
|
|
68
|
+
"alpha": 1.0,
|
|
69
|
+
'max_value': 1.0
|
|
70
|
+
},
|
|
71
|
+
"button": {
|
|
72
|
+
"value": 0.12,
|
|
73
|
+
"saturation": 0.9,
|
|
74
|
+
"alpha": 1.0,
|
|
75
|
+
'max_value': 1.0
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
indented_bg = {
|
|
81
|
+
"dict_child": {
|
|
82
|
+
"value": 0.01,
|
|
83
|
+
"saturation": 1.0,
|
|
84
|
+
"alpha": 1.0,
|
|
85
|
+
'max_value': 1.0
|
|
86
|
+
},
|
|
87
|
+
"dict_child_outline": {
|
|
88
|
+
"value": 0.01,
|
|
89
|
+
"saturation": 1.0,
|
|
90
|
+
"alpha": 1.0,
|
|
91
|
+
'max_value': 1.0
|
|
92
|
+
},
|
|
93
|
+
"object_attr": {
|
|
94
|
+
"value": 0.12,
|
|
95
|
+
"saturation": 0.9,
|
|
96
|
+
"alpha": 1.0,
|
|
97
|
+
'max_value': 1.0,
|
|
98
|
+
'dynamic_value': 0.042,
|
|
99
|
+
'dynamic_offset': -3.855,
|
|
100
|
+
},
|
|
101
|
+
"object_attr_outline": {
|
|
102
|
+
"value": 0.01,
|
|
103
|
+
"saturation": 1.0,
|
|
104
|
+
"alpha": 1.0,
|
|
105
|
+
'max_value': 1.0
|
|
106
|
+
},
|
|
107
|
+
}
|
|
108
|
+
radio_button = {
|
|
109
|
+
"active_base": {
|
|
110
|
+
"value": 0.2,
|
|
111
|
+
"saturation": 1.0,
|
|
112
|
+
"alpha": 1.0,
|
|
113
|
+
'max_value': 1.0
|
|
114
|
+
},
|
|
115
|
+
"active_hover": {
|
|
116
|
+
"value": 0.5,
|
|
117
|
+
"saturation": 1.0,
|
|
118
|
+
"alpha": 1.0,
|
|
119
|
+
'max_value': 1.0
|
|
120
|
+
},
|
|
121
|
+
"active_pressed": {
|
|
122
|
+
"value": 0.3,
|
|
123
|
+
"saturation": 0.4,
|
|
124
|
+
"alpha": 0.35,
|
|
125
|
+
'max_value': 1.0
|
|
126
|
+
},
|
|
127
|
+
"inactive_base": {
|
|
128
|
+
"value": 0.2,
|
|
129
|
+
"saturation": 0.4,
|
|
130
|
+
"alpha": 0.35,
|
|
131
|
+
'max_value': 1.0
|
|
132
|
+
},
|
|
133
|
+
"inactive_hover": {
|
|
134
|
+
"value": 0.4,
|
|
135
|
+
"saturation": 0.5,
|
|
136
|
+
"alpha": 1.0,
|
|
137
|
+
'max_value': 1.0
|
|
138
|
+
},
|
|
139
|
+
"inactive_pressed": {
|
|
140
|
+
"value": 0.35,
|
|
141
|
+
"saturation": 0.5,
|
|
142
|
+
"alpha": 0.35,
|
|
143
|
+
'max_value': 1.0
|
|
144
|
+
},
|
|
145
|
+
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
main_const = {
|
|
149
|
+
"window": {
|
|
150
|
+
"background": {
|
|
151
|
+
"value": 0.01,
|
|
152
|
+
"saturation": 0.7,
|
|
153
|
+
"alpha": 1.0
|
|
154
|
+
},
|
|
155
|
+
"border": {
|
|
156
|
+
"value": 0.34,
|
|
157
|
+
"saturation": 0.9,
|
|
158
|
+
"alpha": 1.0
|
|
159
|
+
},
|
|
160
|
+
"child_bg": {
|
|
161
|
+
"value": 0.01,
|
|
162
|
+
"saturation": 0.7,
|
|
163
|
+
"alpha": 1.0
|
|
164
|
+
},
|
|
165
|
+
"popup_bg": {
|
|
166
|
+
"value": 0.01,
|
|
167
|
+
"saturation": 0.7,
|
|
168
|
+
"alpha": 1.0
|
|
169
|
+
},
|
|
170
|
+
"title_bg": {
|
|
171
|
+
"value": 0.01,
|
|
172
|
+
"saturation": 0.7,
|
|
173
|
+
"alpha": 1.0
|
|
174
|
+
},
|
|
175
|
+
"title_bg_active": {
|
|
176
|
+
"value": 0.01,
|
|
177
|
+
"saturation": 0.7,
|
|
178
|
+
"alpha": 1.0
|
|
179
|
+
},
|
|
180
|
+
"title_bg_collapsed": {
|
|
181
|
+
"value": 0.01,
|
|
182
|
+
"saturation": 0.5,
|
|
183
|
+
"alpha": 1.0
|
|
184
|
+
},
|
|
185
|
+
"header": {
|
|
186
|
+
"value": 0.01,
|
|
187
|
+
"saturation": 0.9,
|
|
188
|
+
"alpha": 1.0
|
|
189
|
+
},
|
|
190
|
+
"header_hovered": {
|
|
191
|
+
"value": 0.45,
|
|
192
|
+
"saturation": 0.9,
|
|
193
|
+
"alpha": 1.0
|
|
194
|
+
},
|
|
195
|
+
"header_active": {
|
|
196
|
+
"value": 0.55,
|
|
197
|
+
"saturation": 1.0,
|
|
198
|
+
"alpha": 1.0
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
|
|
202
|
+
"widget": {
|
|
203
|
+
"text": {
|
|
204
|
+
"value": 0.95,
|
|
205
|
+
"saturation": 0.2,
|
|
206
|
+
"alpha": 1.0
|
|
207
|
+
},
|
|
208
|
+
"text_disabled": {
|
|
209
|
+
"value": 0.5,
|
|
210
|
+
"saturation": 0.2,
|
|
211
|
+
"alpha": 1.0
|
|
212
|
+
},
|
|
213
|
+
"resize_grip": {
|
|
214
|
+
"value": 0.35,
|
|
215
|
+
"saturation": 0.8,
|
|
216
|
+
"alpha": 1.0
|
|
217
|
+
},
|
|
218
|
+
"resize_hovered": {
|
|
219
|
+
"value": 0.45,
|
|
220
|
+
"saturation": 0.9,
|
|
221
|
+
"alpha": 1.0
|
|
222
|
+
},
|
|
223
|
+
"resize_active": {
|
|
224
|
+
"value": 0.55,
|
|
225
|
+
"saturation": 1.0,
|
|
226
|
+
"alpha": 1.0
|
|
227
|
+
},
|
|
228
|
+
"button": {
|
|
229
|
+
"value": 0.35,
|
|
230
|
+
"saturation": 0.8,
|
|
231
|
+
"alpha": 1.0
|
|
232
|
+
},
|
|
233
|
+
"button_hovered": {
|
|
234
|
+
"value": 0.45,
|
|
235
|
+
"saturation": 0.9,
|
|
236
|
+
"alpha": 1.0
|
|
237
|
+
},
|
|
238
|
+
"button_active": {
|
|
239
|
+
"value": 0.55,
|
|
240
|
+
"saturation": 1.0,
|
|
241
|
+
"alpha": 1.0
|
|
242
|
+
},
|
|
243
|
+
"check_mark": {
|
|
244
|
+
"value": 0.9,
|
|
245
|
+
"saturation": 1.0,
|
|
246
|
+
"alpha": 1.0
|
|
247
|
+
},
|
|
248
|
+
"text_selected_bg": {
|
|
249
|
+
"value": 0.35,
|
|
250
|
+
"saturation": 0.8,
|
|
251
|
+
"alpha": 1.0
|
|
252
|
+
},
|
|
253
|
+
"slider_grab": {
|
|
254
|
+
"value": 0.5,
|
|
255
|
+
"saturation": 0.9,
|
|
256
|
+
"alpha": 1.0
|
|
257
|
+
},
|
|
258
|
+
"slider_grab_active": {
|
|
259
|
+
"value": 0.6,
|
|
260
|
+
"saturation": 1.0,
|
|
261
|
+
"alpha": 1.0
|
|
262
|
+
},
|
|
263
|
+
"scrollbar_grab": {
|
|
264
|
+
"value": 0.5,
|
|
265
|
+
"saturation": 0.9,
|
|
266
|
+
"alpha": 1.0
|
|
267
|
+
},
|
|
268
|
+
"scrollbar_grab_hovered": {
|
|
269
|
+
"value": 0.5,
|
|
270
|
+
"saturation": 0.9,
|
|
271
|
+
"alpha": 1.0
|
|
272
|
+
},
|
|
273
|
+
"scrollbar_grab_active": {
|
|
274
|
+
"value": 0.5,
|
|
275
|
+
"saturation": 0.9,
|
|
276
|
+
"alpha": 1.0
|
|
277
|
+
}
|
|
278
|
+
},
|
|
279
|
+
|
|
280
|
+
"frame": {
|
|
281
|
+
"frame_bg": {
|
|
282
|
+
"value": 0.15,
|
|
283
|
+
"saturation": 0.9,
|
|
284
|
+
"alpha": 1.0
|
|
285
|
+
},
|
|
286
|
+
"frame_hovered": {
|
|
287
|
+
"value": 0.25,
|
|
288
|
+
"saturation": 0.5,
|
|
289
|
+
"alpha": 1.0
|
|
290
|
+
},
|
|
291
|
+
"frame_active": {
|
|
292
|
+
"value": 0.3,
|
|
293
|
+
"saturation": 0.6,
|
|
294
|
+
"alpha": 1.0
|
|
295
|
+
},
|
|
296
|
+
"separator": {
|
|
297
|
+
"value": 0.4,
|
|
298
|
+
"saturation": 0.7,
|
|
299
|
+
"alpha": 1.0
|
|
300
|
+
}
|
|
301
|
+
},
|
|
302
|
+
|
|
303
|
+
"tab": {
|
|
304
|
+
"tab": {
|
|
305
|
+
"value": 0.25,
|
|
306
|
+
"saturation": 0.7,
|
|
307
|
+
"alpha": 1.0
|
|
308
|
+
},
|
|
309
|
+
"tab_hovered": {
|
|
310
|
+
"value": 0.35,
|
|
311
|
+
"saturation": 0.8,
|
|
312
|
+
"alpha": 1.0
|
|
313
|
+
},
|
|
314
|
+
"tab_active": {
|
|
315
|
+
"value": 0.4,
|
|
316
|
+
"saturation": 0.9,
|
|
317
|
+
"alpha": 1.0
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
@classmethod
|
|
323
|
+
def get_global_constant(cls, constant_name: str, folder, default_type=None, default: Any = None):
|
|
324
|
+
|
|
325
|
+
if not hasattr(cls, folder) or getattr(cls, folder) is None:
|
|
326
|
+
setattr(cls, folder, {})
|
|
327
|
+
constant_dict = getattr(cls, folder)
|
|
328
|
+
if constant_name not in constant_dict or constant_dict[constant_name] is None and default is not None:
|
|
329
|
+
constant_dict[constant_name] = default
|
|
330
|
+
|
|
331
|
+
if default_type is not None and (constant_name not in constant_dict
|
|
332
|
+
or not isinstance(constant_dict[constant_name], default_type)):
|
|
333
|
+
constant_dict[constant_name] = default_type()
|
|
334
|
+
#
|
|
335
|
+
# if hasattr(self.settings, "_base_pref") and self.settings._base_pref is not None:
|
|
336
|
+
# setattr(self.settings._base_pref._constants, folder, f"global_constant.{folder}")
|
|
337
|
+
|
|
338
|
+
return constant_dict[constant_name]
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"""Residual backgrounds and the draw-list renderer's text colour policy.
|
|
2
|
+
|
|
3
|
+
Tuple colours remain absolute extended sRGB. Style opts into signed shifts;
|
|
4
|
+
the renderer works in linear scRGB, just like hdr_color.
|
|
5
|
+
"""
|
|
6
|
+
import math
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class Style(tuple):
|
|
10
|
+
def __new__(cls, rgb=(0, 0, 0), *, absolute=False, shadow_offset=None,
|
|
11
|
+
font_size=None, font_weight=None, tint_fn=None,
|
|
12
|
+
font_size_fn=None, font_weight_fn=None, shadow_fn=None):
|
|
13
|
+
values = tuple(float(value) for value in rgb)
|
|
14
|
+
if len(values) not in (3, 4) or not all(map(math.isfinite, values)):
|
|
15
|
+
raise ValueError("Style requires three finite channels and optional alpha")
|
|
16
|
+
style = super().__new__(cls, values)
|
|
17
|
+
style.absolute = bool(absolute)
|
|
18
|
+
for name, fn in (("tint_fn", tint_fn), ("font_size_fn", font_size_fn),
|
|
19
|
+
("font_weight_fn", font_weight_fn), ("shadow_fn", shadow_fn)):
|
|
20
|
+
if fn is not None and not callable(fn):
|
|
21
|
+
raise TypeError(f"{name} must be callable or None")
|
|
22
|
+
setattr(style, name, fn)
|
|
23
|
+
for name, value in (("shadow_offset", shadow_offset), ("font_size", font_size),
|
|
24
|
+
("font_weight", font_weight)):
|
|
25
|
+
if value is not None:
|
|
26
|
+
value = float(value)
|
|
27
|
+
if not math.isfinite(value):
|
|
28
|
+
raise ValueError(f"{name} must be finite")
|
|
29
|
+
setattr(style, name, value)
|
|
30
|
+
return style
|
|
31
|
+
|
|
32
|
+
def __repr__(self):
|
|
33
|
+
return (f"Style({tuple(self)!r}, absolute={self.absolute!r}, "
|
|
34
|
+
f"shadow_offset={self.shadow_offset!r}, font_size={self.font_size!r}, "
|
|
35
|
+
f"font_weight={self.font_weight!r}, tint_fn={self.tint_fn!r}, "
|
|
36
|
+
f"font_size_fn={self.font_size_fn!r}, font_weight_fn={self.font_weight_fn!r}, "
|
|
37
|
+
f"shadow_fn={self.shadow_fn!r})")
|
|
38
|
+
|
|
39
|
+
def __getnewargs_ex__(self):
|
|
40
|
+
return (tuple(self),), {"absolute": self.absolute, "shadow_offset": self.shadow_offset,
|
|
41
|
+
"font_size": self.font_size, "font_weight": self.font_weight,
|
|
42
|
+
"tint_fn": self.tint_fn, "font_size_fn": self.font_size_fn,
|
|
43
|
+
"font_weight_fn": self.font_weight_fn, "shadow_fn": self.shadow_fn}
|
|
44
|
+
|
|
45
|
+
def __eq__(self, other):
|
|
46
|
+
if not isinstance(other, tuple):
|
|
47
|
+
return NotImplemented
|
|
48
|
+
# Plain tuples mean absolute. Metadata must participate in dirty
|
|
49
|
+
# detection: switching black from residual to absolute is an edit.
|
|
50
|
+
absolute = other.absolute if isinstance(other, Style) else True
|
|
51
|
+
return (self.absolute == absolute
|
|
52
|
+
and all(getattr(self, name, None) == getattr(other, name, None)
|
|
53
|
+
for name in ("shadow_offset", "font_size", "font_weight", "tint_fn",
|
|
54
|
+
"font_size_fn", "font_weight_fn", "shadow_fn"))
|
|
55
|
+
and tuple.__eq__(self, other))
|
|
56
|
+
|
|
57
|
+
def __ne__(self, other):
|
|
58
|
+
equal = self.__eq__(other)
|
|
59
|
+
return NotImplemented if equal is NotImplemented else not equal
|
|
60
|
+
|
|
61
|
+
__hash__ = tuple.__hash__
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def default_scalar_accumulation(context, residual):
|
|
65
|
+
"""Default size, weight, and shadow policy; also an explicit subtree reset."""
|
|
66
|
+
return context + residual
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def _scalar(fn, context, residual):
|
|
70
|
+
value = float(fn(context, residual))
|
|
71
|
+
if not math.isfinite(value):
|
|
72
|
+
raise ValueError("Style accumulation callback must return a finite scalar")
|
|
73
|
+
return value
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def _font_value(value, absolute, base):
|
|
77
|
+
return value(base) if callable(value) else (value if absolute else base + value)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def _font_step(previous, absolute, fn, residual):
|
|
81
|
+
# Evaluate against the selected font's real base size/weight, not a delta
|
|
82
|
+
# from zero. An explicit base font inside a font view keeps its own context.
|
|
83
|
+
return lambda base: _scalar(fn, _font_value(previous, absolute, base), residual)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def resolve_font_style(style, parent=(0.0, 0.0, False, False)):
|
|
87
|
+
"""Compose inherited policies; evaluate nonlinear steps at font selection.
|
|
88
|
+
|
|
89
|
+
The first four fields keep the existing delta/absolute representation.
|
|
90
|
+
Custom functions append two inherited policies and may turn a field into
|
|
91
|
+
a deferred scalar calculation. This preserves native font selection and
|
|
92
|
+
avoids guessing the font family/base size before the view requests it.
|
|
93
|
+
"""
|
|
94
|
+
values = list(parent[:4])
|
|
95
|
+
functions = list(parent[4:] or (default_scalar_accumulation,) * 2)
|
|
96
|
+
for i, name in enumerate(('font_size', 'font_weight')):
|
|
97
|
+
override = getattr(style, name + '_fn', None)
|
|
98
|
+
if override is not None:
|
|
99
|
+
functions[i] = override
|
|
100
|
+
value = getattr(style, name, None)
|
|
101
|
+
if value is not None:
|
|
102
|
+
if style.absolute:
|
|
103
|
+
values[i], values[i + 2] = value, True
|
|
104
|
+
elif functions[i] is default_scalar_accumulation and not callable(values[i]):
|
|
105
|
+
values[i] += value
|
|
106
|
+
else:
|
|
107
|
+
values[i] = _font_step(values[i], values[i + 2], functions[i], value)
|
|
108
|
+
values[i + 2] = True
|
|
109
|
+
if any(fn is not default_scalar_accumulation for fn in functions):
|
|
110
|
+
values.extend(functions)
|
|
111
|
+
return tuple(values)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def evaluate_font_style(context, size, weight):
|
|
115
|
+
return (_font_value(context[0], context[2], size),
|
|
116
|
+
_font_value(context[1], context[3], weight))
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def resolve_shadow_offset(style, parent=0.0, shadow_fn=None):
|
|
120
|
+
"""Signed shadow depth; omitted values inherit, absolute values bypass policy."""
|
|
121
|
+
offset = getattr(style, 'shadow_offset', None)
|
|
122
|
+
if offset is None:
|
|
123
|
+
return parent
|
|
124
|
+
if style.absolute:
|
|
125
|
+
return offset
|
|
126
|
+
fn = getattr(style, 'shadow_fn', None)
|
|
127
|
+
if fn is None:
|
|
128
|
+
fn = shadow_fn if shadow_fn is not None else default_scalar_accumulation
|
|
129
|
+
return _scalar(fn, parent, offset)
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def default_tint_accumulation(context_tint, tint_res):
|
|
133
|
+
"""Current extended-sRGB policy: positive toward white, negative toward zero."""
|
|
134
|
+
return tuple(channel + max(-1.0, min(1.0, delta)) *
|
|
135
|
+
(max(0.0, 1.0 - channel) if delta >= 0 else channel)
|
|
136
|
+
for channel, delta in zip(context_tint, tint_res))
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def draw_background(style, parent, tint_fn=None):
|
|
140
|
+
"""Resolve one deferred background to linear RGBA for the paint pass.
|
|
141
|
+
|
|
142
|
+
tint_fn receives extended-sRGB triples, before linear conversion/compositing.
|
|
143
|
+
The default moves positive residuals toward white, negative toward black.
|
|
144
|
+
Absolute colours keep HDR headroom and wide gamut. Alpha composites in
|
|
145
|
+
linear light against the enclosing background before descendants use it.
|
|
146
|
+
"""
|
|
147
|
+
from meltygui.hdr_color import srgb_to_linear
|
|
148
|
+
from meltygui.hdr_color import linear_to_srgb
|
|
149
|
+
|
|
150
|
+
if style is None:
|
|
151
|
+
return parent
|
|
152
|
+
if isinstance(style, Style) and not style.absolute:
|
|
153
|
+
base = tuple(linear_to_srgb(channel) for channel in parent[:3])
|
|
154
|
+
accumulate = getattr(style, 'tint_fn', None)
|
|
155
|
+
if accumulate is None:
|
|
156
|
+
accumulate = tint_fn if tint_fn is not None else default_tint_accumulation
|
|
157
|
+
rgb = tuple(float(c) for c in accumulate(base, tuple(style[:3])))
|
|
158
|
+
if len(rgb) != 3 or not all(map(math.isfinite, rgb)):
|
|
159
|
+
raise ValueError("tint_fn must return three finite extended-sRGB channels")
|
|
160
|
+
else:
|
|
161
|
+
rgb = style[:3]
|
|
162
|
+
alpha = max(0.0, min(1.0, style[3])) if len(style) == 4 else 1.0
|
|
163
|
+
return tuple(srgb_to_linear(channel) * alpha + behind * (1 - alpha)
|
|
164
|
+
for channel, behind in zip(rgb, parent)) + (1.0,)
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
def adjust_text_color():
|
|
168
|
+
"""The single text-colour policy, executed per glyph pixel on the GPU.
|
|
169
|
+
|
|
170
|
+
Edit this function to change text appearance. The suggestion and sampled
|
|
171
|
+
background are linear scRGB. Preserve readable suggestions, otherwise
|
|
172
|
+
move toward black or reference white by the smallest necessary amount.
|
|
173
|
+
Coverage/opacity remain the draw-list renderer's responsibility.
|
|
174
|
+
"""
|
|
175
|
+
return """
|
|
176
|
+
uniform sampler2D StyleContext;
|
|
177
|
+
uniform int DynamicStyles;
|
|
178
|
+
uniform float TextContrast;
|
|
179
|
+
|
|
180
|
+
vec3 adjust_text_color(vec3 suggestion) {
|
|
181
|
+
vec3 background = texelFetch(StyleContext, ivec2(gl_FragCoord.xy), 0).rgb;
|
|
182
|
+
vec3 weights = vec3(0.2126, 0.7152, 0.0722);
|
|
183
|
+
float behind = max(0.0, dot(background, weights));
|
|
184
|
+
float proposed = max(0.0, dot(suggestion, weights));
|
|
185
|
+
float ratio = (max(behind, proposed) + 0.05) /
|
|
186
|
+
(min(behind, proposed) + 0.05);
|
|
187
|
+
if (ratio >= TextContrast) return suggestion;
|
|
188
|
+
|
|
189
|
+
float dark = (behind + 0.05) / TextContrast - 0.05;
|
|
190
|
+
float light = (behind + 0.05) * TextContrast - 0.05;
|
|
191
|
+
float toDark = dark >= 0.0 && proposed > 0.0
|
|
192
|
+
? clamp((proposed - dark) / proposed, 0.0, 1.0) : 2.0;
|
|
193
|
+
float toLight = light <= 1.0 && proposed < 1.0
|
|
194
|
+
? clamp((light - proposed) / (1.0 - proposed), 0.0, 1.0) : 2.0;
|
|
195
|
+
return toDark <= toLight ? mix(suggestion, vec3(0), toDark)
|
|
196
|
+
: mix(suggestion, vec3(1), toLight);
|
|
197
|
+
}
|
|
198
|
+
"""
|