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.
67 lines
2.0 KiB
CMake
67 lines
2.0 KiB
CMake
cmake_minimum_required(VERSION 3.24)
|
|
project(plot VERSION 0.1.0 LANGUAGES CXX)
|
|
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
|
include(plot_options)
|
|
|
|
add_library(plot_core
|
|
src/core/status.cpp
|
|
src/math/transform.cpp
|
|
src/data/minmax_pyramid.cpp
|
|
src/data/series.cpp
|
|
src/data/array_series.cpp
|
|
src/data/stream_series.cpp
|
|
src/gl/loader.cpp
|
|
src/gl/handle.cpp
|
|
src/render/shaders.cpp
|
|
src/render/bitmap_font.cpp
|
|
src/render/primitives.cpp
|
|
src/render/buffer.cpp
|
|
src/render/vertex_array.cpp
|
|
src/render/program.cpp
|
|
src/render/renderer.cpp
|
|
src/plot/ticks.cpp
|
|
src/plot/axis.cpp
|
|
src/plot/grid.cpp
|
|
src/plot/measure.cpp
|
|
src/plot/plot.cpp
|
|
src/input/controller.cpp
|
|
)
|
|
add_library(plot::core ALIAS plot_core)
|
|
|
|
target_include_directories(plot_core PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
|
|
target_compile_features(plot_core PUBLIC cxx_std_20)
|
|
target_link_libraries(plot_core PRIVATE ${CMAKE_DL_LIBS})
|
|
plot_apply_warnings(plot_core)
|
|
|
|
# Adapters own the surface and translate their host's events; examples link the
|
|
# adapter they demo. Both are opt-in, so the core library and its tests still build
|
|
# on a bare toolchain.
|
|
#
|
|
# They are added before the test suite on purpose: a test that drives an adapter
|
|
# needs that adapter's targets to exist, and with both switches on the suite can
|
|
# then exercise them (see tests/CMakeLists.txt).
|
|
if(PLOT_BUILD_GLFW)
|
|
add_subdirectory(adapters/glfw)
|
|
endif()
|
|
|
|
if(PLOT_BUILD_IMGUI)
|
|
add_subdirectory(adapters/imgui)
|
|
endif()
|
|
|
|
if(PLOT_BUILD_EXAMPLES)
|
|
add_subdirectory(examples)
|
|
endif()
|
|
|
|
if(PLOT_BUILD_TESTS)
|
|
# Test-only: counts the pyramid's covering-decomposition entries and its bucket
|
|
# merges so a test can pin the query's O(log n) cost and the append path's
|
|
# amortised O(1) cost, neither of which any answer reveals. Off in every
|
|
# non-test build (see include/plot/data/detail/{cover,merge}_count.hpp).
|
|
target_compile_definitions(plot_core PRIVATE PLOT_PYRAMID_COUNT_COVERS
|
|
PLOT_PYRAMID_COUNT_MERGES)
|
|
|
|
enable_testing()
|
|
add_subdirectory(tests)
|
|
endif()
|