canscope/cmake/patches/ftxui-window.patch

78 lines
3.1 KiB
Diff

diff --git a/include/ftxui/component/component_options.hpp b/include/ftxui/component/component_options.hpp
index d387fad..dd9173c 100644
--- a/include/ftxui/component/component_options.hpp
+++ b/include/ftxui/component/component_options.hpp
@@ -261,6 +261,7 @@ struct WindowOptions {
Ref<bool> resize_right = true; ///< Can the right side be resized?
Ref<bool> resize_top = true; ///< Can the top side be resized?
Ref<bool> resize_down = true; ///< Can the down side be resized?
+ Ref<bool> draggable = false; ///< Can do window dragging?
/// An optional function to customize how the window looks like:
std::function<Element(const WindowRenderState&)> render;
diff --git a/include/ftxui/dom/elements.hpp b/include/ftxui/dom/elements.hpp
index 63d5bf0..c8e5445 100644
--- a/include/ftxui/dom/elements.hpp
+++ b/include/ftxui/dom/elements.hpp
@@ -87,7 +87,7 @@ Decorator borderStyled(BorderStyle);
Decorator borderStyled(BorderStyle, Color);
Decorator borderStyled(Color);
Decorator borderWith(const Pixel&);
-Element window(Element title, Element content, BorderStyle border = ROUNDED);
+Element window(Element title, Element content, BorderStyle border = ROUNDED, std::optional<Color> color = std::nullopt);
Element spinner(int charset_index, size_t image_index);
Element paragraph(const std::string& text);
Element paragraphAlignLeft(const std::string& text);
diff --git a/src/ftxui/component/window.cpp b/src/ftxui/component/window.cpp
index 7690781..7095e91 100644
--- a/src/ftxui/component/window.cpp
+++ b/src/ftxui/component/window.cpp
@@ -256,7 +256,7 @@ class WindowImpl : public ComponentBase, public WindowOptions {
drag_start_y = event.mouse().y - top() - box_.y_min;
// Drag only if we are not resizeing a border yet:
- drag_ = !resize_right_ && !resize_down_ && !resize_top_ && !resize_left_;
+ drag_ = (!resize_right_ && !resize_down_ && !resize_top_ && !resize_left_) && *draggable;
return true;
}
diff --git a/src/ftxui/dom/border.cpp b/src/ftxui/dom/border.cpp
index eb793b2..595b6e4 100644
--- a/src/ftxui/dom/border.cpp
+++ b/src/ftxui/dom/border.cpp
@@ -109,11 +109,6 @@ class Border : public Node {
p4.automerge = true;
}
- // Draw title.
- if (children_.size() == 2) {
- children_[1]->Render(screen);
- }
-
// Draw the border color.
if (foreground_color_) {
for (int x = box_.x_min; x <= box_.x_max; ++x) {
@@ -125,6 +120,11 @@ class Border : public Node {
screen.PixelAt(box_.x_max, y).foreground_color = *foreground_color_;
}
}
+
+ // Draw title.
+ if (children_.size() == 2) {
+ children_[1]->Render(screen);
+ }
}
};
@@ -504,8 +504,8 @@ Element borderEmpty(Element child) {
/// │content│
/// └───────┘
/// ```
-Element window(Element title, Element content, BorderStyle border) {
+ Element window(Element title, Element content, BorderStyle border, std::optional<Color> color) {
return std::make_shared<Border>(unpack(std::move(content), std::move(title)),
- border);
+ border, color);
}
} // namespace ftxui