From 4c3e84897fdf483394cf48c05df6d544afbe83ec Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Mon, 4 Sep 2023 21:10:30 +0200
Subject: [PATCH] testspriteminimal: make standalone by embedding icon.bmp
---
test/CMakeLists.txt | 47 ++++++++++++++++++++----------------
test/icon.h | 52 ++++++++++++++++++++++++++++++++++++++++
test/testspriteminimal.c | 25 +++++++++++++++++--
3 files changed, 102 insertions(+), 22 deletions(-)
create mode 100644 test/icon.h
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 14764824d6d0..4688be0eea26 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -230,7 +230,31 @@ elseif(HAVE_X11)
target_link_libraries(testnative PRIVATE X11)
endif()
-set(gamepad_images
+find_package(Python3)
+function(files2headers OUTPUT)
+ set(xxd "${CMAKE_CURRENT_SOURCE_DIR}/../cmake/xxd.py")
+ set(inputs ${ARGN})
+ set(outputs )
+ foreach(input IN LISTS inputs)
+ get_filename_component(file_we "${input}" NAME_WE)
+ set(intermediate "${CMAKE_CURRENT_BINARY_DIR}/${file_we}.h")
+ set(output "${CMAKE_CURRENT_SOURCE_DIR}/${file_we}.h")
+ list(APPEND outputs "${output}")
+ if(Python3_FOUND AND Python3_VERSION VERSION_GREATER_EQUAL "3.2")
+ list(APPEND outputs "${intermediate}")
+ # Don't add the 'output' header to the output, to avoid marking them as GENERATED
+ # (generated files are removed when running the CLEAN target)
+ add_custom_command(OUTPUT "${intermediate}"
+ COMMAND Python3::Interpreter "${xxd}" -i "${CMAKE_CURRENT_SOURCE_DIR}/${input}" "-o" "${intermediate}"
+ COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${intermediate}" "${output}"
+ DEPENDS "${xxd}" "${bmp}"
+ )
+ endif()
+ endforeach()
+ set(${OUTPUT} "${outputs}" PARENT_SCOPE)
+endfunction()
+
+files2headers(gamepad_image_headers
gamepad_axis_arrow.bmp
gamepad_axis.bmp
gamepad_back.bmp
@@ -249,24 +273,7 @@ set(gamepad_images
gamepad_front.bmp
gamepad_touchpad.bmp
)
-set(gamepad_image_headers)
-find_package(Python3)
-if(Python3_FOUND AND Python3_VERSION VERSION_GREATER_EQUAL "3.2")
- set(xxd "${CMAKE_CURRENT_SOURCE_DIR}/../cmake/xxd.py")
- foreach(bmp ${gamepad_images})
- get_filename_component(bmp_we "${bmp}" NAME_WE)
- set(intermediate "${CMAKE_CURRENT_BINARY_DIR}/${bmp_we}.h")
- set(final "${CMAKE_CURRENT_SOURCE_DIR}/${bmp_we}.h")
- # Don't add the 'final' headers to the output, to avoid marking them as GENERATED
- # (generated files are removed when running the CLEAN target)
- add_custom_command(OUTPUT "${intermediate}"
- COMMAND Python3::Interpreter "${xxd}" -i "${CMAKE_CURRENT_SOURCE_DIR}/${bmp}" "-o" "${intermediate}"
- COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${intermediate}" "${final}"
- DEPENDS "${xxd}" "${bmp}"
- )
- list(APPEND gamepad_image_headers "${intermediate}" "${final}")
- endforeach()
-endif()
+files2headers(icon_bmp_header icon.bmp)
add_sdl_test_executable(testaudio NEEDS_RESOURCES TESTUTILS SOURCES testaudio.c)
add_sdl_test_executable(testfile NONINTERACTIVE SOURCES testfile.c)
@@ -306,7 +313,7 @@ add_sdl_test_executable(testsensor SOURCES testsensor.c)
add_sdl_test_executable(testshader NEEDS_RESOURCES TESTUTILS SOURCES testshader.c)
add_sdl_test_executable(testshape NEEDS_RESOURCES SOURCES testshape.c)
add_sdl_test_executable(testsprite NEEDS_RESOURCES TESTUTILS SOURCES testsprite.c)
-add_sdl_test_executable(testspriteminimal NEEDS_RESOURCES TESTUTILS SOURCES testspriteminimal.c)
+add_sdl_test_executable(testspriteminimal SOURCES testspriteminimal.c ${icon_bmp_header})
add_sdl_test_executable(teststreaming NEEDS_RESOURCES TESTUTILS SOURCES teststreaming.c)
add_sdl_test_executable(testtimer NONINTERACTIVE NONINTERACTIVE_TIMEOUT 60 SOURCES testtimer.c)
add_sdl_test_executable(testurl SOURCES testurl.c)
diff --git a/test/icon.h b/test/icon.h
new file mode 100644
index 000000000000..fe5ada5e70a3
--- /dev/null
+++ b/test/icon.h
@@ -0,0 +1,52 @@
+unsigned char icon_bmp[] = {
+ 0x42, 0x4d, 0x42, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00,
+ 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x6d, 0x0b, 0x00, 0x00, 0x6d, 0x0b, 0x00, 0x00, 0x03, 0x00,
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x22, 0x22, 0x22, 0x22,
+ 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x22,
+ 0x21, 0x11, 0x11, 0x12, 0x22, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x21, 0x11, 0x11, 0x11, 0x11, 0x12, 0x21, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x22, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x22, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x21, 0x11,
+ 0x22, 0x22, 0x22, 0x22, 0x11, 0x12, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+ 0x22, 0x22, 0x22, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x22, 0x22, 0x22,
+ 0x22, 0x21, 0x12, 0x22, 0x22, 0x22, 0x22, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x22, 0x22, 0x22, 0x22, 0x21, 0x12, 0x22, 0x22, 0x22, 0x22, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+ 0x22, 0x22, 0x22, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x22, 0x22, 0x22,
+ 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x22, 0x22, 0x11, 0x11, 0x22, 0x22, 0x11, 0x11, 0x22, 0x22, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x22, 0x22, 0x11, 0x01, 0x22, 0x22, 0x11,
+ 0x01, 0x22, 0x22, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x22, 0x11,
+ 0x11, 0x22, 0x22, 0x11, 0x11, 0x22, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+ 0x22, 0x22, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x22,
+ 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x22, 0x22, 0x22, 0x22,
+ 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00
+};
+unsigned int icon_bmp_len = 578;
diff --git a/test/testspriteminimal.c b/test/testspriteminimal.c
index e78da6fe2ddc..0d89c5e3fbd2 100644
--- a/test/testspriteminimal.c
+++ b/test/testspriteminimal.c
@@ -20,7 +20,8 @@
#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>
-#include "testutils.h"
+
+#include "icon.h"
#define WINDOW_WIDTH 640
#define WINDOW_HEIGHT 480
@@ -35,6 +36,25 @@ static int sprite_w, sprite_h;
static SDL_Renderer *renderer;
static int done;
+static SDL_Texture *CreateTexture(SDL_Renderer *r, unsigned char *data, unsigned int len, int *w, int *h) {
+ SDL_Texture *texture = NULL;
+ SDL_Surface *surface;
+ SDL_RWops *src = SDL_RWFromConstMem(data, len);
+ if (src) {
+ surface = SDL_LoadBMP_RW(src, SDL_TRUE);
+ if (surface) {
+ /* Treat white as transparent */
+ SDL_SetSurfaceColorKey(surface, SDL_TRUE, SDL_MapRGB(surface->format, 255, 255, 255));
+
+ texture = SDL_CreateTextureFromSurface(r, surface);
+ *w = surface->w;
+ *h = surface->h;
+ SDL_DestroySurface(surface);
+ }
+ }
+ return texture;
+}
+
static void MoveSprites(void)
{
int i;
@@ -111,9 +131,10 @@ int main(int argc, char *argv[])
SDL_Log("SDL_SetWindowTitle: %s", SDL_GetError());
}
- sprite = LoadTexture(renderer, "icon.bmp", SDL_TRUE, &sprite_w, &sprite_h);
+ sprite = CreateTexture(renderer, icon_bmp, icon_bmp_len, &sprite_w, &sprite_h);
if (sprite == NULL) {
+ SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture (%s)", SDL_GetError());
return_code = 3;
goto quit;
}