Commit Graph
77 Commits
Author SHA1 Message Date
Martín Lucas Golini 4ffba20d07 feat(ui): add runtime inspector and fix HTML layout regressions
Add an opt-in TCP/NDJSON inspector for running eepp applications. It
provides authenticated, UI-thread-safe access to windows, scenes, and
widgets, including nested WebView documents. The v1 protocol supports
queries, trees, properties, focus, input actions, watches, screenshots,
and composed batches with result references and deferred execution.

Add a standard-library Python CLI, protocol documentation, build
entries, and integration tests. The listener remains disabled unless
explicitly enabled.

Fix HTML compatibility issues found while debugging NewsBlur:
- Let explicit flex minimums, including min-width: 0, replace the
  automatic content minimum.
- Measure flex lines against the container content box when padding
  and explicit dimensions are present.
- Keep promoted positioned descendants of hidden ancestors out of
  the paint list.
2026-09-28 01:15:39 -03:00
Martín Lucas Golini 1174e97911 Add optional filled areas to UI chart lines
Allow each LineSeries to fill down to the plot’s bottom edge, using a translucent version of its line color by default or a custom fill color. Render overlapping fills beneath the strokes, document the new API, and demonstrate it in the charts example. Add coverage for blending, data gaps, and toggling fills.
2026-09-26 23:59:19 -03:00
Martín Lucas Golini ec7c3c45dd Add document-level text selection to HTML and Markdown views
Introduce UITextSelectionController to coordinate selection across independent
RichText owners while retaining RichText hit testing and painting. Support
forward and reverse dragging, nested content, gap hit testing, autoscroll,
plain-text copy, select-all, and context menus.

Enable UIRichText and UITextSpan selection by default. Add CSS user-select
semantics and the -webkit-user-select alias, while preserving the separate
text-selection capability flag.

Clear selection safely when owners or documents are destroyed, suppress link
activation after a selection drag, and add regression tests, documentation,
and an updated rich-text example.
2026-09-26 22:11:32 -03:00
Martín Lucas Golini 8df1298470 eepp: add UI environment overrides and theme-aware eproc colors
Use Breeze theme colors for eproc's process table and Performance charts,
while preserving the translucent Username colors. Keep process icons
visible in the light theme with a white tint.

Add eproc CLI options for font hinting, font antialiasing, and color scheme.
Add -c/--prefers-color-scheme to eterm and retain close-on-exit through
its long options.

Support EEPP_FONT_HINTING, EEPP_FONT_ANTIALIASING, and EEPP_COLOR_SCHEME
across eepp UI apps, with valid environment values taking precedence
over application settings. Document and test the overrides.
2026-09-25 22:59:58 -03:00
Martín Lucas Golini 1de732962d Add eproc Performance view and family memory metrics
- Add CPU, memory, GPU, and network charts with ten-minute history,
  a 60-second view, clickable cards, and overall or per-core CPU views.
- Add Family Memory and Family Memory % to both process views. Use
  proportional memory on Linux, count zero-memory zombies correctly,
  and collect the data after the first frame without delaying it.
- Add column tooltips, rename Total Memory to Resident Memory, keep
  Command last by default, and migrate saved column layouts.
- Enable sorting within each tree level and preserve selection.
- Improve eepp chart margins and sorting behavior, and document UIChart.
2026-09-25 16:22:00 -03:00
Martín Lucas Golini 6a24bc0d6e eterm: implement Kitty keyboard protocol
Add Kitty keyboard protocol negotiation, state stacks, and semantic
key encoding with support for alternate keys, event types, associated
text, and reporting all keys as escape sequences.

Forward key press, repeat, and release events through the terminal
worker while preserving legacy input behavior. Keep AltGr composition
distinct from Alt shortcuts and correlate SDL text events to prevent
missing or duplicated international-layout input.

Add protocol documentation and unit coverage for negotiation, state
transitions, modifiers, function and keypad keys, shifted input,
AltGr composition, repeats, releases, and duplicate suppression.
2026-09-04 21:13:27 -03:00
Martín Lucas Golini 1d84bfda1b Nit. 2026-09-04 02:04:41 -03:00
Martín Lucas Golini 0fa1f65d04 Optimize eterm Kitty graphics rendering
- bulk-ingest Kitty APC payloads without per-byte UTF-8 processing
  - preserve APC buffer capacity between graphics commands
  - update existing GPU textures when replacing video frames
  - validate Base64 while decoding directly into transfer storage
  - reserve known image sizes and share immutable pixel buffers
  - coalesce superseded anonymous video-frame updates
  - support POSIX shared-memory transmission with stable snapshots
  - fix large unchunked images and anonymous placement replacement
  - add fragmentation, malformed input, video, and shared-memory tests
  - update Kitty graphics protocol documentation
2026-09-03 19:39:47 -03:00
Martín Lucas Golini 57754feb31 Added Kitty Graphics Protocol support for eterm module, still a WIP but working. 2026-09-03 17:19:27 -03:00
Martín Lucas Golini 36e54fe2a3 Add reactive UI data binding and observable collections
Introduce observable and computed values, typed widget bindings, validation groups, UI properties, commands, and UI-thread delivery.

Add observable vector and list model support for incrementally updated collections, with filtering and source-row mapping.

Modernize the Flight Booker and CRUD examples and add focused data handling and collection examples demonstrating the new APIs.

Organize the UI binding headers under ui/databinding, expand test coverage for notification and lifetime semantics, and document API selection, validation, ownership, threading, and performance behavior.
2026-08-22 01:00:04 -03:00
Martín Lucas Golini bf750761ae ecode: add customizable debugger panel layouts
- add a reusable right-side panel managed at the application level
  - migrate debugger tabs to UITabWidgetSplitter instances
  - support moving and splitting debugger tabs across bottom and right panels
  - restrict debugger tab drops to debugger-owned panel targets
  - serialize debugger tab layouts, panel state, and table column widths
  - add pixel and percentage column-width modes to UIAbstractTableView
  - support XML/CSS configuration and an optional width-mode context menu
  - preserve percentage totals across resizing, fit-to-content, minimum widths,
    scrollbar changes, and pixel-density rounding
  - add splitter edge hiding while preserving splitter-always-show precedence
  - use EventConnection ownership for safe widget and controller lifetimes
  - validate serialized splitter layouts with structural limits
  - display project-relative source paths in debugger stack frames
  - add ecode localization strings, CSS documentation, tests, and agent rules
2026-08-14 00:17:29 -03:00
Martín Lucas Golini acd19069c3 Add table/tree view CSS properties, UIModelCreator, and optimize string allocations
- Add CSS properties: editable, selection-type, selection-kind, icon-size,
  sort-icon-size, main-column, row-header-width, table-flags (pipe-separated),
  indent-width, expander-icon-size, table-model
- Create UIModelCreator static factory with 4 built-in models:
  widgettree, filesystem, diskdrives, cssproperties
- Eliminate 17 heap-allocating std::string copies in applyProperty()
  handlers across 12 files using String::iequals with const refs
- Replace table-flags token parsing with allocation-free String::splitCb
- Update cssspecification.md with all new property documentation

Fixed fall-through bugs in applyProperty.
Fixed status terminal button "Terminal" not setting the tooltip text correctly.
2026-07-28 00:15:04 -03:00
Martín Lucas Golini bdf94fea21 Added font-weight support. 2026-05-27 00:53:59 -03:00
Martín Lucas Golini ecf7c20262 Fix foreground-radius definition. 2026-05-03 00:48:13 -03:00
Martín Lucas Golini c039536b26 Added input-mode to UITextInput and deprecated UITextInputPassword to simplify the implementation.
Added Http::setDefaultUserAgent.
2026-04-03 15:53:08 -03:00
Martín Lucas Golini 9514b0fd73 Several general improvements and fixes across the UI: UIRichText, UITextSpan, UIImage, UIScrollView. 2026-03-08 03:05:17 -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 a9901ef23b Allow to configure window shadow style with: window-shadow-color, window-shadow-offset, window-shadow-size. 2026-02-16 13:32:14 -03:00
Martín Lucas Golini 0ca36374c4 Terminal status bar now is a Tab Widget and can create any number of terminals.
Fix a bug when initializing the LSP that provoked to not correctly send the initial commands.
Added `expand-text` to UIPushButton.
Added `setAcceptsDropOfWidgetFn` to externally control which widgets are accepted as droppable in UITabWidget.
Improved draw invalidation in UIStackWidget.
2025-12-27 17:22:12 -03:00
Martín Lucas Golini 8378f2a1fa Add scrollbar type and mode options for the terminal.
Hack auto-scroll in terminal for Windows 11.
Renamed ScrollViewType and made it global, properties are now `overlay` or `outside`.
Added a couple of goodies for the terminal mode (retain side panel configuration and restore it if no terminals are left).
2025-12-21 02:01:37 -03:00
Martín Lucas Golini 661c453d94 Added menu-width-mode for UIDropDownList. 2025-12-14 18:41:41 -03:00
Martín Lucas Golini 9d2aec8e14 eepp: Added UIImageViewer new tool widget to view images.
Added a new UIMessageBox event: `Event::OnDiscard`, this will triggered when window is closed without confirmation (`Event::OnConfirm`). And now `Event::OnCancel` is only triggered when is manually cancelled (click the cancel button).
ecode: Greatly improved image viewing experience. Now you can switch images from the same directory with the mouse wheel, also zoom, translate and rotate the images, images open in a new tab by default but quick-preview can be activated in `Settings -> Window -> Quick Preview Images` (SpartanJ/ecode#96).
2025-09-28 00:39:17 -03:00
Martín Lucas Golini ec8016eb0e Added CSS light-dark function support (https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/light-dark).
Fix minor bug in SyntaxTokenizer.
Fix default Google chepeast model.
2025-09-24 00:35:37 -03:00
Martín Lucas Golini 4b4a5f3491 More work on the Spell-Checker (SpartanJ/ecode#515).
Spell-Checked a lot of code.
2025-08-21 01:43:42 -03:00
Martín Lucas Golini a91fde6dfd Improved whitespace rendering performance on wrapped lines, now it has the same cost than non-wrapped lines.
Fixed: Debugger gutter not drawing its background.
Fixed: horizontal scrollbar sometimes being visible on wrapped documents.
Updated CSS Specification documentation.
2025-02-27 19:26:08 -03:00
Martín Lucas Golini 3762a6b87b Visual improvements. 2024-04-27 00:59:04 -03:00
Martín Lucas Golini 2daf5f837a Allow set line width in CSS poly function. 2024-04-27 00:34:06 -03:00
Martín Lucas Golini 59c5e72f4d Add hint-display property to UITextInput.
Minor refactor in ProjectDirectoryTree.
2024-03-10 23:27:59 -03:00
Martín Lucas Golini d276aa5bc7 Improve UICheckBox in different pixel densities.
Improve stylesheet units printing.
Added `dpr` as device-pixel rounded stylesheet length unit.
Fixes in 7GUIs Cells.
2024-02-20 00:34:52 -03:00
Martín Lucas Golini a40bee583b Implemented row header for TableView.
Added shorthands for border-left, border-right, border-top, border-bottom.
2024-02-16 21:17:26 -03:00
Martín Lucas Golini 1399d23770 Improved UICheckBox. Fixed a bug and simplified UIPluginManager. 2024-01-28 02:15:58 -03:00
Martín Lucas Golini c2fbda6de8 Improved StlysheetLength implementation and added two new unit types dprd and dpru.
Improved Tabs visibility when they are closable.
Fix minor bug in ProjectDirectoryTree.
Fixed a regression on UINodeDrawable.
2023-11-18 13:08:43 -03:00
Martín Lucas Golini 7452bf204c Added text-overflow support.
Minor bug fix on app title.
2023-11-12 23:03:49 -03:00
Martín Lucas Golini 7756ea7d03 ecode: Project Build minor fix. 2023-04-11 21:26:01 -03:00
Martín Lucas Golini 2c1811e519 eepp: Several fixes on widgets.
ecode: Build Side Panel WIP.
2023-04-10 18:58:34 -03:00
Martín Lucas Golini 05380a8069 Add focusable property to CSS elements. 2023-03-22 10:32:41 -03:00
Martín Lucas Golini 854e148a36 eepp: Added UIAnchor (Anchor or a).
UIRelativeLayout: Respect max width and height when using match_parent.
ecode: New icon WIP.
Fixed LSP TCP server connecting from the main thread (now connects async).
2023-03-20 16:33:35 -03:00
Martín Lucas Golini 54a6fd63e9 eepp:
Implemented CSS properties: text-shadow-offset and hint-shadow-offset. Renamed shadow-color to text-shadow-color. Added shorthand text-shadow and hint-shadow.
Improved tooltip positioning.
ecode:
Closes SpartanJ/ecode#2 (Fixes fullscreen window on Windows).
Closes SpartanJ/ecode#14 (Fixes folder rename, allows deleting folders).
Closes SpartanJ/ecode#15 (Fixes folder doesn't automatically expand when creating a new file after being closed).
2023-01-17 23:13:08 -03:00
Martín Lucas Golini d787887982 Fixed selectors with multiple pseudo-classes.
Added support for :focus-within pseudo-class.
Fixed a bug in CSSPropertiesModel.
Fixed a bug in UIWidgetInspector.
Improved CSS syntax definition.
UIEditor: replaced the widget inspector in favor of UIWidgetInspector. Fixed a bug with the find-replace component.
2022-10-22 02:17:37 -03:00
Martín Lucas Golini 2d53c07c4b Fix high CPU usage issue with emscripten demos. 2022-10-16 19:39:16 -03:00
Martín Lucas Golini 4b6ce692b9 ADded DroidSansFallbackFull as fallback font in ecode and eterm.
CheckBox and RadioButton now display hover effect.
Added alias "lg" for layout-gravity.
Node: Added addMouseClickListener and hasChild helper functions.
UICodeEditor: Fixed a minor bug that provoked to scroll the view when resizing the widget.
UITabWidget: minor bug fix.
ecode: Fixed a bug that caused to save a monospace font when the user did not accept to change it.
Added debug options to the widget inspector.
Added i18n to all strings defined in XML files/strings.
Added "Rename Session" button in the Terminal menu.
2022-10-16 03:23:01 -03:00
Martín Lucas Golini 54a177bc8e Added gravity-owner property to fix a bug in ecode document changed alert. 2022-10-14 23:48:37 -03:00
Martín Lucas Golini 4da3d8e750 UICodeEditor and ecode: Added line spacing support. 2022-10-09 13:36:03 -03:00
Martín Lucas Golini 6fff897d94 Added text-transform support. 2022-09-18 03:15:34 -03:00
Martín Lucas Golini 19e2aba3ba ecode: Added Terminal menu. 2022-09-12 01:38:11 -03:00
Martín Lucas Golini db57f39ae3 Added support to "cubic-bezier" timing function. 2022-09-08 20:14:07 -03:00
Martín Lucas Golini 5ca4fa2a88 Added "border" CSS shorthand.
Fixed "background" CSS shorthand parsing.
All UI Widgets emit "OnClose" event when being destroyed.
Minor fixes in UIDropDownList and UIImage.
Added aliases for "layout_width" -> "lw", "layout_height" -> "lh", "layout_weight" -> "lw8". And for "wrap_content" -> "wc" and "match_parent" -> "mp".
2022-08-22 01:52:48 -03:00
Martín Lucas Golini 55c63e3dbc Several minor improvements. 2022-08-20 03:46:14 -03:00
Martín Lucas Golini 294f743ab0 Updated README.md links to the new CDN.
Started refactoring UIEditor.
2022-08-07 22:01:40 -03:00
Martín Lucas Golini 220cf0f510 DrawableImageParser: now supports "icon" and "glyph" functions.
StyleSheetSpecification: Added "background-tint" and "foreground-tint" (tints the "background-image" and "foreground-image" respectively).
FunctionString: minor fix and now stores if the parameters was parsed as a string.
2022-08-07 02:09:52 -03:00