Commit Graph

593 Commits

Author SHA1 Message Date
Martín Lucas Golini
24bc5edd72 Fixes in whitespace collapsing, added white-space-collapse to the CSS specification. 2026-05-09 21:26:16 -03:00
Martín Lucas Golini
bc071bd88d Add line-height and text-indent support. 2026-05-09 01:38:43 -03:00
Martín Lucas Golini
0c3df503b4 Fix in background sizing when using pixel-density != 1. Updated new background tests due to the windowing size issues in the macOS CI. 2026-05-09 00:30:33 -03:00
Martín Lucas Golini
e94550a049 ui: Full HTML background property support + whitespace collapsing rewrite
Part 1: CSS background properties (UINodeDrawable, LayerDrawable)
Add `BackgroundMode` (Native / Html) to `UINodeDrawable`. When Html mode
is active, background rendering follows CSS/HTML semantics (repeat defaults
to repeat, clip plane always enabled, etc.). Native mode preserves the
original eepp behavior (no-repeat by default, clip only when repeating).
Add per-layer `background-origin`, `background-clip`, `background-attachment`
with `fromText` parsers and CSS property registration. `background-origin`
controls the reference box for position/percentage resolution.
`background-clip` enables per-layer content-box clipping.
`background-attachment: fixed` anchors the background to the scene root;
`local` is stubbed (needs per-widget scroll offset plumbing).
Replace the single `Repeat` enum with `RepeatX` / `RepeatY` enums supporting
two-value repeat (e.g. "repeat no-repeat", "space round"). Implement space
and round repeat rendering in `LayerDrawable::draw()`.
Fix `background-size: contain` to scale up (not just down) like HTML.
Rewrite the comma-separated multi-layer `background` shorthand parser with
`/size` separator, box keyword disambiguation, and attachment keywords.
UINode::{getBackground} detects `UI_HTML_ELEMENT` flag and lazily sets
`BackgroundMode::Html`.
Add golden image test: 20-tile image atlas via
`background: url(bnp.png) pos / size no-repeat` with browser-comparable HTML.
Part 2: HTML whitespace collapsing (HTMLFormatter → UIRichText)
Move whitespace collapsing from parse time to layout time. Previously
`HTMLFormatter::collapseXmlWhitespace` ran on the pugixml DOM before
CSS was resolved, using tag-name heuristics for inline/block detection.
This caused whitespace between elements with `display: inline-block`
(via CSS) to be incorrectly stripped.
The new pipeline preserves raw whitespace in `UITextNode` widgets (after
internal whitespace collapsing via `UIRichText::collapseInternalWhitespace`)
and defers boundary stripping to `UIRichText::rebuildRichText`, where every
widget's computed `CSSDisplay` is available via `UIWidget::isInlineDisplay()`.
- `UIWidget::isInlineDisplay()` returns true for text nodes and widgets
  with `CSSDisplay::Inline | InlineBlock`, used by boundary logic.
- `UITextNode::isWhitespaceOnly()` identifies collapsible text nodes.
- `findLogicalPrev/Next` walks up through inline ancestors to find the
  correct boundary element, matching HTML's whitespace transparency rule.
- Boundary stripping: leading/trailing spaces removed at block edges,
  preserved between inline-level siblings.
- Double-space prevention: when adding text that starts with a space,
  peeks at the last `SpanBlock` in RichText if it ends with a space,
  the leading space is stripped. This prevents consecutive spaces when
  whitespace nodes are separated by empty inline elements.
- `UITextNode::mLayoutCharCount` syncs the character index between
  `rebuildRichText` (where boundary-stripped text is added) and
  `positionRichTextChildren` (where widgets are mapped to render spans),
  fixing hitbox alignment for all text-bearing widgets.
Remove `HTMLFormatter::collapseXmlWhitespace`, `isInlineNode`,
`hasSignificantText`, `getLogicalPrev`, `getLogicalNext`, and the
`precomputeDisplayStyles` hack (~200 lines removed). `HTMLFormatter`
now only exposes `HTMLtoXML`.
Other fixes
- Remove `@import url(https://fonts.googleapis.com/css?family=Lato)`
  from ensoft.css (async HTTP use-after-free in test suite).
- `BlockLayouter::positionRichTextChildren` skips whitespace-only text
  nodes when advancing the character index.
- Fix in DrawableSearcher not finding already loaded textures.
2026-05-08 22:13:07 -03:00
Martín Lucas Golini
03a798820d Fix percentage resolution when parent is WrapContent (only for height's, for width we need to do some extra changes in layouters, added a plan to fix it later). 2026-05-03 12:32:27 -03:00
Martín Lucas Golini
7150633c1a Fixes in URI implementation to handle some special cases, added some tests too.
Fix flaky test.
Renamed tests to have consistent naming.
2026-05-03 02:22:37 -03:00
Martín Lucas Golini
ecf7c20262 Fix foreground-radius definition. 2026-05-03 00:48:13 -03:00
Martín Lucas Golini
fcb2cca844 Fixes for position: sticky, absolute and fixed. 2026-05-02 19:41:10 -03:00
Martín Lucas Golini
307d9249ac Add float and clear support.
Fixes in Base64 implementation.
Fixes in remote image loading.
2026-05-02 01:12:13 -03:00
Martín Lucas Golini
d54fd398f6 Fix bad includes.
Add very hacky and basic overflow support.
2026-05-01 19:06:36 -03:00
Martín Lucas Golini
6849401968 Merge remote-tracking branch 'origin/develop' into develop 2026-05-01 11:30:29 -03:00
Martín Lucas Golini
d64638d989 Out of flow positioning fixes. 2026-05-01 11:30:22 -03:00
Pierre Dittgen
ff96ef10c5 fix and update french translations (#177) 2026-05-01 10:51:41 -03:00
Martín Lucas Golini
936938b71f Added an option to set dynamic theming in the UICodeEditor. 2026-05-01 01:07:06 -03:00
Martín Lucas Golini
fc45707cd1 Fix padding and margin in empty spans with children. 2026-05-01 00:37:28 -03:00
Martín Lucas Golini
12b1ff0d62 Create the code element with the correct tag. 2026-04-30 20:59:13 -03:00
Martín Lucas Golini
10b8ed8622 Fix incorrect wrap in inline-blocks. 2026-04-30 13:31:36 -03:00
Martín Lucas Golini
6691d9c174 Improvements for ul and ol.
Added a few tags: dl, dt, dd.
Load style tags inside UIRichText blocks.
Added `display: list-item`.
2026-04-30 12:58:05 -03:00
Martín Lucas Golini
bcdd88d1e6 Fix french translation xml corrupted by accident. 2026-04-29 14:54:24 -03:00
Martín Lucas Golini
ae0fd6bc2b Fixes for absolute positioning and some minor details. 2026-04-29 13:05:29 -03:00
Martín Lucas Golini
84331ad9ad 1024x653 px width seems to be the upper limit to create windows on macOS CI, no idea why. 2026-04-29 01:16:13 -03:00
Martín Lucas Golini
dcd8ecee55 Split borders tests into two to fit in 650px height, which seems to be the maximum height we can use in macOS CI worker. 2026-04-29 00:56:01 -03:00
Martín Lucas Golini
e1d9642dc6 Simulate content-box for HTML compat layer. 2026-04-29 00:28:11 -03:00
Martín Lucas Golini
f765eae28d Greatly improve borders rendering, added a few tests.
Fixed `UIStyle::getProperty`, now respects specificity.
Fixed `StyleSheetPropertiesParser::addProperty` when inserted an already existing property.
2026-04-28 21:52:31 -03:00
Martín Lucas Golini
7c2fad64bc Add font shorthand parser (a simplified version to what we can support now). 2026-04-28 01:14:04 -03:00
Martín Lucas Golini
f6e284c6f5 Move Default Block-Level Margins from Stylesheet to Widget Construction. This is needed in order to have working rules line: * { margin: 0; } with low specificity. 2026-04-28 00:11:18 -03:00
Martín Lucas Golini
bbd91d2399 Added support for margin and padding in text spans. 2026-04-27 23:58:13 -03:00
Martín Lucas Golini
82a93dada4 Added UIHTMLListItem to handle list items properly. 2026-04-27 01:38:37 -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
8a9bc2cd47 Some HTML rendering fixes. Most important is the media query is correctly processed when combining style sheets. 2026-04-25 20:47:51 -03:00
Martín Lucas Golini
18ff217a11 Don't lock the editor while matching brackets. 2026-04-25 01:13:50 -03:00
Martín Lucas Golini
7307b524f4 Fix UISceneNode::solveRelativePath.
Some fixes in LLM Chat UI, also added the option to display the reasoning (`display_reasoning`).
2026-04-20 01:42:12 -03:00
Martín Lucas Golini
3d894eb566 Add Together LLM provider to the AI Assistant plugin. 2026-04-15 01:45:30 -03:00
Martín Lucas Golini
f95f32eeba Add ${relative_dir} useful to solve case mentioned at https://github.com/SpartanJ/ecode/discussions/876 2026-04-15 00:34:49 -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
04db5aa2f7 Fix text span attribute changes not updating the layout.
Fix UIHTMLBody.maxWidthResizingBug.
2026-04-14 01:24:50 -03:00
Martín Lucas Golini
e2b9b47b21 A couple of nits. 2026-04-13 15:42:27 -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
b43508b106 CI fails on macOS just because (window has a different size for some unrelated bug I cannot replicate or control), trying different window size. 2026-04-09 00:26:38 -03:00
Martín Lucas Golini
8bbb61d8f5 Open folder if valid on press enter in path input (SpartanJ/ecode#872).
Improved resources path solving.
Minor changes in tests.
2026-04-08 20:05:52 -03:00
Martín Lucas Golini
57929621df Prevent a crash when signature parameters are incorrect.
"About ecode" close with escape (SpartanJ/ecode#873).
2026-04-08 15:51:35 -03:00
Martín Lucas Golini
fd01c1ad2c Add a few HTML visual tests. 2026-04-08 01:02:23 -03:00
Martín Lucas Golini
311dffba7c Improved RichText custom sizes to indicate if it's a block. 2026-04-08 00:28:23 -03:00
Martín Lucas Golini
5e6c05d0c5 Fixes in Color::isColorString, added some functions to String, refactored a few things in LuaPattern. Fixed a crash while rendering text with only spaces. Improved FunctionString performance. 2026-04-07 00:05:51 -03:00
Martín Lucas Golini
061cb53dbf Fix pt, em, rem, pc, in, cm, mm to follow HTML spec.
Fix hexa color validation in Color::isColorString.
2026-04-05 03:21:57 -03:00
Martín Lucas Golini
c3135e0b84 Deprecate TextInputPassword and its aliases. 2026-04-04 22:03:03 -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
2a410876a7 Fix "box" shorthand parser.
AI Assistant: Added some new free models.
Fixed a crash in UIWidgetInspector.
2026-04-04 02:42:10 -03:00
Martín Lucas Golini
56c8bdcc5b Treat width/height px units as dp in HTML environments for better scaling. 2026-04-04 00:53:07 -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