Commit Graph

659 Commits

Author SHA1 Message Date
Martín Lucas Golini
a2ee615553 • Fixed the Reddit inline sibling regression.
The float-aware rich-text layout was resetting curX for every block formatting context, including inline-blocks. That made consecutive action buttons overlap. The reset is now limited to block-level BFCs;
  inline-blocks retain normal cursor advancement.

  Added:

  - An always-on deferred CSS regression covering inline anchors, inline-block siblings, and float exclusions.
  - Strict action-row and title/domain ordering checks in the opt-in Reddit visual smoke test.
  - A small CSS fixture reproducing Reddit’s layout rules.
2026-07-30 19:33:20 -03:00
Martín Lucas Golini
d3ed96919a Fix percentage margin resolution after async HTML layout
Track percentage-based margins in UIHTMLWidget and re-resolve them when
  the containing parent acquires its final size. This prevents margins
  computed against an initial zero-width container from remaining stale
  until the viewport is resized.

  Add regressions covering percentage margin recomputation and the SS64
  footer layout after a deferred stylesheet is loaded.
2026-07-30 19:08:49 -03:00
Martín Lucas Golini
943103869a fix(ui): preserve CSS order for deferred stylesheets
Reserve stylesheet source positions when link elements are encountered
  instead of assigning them when asynchronous loading completes.

  Track the stylesheet and rule ordinals explicitly so deferred external
  styles retain their document order relative to later inline styles.
  Preserve this ordering when extracting marked stylesheet rules.

  Add an SS64 regression test covering heading and button styles after a
  deferred stylesheet finishes loading.
2026-07-30 17:52:27 -03:00
Martín Lucas Golini
9fc385307a Fix percentage-sized inline SVG layout and rendering
Resolve percentage dimensions for HTML-backed widgets after their containing
block has a definite size. Apply the resolution during rich-text, flex, and
grid layout without triggering broad layout invalidation.

Rasterize SVGs using their resolved dimensions when intrinsic width or height
attributes are missing or percentage-based.

Add regression coverage for percentage-sized SVGs and the SS64 navigation
buttons and search icon.
2026-07-30 13:38:36 -03:00
Martín Lucas Golini
935b28c91a Fix HTML input styling and internal control layout
Treat UIHTMLInput as the stable HTML/CSS host while keeping its native
control as an anonymous implementation detail.

Prevent author CSS from matching internal control widgets, avoiding
duplicated backgrounds and other styles. Keep valid input types such as
email intact for attribute selectors while falling back to compatible
native implementations.

Synchronize the internal control with the host content box after layout,
including flex sizing, and preserve intrinsic measurement for size and
font changes. Preserve input state across dynamic type changes and make
hidden transitions reversible.

Also fix border-radius calculations and add regressions for CSS ownership,
anonymous widget isolation, dynamic type changes, input sizing, and the
Causality newsletter form.
2026-07-27 11:17:23 -03:00
Martín Lucas Golini
90f41a64aa Fix HTML viewport sizing and background shorthand parsing
- parse slash-separated background position and size without requiring whitespace
  - recognize custom-property background images following an explicit size
  - resolve root body and html minimum heights against the layout viewport
  - avoid expanding semantic document boxes to the scrollable content extent
  - handle auto margins and percentage offsets correctly for absolute positioning
  - add DuckDuckGo layout and background shorthand regression tests
  - document the Xvfb limitation with multisampled OpenGL contexts
2026-07-27 00:59:39 -03:00
Martín Lucas Golini
0bf2b89970 Handle downscaled LCD glyphs with a dedicated resize path before atlas upload. This preserves row stride and RGB coverage, fixing corrupted icon-font glyphs at small sizes.
Add a golden-image regression test covering scaled subpixel glyphs from the Nonicons font.
2026-07-26 00:23:24 -03:00
Martín Lucas Golini
c0debbee9f Rollback to fix rendering. 2026-07-25 20:26:24 -03:00
Martín Lucas Golini
27a57960f4 SubPixel hinting support. 2026-07-25 18:59:20 -03:00
Martín Lucas Golini
ed46508df4 Merge branch 'feature/resource-shared-ownership' into develop 2026-07-25 01:36:21 -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
6351332d9b Closes SpartanJ/ecode#939 2026-07-24 10:48:11 -03:00
Martín Lucas Golini
0a7984b17d Register cmake.in.
Detect as function call something like `name ()` in Vala.
2026-07-17 12:30:18 -03:00
Martín Lucas Golini
41f58374bd Pre register new extensions. 2026-07-17 12:18:41 -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
7c931bf72e Fix again in UIScrollView scroll visibility.
Fix `whitespace: pre`.
2026-07-08 00:14:08 -03:00
Martín Lucas Golini
c9add7047b Fix floated auto-width sizing and line-height text placement
Preserve shrink-to-fit widths for floated HTML boxes whose CSS width is
auto, instead of letting their own block layout expand them back to the
containing block width. This matches the CSS float model and fixes floated
list-item menus where hover boxes were much wider than their content.

Also separate RichText visual font metrics from CSS line-box metrics. Text
runs now keep native font height for drawing while line layout still uses
CSS line-height, allowing the expected half-leading offset for vertically
centered text in block anchors.
2026-07-06 01:42:38 -03:00
Martín Lucas Golini
b192bcde1e Fix stale width being reused during the deferred CSS relayout. This happened when a display was being switched and during the layout change we didn't reset to the initial state. 2026-07-04 20:41:40 -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
d04f4502db Fix minor bug in UIFileDialog text input row selection. 2026-06-15 01:32:28 -03:00
Martín Lucas Golini
ff97358695 This should fix a possible but very implausible heap-use-after-free issue in the LSP client. 2026-06-11 02:16:24 -03:00
Martín Lucas Golini
650bbed0c5 Add MiMo support. 2026-06-11 01:57:57 -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
288950bf34 Image sizing fixes.
Added support for `:where` and `:is`.
2026-06-05 00:18:26 -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
bd2c8991a7 Fix incorrect calculations in grid layout when pixel density != 1. 2026-06-04 13:43:08 -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
f8f066c57a Fix infinite loop in flex layouter. 2026-06-02 19:42:50 -03:00
Martín Lucas Golini
2e14b4d0cb Span’s own RichText was using the parent match width while still inheriting text-align: center, so the text was rendered offset inside the correct span box. 2026-06-02 19:09:28 -03:00
Martín Lucas Golini
ad4e4285d6 Grid fixes. 2026-06-02 12:29:37 -03:00
Martín Lucas Golini
afa15f70c0 Grid layout fixes. 2026-06-02 00:43:30 -03:00
Martín Lucas Golini
98837b9cbe Merge remote-tracking branch 'origin/develop' into feature/grid-layout 2026-06-01 16:55:25 -03:00
Martín Lucas Golini
4370a45728 CSS white-space-collapse Support in HTML compatibility layer. 2026-06-01 16:53:45 -03:00
Martín Lucas Golini
46b3fa44f0 Grid layout WIP. 2026-06-01 02:14:00 -03:00
Martín Lucas Golini
37fcf45595 Update reference image in tests to pass unit-tests. 2026-05-31 02:30:36 -03:00
Martín Lucas Golini
0c27b124b5 Merge remote-tracking branch 'origin/develop' into develop 2026-05-31 01:06:34 -03:00
Martín Lucas Golini
7f3d997193 Fix tests. 2026-05-30 20:45:35 -03:00
Martín Lucas Golini
8be05aabdd Initial implementation to support rendering text nodes as anonymous flex items. This does not support wrapping yet. 2026-05-30 02:37:22 -03:00
Martín Lucas Golini
81d5854dc5 Fix SpartanJ/ecode#908. 2026-05-30 01:50:04 -03:00
Martín Lucas Golini
ddfd59e167 More flex improvements. 2026-05-29 21:20:56 -03:00
Martín Lucas Golini
cc0e516edc Nits 2026-05-29 18:17:39 -03:00
Martín Lucas Golini
453eaa03fc Several flex fixes. 2026-05-29 15:48:23 -03:00
Martín Lucas Golini
5305670f46 Fixes. 2026-05-29 03:04:27 -03:00
Martín Lucas Golini
20ef8854fc Flex support WIP. 2026-05-29 02:18:12 -03:00
Martín Lucas Golini
b36ef2cf85 Fix background draw in atomic boxes.
Fix in selector parser.
2026-05-25 01:49:04 -03:00
Martín Lucas Golini
aa9efcf13b Load CSS default HTML element styles from a CSS file with no specificity. This simplyfies how to setup the HTML defaults. Also set new defaults matching closer HTML spec. 2026-05-24 13:15:31 -03:00
Martín Lucas Golini
bb7682dd8f CSS float improvements. 2026-05-24 02:21:53 -03:00
Martín Lucas Golini
49971701ed float fixes. 2026-05-23 19:24:14 -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