fix(imgui): keep the plot inside the child's clip rect and reject unusable input
The widget drew a region derived from the child's content rect alone, so a child the hosting window cut off cleared and painted over the host's pixels; it also scaled ImGui's (-FLT_MAX, -FLT_MAX) no-pointer sentinel and differenced it against the last real position, turning a drag out of the window into a ~1e35 pan, and it forgot the host's button levels across a re-bind, handing the next plot a press that never happened. The region is now the content rect intersected with the child's clip rect (a no-op when nothing clips it), an invalid position is no position update, and the button levels survive a re-bind. The controller sanitises non-finite coordinates and deltas for any host, and the widget's input translation now has a committed test on the headless EGL context.
This commit is contained in:
1 parent
15931a2405
commit
b5b9b42be1
8 files changed
+697
-58
No files matched your search
@@ -40,6 +40,17 @@ add_executable(plot_tests
|
||||
egl_headless.cpp
|
||||
)
|
||||
target_link_libraries(plot_tests PRIVATE plot::core ${plot_egl_library} Threads::Threads)
|
||||
|
||||
# The Dear ImGui widget is the one adapter with a test here: its input translation
|
||||
# (edge synthesis, the hover gate, drag capture, wheel containment) is logic this
|
||||
# project owns, not a toolkit's. The suite is otherwise ImGui-free, so the source
|
||||
# and the link are added only when the adapter exists -- which the top-level
|
||||
# CMakeLists.txt guarantees by adding the adapters before this directory.
|
||||
if(TARGET plot::imgui)
|
||||
target_sources(plot_tests PRIVATE test_imgui_widget.cpp)
|
||||
target_link_libraries(plot_tests PRIVATE plot::imgui imgui)
|
||||
endif()
|
||||
|
||||
# Same switches the library is built with: the cost tests read the counters
|
||||
# behind them (see include/plot/data/detail/{cover,merge}_count.hpp).
|
||||
target_compile_definitions(plot_tests PRIVATE PLOT_PYRAMID_COUNT_COVERS
|
||||
|
||||
Reference in new issue
Block a user