mirror of
https://github.com/ArthurSonzogni/FTXUI.git
synced 2025-09-28 16:29:34 +08:00
Add SliderWithCallback
component (#938)
Add SliderOption::on_change. Useful to observe a change to the value. Signed-off-by: Mikołaj Lubiak <lubiak@proton.me> Co-authored-by: ArthurSonzogni <sonzogniarthur@gmail.com>
This commit is contained in:
@@ -45,6 +45,7 @@ Event MouseReleased(int x, int y) {
|
||||
} // namespace
|
||||
|
||||
TEST(SliderTest, Right) {
|
||||
int updated = 0;
|
||||
int value = 50;
|
||||
auto slider = Slider<int>({
|
||||
.value = &value,
|
||||
@@ -52,23 +53,31 @@ TEST(SliderTest, Right) {
|
||||
.max = 100,
|
||||
.increment = 10,
|
||||
.direction = Direction::Right,
|
||||
.on_change = [&]() { updated++; },
|
||||
});
|
||||
Screen screen(11, 1);
|
||||
Render(screen, slider->Render());
|
||||
EXPECT_EQ(value, 50);
|
||||
EXPECT_EQ(updated, 0);
|
||||
EXPECT_TRUE(slider->OnEvent(MousePressed(3, 0)));
|
||||
EXPECT_EQ(value, 50);
|
||||
EXPECT_EQ(updated, 0);
|
||||
EXPECT_TRUE(slider->OnEvent(MousePressed(9, 0)));
|
||||
EXPECT_EQ(value, 90);
|
||||
EXPECT_EQ(updated, 1);
|
||||
EXPECT_TRUE(slider->OnEvent(MousePressed(9, 2)));
|
||||
EXPECT_EQ(value, 90);
|
||||
EXPECT_EQ(updated, 1);
|
||||
EXPECT_TRUE(slider->OnEvent(MousePressed(5, 2)));
|
||||
EXPECT_EQ(value, 50);
|
||||
EXPECT_EQ(updated, 2);
|
||||
EXPECT_TRUE(slider->OnEvent(MouseReleased(5, 2)));
|
||||
EXPECT_FALSE(slider->OnEvent(MousePressed(5, 2)));
|
||||
EXPECT_EQ(value, 50);
|
||||
}
|
||||
|
||||
TEST(SliderTest, Left) {
|
||||
int updated = 0;
|
||||
int value = 50;
|
||||
auto slider = Slider<int>({
|
||||
.value = &value,
|
||||
@@ -76,23 +85,31 @@ TEST(SliderTest, Left) {
|
||||
.max = 100,
|
||||
.increment = 10,
|
||||
.direction = Direction::Left,
|
||||
.on_change = [&]() { updated++; },
|
||||
});
|
||||
Screen screen(11, 1);
|
||||
Render(screen, slider->Render());
|
||||
EXPECT_EQ(value, 50);
|
||||
EXPECT_EQ(updated, 0);
|
||||
EXPECT_TRUE(slider->OnEvent(MousePressed(3, 0)));
|
||||
EXPECT_EQ(value, 50);
|
||||
EXPECT_EQ(updated, 0);
|
||||
EXPECT_TRUE(slider->OnEvent(MousePressed(9, 0)));
|
||||
EXPECT_EQ(value, 10);
|
||||
EXPECT_EQ(updated, 1);
|
||||
EXPECT_TRUE(slider->OnEvent(MousePressed(9, 2)));
|
||||
EXPECT_EQ(value, 10);
|
||||
EXPECT_EQ(updated, 1);
|
||||
EXPECT_TRUE(slider->OnEvent(MousePressed(5, 2)));
|
||||
EXPECT_EQ(value, 50);
|
||||
EXPECT_EQ(updated, 2);
|
||||
EXPECT_TRUE(slider->OnEvent(MouseReleased(5, 2)));
|
||||
EXPECT_FALSE(slider->OnEvent(MousePressed(5, 2)));
|
||||
EXPECT_EQ(value, 50);
|
||||
}
|
||||
|
||||
TEST(SliderTest, Down) {
|
||||
int updated = 0;
|
||||
int value = 50;
|
||||
auto slider = Slider<int>({
|
||||
.value = &value,
|
||||
@@ -100,23 +117,32 @@ TEST(SliderTest, Down) {
|
||||
.max = 100,
|
||||
.increment = 10,
|
||||
.direction = Direction::Down,
|
||||
.on_change = [&]() { updated++; },
|
||||
});
|
||||
Screen screen(1, 11);
|
||||
Render(screen, slider->Render());
|
||||
EXPECT_EQ(value, 50);
|
||||
EXPECT_EQ(updated, 0);
|
||||
EXPECT_TRUE(slider->OnEvent(MousePressed(0, 3)));
|
||||
EXPECT_EQ(value, 50);
|
||||
EXPECT_EQ(updated, 0);
|
||||
EXPECT_TRUE(slider->OnEvent(MousePressed(0, 9)));
|
||||
EXPECT_EQ(value, 90);
|
||||
EXPECT_EQ(updated, 1);
|
||||
EXPECT_TRUE(slider->OnEvent(MousePressed(2, 9)));
|
||||
EXPECT_EQ(value, 90);
|
||||
EXPECT_EQ(updated, 1);
|
||||
EXPECT_TRUE(slider->OnEvent(MousePressed(2, 5)));
|
||||
EXPECT_EQ(value, 50);
|
||||
EXPECT_EQ(updated, 2);
|
||||
EXPECT_TRUE(slider->OnEvent(MouseReleased(2, 5)));
|
||||
EXPECT_FALSE(slider->OnEvent(MousePressed(2, 5)));
|
||||
EXPECT_EQ(value, 50);
|
||||
EXPECT_EQ(updated, 2);
|
||||
}
|
||||
|
||||
TEST(SliderTest, Up) {
|
||||
int updated = 0;
|
||||
int value = 50;
|
||||
auto slider = Slider<int>({
|
||||
.value = &value,
|
||||
@@ -124,20 +150,27 @@ TEST(SliderTest, Up) {
|
||||
.max = 100,
|
||||
.increment = 10,
|
||||
.direction = Direction::Up,
|
||||
.on_change = [&]() { updated++; },
|
||||
});
|
||||
Screen screen(1, 11);
|
||||
Render(screen, slider->Render());
|
||||
EXPECT_EQ(value, 50);
|
||||
EXPECT_EQ(updated, 0);
|
||||
EXPECT_TRUE(slider->OnEvent(MousePressed(0, 3)));
|
||||
EXPECT_EQ(value, 50);
|
||||
EXPECT_EQ(updated, 0);
|
||||
EXPECT_TRUE(slider->OnEvent(MousePressed(0, 9)));
|
||||
EXPECT_EQ(value, 10);
|
||||
EXPECT_EQ(updated, 1);
|
||||
EXPECT_TRUE(slider->OnEvent(MousePressed(2, 9)));
|
||||
EXPECT_EQ(value, 10);
|
||||
EXPECT_EQ(updated, 1);
|
||||
EXPECT_TRUE(slider->OnEvent(MousePressed(2, 5)));
|
||||
EXPECT_EQ(value, 50);
|
||||
EXPECT_EQ(updated, 2);
|
||||
EXPECT_TRUE(slider->OnEvent(MouseReleased(2, 5)));
|
||||
EXPECT_FALSE(slider->OnEvent(MousePressed(2, 5)));
|
||||
EXPECT_EQ(value, 50);
|
||||
}
|
||||
|
||||
TEST(SliderTest, Focus) {
|
||||
|
Reference in New Issue
Block a user