Use shared_ptr instead of unique_ptr for elements.

This allow users to pass it into initializer list. Then clang-format
will produce 'acceptable' indentations.

This fixes:
https://github.com/ArthurSonzogni/FTXUI/issues/18
This commit is contained in:
ArthurSonzogni
2020-05-20 20:36:47 +02:00
parent 0aabc258a9
commit e1a71d5b9f
53 changed files with 520 additions and 523 deletions

View File

@@ -6,20 +6,22 @@
#define FTXUI_DOM_ELEMENTS_HPP
#include <functional>
#include <memory>
#include "ftxui/dom/node.hpp"
#include "ftxui/screen/color.hpp"
#include "ftxui/screen/screen.hpp"
namespace ftxui {
using Element = std::unique_ptr<Node>;
class Node;
using Element = std::shared_ptr<Node>;
using Elements = std::vector<Element>;
using Decorator = std::function<Element(Element)>;
using GraphFunction = std::function<std::vector<int>(int, int)>;
// --- Widget ---
Element text(std::wstring text);
Element separator();
Element separator(void);
Element separator(Pixel);
Element gauge(float ratio);
Element border(Element);

View File

@@ -14,10 +14,13 @@
namespace ftxui {
using Element = std::shared_ptr<Node>;
using Elements = std::vector<std::shared_ptr<Node>>;
class Node {
public:
Node();
Node(std::vector<std::unique_ptr<Node>> children);
Node(Elements children);
virtual ~Node();
// Step 1: Compute layout requirement. Tell parent what dimensions this
@@ -33,7 +36,7 @@ class Node {
// Step 3: Draw this element.
virtual void Render(Screen& screen);
std::vector<std::unique_ptr<Node>> children;
std::vector<Element> children;
protected:
Requirement requirement_;

View File

@@ -31,7 +31,7 @@ struct Pixel {
struct Dimension {
static Dimension Fixed(int);
static Dimension Fit(std::unique_ptr<Node>&);
static Dimension Fit(std::shared_ptr<Node>&);
static Dimension Full();
int dimx;