mirror of
https://github.com/InstanceBrick/nightcap.git
synced 2026-10-25 14:00:57 +01:00
* fix(input): fix mouse aiming, shooting refusal, key drops, and clean up test suite - Remove spurious Wayland RMB release heuristic in window event loop that falsely synthesized releases during mouse drag - Remove mouse motion lockout in WindowPointerCaptureOwner after releasing right-click - Accumulate relative pointer coordinates and clamp discrete clicks to viewport bounds so shooting clicks land on crosshairs in pointer lock mode - Implement mouse motion coalescing in PumpEvents to prevent high-polling rate mice from starving the event queue - Add ASCII and fallback scancode mapping in MapSdlKeyToAndroid to avoid dropping unmapped keys - Clean up obsolete static script-based regex tests and fix system install multi-arch test * fix(input): prevent focus loss lockout from dropping WASD and auto-release text focus on click - Automatically recover router focus when receiving active hardware input events so WASD/movement keys are never permanently dropped after Wayland/SDL focus loss transitions - Release stale Roblox text-input session when clicking anywhere in the game viewport so Roblox Lua movement scripts don't remain in TextBox-focused state - Allow mouse pointer capture when native lock is requested without gating on fragile focused_ flag --------- Co-authored-by: glook9001 <310372091+glook9001@users.noreply.github.com>
98 lines
3.3 KiB
CMake
98 lines
3.3 KiB
CMake
# Copyright 2026 Mocktail Project Authors
|
|
# Licensed under the Apache License, Version 2.0.
|
|
|
|
include_guard(GLOBAL)
|
|
|
|
find_package(PkgConfig REQUIRED)
|
|
pkg_check_modules(UTF8PROC REQUIRED IMPORTED_TARGET libutf8proc)
|
|
find_package(SDL3_ttf REQUIRED CONFIG)
|
|
pkg_check_modules(FONTCONFIG REQUIRED IMPORTED_TARGET fontconfig)
|
|
|
|
get_filename_component(MOCKTAIL_INPUT_ROOT "${CMAKE_CURRENT_LIST_DIR}/.."
|
|
ABSOLUTE
|
|
)
|
|
|
|
add_library(mocktail_input_runtime STATIC
|
|
${MOCKTAIL_INPUT_ROOT}/src/runtime/roblox_input_native_adapter.cc
|
|
${MOCKTAIL_INPUT_ROOT}/src/runtime/roblox_input_router.cc
|
|
${MOCKTAIL_INPUT_ROOT}/src/runtime/roblox_native_text_box_info_reader.cc
|
|
${MOCKTAIL_INPUT_ROOT}/src/runtime/roblox_text_display_state.cc
|
|
${MOCKTAIL_INPUT_ROOT}/src/runtime/roblox_text_editor.cc
|
|
${MOCKTAIL_INPUT_ROOT}/src/runtime/roblox_text_surface_overlay.cc
|
|
${MOCKTAIL_INPUT_ROOT}/src/runtime/roblox_window_input_runtime.cc
|
|
)
|
|
add_library(Mocktail::InputRuntime ALIAS mocktail_input_runtime)
|
|
target_include_directories(mocktail_input_runtime PUBLIC
|
|
${MOCKTAIL_INPUT_ROOT}/include
|
|
)
|
|
target_include_directories(mocktail_input_runtime PRIVATE
|
|
${MOCKTAIL_INPUT_ROOT}/src
|
|
)
|
|
target_link_libraries(mocktail_input_runtime PUBLIC
|
|
Mocktail::PlatformSdl
|
|
Mocktail::Runtime
|
|
mocktail_window
|
|
PkgConfig::UTF8PROC
|
|
PRIVATE
|
|
PkgConfig::FONTCONFIG
|
|
SDL3_ttf::SDL3_ttf
|
|
)
|
|
target_compile_features(mocktail_input_runtime PUBLIC cxx_std_17)
|
|
mocktail_apply_compile_options(mocktail_input_runtime)
|
|
|
|
if(BUILD_TESTING AND TARGET GTest::gtest_main)
|
|
add_executable(roblox_input_router_test
|
|
${MOCKTAIL_INPUT_ROOT}/tests/roblox_input_router_test.cc
|
|
)
|
|
target_link_libraries(roblox_input_router_test PRIVATE
|
|
Mocktail::InputRuntime
|
|
GTest::gtest_main
|
|
)
|
|
mocktail_apply_compile_options(roblox_input_router_test)
|
|
|
|
add_executable(roblox_text_editor_test
|
|
${MOCKTAIL_INPUT_ROOT}/tests/roblox_text_editor_test.cc
|
|
)
|
|
target_link_libraries(roblox_text_editor_test PRIVATE
|
|
Mocktail::InputRuntime
|
|
GTest::gtest_main
|
|
)
|
|
mocktail_apply_compile_options(roblox_text_editor_test)
|
|
|
|
add_executable(roblox_text_display_state_test
|
|
${MOCKTAIL_INPUT_ROOT}/tests/roblox_text_display_state_test.cc
|
|
)
|
|
target_link_libraries(roblox_text_display_state_test PRIVATE
|
|
Mocktail::InputRuntime
|
|
GTest::gtest_main
|
|
)
|
|
mocktail_apply_compile_options(roblox_text_display_state_test)
|
|
|
|
add_executable(roblox_input_native_adapter_test
|
|
${MOCKTAIL_INPUT_ROOT}/tests/roblox_input_native_adapter_test.cc
|
|
)
|
|
target_link_libraries(roblox_input_native_adapter_test PRIVATE
|
|
Mocktail::InputRuntime
|
|
Mocktail::LegacyJni
|
|
GTest::gtest_main
|
|
)
|
|
mocktail_apply_compile_options(roblox_input_native_adapter_test)
|
|
|
|
add_executable(roblox_native_text_box_info_reader_test
|
|
${MOCKTAIL_INPUT_ROOT}/tests/roblox_native_text_box_info_reader_test.cc
|
|
)
|
|
target_link_libraries(roblox_native_text_box_info_reader_test PRIVATE
|
|
Mocktail::InputRuntime
|
|
Mocktail::LegacyJni
|
|
GTest::gtest_main
|
|
)
|
|
mocktail_apply_compile_options(roblox_native_text_box_info_reader_test)
|
|
|
|
include(GoogleTest)
|
|
gtest_discover_tests(roblox_input_router_test)
|
|
gtest_discover_tests(roblox_text_editor_test)
|
|
gtest_discover_tests(roblox_text_display_state_test)
|
|
gtest_discover_tests(roblox_input_native_adapter_test)
|
|
gtest_discover_tests(roblox_native_text_box_info_reader_test)
|
|
endif()
|