Commit Graph
77 Commits
Author SHA1 Message Date
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
Martín Lucas Golini 46dad2ac63 Added support for data:image URIs.
StyleSheetPropertiesParser: fix quoted text reading.
ecode: ProjectDirectoryTree fix recursive directories scan.
2022-08-06 03:06:16 -03:00
Martín Lucas Golini 7372fe0051 premake5 try fix ecode build for macOS (not tested).
Added support for more mouse buttons.
Minor fix in CSS specification.
Changed TERM to xterm-256color.
2022-07-19 15:06:21 -03:00
Martín Lucas Golini 4680b3a406 Added UIClip and ClipType. New clipping options for UINode. CSS property "clip" now allows: "none", "padding-box", "content-box" and "border-box". Allowing more precise clipping for each UINode.
Replaced all clipEnable and clipDisable calls in favor of setClipType.
UINode::draw now does not call drawBackground and drawSkin. Both functions now are called separately before the draw call.
Input: fixed WindowClose and Quit event report (Quit won't trigger onClose).
ecode: Code clean up, added TerminalManager. Fixed some minor bugs.
2022-07-18 01:44:34 -03:00
Martín Lucas Golini 38bb518bd3 UIWidget: Added virtual function "acceptsDropOfWidget" and "acceptsDropOfWidgetInTree". Added UI_TOOLTIP_ENABLED that allows to enable/disable tooltips in an element. Added functions: "isTooltipEnabled" and "setTooltipEnabled".
UITabWidget: Added support to draggable object hovering highlight color.
UICodeEditor: fixed vertical scroll.
Added UIRoot class, that represents the root (":root") element of the scene node.
2022-06-04 00:33:17 -03:00
Martín Lucas Golini c754eb4ba6 Added tabbar-allow-switch-tabs-in-empty-spaces property to UITabWidget. 2022-06-03 19:02:09 -03:00
Martín Lucas Golini 835dc3a55a Added shorthand: min-size and max-size.
SyntaxDefinitionManager: Improved JSON.
breeze theme improvements.
ecode: Added mime-type icons (using nonicons).
2022-06-01 01:21:21 -03:00
Martín Lucas Golini cdcf7b76aa WIP: breeze light colors.
Added prefers-color-scheme and pixel-density media queries.
Added support to :not(:state). This is not part of the CSS specification, but it's useful.
2022-03-21 20:57:05 -03:00