3 Commits

Author SHA1 Message Date
Arthur Sonzogni
41dedc133c Merge f983f0a4f7 into 994915dbb9 2025-08-16 11:38:17 +00:00
Arthur Sonzogni
f983f0a4f7 Update 2025-08-16 13:38:05 +02:00
tattwamasi
994915dbb9 Add ftxui convenience/umbrella module to cmake rules to fix #1083 (#1085)
Some checks failed
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (cl, cl, windows-latest) (push) Has been cancelled
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (clang, clang++, macos-latest) (push) Has been cancelled
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (clang, clang++, ubuntu-latest) (push) Has been cancelled
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (gcc, g++, macos-latest) (push) Has been cancelled
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (gcc, g++, ubuntu-latest) (push) Has been cancelled
Build / CMake, ${{ matrix.compiler }}, ${{ matrix.os }} (cl, Windows MSVC, windows-latest) (push) Has been cancelled
Build / CMake, ${{ matrix.compiler }}, ${{ matrix.os }} (gcc, Linux GCC, ubuntu-latest) (push) Has been cancelled
Build / CMake, ${{ matrix.compiler }}, ${{ matrix.os }} (llvm, llvm-cov gcov, Linux Clang, ubuntu-latest) (push) Has been cancelled
Build / CMake, ${{ matrix.compiler }}, ${{ matrix.os }} (llvm, llvm-cov gcov, MacOS clang, macos-latest) (push) Has been cancelled
Build / Test modules (llvm, ubuntu-latest) (push) Has been cancelled
Documentation / documentation (push) Has been cancelled
* Add the umbrella module ftxui to the cmake module build.

* Update cpp20 modules documentation.
2025-07-27 11:39:46 +02:00
3 changed files with 40 additions and 16 deletions

View File

@@ -6,6 +6,7 @@ add_library(ftxui-modules)
target_sources(ftxui-modules target_sources(ftxui-modules
PUBLIC FILE_SET CXX_MODULES FILES PUBLIC FILE_SET CXX_MODULES FILES
src/ftxui/ftxui.cppm
src/ftxui/component.cppm src/ftxui/component.cppm
src/ftxui/component/animation.cppm src/ftxui/component/animation.cppm
src/ftxui/component/captured_mouse.cppm src/ftxui/component/captured_mouse.cppm

View File

@@ -12,8 +12,24 @@ FTXUI experimentally supports
compilation times and improve code organization. Each header has a compilation times and improve code organization. Each header has a
corresponding module. corresponding module.
**Example with CMake and Ninja** Use the FTXUI_BUILD_MODULES option to build the FTXUI project itself to provide C++ 20 modules,
for example with CMake and Ninja:
```sh
cmake \
-DCMAKE_GENERATOR=Ninja \
-DFTXUI_BUILD_MODULES=ON \
..
ninja
```
> [!NOTE]
> To use modules, you need a C++20 compatible compiler, CMake version 3.20 or
> higher, and use a compatible generator like Ninja. Note that Makefile
> generators **do not support modules**.
Then, in your own code you can consume the modules and code as normal:
```cpp ```cpp
import ftxui; import ftxui;
@@ -26,18 +42,25 @@ int main() {
} }
``` ```
```sh Note, the `ftxui` convenience module which simply pulls together all the modules:
cmake \
-DCMAKE_GENERATOR=Ninja \
-DFTXUI_BUILD_MODULES=ON \
..
ninja ```cpp
export import ftxui.component;
export import ftxui.dom;
export import ftxui.screen;
export import ftxui.util;
```
You can instead import only the module(s) you need if desired.
To properly find and link the modules with CMake, use `target_link_libraries` to get the right
compiler, linker, etc. flags.
```cmake
target_link_libraries(my_executable
#...whatever...
PRIVATE ftxui::modules
)
``` ```
> [!NOTE]
> To use modules, you need a C++20 compatible compiler, CMake version 3.20 or
> higher, and use a compatible generator like Ninja. Note that Makefile
> generators **do not support modules**.
### Module list ### Module list

View File

@@ -1022,23 +1022,23 @@ void ScreenInteractive::Signal(int signal) {
void ScreenInteractive::FetchTerminalEvents() { void ScreenInteractive::FetchTerminalEvents() {
#if defined(_WIN32) #if defined(_WIN32)
auto get_input_records = [&] { auto get_input_records = [&] () -> std::vector<INPUT_RECORD> {
// Check if there is input in the console. // Check if there is input in the console.
auto console = GetStdHandle(STD_INPUT_HANDLE); auto console = GetStdHandle(STD_INPUT_HANDLE);
DWORD number_of_events = 0; DWORD number_of_events = 0;
if (!GetNumberOfConsoleInputEvents(console, &number_of_events)) { if (!GetNumberOfConsoleInputEvents(console, &number_of_events)) {
return; return std::vector<INPUT_RECORD>();
} }
if (number_of_events <= 0) { if (number_of_events <= 0) {
// No input, return. // No input, return.
return; return std::vector<INPUT_RECORD>();
} }
// Read the input events. // Read the input events.
std::vector<INPUT_RECORD> records(number_of_events); std::vector<INPUT_RECORD> records(number_of_events);
DWORD number_of_events_read = 0; DWORD number_of_events_read = 0;
if (!ReadConsoleInput(console, records.data(), (DWORD)records.size(), if (!ReadConsoleInput(console, records.data(), (DWORD)records.size(),
&number_of_events_read)) { &number_of_events_read)) {
return; return std::vector<INPUT_RECORD>();
} }
records.resize(number_of_events_read); records.resize(number_of_events_read);
return records; return records;