This commit is contained in:
ArthurSonzogni 2024-12-01 17:44:06 +01:00
parent f9b47f427d
commit b22241ec52
No known key found for this signature in database
GPG Key ID: 41D98248C074CD6C
11 changed files with 22 additions and 32 deletions

View File

@ -69,8 +69,7 @@ class ScreenInteractive : public Screen {
void ForceHandleCtrlZ(bool force);
// Selection API.
//void OnSelectionChange(std::function<void(std::
//void ClearSelection();
// TODO: Implement somethings here.
private:
void ExitNow();

View File

@ -113,8 +113,6 @@ Decorator focusPositionRelative(float x, float y);
Element automerge(Element child);
Decorator hyperlink(std::string link);
Element hyperlink(std::string link, Element child);
Element selectable(Element child);
Decorator selectable(void);
// --- Layout is
// Horizontal, Vertical or stacked set of elements.

View File

@ -4,7 +4,6 @@
#ifndef FTXUI_DOM_NODE_HPP
#define FTXUI_DOM_NODE_HPP
#include <list> // for list
#include <memory> // for shared_ptr
#include <vector> // for vector
@ -58,7 +57,6 @@ class Node {
};
virtual void Check(Status* status);
protected:
Elements children_;
Requirement requirement_;

View File

@ -18,7 +18,6 @@ class Selection {
Selection SaturateHorizontal(Box box);
Selection SaturateVertical(Box box);
private:
Selection* const parent_ = nullptr;
const int start_x_;

View File

@ -21,7 +21,6 @@ struct Pixel {
underlined(false),
underlined_double(false),
strikethrough(false),
selectable(false),
automerge(false) {}
// A bit field representing the style:
@ -31,7 +30,6 @@ struct Pixel {
bool inverted : 1;
bool underlined : 1;
bool underlined_double : 1;
bool selectable : 1;
bool strikethrough : 1;
bool automerge : 1;

View File

@ -10,7 +10,6 @@
#include "ftxui/screen/image.hpp" // for Pixel, Image
#include "ftxui/screen/terminal.hpp" // for Dimensions
#include "ftxui/component/captured_mouse.hpp" // for CapturedMouse
namespace ftxui {

View File

@ -850,10 +850,10 @@ bool ScreenInteractive::HandleSelection(Event event) {
}
if (mouse.motion == Mouse::Moved) {
selection_end_x_ = mouse.x;
selection_end_y_ = mouse.y;
return true;
}
selection_end_x_ = mouse.x;
selection_end_y_ = mouse.y;
return true;
}
if (mouse.motion == Mouse::Released) {
selection_pending_ = nullptr;

View File

@ -1,23 +1,24 @@
#include "ftxui/dom/elements.hpp" // for Element, Decorator
#include "ftxui/dom/node_decorator.hpp" // for NodeDecorator
#include "ftxui/component/event.hpp" // for Event
// Copyright 2024 Arthur Sonzogni. All rights reserved.
// Use of this source code is governed by the MIT license that can be found in
// the LICENSE file.
#include "ftxui/component/event.hpp" // for Event
#include "ftxui/dom/elements.hpp" // for Element, Decorator
#include "ftxui/dom/node_decorator.hpp" // for NodeDecorator
namespace ftxui {
namespace {
class Selectable : public NodeDecorator {
public:
explicit Selectable(Element child)
: NodeDecorator(std::move(child)) {}
explicit Selectable(Element child) : NodeDecorator(std::move(child)) {}
private:
void Render(Screen& screen) override {
for (int y = box_.y_min; y <= box_.y_max; ++y) {
for (int x = box_.x_min; x <= box_.x_max; ++x) {
screen.PixelAt(x, y).selectable = true;
}
for (int x = box_.x_min; x <= box_.x_max; ++x) {
screen.PixelAt(x, y).selectable = true;
}
}
NodeDecorator::Render(screen);
@ -26,14 +27,12 @@ class Selectable : public NodeDecorator {
} // namespace
Element selectable(Element child) {
return std::make_shared<Selectable>(std::move(child));
}
Decorator selectable(void) {
return
[](Element child) { return selectable(std::move(child)); };
return [](Element child) { return selectable(std::move(child)); };
}
} // namespace ftxui

View File

@ -79,7 +79,7 @@ Selection Selection::SaturateVertical(Box box) {
const bool start_outside = !box.Contain(start_x, start_y);
const bool end_outside = !box.Contain(end_x, end_y);
const bool properly_ordered =
start_y < end_y || (start_y == end_y && start_x <= end_x);
start_y < end_y || (start_y == end_y && start_x <= end_x);
if (properly_ordered) {
if (start_outside) {

View File

@ -58,7 +58,7 @@ class Text : public Node {
screen.PixelAt(x, y).character = cell;
if (has_selection) {
if((x >= selection_start_) && (x <= selection_end_)) {
if ((x >= selection_start_) && (x <= selection_end_)) {
screen.PixelAt(x, y).inverted = true;
}
}

View File

@ -1,4 +1,4 @@
// Copyright 2023 Arthur Sonzogni. All rights reserved.
// Copyright 2024 Arthur Sonzogni. All rights reserved.
// Use of this source code is governed by the MIT license that can be found in
// the LICENSE file.