bad highlighting

main
Brett 2024-05-15 02:26:57 -04:00
parent 7c73318b2a
commit 113646c190
4 changed files with 45 additions and 13 deletions

View File

@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.25)
project(graphs VERSION 0.0.42)
project(graphs VERSION 0.0.43)
option(ENABLE_ADDRSAN "Enable the address sanitizer" OFF)
option(ENABLE_UBSAN "Enable the ub sanitizer" OFF)

View File

@ -57,7 +57,9 @@ class graph_t
static constexpr float POINT_SIZE = 35;
blt::i32 selected_node = -1;
blt::quint_easing easing;
blt::i32 highlighted_node = -1;
blt::quad_easing easing;
blt::quint_easing highlight_easing;
void create_random_graph(bounding_box bb, blt::size_t min_nodes, blt::size_t max_nodes, blt::f64 connectivity,
blt::f64 scaling_connectivity, blt::f64 distance_factor);
@ -99,11 +101,22 @@ class graph_t
void reset_mouse_drag()
{
easing.reset();
nodes[selected_node].setOutlineColor(color::POINT_OUTLINE_COLOR);
if (selected_node != -1)
{
nodes[selected_node].setOutlineColor(color::POINT_OUTLINE_COLOR);
easing.reset();
}
selected_node = -1;
}
void reset_mouse_highlight()
{
if (highlighted_node != -1)
nodes[highlighted_node].setOutlineColor(color::POINT_OUTLINE_COLOR);
highlighted_node = -1;
highlight_easing.reset();
}
void process_mouse_drag(blt::i32 width, blt::i32 height);
void handle_mouse();
@ -193,11 +206,9 @@ class engine_t
auto& io = ImGui::GetIO();
if (!io.WantCaptureMouse){
if (blt::gfx::isMousePressed(0))
graph.process_mouse_drag(data.width, data.height);
else
graph.reset_mouse_drag();
if (!io.WantCaptureMouse)
{
graph.process_mouse_drag(data.width, data.height);
}

@ -1 +1 @@
Subproject commit 8ec4c2c30b0a6d313ca5df5ff83210fd4f553908
Subproject commit ae2ad8d1ab9f9fc557de8dd51065d5dae77b98fe

View File

@ -84,6 +84,8 @@ void graph_t::process_mouse_drag(const blt::i32 width, const blt::i32 height)
const auto mouse_pos = blt::make_vec2(blt::gfx::calculateRay2D(width, height, global_matrices.getScale2D(), global_matrices.getView2D(),
global_matrices.getOrtho()));
bool mouse_pressed = blt::gfx::isMousePressed(0);
if (selected_node < 0)
{
for (const auto& [index, node] : blt::enumerate(nodes))
@ -91,19 +93,38 @@ void graph_t::process_mouse_drag(const blt::i32 width, const blt::i32 height)
const auto pos = node.getPosition();
const auto dist = pos - mouse_pos;
if (const auto mag = dist.magnitude(); mag < POINT_SIZE)
const auto mag = dist.magnitude();
if (mag < POINT_SIZE && mouse_pressed)
{
selected_node = static_cast<blt::i32>(index);
reset_mouse_highlight();
break;
} else if (mag < POINT_SIZE * (node.getOutlineScale() + (node.getOutlineScale() - 1) * 2))
{
highlighted_node = static_cast<blt::i32>(index);
}
}
} else
{
auto& node = nodes[selected_node];
easing.progress(5 * static_cast<float>(blt::gfx::getFrameDeltaSeconds()));
node.setOutlineColor(easing.apply(color::POINT_OUTLINE_COLOR, color::POINT_SELECT_COLOR));
easing.progress(8 * static_cast<float>(blt::gfx::getFrameDeltaSeconds()));
node.setOutlineColor(easing.apply(color::POINT_HIGHLIGHT_COLOR, color::POINT_SELECT_COLOR));
node.getPositionRef() = mouse_pos;
}
if (highlighted_node != -1)
{
highlight_easing.progress(8 * static_cast<float>(blt::gfx::getFrameDeltaSeconds()));
BLT_TRACE("Hmew");
nodes[highlighted_node].setOutlineColor(highlight_easing.apply(color::POINT_OUTLINE_COLOR, color::POINT_HIGHLIGHT_COLOR));
} else
reset_mouse_highlight();
if (!mouse_pressed)
{
reset_mouse_drag();
}
}
void graph_t::handle_mouse()