Skip to content
This repository was archived by the owner on Jan 7, 2023. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@

# CMake 3.10 is required for built-in EGL support in FindOpenGL
# Could be lowered using a manual FindEGL.cmake, if needed
cmake_minimum_required(VERSION 3.10.0)
project(fastuidraw)

set(FASTUIDRAW_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR})

include(cmake/functions.cmake)

add_subdirectory(src/fastuidraw)

option(FASTUIDRAW_DOC "Build documentation" ON)
option(FASTUIDRAW_DEMOS "Build the demos" OFF)

if(FASTUIDRAW_DOC)

# TODO: out-of-source documentation build

find_package(Doxygen REQUIRED)

set(DOCS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/docs")
set(INDEX_HTML "${DOCS_DIRECTORY}/doxy/html/index.html")

add_custom_command(
OUTPUT ${INDEX_HTML}
DEPENDS "${DOCS_DIRECTORY}/Doxyfile"
COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile
COMMENT "Generating API documentation with Doxygen"
WORKING_DIRECTORY ${DOCS_DIRECTORY}
VERBATIM
)

add_custom_target(generate_documentation ALL DEPENDS ${INDEX_HTML})

endif()

if(FASTUIDRAW_DEMOS)
add_subdirectory(demos)
endif()
39 changes: 39 additions & 0 deletions cmake/functions.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@


function(prepend_path OUTPUT PREFIX)

set(TEMP_LIST "")

foreach(PATH ${ARGN})
list(APPEND TEMP_LIST "${PREFIX}/${PATH}")
endforeach(PATH)

set(${OUTPUT} "${TEMP_LIST}" PARENT_SCOPE)

endfunction(prepend_path)

function(assemble_resource_string_sources RESOURCE_STRINGS OUTPUT)

set(TEMP_LIST "")

foreach(RESOURCE_STRING_FILE ${RESOURCE_STRINGS})

get_filename_component(BARE_NAME ${RESOURCE_STRING_FILE} NAME)

set(CPP_FILENAME "${BARE_NAME}.cpp")

add_custom_command(
OUTPUT ${CPP_FILENAME}
COMMAND shell_scripts/fastuidraw-create-resource-cpp-file.sh "${CMAKE_CURRENT_SOURCE_DIR}/${RESOURCE_STRING_FILE}" ${BARE_NAME} ${CMAKE_CURRENT_BINARY_DIR}
WORKING_DIRECTORY ${FASTUIDRAW_ROOT_DIR}
COMMENT "Generating ${CPP_FILENAME} from ${BARE_NAME}"
VERBATIM
)

list(APPEND TEMP_LIST ${CPP_FILENAME})

endforeach(RESOURCE_STRING_FILE)

set(${OUTPUT} "${TEMP_LIST}" PARENT_SCOPE)

endfunction(assemble_resource_string_sources)
17 changes: 17 additions & 0 deletions demos/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@

project(demos)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) # For FindSDL2_image.cmake

add_subdirectory(common)

add_subdirectory(atlas_tests/glyph_test)
add_subdirectory(atlas_tests/gradient_test)
add_subdirectory(atlas_tests/image_test)

add_subdirectory(painter_cells)
add_subdirectory(painter_clippath_test)
add_subdirectory(painter_cliprect_test)
add_subdirectory(painter_glyph_test)
add_subdirectory(painter_path_test)
add_subdirectory(painter_test)
25 changes: 25 additions & 0 deletions demos/atlas_tests/glyph_test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@

project(glyph_test)

set(GLYPH_TEST_RESOURCE_STRINGS
shaders/glyph.vert.glsl.resource_string
shaders/coverage_glyph.frag.glsl.resource_string
shaders/distance_glyph.frag.glsl.resource_string
shaders/curvepair_glyph.frag.glsl.resource_string
shaders/glyph_atlas.vert.glsl.resource_string
shaders/glyph_atlas.frag.glsl.resource_string
shaders/perform_aa.frag.glsl.resource_string
shaders/gles_prec.frag.glsl.resource_string
)

assemble_resource_string_sources("${GLYPH_TEST_RESOURCE_STRINGS}" GLYPH_TEST_RESOURCE_STRING_SOURCES)
add_custom_target(generate_glyph_test_resource_strings DEPENDS ${GLYPH_TEST_RESOURCE_STRING_SOURCES})

add_executable(${PROJECT_NAME}
${GLYPH_TEST_RESOURCE_STRING_SOURCES}
main.cpp
)

add_dependencies(${PROJECT_NAME} generate_glyph_test_resource_strings)

target_link_libraries(${PROJECT_NAME} PUBLIC demos_common)
21 changes: 21 additions & 0 deletions demos/atlas_tests/gradient_test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@

project(gradient_test)

set(GRADIENT_TEST_RESOURCE_STRINGS
shaders/linear_gradient.vert.glsl.resource_string
shaders/linear_gradient.frag.glsl.resource_string
shaders/draw_pt.vert.glsl.resource_string
shaders/draw_pt.frag.glsl.resource_string
)

assemble_resource_string_sources("${GRADIENT_TEST_RESOURCE_STRINGS}" GRADIENT_TEST_RESOURCE_STRING_SOURCES)
add_custom_target(generate_gradient_test_resource_strings DEPENDS ${GRADIENT_TEST_RESOURCE_STRING_SOURCES})

add_executable(${PROJECT_NAME}
${GRADIENT_TEST_RESOURCE_STRING_SOURCES}
main.cpp
)

add_dependencies(${PROJECT_NAME} generate_gradient_test_resource_strings)

target_link_libraries(${PROJECT_NAME} PUBLIC demos_common)
22 changes: 22 additions & 0 deletions demos/atlas_tests/image_test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@

project(image_test)

set(IMAGE_TEST_RESOURCE_STRINGS
shaders/layer_texture_blit.vert.glsl.resource_string
shaders/layer_texture_blit.frag.glsl.resource_string
shaders/atlas_image_blit.frag.glsl.resource_string
shaders/atlas_image_blit.vert.glsl.resource_string
shaders/detect_boundary.glsl.resource_string
)

assemble_resource_string_sources("${IMAGE_TEST_RESOURCE_STRINGS}" IMAGE_TEST_RESOURCE_STRING_SOURCES)
add_custom_target(generate_image_test_resource_strings DEPENDS ${IMAGE_TEST_RESOURCE_STRING_SOURCES})

add_executable(${PROJECT_NAME}
${IMAGE_TEST_RESOURCE_STRING_SOURCES}
main.cpp
)

add_dependencies(${PROJECT_NAME} generate_image_test_resource_strings)

target_link_libraries(${PROJECT_NAME} PUBLIC demos_common)
100 changes: 100 additions & 0 deletions demos/cmake/FindSDL2_image.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
# Locate SDL_image library
#
# This module defines:
#
# ::
#
# SDL2_IMAGE_LIBRARIES, the name of the library to link against
# SDL2_IMAGE_INCLUDE_DIRS, where to find the headers
# SDL2_IMAGE_FOUND, if false, do not try to link against
# SDL2_IMAGE_VERSION_STRING - human-readable string containing the version of SDL_image
#
#
#
# For backward compatibility the following variables are also set:
#
# ::
#
# SDLIMAGE_LIBRARY (same value as SDL2_IMAGE_LIBRARIES)
# SDLIMAGE_INCLUDE_DIR (same value as SDL2_IMAGE_INCLUDE_DIRS)
# SDLIMAGE_FOUND (same value as SDL2_IMAGE_FOUND)
#
#
#
# $SDLDIR is an environment variable that would correspond to the
# ./configure --prefix=$SDLDIR used in building SDL.
#
# Created by Eric Wing. This was influenced by the FindSDL.cmake
# module, but with modifications to recognize OS X frameworks and
# additional Unix paths (FreeBSD, etc).

#=============================================================================
# Copyright 2005-2009 Kitware, Inc.
# Copyright 2012 Benjamin Eikel
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)

find_path(SDL2_IMAGE_INCLUDE_DIR SDL_image.h
HINTS
ENV SDL2IMAGEDIR
ENV SDL2DIR
PATH_SUFFIXES SDL2
# path suffixes to search inside ENV{SDLDIR}
include/SDL2 include
PATHS ${SDL2_IMAGE_PATH}
)

if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(VC_LIB_PATH_SUFFIX lib/x64)
else()
set(VC_LIB_PATH_SUFFIX lib/x86)
endif()

find_library(SDL2_IMAGE_LIBRARY
NAMES SDL2_image
HINTS
ENV SDL2IMAGEDIR
ENV SDL2DIR
PATH_SUFFIXES lib ${VC_LIB_PATH_SUFFIX}
PATHS ${SDL2_IMAGE_PATH}
)

if(SDL2_IMAGE_INCLUDE_DIR AND EXISTS "${SDL2_IMAGE_INCLUDE_DIR}/SDL_image.h")
file(STRINGS "${SDL2_IMAGE_INCLUDE_DIR}/SDL_image.h" SDL2_IMAGE_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL_IMAGE_MAJOR_VERSION[ \t]+[0-9]+$")
file(STRINGS "${SDL2_IMAGE_INCLUDE_DIR}/SDL_image.h" SDL2_IMAGE_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL_IMAGE_MINOR_VERSION[ \t]+[0-9]+$")
file(STRINGS "${SDL2_IMAGE_INCLUDE_DIR}/SDL_image.h" SDL2_IMAGE_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL_IMAGE_PATCHLEVEL[ \t]+[0-9]+$")
string(REGEX REPLACE "^#define[ \t]+SDL_IMAGE_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_IMAGE_VERSION_MAJOR "${SDL2_IMAGE_VERSION_MAJOR_LINE}")
string(REGEX REPLACE "^#define[ \t]+SDL_IMAGE_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_IMAGE_VERSION_MINOR "${SDL2_IMAGE_VERSION_MINOR_LINE}")
string(REGEX REPLACE "^#define[ \t]+SDL_IMAGE_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL2_IMAGE_VERSION_PATCH "${SDL2_IMAGE_VERSION_PATCH_LINE}")
set(SDL2_IMAGE_VERSION_STRING ${SDL2_IMAGE_VERSION_MAJOR}.${SDL2_IMAGE_VERSION_MINOR}.${SDL2_IMAGE_VERSION_PATCH})
unset(SDL2_IMAGE_VERSION_MAJOR_LINE)
unset(SDL2_IMAGE_VERSION_MINOR_LINE)
unset(SDL2_IMAGE_VERSION_PATCH_LINE)
unset(SDL2_IMAGE_VERSION_MAJOR)
unset(SDL2_IMAGE_VERSION_MINOR)
unset(SDL2_IMAGE_VERSION_PATCH)
endif()

set(SDL2_IMAGE_LIBRARIES ${SDL2_IMAGE_LIBRARY})
set(SDL2_IMAGE_INCLUDE_DIRS ${SDL2_IMAGE_INCLUDE_DIR})

include(FindPackageHandleStandardArgs)

FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2_image
REQUIRED_VARS SDL2_IMAGE_LIBRARIES SDL2_IMAGE_INCLUDE_DIRS
VERSION_VAR SDL2_IMAGE_VERSION_STRING)

# for backward compatibility
set(SDLIMAGE_LIBRARY ${SDL2_IMAGE_LIBRARIES})
set(SDLIMAGE_INCLUDE_DIR ${SDL2_IMAGE_INCLUDE_DIRS})
set(SDLIMAGE_FOUND ${SDL2_IMAGE_FOUND})

mark_as_advanced(SDL2_IMAGE_LIBRARY SDL2_IMAGE_INCLUDE_DIR)
39 changes: 39 additions & 0 deletions demos/common/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@

project(demos_common)

add_library(${PROJECT_NAME}
generic_command_line.cpp
colorstop_command_line.cpp
sdl_benchmark.cpp
sdl_demo.cpp
sdl_painter_demo.cpp
PanZoomTracker.cpp
ImageLoader.cpp
read_colorstops.cpp
read_path.cpp
text_helper.cpp
PainterWidget.cpp
cycle_value.cpp
random.cpp
read_dash_pattern.cpp
egl_helper.cpp
)

# SDL2

find_package(SDL2 REQUIRED)
find_package(SDL2_image REQUIRED)

target_include_directories(${PROJECT_NAME} PUBLIC ${SDL2_INCLUDE_DIRS} ${SDL2_IMAGE_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} PUBLIC ${SDL2_LIBRARIES} ${SDL2_IMAGE_LIBRARIES})

# EGL (fixme: why is it required for the demos?)

find_package(OpenGL REQUIRED COMPONENTS OpenGL EGL)
target_link_libraries(${PROJECT_NAME} PUBLIC OpenGL::OpenGL OpenGL::EGL)

# FastUIDraw
target_include_directories(${PROJECT_NAME} PUBLIC FastUIDraw)
target_link_libraries(${PROJECT_NAME} PUBLIC FastUIDraw)

target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
11 changes: 11 additions & 0 deletions demos/painter_cells/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@

project(painter_cells)

add_executable(${PROJECT_NAME}
cell_group.cpp
cell.cpp
main.cpp
table.cpp
)

target_link_libraries(${PROJECT_NAME} PUBLIC demos_common)
6 changes: 6 additions & 0 deletions demos/painter_clippath_test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

project(painter_clippath_test)

add_executable(${PROJECT_NAME} main.cpp)

target_link_libraries(${PROJECT_NAME} PUBLIC demos_common)
6 changes: 6 additions & 0 deletions demos/painter_cliprect_test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

project(painter_cliprect_test)

add_executable(${PROJECT_NAME} main.cpp)

target_link_libraries(${PROJECT_NAME} PUBLIC demos_common)
9 changes: 9 additions & 0 deletions demos/painter_glyph_test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@

project(painter_glyph_test)

add_executable(${PROJECT_NAME}
glyph_finder.cpp
main.cpp
)

target_link_libraries(${PROJECT_NAME} PUBLIC demos_common)
6 changes: 6 additions & 0 deletions demos/painter_path_test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

project(painter_path_test)

add_executable(${PROJECT_NAME} main.cpp)

target_link_libraries(${PROJECT_NAME} PUBLIC demos_common)
6 changes: 6 additions & 0 deletions demos/painter_test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

project(painter_test)

add_executable(${PROJECT_NAME} main.cpp)

target_link_libraries(${PROJECT_NAME} PUBLIC demos_common)
Loading