Commit Graph

72 Commits

Author SHA1 Message Date
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
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