Commit Graph
535 Commits
Author SHA1 Message Date
Martín Lucas Golini 4789bfb5f9 ecode: add configurable screenshot support
Add an unlocked take-screenshot command and expose it under Settings -> Window with a default Print Screen binding.

Allow configuring the screenshot destination, filename pattern, and output format. Save screenshots under the ecode configuration directory by default, notify users after capture, and provide an action to open the result in the integrated image viewer.

Addresses a request in SpartanJ/ecode#950.
2026-08-11 15:43:22 -03:00
Martín Lucas Golini 6df0c0738f Add font size selection to ecode font picker:
Allow UIFontPickerDialog sections to be hidden and make ecode's UI, editor, and terminal font dialogs select both the font and its size.
Keep external fonts selectable across asynchronous font enumeration, including when they share a family name with a system font, and label them as external. Also normalize UILinearLayout weights across visible children so hidden picker columns release their space correctly.
Update font picker previews, size units, menu labels, translations, and lifetime handling.

Addresses SpartanJ/ecode#944.
2026-08-11 12:38:34 -03:00
Martín Lucas Golini 23cf9084ce perf: reduce allocations across UI and editor hot paths
- reuse formatting, document text, property resolution, and layout storage
  - use inline containers for interpolations, callbacks, wrapping, and matcher state
  - optimize single-line insertion by mutating document lines without splitting
  - iterate PATH entries directly in Sys::which and reuse candidate buffers
  - avoid temporary clocks and string copies in frequent ecode plugin updates
  - retain documents during autocomplete cache jobs and prevent duplicate scheduling
  - fix PatternMatcher copy assignment and MSVC move-only container compilation
  - expand coverage for matching, text insertion, reusable strings, and Sys::which
2026-08-09 21:38:17 -03:00
Martín Lucas Golini 13508c20d1 UIImageViewer expanded capabilities.
ecode image viewing will not auto-scale images to the pixel density.
eeiv: Modernizing eeiv to use eepp GUI, already working just like before, there are probably a few things to fix.
2026-07-31 01:25:41 -03:00
Martín Lucas Golini a113c0f6c9 Rename FrameBufferRegistry, ShaderProgramRegistry and VertexBufferRegistry file names.
Rename class and file of PackManager to PackRegistry to follow the new naming convention.
2026-07-26 23:16:24 -03:00
Martín Lucas Golini 27a57960f4 SubPixel hinting support. 2026-07-25 18:59:20 -03:00
Martín Lucas Golini b940407102 ecode: The custom fallback font reused the "fallback-font" resource key, replacing the built-in CJK fallback in FontService.
Fix:

  - User fallback now uses "user-fallback-font".
  - Built-in CJK and custom fallback fonts remain registered together.
  - Added and passed a regression test verifying both fallback resources remain in the chain.

Fixes in premake5.lua:

  - Removed obsolete PRECISE_F32=1; Wasm already provides precise float behavior.
  - Moved ENVIRONMENT=worker,web to final application link options.

Fixed MarkdownView not getting the correct CSS style from the base theme.
2026-07-25 01:36:00 -03:00
Martín Lucas Golini caa461a735 complete scoped ownership migration
- migrate themes, skins, icons, shaders, and shader programs to resource handles
  - make UIThemeManager scene-owned and publish resources through scopes and catalogs
  - retain shaders through their programs and expose non-owning GPU registries
  - replace FrameBuffer and VertexBuffer factory ownership with unique pointers
  - migrate engine, UI, tools, examples, tests, and eterm to the new ownership APIs
  - remove the obsolete raw-owning ResourceManager templates
  - document the completed Stage 7 architecture and remaining validation work
  - add ownership, registry, and scoped shader-program coverage
2026-07-24 22:45:31 -03:00
Martín Lucas Golini 6b277e508b migrate fonts to scoped resource ownership
- replace FontManager with per-ResourceScope FontService instances
  - publish font factories into explicit or default resource scopes
  - import default resources into UI scene scopes unless explicitly disabled
  - keep related font faces strongly owned without hot-path weak_ptr locking
  - add cached glyph advance queries without creating texture pages
  - fix font picker preview ownership, cleanup, and rapid switching
  - selectively evict TextLayout cache entries when referenced fonts unload
  - document FontService, ResourceCatalog, and cache invalidation semantics
  - migrate examples, tools, benchmarks, and tests to the scoped font API
  - expand coverage for font ownership, texture release, and layout caching
2026-07-24 01:54:51 -03:00
Martín Lucas Golini dc377335b9 graphics: migrate drawables to shared ownership
- introduce DrawablePtr and per-consumer createInstance() semantics
  - add TextureDrawable wrappers backed by shared TexturePtr handles
  - migrate regions, sprites, nine-patches, state lists, skins, groups, gradients,
    UI widgets, tools, modules, ecode, and eeiv to shared drawable ownership
  - remove ownIt flags, manual drawable deletion, and unload-based lifetime handling
  - replace drawable callback IDs with RAII change connections
  - move Variant drawable storage outside its scalar union
  - split UIIcon source lookup from explicit drawable instance creation
  - retain icon instances used by rendering loops instead of cloning per frame
  - avoid shared source mutation in texture-region consumers
  - use drawable type tags instead of RTTI casts
  - fix nearest-size UIIcon lookup
  - document the drawable source/instance contract and add ownership tests
2026-07-20 01:09:36 -03:00
Martín Lucas Golini 2810501cba Added UIFilePickerDialog support for ecode (SpartanJ/ecode#903) and improved the dialog. 2026-06-30 00:05:29 -03:00
Martín Lucas Golini 3a1c75f4f6 Added Insert Date / Time functionality (Settings -> Edit -> Insert Date, plus commands for each option).
Fixed a use after free bug in UICodeEditorSplitter.
2026-06-28 01:52:14 -03:00
Martín Lucas Golini e720b70863 • Fixed the keybinding merge bug. The helper was restoring missing default commands
by overwriting an occupied default shortcut, which treated user bindings like mod+d=duplicate-line-or-selection as stale
  because that command is not in the default keybinding table. Now it only adds a default when the default shortcut is actually
  free.

  Added a regression test in src/tests/unit_tests/uicodeeditor_tests.cpp:108 covering the reported case: mod+d reassigned, then
  an extra mod+e=show-markdown-preview binding exists. This was reported in SpartanJ/ecode#914.

• Implemented the splitter-level focus state cache, it will remember closed documents cursor state when reopened and it will restore cursor state per-code editor and not per-document (SpartanJ/ecode#893).
2026-06-25 11:26:31 -03:00
Martín Lucas Golini 0693688f73 Cache cursors in local sessions, this will restore last cursor position of a recently closed file. 2026-06-24 01:42:12 -03:00
Martín Lucas Golini b83c21bfdd ecode: Display the keybindings of some commands I forgot to add the keybind display. 2026-06-15 13:25:22 -03:00
Martín Lucas Golini 9bfa128658 Use the new tab position setting for *all* new tabs (SpartanJ/ecode#904). 2026-06-04 16:42:10 -03:00
Martín Lucas Golini 89028491ef Try fix macOS not passing tests due to incorrect Window sizing in macOS CI.
Add support to diff images in UIDiffView.
2026-05-23 14:17:48 -03:00
Martín Lucas Golini 97fc336955 Fix: When build is triggered with unsaved files don't display the file save dialog for files that are just in text buffer.
Fix: Ctrl+W does not close the tab in Build Settings: Added Event::OnFocusWithin so the tab widget registers that event to setCurrenWidget in UICodeEditorSplitter.
2026-05-18 01:08:14 -03:00
Martín Lucas Golini 4660257857 Remove ellipsis from some actions / commands (SpartanJ/ecode#892). 2026-04-26 17:37:36 -03:00
Martín Lucas Golini d93b03f624 Pump versions.
Add keybindings to the ecode markdown viewer.
Optimization in BlockLayouter.
Hack to display code in <pre><code> HTML elements.
2026-04-26 01:12:42 -03:00
Martín Lucas Golini 3715933d7a Fix folder not closing when a terminal has focus (SpartanJ/ecode#890).
Fix release notes in nightly.
2026-04-25 11:41:30 -03:00
Martín Lucas Golini 20f44697a0 Add support to select multiple-files in file tree view (SpartanJ/ecode#869). 2026-04-16 19:13:43 -03:00
Martín Lucas Golini 4a4da521d9 Change default keybindings using option+key for macOS to make possible to input text with those key combinations. Mostly changes on modifier keys for some operations: status control panels will switch with mod+number and ctrl+number will switch to tab number, also ctrl+tab and ctrl+shift+tab will advance and move to previous tab.
Also: "lsp-symbol-code-action" will default to cmd+return. "format-doc" will default to mod+option+f.
Important: these changes do not *change* any currently configured shortcut, existing users will have to migrate manually, this is intentional to not disrupt current users work flows.
These changes are for the issue: SpartanJ/ecode#877.
2026-04-14 20:56:49 -03:00
Martín Lucas Golini 382781edec Make auto-indent configurable (none, preserve, smart). 2026-04-12 16:42:54 -03:00
Martín Lucas Golini 2e481f40f3 Update app title when focusing any new tab that it's not an editor or a terminal. 2026-04-12 15:45:04 -03:00
Martín Lucas Golini 400d143d9c Fix emscripten build. 2026-04-09 11:13:33 -03:00
Martín Lucas Golini 7d09138bb0 Add woff2 font format support.
Try again luck with the test that it's failing in macOS...
2026-04-09 00:54:22 -03:00
Martín Lucas Golini 3fd6e5637b Fix SVG align rendering defaults to match HTML.
Fix accidental reflow on UIRichText.
2026-04-05 13:17:57 -03:00
Martín Lucas Golini 98088dd44d Add color boxes support (SpartanJ/ecode#825). 2026-04-04 14:11:05 -03:00
Martín Lucas Golini d4ec180134 ecode: allow configuring the default working directory of a new terminal (SpartanJ/ecode#857). Fix border of app_hint.
eepp: UIHTMLTable column width calculation improvements.
2026-04-03 18:21:44 -03:00
Martín Lucas Golini 26a97be74d Added HTML native linting.
Added HTML folding-ranges.
Fixed HTMLFormatter::HTMLtoXML.
Added `TextDocument::toString` and `TextDocument::toUtf8String`.
Fixed incorrect check for emojis in Text.
Fixed potential crash due to CSS parsing issues in StyleSheetSpecification.
2026-03-29 14:31:26 -03:00
Martín Lucas Golini 084152ec09 Don't force the Diff View when opening diff or patch files, give a menu option to show the diff preview (closes issue SpartanJ/ecode#863). 2026-03-27 11:24:05 -03:00
Martín Lucas Golini 43a1dca16c Layouting improvements for UIImage and HTML elements.
Default StyleSheetUnit is now Dp when it's not specified (this is not used very often but in HTML mode we need to respect the DPI).
Fix MarkdownView fonts color when on Light theme.
2026-03-27 00:01:09 -03:00
Martín Lucas Golini 939316365e Fixed text-decoration in spans.
Added markdown live preview option in markdown files (I'll iterate later).
2026-03-26 01:01:04 -03:00
Martín Lucas Golini 571ed644f5 Integration of the diff/patch viewing and file comparison in ecode (SpartanJ/ecode#130). 2026-03-25 23:44:57 -03:00
Martín Lucas Golini 527c1dc56c Fix in drop-down height calculation.
Added `--diff` parameter.
Allow to load multiple files and folders from the CLI.
2026-03-25 13:20:10 -03:00
Martín Lucas Golini d0093a7801 Added multi-file diff / patch visualization support. 2026-03-25 00:54:48 -03:00
Martín Lucas Golini d38415f335 UIDiffView: Added Reduced / Complete toggle. Added LCS support. A lot of extra improvements. 2026-03-24 18:50:54 -03:00
Martín Lucas Golini 534c052722 Added side by side view in the diff viewer, allow to change view mode with a switch. Performance improvements and more. 2026-03-24 13:34:56 -03:00
Martín Lucas Golini 0e923adea9 UI: Add UIDiffView for specialized diff/patch visualization
- Integrated dtl into thirdparty for native string diffing
- Implemented UIDiffView, a composite wrapper for UICodeEditor with a custom plugin (UIDiffEditorPlugin)
- Handles dynamic string diffing and standard .patch file parsing
- Automatically extracts target filename from patch headers for proper syntax highlighting
- Corrects line numbers in gutter to match the diff origins while hiding patch headers
- Wired into App::loadDiffFromPath and GitPlugin
- Added exhaustive unit tests in uidiffview_test.cpp
2026-03-23 18:50:26 -03:00
Martín Lucas Golini 047ce7abdd Fix terminal close warning spawning multiple times and allowing to crash the app. 2026-03-20 12:40:40 -03:00
Martín Lucas Golini 4718a52423 Migrated from robin_hood to unordered_dense (for UnorderedMap and UnorederedSet).
Added support for SmallVector using svector (and we are already using it in a couple of places).
Added debug symbol inspector script for the new SmallVector in project/scripts/debug.
Added tilde support for files and folders passed as parameters from the CLI in ecode (and added FileSystem::expandTilde).
Fixed a bug in "light-dark" parsing.
2026-03-14 15:13:41 -03:00
Martín Lucas Golini dcf118f739 ecode: Fix "Show Image Preview". 2026-03-02 11:05:58 -03:00
Martín Lucas Golini 677aab8e0c UIAbstractView::findRowWithText now accepts FindRowWithTextMatchKind instead of a boolean to force equal comparison.
Refactor of some examples, added a new hello world example but using UIApplication.
ecode: Fixed how it filters the `sbt`, `srt` and `sb` universal locator switches.
2026-02-26 00:32:48 -03:00
Martín Lucas Golini e553398b04 ecode: log the configuration path during initialization. 2026-02-02 19:04:39 -03:00
Martín Lucas Golini e2c390eedf Fix --verbose on Windows. 2026-02-02 14:49:25 -03:00
Martín Lucas Golini bbb8fce43f Instead of using *::cell::text and tableview::cell::icon in breeze and styles we will just use *::tableview::cell. And leave the inner elements of PushButton unaltered (since the father already can alter them).
Did some fixes in `Text::findCharacterPos` and `Text::findCharacterFromPos`, also tentatively added support for soft-wrap in those function (I haven't tested much yet).
2026-02-01 21:46:42 -03:00
Martín Lucas Golini f180e58e56 Added Settings -> Window -> UI Theme -> Syntax Color Scheme to use the editor color scheme globally for the UI Theme colors, having a single color palette for the whole UI and making much easier to style the UI, this solves SpartanJ/ecode#661, since now we support one UI theme for each existing syntax color scheme. Still a WIP, I'll continue improving it during the development of 0.7.5, but it's ready to use. 2026-01-18 01:38:27 -03:00
Martín Lucas Golini cf6c14fbda Do not copy the whole SyntaxDefinition into TextDocument but instead keep the shared pointer to the definition.
Did some minor SyntaxDefinition memory access safety improvements.
In breeze color scheme definition renamed `--win-icon` to `--icon-line` and removed `--scroll-button` since it was not being used.
2026-01-17 00:19:51 -03:00
Martín Lucas Golini 0f8f15fa53 Pump ecode and eepp versions.
Fix sharedir option in premake files.
Minor logic fix in copy file buffer.
2026-01-13 00:05:20 -03:00