💻 C++ Functional Terminal User Interface. ❤️
Go to file
Arthur Sonzogni 3b4ab618a3
Prefer std::string over std::wstring. (#179)
In the past, FTXUI switched from std::string to std::wstring to support
fullwidth characters. The reasons was that fullwidth characters can be
stored inside a single wchar_t.

Then FTXUI added support for combining characters. A single glygh
doesn't even fit a wchar_t. Instead, a glyph can be arbitrary large.

The usage of wstring doesn't really fit the new model and have several
drawbacks:
1. It doesn't simplify the implementation of FTXUI, because of combining
   characters.
2. It reduces drawing performance by 2x.
3. It increase Screen's memory allocation by 2x.

This patch converts FTXUI to use std::string internally. It now exposes
std::string based API. The std::wstring API remains, but is now
deprecated.

Tests and examples haven't been update to show the breakage is limited.
They will be updated in a second set of patches.

Bug: https://github.com/ArthurSonzogni/FTXUI/issues/153
Co-authored-by: Tushar Maheshwari <tushar27192@gmail.com>
2021-08-08 23:25:20 +02:00
.github Merge Documentation and Emscripten workflow (#166) 2021-07-25 19:31:45 +02:00
.nxxm Add nxxm suport. 2020-12-21 15:36:04 +01:00
cmake Prefer std::string over std::wstring. (#179) 2021-08-08 23:25:20 +02:00
doc Refactor examples list in CMake (#170) 2021-07-31 18:32:48 +02:00
examples Prefer std::string over std::wstring. (#179) 2021-08-08 23:25:20 +02:00
include/ftxui Prefer std::string over std::wstring. (#179) 2021-08-08 23:25:20 +02:00
src/ftxui Prefer std::string over std::wstring. (#179) 2021-08-08 23:25:20 +02:00
tools Improve documentation workflow (#163) 2021-07-23 08:40:47 +02:00
.clang-format Variou details: 2020-08-28 23:54:25 +02:00
CMakeLists.txt Prefer std::string over std::wstring. (#179) 2021-08-08 23:25:20 +02:00
ftxui-config.cmake.in add dependency to Threads into generated cmake config (#52) 2020-10-16 22:07:30 +02:00
iwyu.imp Format using iwyu. 2021-05-15 00:19:19 +02:00
LICENSE Add LICENSE. Add take_any_args. 2019-01-06 16:14:19 +01:00
README.md Refactor examples list in CMake (#170) 2021-07-31 18:32:48 +02:00

FTXUI

issues license contributors

Functional Terminal (X) User interface

A simple C++ library for terminal based user interface.

Demo:

Demo image

Feature

  • Functional style. Inspired by [1] and React
  • Simple and elegant syntax (in my opinion).
  • Support for UTF8 and fullwidth chars (→ 测试).
  • No dependencies.
  • Cross platform. Linux/mac (main target), Windows (experimental thanks to contributors), WebAssembly.
  • Keyboard & mouse navigation.

Operating systems

  • linux-emscripten
  • linux-gcc linux-clang
  • windows-msvc
  • mac-clang

Example:

  vbox({
    hbox({
      text(L"left") | border,
      text(L"middle") | border | flex,
      text(L"right") | border,
    }),
    gauge(0.5) | border,
  });
┌────┐┌───────────────────────────────────────────────────────────────┐┌─────┐
│left││middle                                                         ││right│
└────┘└───────────────────────────────────────────────────────────────┘└─────┘
┌────────────────────────────────────────────────────────────────────────────┐
│██████████████████████████████████████                                      │
└────────────────────────────────────────────────────────────────────────────┘

Documentation:

Project using FTXUI

Feel free to add your projects here:

Hosted on:

External package:

It is highly recommanded to use cmake FetchContent to depends on FTXUI. This way you can specify which commit you would like to depends on.

If you don't, the following packages have been created: