Commit Graph

131 Commits

Author SHA1 Message Date
Martín Lucas Golini
dc377335b9 graphics: migrate drawables to shared ownership
- introduce DrawablePtr and per-consumer createInstance() semantics
  - add TextureDrawable wrappers backed by shared TexturePtr handles
  - migrate regions, sprites, nine-patches, state lists, skins, groups, gradients,
    UI widgets, tools, modules, ecode, and eeiv to shared drawable ownership
  - remove ownIt flags, manual drawable deletion, and unload-based lifetime handling
  - replace drawable callback IDs with RAII change connections
  - move Variant drawable storage outside its scalar union
  - split UIIcon source lookup from explicit drawable instance creation
  - retain icon instances used by rendering loops instead of cloning per frame
  - avoid shared source mutation in texture-region consumers
  - use drawable type tags instead of RTTI casts
  - fix nearest-size UIIcon lookup
  - document the drawable source/instance contract and add ownership tests
2026-07-20 01:09:36 -03:00
Martín Lucas Golini
3a1c75f4f6 Added Insert Date / Time functionality (Settings -> Edit -> Insert Date, plus commands for each option).
Fixed a use after free bug in UICodeEditorSplitter.
2026-06-28 01:52:14 -03:00
Martín Lucas Golini
e720b70863 • Fixed the keybinding merge bug. The helper was restoring missing default commands
by overwriting an occupied default shortcut, which treated user bindings like mod+d=duplicate-line-or-selection as stale
  because that command is not in the default keybinding table. Now it only adds a default when the default shortcut is actually
  free.

  Added a regression test in src/tests/unit_tests/uicodeeditor_tests.cpp:108 covering the reported case: mod+d reassigned, then
  an extra mod+e=show-markdown-preview binding exists. This was reported in SpartanJ/ecode#914.

• Implemented the splitter-level focus state cache, it will remember closed documents cursor state when reopened and it will restore cursor state per-code editor and not per-document (SpartanJ/ecode#893).
2026-06-25 11:26:31 -03:00
Martín Lucas Golini
7daca81bd6 Allow to select the default "New Tab Position" (SpartanJ/ecode#904) from the settings menu at Settings -> Document -> Global Settings -> New Tab Position.
| Option | Behavior |
	| --- | --- |
	| **`afterActive`** | Opens immediately to the right of your currently focused tab. *(VS Code default)* |
	| **`last`** | Opens at the very end of the entire tab bar, to the right of all open tabs. |
	| **`first`** | Opens at the very beginning of the tab bar, to the far left. |
	| **`leftOfActive`** | Opens immediately to the left of your currently focused tab. |
2026-05-19 20:38:24 -03:00
Martín Lucas Golini
382781edec Make auto-indent configurable (none, preserve, smart). 2026-04-12 16:42:54 -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
5c264ce906 ecode: allow configuring the default working directory of a new terminal 2026-04-03 17:28:59 -03:00
Martín Lucas Golini
64794b7859 Fix SyntaxHighlighter::tokenizeAsync (damn i pushed a temporal change into develop).
Fix duplicating the load of session snapshot temporal files.
2026-03-22 17:38:51 -03:00
Martín Lucas Golini
faedaa43f4 Refactor in LineWrap operations enums and structs, moved everything into linewrap.hpp.
Revisiting some old code, the Map Editor, many things are not properly layouted, I might fix it later, for the moment a few minor fixes.
Fix build output and app output highlighting.
Fix isStopSelChar used in UITextInput for text selection (double click).
2026-01-21 00:03:01 -03:00
Martín Lucas Golini
ac91cedf9c Added support for maximizing the current tab widget (commands: maximize-tab-widget and restore-maximized-tab-widget), it can also be triggered right clicking a tab -> Maximize Tab Widget (SpartanJ/ecode#651).
Added UINodeLink, this is a very simple node that lets you set a link to another node.
Improved focus control in the status bar panels and windows.
It's possible now in UICodeEditorSplitter to cancel a split request with a custom function checker.
When downloading a file that it's not a supported format, it will try to open with the default external program set in the host OS.
2026-01-11 13:32:48 -03:00
Martín Lucas Golini
d6f60354c1 Improve UIWindow default focusing behavior.
Adjust `window-flags` behavior when used from CSS.
Display a download progress window when download-file-web is used. Also support loading images and sounds from downloads.
Minor safety checks added for engine termination and window closing.
Minor changes in Http.
2026-01-10 01:49:20 -03:00
Martín Lucas Golini
8260cf6999 Added an option to set to always open terminal in exclusve mode (SpartanJ/ecode#800).
Set language extension priorities per-project.
Added "reset-global-language-extensions-priorities" and "reset-project-language-extensions-priorities" commands.
Added FreeBASIC and QB64 syntax highlighting.
Fixed a minor bug that loaded the same language into memory multiple times.
2026-01-09 01:38:12 -03:00
Martín Lucas Golini
d5e10aa790 Improve color emoji rendering.
Add new test for emojis + text.
Enabled text-shaper by default.
Updated the NotoColorEmoji font with the latest version.
2025-12-30 17:52:31 -03:00
Martín Lucas Golini
1d2dd61cf5 Added option to force opening documents in main split (Settings -> Window -> Open Documents in Main Split). 2025-12-29 01:44:04 -03:00
Martín Lucas Golini
f3b6fcacf4 Implementation for "Light/dark theme should follow system default" (issue SpartanJ/ecode#754). 2025-12-22 01:16:05 -03:00
Martín Lucas Golini
5965d77e02 Add an option to configure the Settings -> Window -> "Use editor font in input fields" (this is enabled by default but not always convenient). 2025-12-21 13:00:52 -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
abda8775ac Add terminal cursor styles selection at Settings -> Terminal -> Cursor Styles.
Fix how selection in terminal is enabled or disabled based on the reported application capabilities.
Added sharedir option in premake files.
2025-12-19 12:56:16 -03:00
Martín Lucas Golini
2008b57033 Added SheenBidi segmentation. 2025-11-10 00:53:28 -03:00
Martín Lucas Golini
4edb776d51 Added a new option to set files associations in projects.
Introduced a new configuration file for projects in the project file `.ecode/settings.json` file.
Initially it supports files associations the following way:
```json
{
	"files.associations": {
		"glob_pattern": "language_name",
		"functional": "cpp",
		"map": "cpp",
		"**/c++/**": "cpp"
	}
}
```

Format is exactly the same as in vscode, and also, if no `.ecode/settings.json` file exists but does `.vscode/settings.json` file exists, it will fallback to that one.
This is related to the discussion in issue SpartanJ/ecode#585.
2025-10-06 00:12:05 -03:00
Martín Lucas Golini
0ec661852a eepp: Updated mojoal, dr_mp3, dr_flac. Fixed various mojoal bugs. Added SoundFileFactory::isKnownFileExtension. SoundFileFactory::isValidAudio, SoundFileFactory::isValidAudioFile.
ecode: Added audio player support (SpartanJ/ecode#96).
2025-09-29 00:02:06 -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
dfd47dd1e3 Native file dialogs support WIP (SpartanJ/ecode#653). 2025-09-18 23:20:16 -03:00
Martín Lucas Golini
993506dfb7 Added "Open Project in New Window" (SpartanJ/ecode#654). Can be enabled from Settings -> Window -> Open Project in New Window.
Close UIFileDialog with escape key down and not key up.
2025-09-13 19:26:03 -03:00
Martín Lucas Golini
10fdd7a0b1 Warn before closing terminal that is running some process (SpartanJ/ecode#644), probably still WIP, not tested outside Linux (it might not build).
Build ecode with -g1, it should improve crash information.
Regain editor focus after escaping from settings menu.
Prevent crash when during widget splitting (couldn't reproduce it but this just avoid crashing, SpartanJ/ecode#650).
2025-09-13 01:37:30 -03:00
Martín Lucas Golini
97a89902e2 Added Open in New Window and Move to New Window as tab right-click options and Edit options (SpartanJ/ecode#629).
Added `Move Tab to Start` and `Move Tab to End` in tab right-click options (SpartanJ/ecode#630).
Added `--profile` CLI option (SpartanJ/ecode#634).
Added `--disable-plugins` CLI option (SpartanJ/ecode#635).
Moved `crashes` directory to profile directory (SpartanJ/ecode#639).
Added `Settings -> Terminal -> Close Terminal Tab on Exit` (SpartanJ/ecode#643).
2025-09-10 01:35:11 -03:00
Martín Lucas Golini
66e793436c Implemented a basic Spell Checker plugin using typos-cli. Still needs some improvements but it's working (SpartanJ/ecode#515). 2025-08-20 20:45:36 -03:00
Martín Lucas Golini
dbb36cdcf4 Fix Objective-C highlighter.
Added Objective-C++ highlighter (SpartanJ/ecode#616).
Replaced "Treat .h file as C++" in favor of "Treat .h files as..." with multiple options, including auto-detection (SpartanJ/ecode#614).
Refresh semantic-highlighting after syntax highlighter change.
2025-08-17 16:56:12 -03:00
Martín Lucas Golini
4da71def34 Fix bug not displaying an error when opening a terminal in unsupported platforms and then allowing to open an external terminal (mentioned in SpartanJ/ecode#609). 2025-08-10 11:04:15 -03:00
Martín Lucas Golini
79ec7d1c77 Allow configuring the default shell command line arguments. Set -l by default in Haiku (to recover the user profile by default, SpartanJ/ecode#601). 2025-07-27 13:15:59 -03:00
Martín Lucas Golini
4877a4341a Added "Buffer Only Mode" to Global Search & Replace (#545).
emscripten build is now multi-threaded only.
2025-07-05 20:57:21 -03:00
Martín Lucas Golini
e0b763f637 Node debugger fixes.
LSP mouse hover fix when there's also a linter error in the same position.
Fix in emscripten file parameter parsing.
2025-07-02 01:41:18 -03:00
Martín Lucas Golini
a79c16ec0a Added the possibility to configure the font hinting and font anti-aliasing.
MenuBar buttons are now slightly more separated.
When switching between dark and light ui prefers color scheme now pick a dark/light color scheme if the currently set is the default (SpartanJ/ecode#535).
Fix a bug in menu bar pop-up not hiding properly.
2025-06-30 02:23:51 -03:00
Martín Lucas Golini
e072649221 Fixes for the UITabWidget tab switcher.
Remove "Flash Cursor" (it was too broken and it's not useful after alll).
2025-05-27 01:13:44 -03:00
Martín Lucas Golini
70aecddd18 Added support for Tab jump modes (SpartanJ/ecode#469). Including a Tab Switcher (I have no better name for the moment).
Added support to hide the Tab Bar (SpartanJ/ecode#477).
Updated efsw.
Updated JS, TS, C++ grammars.
2025-05-24 01:10:50 -03:00
Martín Lucas Golini
da4386ddff Address: Specifying non-existing working directory for a build step isn't handled properly (SpartanJ/ecode#432).
ChatUI hide tooltips after button click.
Enable Tab Stops by default.
2025-04-10 18:40:46 -03:00
Martín Lucas Golini
4146bfef6f Implemented tab-stops support (SpartanJ/ecode#55). Not enabled by default until I'm sure I did not break anything. 2025-04-09 21:22:17 -03:00
Martín Lucas Golini
62d3a41527 Disable flashing cursor by default. 2025-04-06 10:25:52 -03:00
Martín Lucas Golini
8ac5e1e2e8 Refactor in SyntaxDefinition and related classes.
Minor improvements in CPP, CSS, xit syntax highlighting.
AI Assistant / LLM Chat now can restore previous opened chats and states (last model used, panel split), can have private conversations, can clone a previous conversation, plus some visual improvements.
Fixed a bug in tab widget splitting.
2025-03-26 23:55:29 -03:00
Martín Lucas Golini
9e6a29653f AI Assistant UI refactor.
Fixes in debugger an autocomplete plugin (from some of the new changes in both cases).
Fix UITextView not updating the aligment after padding change.
2025-03-14 21:56:05 -03:00
Martín Lucas Golini
2bccd1f836 More AI Assistant WIP. 2025-03-12 01:27:20 -03:00
Martín Lucas Golini
4ef3dfa312 AI Assistant WIP (first working version, no settings available and many things pending but chat working). 2025-03-11 22:04:46 -03:00
Martín Lucas Golini
0da3ffca17 Add flash cursor command and functionality. 2025-02-07 00:09:32 -03:00
Martín Lucas Golini
882e68542e Added expressions support in debugger.
Persist debugger state.
2025-01-12 20:29:44 -03:00
Martín Lucas Golini
cf84fc7cff Save side panel tabs order. 2025-01-01 16:18:26 -03:00
Martín Lucas Golini
9fc6078c61 Merge branch 'develop' into debugger 2024-12-29 23:50:46 -03:00
Martín Lucas Golini
793e87af5c Allow to split editors views by dragging tabs into the tab widget corners. 2024-12-29 23:50:24 -03:00
Martín Lucas Golini
d07bb2572c More WIP. 2024-12-28 13:16:03 -03:00
Martín Lucas Golini
60784d79a6 Window size fixes on macOS.
Changes for SpartanJ/ecode/#373
2024-12-22 14:40:02 -03:00
Martín Lucas Golini
889ba51a2e IME fixes that should fix SpartanJ/ecode#355.
Fix a crash when loading empty file from disk.
2024-11-15 00:07:40 -03:00