- Invoke DetachAllChildren from ~ComponentBase
- Define Focused using Active
- Compact TakeFocus loop code
- const-correctness for Parent, Active and Focused
* Reorganize ContainerBase
- Reduce Container overloads using default arguments
- Extract member function pointers to virtual functions
- Separate classes for Vertical, Horizontal and Tab containers
* Collect unpack from NodeDecorator subclasses
* Reduce redundant expansion for aliases
From CppCoreGuidelines:
Rule of Zero: C.20: If you can avoid defining default operations, do.
C.52: Use inheriting constructors to import constructors into a derived class that does not need further explicit initialization.
DRY forward and using declarations.
Miscellaneous:
Fix format.sh to output examples with normalised paths in sorted order.
Co-authored-by: ArthurSonzogni <sonzogniarthur@gmail.com>
Allows components to remove a child or access to children in general.
Co-authored-by: Felix Heitmann <fheitmann@se-gpu-03.intern.plath.de>
Co-authored-by: ArthurSonzogni <sonzogniarthur@gmail.com>
I finally got access to a computer using the Microsoft's Windows OS.
That's the opportunity to find and mitigate all the problems
encountered. This patch:
1. Introduce an option and a C++ definition to enable fallback for
Microsoft's terminal emulators. This allows me to see/test the
Microsoft output from Linux. This also allows Windows users to remove
the fallback and target non Microsoft terminals on Windows if needed.
2. Microsoft's terminal suffer from a race condition bug when reporting
the cursor position:
https://github.com/microsoft/terminal/pull/7583.
The mitigation is not to ask for the cursor position in fullscreen
mode where it isn't really needed and request it less often.
This fixes: https://github.com/ArthurSonzogni/FTXUI/issues/136
3. Microsoft's terminal do not handle properly hidding the cursor. Instead
the character under the cursor is hidden, which is a big problem. As
a result, we don't enable setting the cursor to the best position for
[input method editors](https://en.wikipedia.org/wiki/Input_method),
It will be displayed at the bottom right corner.
See:
- https://github.com/microsoft/terminal/issues/1203
- https://github.com/microsoft/terminal/issues/3093
4. Microsoft's terminals do not provide a way to query if they support
colors. As a fallback, assume true colors is supported.
See issue:
- https://github.com/microsoft/terminal/issues/1040
This mitigates:
- https://github.com/ArthurSonzogni/FTXUI/issues/135
5. The "cmd" on Windows do not properly report its dimension. Powershell
works correctly. As a fallback, use a 80x80 size instead of 0x0.
6. There are several dom elements and component displayed incorrectly,
because the font used is missing several unicode glyph. Use
alternatives or less detailled one as a fallback.
Allow Container::Vertical and Container::Horizontal to have an
external selector, similar to Container::Tab.
This is useful for implementing a menu of menu.
Co-authored-by: ArthurSonzogni <sonzogniarthur@gmail.com>
When switching from raw pointers toward shared_ptr, the destructor
wasn't updated correctly.
This patch:
- Fixes the issue.
- Add two regression tests.
- Use address sanitizer for the tests.
This fixes: https://github.com/ArthurSonzogni/FTXUI/issues/115
Make sure code points parsed are always valid UTF8. Don't assume stdin
is filled with valid data. Check for overlong UTF8 and add some tests.
The fuzzer has reached the following coverage:
- cov : 204
- ft : 754
- corp : 62/12257b
- lim : 2798
- exec/s : 1748
- rss : 445Mb
- L : 155/1946
- MS : 3
Fixed:https://github.com/ArthurSonzogni/FTXUI/issues/118
Current state: the fuzzer find interesting input immediately...
```
terminate called after throwing an instance of 'std::range_error'
what(): wstring_convert::from_bytes
```
See: https://github.com/ArthurSonzogni/FTXUI/issues/118