mirror of
https://github.com/shadps4-emu/ext-SDL.git
synced 2025-02-22 19:40:33 +00:00
testdropfile: convert to use callbacks
This commit is contained in:
parent
89a4d9ae67
commit
78e25d4994
@ -10,24 +10,71 @@
|
||||
freely.
|
||||
*/
|
||||
|
||||
#define SDL_MAIN_USE_CALLBACKS 1
|
||||
#include <SDL3/SDL_test_common.h>
|
||||
#include <SDL3/SDL_main.h>
|
||||
|
||||
static SDLTest_CommonState *state;
|
||||
typedef struct {
|
||||
SDLTest_CommonState *state;
|
||||
SDL_bool is_hover;
|
||||
float x;
|
||||
float y;
|
||||
unsigned int windowID;
|
||||
} dropfile_dialog;
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
int SDL_AppEvent(void *appstate, const SDL_Event *event)
|
||||
{
|
||||
int i, done;
|
||||
SDL_Event event;
|
||||
SDL_bool is_hover = SDL_FALSE;
|
||||
float x = 0.0f, y = 0.0f;
|
||||
unsigned int windowID = 0;
|
||||
int return_code = -1;
|
||||
dropfile_dialog *dialog = appstate;
|
||||
if (event->type == SDL_EVENT_DROP_BEGIN) {
|
||||
SDL_Log("Drop beginning on window %u at (%f, %f)", (unsigned int)event->drop.windowID, event->drop.x, event->drop.y);
|
||||
} else if (event->type == SDL_EVENT_DROP_COMPLETE) {
|
||||
dialog->is_hover = SDL_FALSE;
|
||||
SDL_Log("Drop complete on window %u at (%f, %f)", (unsigned int)event->drop.windowID, event->drop.x, event->drop.y);
|
||||
} else if ((event->type == SDL_EVENT_DROP_FILE) || (event->type == SDL_EVENT_DROP_TEXT)) {
|
||||
const char *typestr = (event->type == SDL_EVENT_DROP_FILE) ? "File" : "Text";
|
||||
SDL_Log("%s dropped on window %u: %s at (%f, %f)", typestr, (unsigned int)event->drop.windowID, event->drop.data, event->drop.x, event->drop.y);
|
||||
} else if (event->type == SDL_EVENT_DROP_POSITION) {
|
||||
dialog->is_hover = SDL_TRUE;
|
||||
dialog->x = event->drop.x;
|
||||
dialog->y = event->drop.y;
|
||||
dialog->windowID = event->drop.windowID;
|
||||
SDL_Log("Drop position on window %u at (%f, %f) data = %s", (unsigned int)event->drop.windowID, event->drop.x, event->drop.y, event->drop.data);
|
||||
}
|
||||
|
||||
return SDLTest_CommonEventMainCallbacks(dialog->state, event);
|
||||
}
|
||||
|
||||
int SDL_AppIterate(void *appstate)
|
||||
{
|
||||
dropfile_dialog *dialog = appstate;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < dialog->state->num_windows; ++i) {
|
||||
SDL_Renderer *renderer = dialog->state->renderers[i];
|
||||
SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF);
|
||||
SDL_RenderClear(renderer);
|
||||
if (dialog->is_hover) {
|
||||
if (dialog->windowID == SDL_GetWindowID(SDL_GetRenderWindow(renderer))) {
|
||||
int len = 2000;
|
||||
SDL_SetRenderDrawColor(renderer, 0x0A, 0x0A, 0x0A, 0xFF);
|
||||
SDL_RenderLine(renderer, dialog->x, dialog->y - len, dialog->x, dialog->y + len);
|
||||
SDL_RenderLine(renderer, dialog->x - len, dialog->y, dialog->x + len, dialog->y);
|
||||
}
|
||||
}
|
||||
SDL_RenderPresent(renderer);
|
||||
}
|
||||
return 0; /* keep going */
|
||||
}
|
||||
|
||||
int SDL_AppInit(void **appstate, int argc, char *argv[]) {
|
||||
int i;
|
||||
dropfile_dialog *dialog;
|
||||
SDLTest_CommonState *state;
|
||||
|
||||
/* Initialize test framework */
|
||||
state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO);
|
||||
if (!state) {
|
||||
return 1;
|
||||
return -1; /* terminate with an error */
|
||||
}
|
||||
|
||||
/* Enable standard application logging */
|
||||
@ -46,60 +93,32 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
if (consumed < 0) {
|
||||
SDLTest_CommonLogUsage(state, argv[0], NULL);
|
||||
return_code = 1;
|
||||
goto quit;
|
||||
goto onerror;
|
||||
}
|
||||
i += consumed;
|
||||
}
|
||||
if (!SDLTest_CommonInit(state)) {
|
||||
return_code = 1;
|
||||
goto quit;
|
||||
goto onerror;
|
||||
}
|
||||
|
||||
/* Main render loop */
|
||||
done = 0;
|
||||
while (!done) {
|
||||
/* Check for events */
|
||||
while (SDL_PollEvent(&event)) {
|
||||
if (event.type == SDL_EVENT_DROP_BEGIN) {
|
||||
SDL_Log("Drop beginning on window %u at (%f, %f)", (unsigned int)event.drop.windowID, event.drop.x, event.drop.y);
|
||||
} else if (event.type == SDL_EVENT_DROP_COMPLETE) {
|
||||
is_hover = SDL_FALSE;
|
||||
SDL_Log("Drop complete on window %u at (%f, %f)", (unsigned int)event.drop.windowID, event.drop.x, event.drop.y);
|
||||
} else if ((event.type == SDL_EVENT_DROP_FILE) || (event.type == SDL_EVENT_DROP_TEXT)) {
|
||||
const char *typestr = (event.type == SDL_EVENT_DROP_FILE) ? "File" : "Text";
|
||||
SDL_Log("%s dropped on window %u: %s at (%f, %f)", typestr, (unsigned int)event.drop.windowID, event.drop.data, event.drop.x, event.drop.y);
|
||||
} else if (event.type == SDL_EVENT_DROP_POSITION) {
|
||||
is_hover = SDL_TRUE;
|
||||
x = event.drop.x;
|
||||
y = event.drop.y;
|
||||
windowID = event.drop.windowID;
|
||||
SDL_Log("Drop position on window %u at (%f, %f) data = %s", (unsigned int)event.drop.windowID, event.drop.x, event.drop.y, event.drop.data);
|
||||
}
|
||||
|
||||
SDLTest_CommonEvent(state, &event, &done);
|
||||
}
|
||||
|
||||
for (i = 0; i < state->num_windows; ++i) {
|
||||
SDL_Renderer *renderer = state->renderers[i];
|
||||
SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF);
|
||||
SDL_RenderClear(renderer);
|
||||
if (is_hover) {
|
||||
if (windowID == SDL_GetWindowID(SDL_GetRenderWindow(renderer))) {
|
||||
int len = 2000;
|
||||
SDL_SetRenderDrawColor(renderer, 0x0A, 0x0A, 0x0A, 0xFF);
|
||||
SDL_RenderLine(renderer, x, y - len, x, y + len);
|
||||
SDL_RenderLine(renderer, x - len, y, x + len, y);
|
||||
}
|
||||
}
|
||||
SDL_RenderPresent(renderer);
|
||||
}
|
||||
|
||||
SDL_Delay(16);
|
||||
dialog = SDL_calloc(sizeof(dropfile_dialog), 1);
|
||||
if (!dialog) {
|
||||
goto onerror;
|
||||
}
|
||||
*appstate = dialog;
|
||||
|
||||
return_code = 0;
|
||||
quit:
|
||||
dialog->state = state;
|
||||
return 0; /* continue */
|
||||
onerror:
|
||||
SDLTest_CommonQuit(state);
|
||||
return return_code;
|
||||
return -1; /* terminate with an error */
|
||||
}
|
||||
|
||||
void SDL_AppQuit(void *appstate)
|
||||
{
|
||||
dropfile_dialog *dialog = appstate;
|
||||
if (dialog) {
|
||||
SDLTest_CommonState *state = dialog->state;
|
||||
SDL_free(dialog);
|
||||
SDLTest_CommonQuit(state);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user