# FreeType rasterization + HarfBuzz shaping. The default uses verified pinned archives. option(FASET_USE_SYSTEM_TEXT_LIBRARIES "Use system FreeType/HarfBuzz instead of pinned SDK versions" OFF) if(FASET_USE_SYSTEM_TEXT_LIBRARIES) find_package(Freetype QUIET) endif() if(NOT TARGET Freetype::Freetype) include(FetchContent) set(FT_DISABLE_ZLIB ON CACHE BOOL "" FORCE) set(FT_DISABLE_BZIP2 ON CACHE BOOL "" FORCE) set(FT_DISABLE_PNG ON CACHE BOOL "" FORCE) set(FT_DISABLE_BROTLI ON CACHE BOOL "" FORCE) set(FT_DISABLE_HARFBUZZ ON CACHE BOOL "" FORCE) faset_dependency(freetype) if(NOT TARGET Freetype::Freetype) add_library(Freetype::Freetype ALIAS freetype) endif() endif() if(FASET_USE_SYSTEM_TEXT_LIBRARIES) find_package(harfbuzz CONFIG QUIET) endif() if(TARGET harfbuzz::harfbuzz) set(FASET_HARFBUZZ_TARGET harfbuzz::harfbuzz) else() find_package(PkgConfig QUIET) if(PkgConfig_FOUND AND FASET_USE_SYSTEM_TEXT_LIBRARIES) pkg_check_modules(FASET_HARFBUZZ QUIET IMPORTED_TARGET harfbuzz) endif() if(TARGET PkgConfig::FASET_HARFBUZZ) set(FASET_HARFBUZZ_TARGET PkgConfig::FASET_HARFBUZZ) else() include(FetchContent) set(HB_HAVE_FREETYPE ON CACHE BOOL "" FORCE) set(HB_BUILD_UTILS OFF CACHE BOOL "" FORCE) set(HB_BUILD_SUBSET OFF CACHE BOOL "" FORCE) faset_dependency(harfbuzz) set(FASET_HARFBUZZ_TARGET harfbuzz) endif() endif() add_library(faset_ui ${PROJECT_SOURCE_DIR}/src/ui/ui.cpp ${PROJECT_SOURCE_DIR}/src/ui/text.cpp ${PROJECT_SOURCE_DIR}/src/ui/font.cpp) target_compile_features(faset_ui PUBLIC cxx_std_20) target_include_directories(faset_ui PUBLIC ${PROJECT_SOURCE_DIR}/include) target_link_libraries(faset_ui PUBLIC faset_core PRIVATE Freetype::Freetype ${FASET_HARFBUZZ_TARGET}) if(BUILD_TESTING) add_executable(faset_ui_tests ${PROJECT_SOURCE_DIR}/tests/ui_tests.cpp) target_link_libraries(faset_ui_tests PRIVATE faset_ui) target_compile_definitions(faset_ui_tests PRIVATE FASET_TEST_FONT="${PROJECT_SOURCE_DIR}/assets/fonts/NotoSans.ttf") add_test(NAME ui_widgets COMMAND faset_ui_tests) if(TARGET faset_render) add_executable(faset_ui_render_test ${PROJECT_SOURCE_DIR}/tests/ui_render_test.cpp) target_link_libraries(faset_ui_render_test PRIVATE faset_ui faset_render) target_compile_definitions(faset_ui_render_test PRIVATE FASET_TEST_FONT="${PROJECT_SOURCE_DIR}/assets/fonts/NotoSans.ttf" FASET_UI_THEME="${PROJECT_SOURCE_DIR}/assets/ui/dark.json") add_test(NAME ui_render COMMAND faset_ui_render_test ${CMAKE_BINARY_DIR}/ui-test.ppm) set_tests_properties(ui_render PROPERTIES LABELS "gpu") endif() endif() install(DIRECTORY ${PROJECT_SOURCE_DIR}/assets/fonts ${PROJECT_SOURCE_DIR}/assets/ui DESTINATION assets)