diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 74215a15..e57188f9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -51,7 +51,7 @@ jobs: - name: Configure CSFML CMake shell: bash - run: cmake -S $GITHUB_WORKSPACE/CSFML -B $GITHUB_WORKSPACE/CSFML/build -DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/CSFML/install -DBUILD_SHARED_LIBS=TRUE -DCSFML_LINK_SFML_STATICALLY=FALSE -DSFML_DIR=$GITHUB_WORKSPACE/SFML/install/lib/cmake/SFML -DCMAKE_VERBOSE_MAKEFILE=ON -DWARNINGS_AS_ERRORS=TRUE ${{matrix.platform.flags}} + run: cmake -S $GITHUB_WORKSPACE/CSFML -B $GITHUB_WORKSPACE/CSFML/build -DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/CSFML/install -DBUILD_SHARED_LIBS=TRUE -DCSFML_BUILD_EXAMPLES=TRUE -DCSFML_LINK_SFML_STATICALLY=FALSE -DSFML_DIR=$GITHUB_WORKSPACE/SFML/install/lib/cmake/SFML -DCMAKE_VERBOSE_MAKEFILE=ON -DWARNINGS_AS_ERRORS=TRUE ${{matrix.platform.flags}} - name: Build CSFML shell: bash diff --git a/CMakeLists.txt b/CMakeLists.txt index dcd5f133..58d5763f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -87,3 +87,9 @@ install(DIRECTORY include PATTERN ".svn" EXCLUDE) install(FILES license.md DESTINATION ${INSTALL_MISC_DIR}) install(FILES readme.md DESTINATION ${INSTALL_MISC_DIR}) + +# add an option for building the examples +csfml_set_option(CSFML_BUILD_EXAMPLES FALSE BOOL "TRUE to build the CSFML examples, FALSE to ignore them") +if(CSFML_BUILD_EXAMPLES) + add_subdirectory(examples) +endif() diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt new file mode 100644 index 00000000..b9068f60 --- /dev/null +++ b/examples/CMakeLists.txt @@ -0,0 +1,5 @@ +set(SRC example.c) + +add_executable(example ${SRC}) +target_link_libraries(example PRIVATE csfml-graphics csfml-audio) +set_file_warnings(${SRC}) diff --git a/examples/doodle_pop.ogg b/examples/doodle_pop.ogg new file mode 100644 index 00000000..555ea348 Binary files /dev/null and b/examples/doodle_pop.ogg differ diff --git a/examples/example.c b/examples/example.c new file mode 100644 index 00000000..8ec09e16 --- /dev/null +++ b/examples/example.c @@ -0,0 +1,95 @@ +#include +#include + +#include + +int main(void) +{ + // Create the main window + const sfVideoMode mode = {800, 600, 32}; + sfRenderWindow* window = sfRenderWindow_create(mode, "SFML window", sfResize | sfClose, NULL); + if (!window) + { + sfRenderWindow_destroy(window); + return EXIT_FAILURE; + } + + // Load a sprite to display + sfTexture* texture = sfTexture_createFromFile("sfml_logo.png", NULL); + if (!texture) + { + sfTexture_destroy(texture); + sfRenderWindow_destroy(window); + return EXIT_FAILURE; + } + sfSprite* sprite = sfSprite_create(); + sfSprite_setTexture(sprite, texture, sfTrue); + const sfVector2f spritePosition = {200, 200}; + sfSprite_setPosition(sprite, spritePosition); + + // Create a graphical text to display + sfFont* font = sfFont_createFromFile("tuffy.ttf"); + if (!font) + { + sfFont_destroy(font); + sfSprite_destroy(sprite); + sfTexture_destroy(texture); + sfRenderWindow_destroy(window); + return EXIT_FAILURE; + } + sfText* text = sfText_create(); + sfText_setString(text, "Hello, SFML!"); + sfText_setFont(text, font); + sfText_setCharacterSize(text, 50); + + // Load a music to play + sfMusic* music = sfMusic_createFromFile("doodle_pop.ogg"); + if (!music) + { + sfMusic_destroy(music); + sfText_destroy(text); + sfFont_destroy(font); + sfSprite_destroy(sprite); + sfTexture_destroy(texture); + sfRenderWindow_destroy(window); + return EXIT_FAILURE; + } + + // Play the music + sfMusic_play(music); + + // Start the game loop + sfEvent event; + while (sfRenderWindow_isOpen(window)) + { + // Process events + while (sfRenderWindow_pollEvent(window, &event)) + { + // Close window : exit + if (event.type == sfEvtClosed) + sfRenderWindow_close(window); + } + + // Clear the screen + sfRenderWindow_clear(window, sfBlack); + + // Draw the sprite + sfRenderWindow_drawSprite(window, sprite, NULL); + + // Draw the text + sfRenderWindow_drawText(window, text, NULL); + + // Update the window + sfRenderWindow_display(window); + } + + // Cleanup resources + sfMusic_destroy(music); + sfText_destroy(text); + sfFont_destroy(font); + sfSprite_destroy(sprite); + sfTexture_destroy(texture); + sfRenderWindow_destroy(window); + + return EXIT_SUCCESS; +} diff --git a/examples/sfml_logo.png b/examples/sfml_logo.png new file mode 100644 index 00000000..509acc07 Binary files /dev/null and b/examples/sfml_logo.png differ diff --git a/examples/tuffy.ttf b/examples/tuffy.ttf new file mode 100755 index 00000000..8ea64709 Binary files /dev/null and b/examples/tuffy.ttf differ