Commit Graph

2101 Commits

Author SHA1 Message Date
Martín Lucas Golini
6b4179b896 Optimize CSS selector traversal and fix sibling combinators:
- inline hot-path node and stylesheet traversal accessors
  - correct adjacent and general sibling matching direction
  - preserve inverse sibling operator behavior
  - add selector traversal and sibling regression tests
2026-07-10 01:26:06 -03:00
Martín Lucas Golini
5787e895ba Fix HTML font-weight resolution for @font-face variants
Apply @font-face weights to loaded variable fonts, preserve author
font-family names for internal font-face aliases, and re-resolve text fonts
when style or weight changes after initial font selection.

Also updates the font-weight native variant plan to reflect the current
architecture and remaining work around static native weight variants.
2026-07-09 02:03:19 -03:00
Martín Lucas Golini
95d0a8881a Fix CSS var resolution during style application
Resolve CSS variable values at the points where properties are applied,
inherited, propagated, and used to seed transitions. This prevents raw
var() values from leaking into widget state or transition start/end
values when style attributes, inherited properties, or state-dependent
rules are involved.

Also refresh style definitions when widgets load so selector-dependent
rules are evaluated with the final widget context, and add regression
coverage for inline style vars, inherited vars, parent-state child rules,
tab close opacity, and foreground tint transitions.
2026-07-08 20:48:27 -03:00
Martín Lucas Golini
e984c87105 Implement CSS box-sizing for HTML layout sizing
Add CSS box-sizing support for HTML widgets and route CSS-specified
width/height conversion through virtual sizing hooks. Resolve percentage
CSS sizes against the containing block content box, and apply content-box
or border-box conversion consistently across block, flex, grid, table,
and rich text layout paths.

Keep table wrapper width behavior compatible with CSS table layout by
overriding the table width conversion separately, so padded percentage
tables do not overflow their assigned wrapper width.

Add focused regressions for block padding, flex-basis sizing, grid
containers, table containers, and the border rendering cases that depend
on explicit border-box sizing.
2026-07-06 00:32:17 -03:00
Martín Lucas Golini
87c56142ee Forgot to make these recursive in UISceneNode, needed by the UIWidgetInspector:
/** Enables or disables focus highlighting in this scene and embedded UI scenes. */
	void setHighlightFocusRecursive( bool highlight );

	/** Enables or disables box debug drawing in this scene and embedded UI scenes. */
	void setDrawBoxesRecursive( bool draw );

	/** Enables or disables debug-data drawing in this scene and embedded UI scenes. */
	void setDrawDebugDataRecursive( bool debug );
2026-07-05 20:00:50 -03:00
Martín Lucas Golini
ab14972fd3 TextureFactory small refactor.
Fix in getTextureCacheName.
2026-07-05 19:21:23 -03:00
Martín Lucas Golini
ffbfe0a646 Fix stack-overflow in HTML widget elements with unresolvable percentage height.
Fix textarea sizing bug with percentage height.
2026-07-05 00:31:36 -03:00
Martín Lucas Golini
d56135c2d1 Fix CSS specificity rules.
Added control over the UISceneNode children and added setHighlightOverRecursive. This allows us to inspect nested UISceneNodes.
Fix hit-box bug when changing display.
2026-07-05 00:14:02 -03:00
Martín Lucas Golini
627d22163b Fixed an layout invalidation bug where we were discarding real invalidations.
Allow to defer `<img defer src>` (useful for local tests).
2026-07-04 16:14:47 -03:00
Martín Lucas Golini
3938536bff Merge branch 'develop' into feature/uiwebview 2026-07-04 01:25:49 -03:00
Martín Lucas Golini
8b32f26b9f Some extra optimizations to CSS selector. 2026-07-04 01:25:42 -03:00
Martín Lucas Golini
9975e2a17d Merge branch 'develop' into feature/uiwebview 2026-07-04 00:13:15 -03:00
Martín Lucas Golini
592186ae73 Singleton implementation optimization. 2026-07-04 00:13:06 -03:00
Martín Lucas Golini
a4f4e033b7 Merge branch 'develop' into feature/uiwebview 2026-07-03 13:27:51 -03:00
Martín Lucas Golini
f3e5bee80a Fix body height invalidation issue killing performance. 2026-07-03 13:27:27 -03:00
Martín Lucas Golini
e5751da1a0 Refactor UIWebView document scene isolation and async resource lifetime.
Move UIWebView documents into isolated UISceneNode instances, keep document viewport and extent metrics synchronized, and fix shrink/grow behavior after navigation, async CSS, and viewport changes. Scope author styles and font-face resources per document scene, ignore stale async callbacks after navigation or destruction, and add deterministic coverage for CSS, fonts, images, cookies, hit testing, and document extent updates.

Fixes in UIWebView -> doc -> html -> body resizing issues. Added a few tests to catch regressions.
2026-07-03 01:33:47 -03:00
Martín Lucas Golini
772742cbbb Fix percentage in font-size for UIWebView.
Unload fonts from scene in UIWebView.
2026-07-02 00:06:02 -03:00
Martín Lucas Golini
5ad166b648 Cleaner hit testing: removed UISceneNode::overFind() override; UIRoot now has root-scoped child traversal extent for embedded document scenes. 2026-07-01 23:11:11 -03:00
Martín Lucas Golini
4c73311789 Greatly improved UIWebView implementation. 2026-07-01 20:36:00 -03:00
Martín Lucas Golini
38448008ec Merge branch 'develop' into feature/uiwebview 2026-07-01 19:10:22 -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
57cdab7b7f Implemented UIFontPickerDialog.
Fixed alignment in UILinearLayout when padding is used.
2026-06-29 20:32:08 -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
7cf9a685b9 Merge branch 'develop' into feature/uiwebview 2026-06-24 00:00:08 -03:00
Martín Lucas Golini
d939766355 Disable glew by default (entering deprecation). 2026-06-23 22:54:44 -03:00
Martín Lucas Golini
f0473e06d4 Fixes for build. 2026-06-22 10:31:32 -03:00
Martín Lucas Golini
e5f3983c44 Upgrade SOIL2.
Allow to disable GLEW dependency, it will now be disabled by default so we can test. The idea is to remove the dependency completely once this is confirmed to work.
2026-06-22 10:12:02 -03:00
Martín Lucas Golini
77099864e5 Nits in UIFileDialog and serialize/unserialize for later use in ecode. 2026-06-18 00:31:36 -03:00
Martín Lucas Golini
14a47c64d0 Update efsw and backport utf encoder/decoder fixes to eepp. 2026-06-17 00:53:07 -03:00
Martín Lucas Golini
d04f4502db Fix minor bug in UIFileDialog text input row selection. 2026-06-15 01:32:28 -03:00
Martín Lucas Golini
c47f437903 Merge branch 'develop' into feature/uiwebview 2026-06-14 20:01:54 -03:00
Martín Lucas Golini
407fc1ae11 Minor nit: improve dropdown list scrolling. 2026-06-14 16:30:21 -03:00
Martín Lucas Golini
e84e9fe0f4 Fix warning. 2026-06-13 12:16:17 -03:00
Martín Lucas Golini
eb9f3bff8c Merge branch 'develop' into feature/uiwebview 2026-06-12 23:41:12 -03:00
Martín Lucas Golini
a81f99e0a5 Try fix ecode arm64 MSVC nightly build. 2026-06-12 01:51:08 -03:00
Martín Lucas Golini
e8be533de6 eepp: Added FileMapped class for mmap'ed files, added IOStreamFileMapped to be able to use it as any other IOStream implementation.
Some nits in FileSystem::fileGet, added support for case-insensitive BMH implementation.
ecode: project global search now uses mmap'ed files for big files and made several tweaks and optimizations to avoid trashing the memory allocator.
2026-06-10 02:03:31 -03:00
Martín Lucas Golini
5cba387497 UIWebView with its own UISceneNode support WIP. 2026-06-09 01:30:14 -03:00
Martín Lucas Golini
b64b8f21f0 Improve signature documentation pop-up positioning when displaying signature help.
In system font resolver: Prefer native/open desktop families for CSS generics.
2026-06-09 01:23:32 -03:00
Martín Lucas Golini
785fd41bd5 Fix crash when clicked a menu sub-menu button form the code editor context menu. 2026-06-08 13:56:29 -03:00
Martín Lucas Golini
05e81c23de Communicate the reason for the layout invalidation, store and process the reasons, this is an initial setup, we will continue working on it. The new system will allow us to fine grain the invalidations to avoid re-layouting on each attribute change, this commit already does some of this but it's not fully fine-grained and needs more work. 2026-06-08 02:33:49 -03:00
Martín Lucas Golini
12413ea630 Temporary fix until we have proper layout invalidation. 2026-06-07 02:00:42 -03:00
Martín Lucas Golini
788dcc6bf4 Add "defer" to force CSS files to load asynchronously (this will help unit-test some layout issues).
Added `Browser-Like Layout Invalidation Plan`.
Minor changes in HTML example.
Added a couple of examples that I'll use for unit-tests.
2026-06-07 00:32:54 -03:00
Martín Lucas Golini
68904b9656 Fixed layouting performance issues in UIRichText (layout invalidation trashing issues). Everything is highly commented given that none of these changes are obvious and it's very easy to break it.
Added tests to verify possible regression. And added a simple benchmark with some metrics to inspect layouting invalidation issues.
2026-06-06 15:54:54 -03:00
Martín Lucas Golini
9bc9b099ad Implemented calc, min, max, clamp CSS functions. 2026-06-06 02:19:40 -03:00
Martín Lucas Golini
5d0e31e52e Allow to inspect widget style from widget inspector. 2026-06-04 02:00:39 -03:00
Martín Lucas Golini
b72e2c5d0b More grid fixes and fixed a couple of crashes. 2026-06-03 02:07:37 -03:00
Martín Lucas Golini
cb1f5739dd Merge branch 'develop' into feature/grid-layout 2026-06-02 18:38:31 -03:00
Martín Lucas Golini
7795ec2fc3 Fix importing CSS within CSS.
Fix in colors with vars processing.
Added prefers-contrast support at least for parsing.
2026-06-02 18:37:41 -03:00
Martín Lucas Golini
c5e6a4d1c9 Merge branch 'develop' into feature/grid-layout 2026-06-02 14:51:57 -03:00