2 Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
4 This software is provided 'as-is', without any express or implied
5 warranty. In no event will the authors be held liable for any damages
6 arising from the use of this software.
8 Permission is granted to anyone to use this software for any purpose,
9 including commercial applications, and to alter it and redistribute it
13 /* Simple test of the SDL MessageBox API */
20 /* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
29 button_messagebox(void *eventNumber)
31 const SDL_MessageBoxButtonData buttons[] = {
33 SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT,
37 SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT,
43 SDL_MessageBoxData data = {
44 SDL_MESSAGEBOX_INFORMATION,
45 NULL, /* no parent window */
47 "This is a custom messagebox",
50 NULL /* Default color scheme */
55 data.buttons = buttons;
57 data.message = "This is a custom messagebox from a background thread.";
60 success = SDL_ShowMessageBox(&data, &button);
62 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
65 event.type = (intptr_t)eventNumber;
66 SDL_PushEvent((SDL_Event*)&event);
72 SDL_Log("Pressed button: %d, %s\n", button, button == -1 ? "[closed]" : button == 1 ? "Cancel" : "OK");
76 event.type = (intptr_t)eventNumber;
77 SDL_PushEvent((SDL_Event*)&event);
83 main(int argc, char *argv[])
87 /* Enable standard application logging */
88 SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
90 success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
92 "This is a simple error MessageBox",
95 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
99 success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
101 "This is a simple MessageBox with a newline:\r\nHello world!",
104 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
108 success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
113 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
117 success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
122 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
126 /* Google says this is Traditional Chinese for "beef with broccoli" */
127 success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
128 "UTF-8 Simple MessageBox",
129 "Unicode text: '牛肉西蘭花' ...",
132 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
136 /* Google says this is Traditional Chinese for "beef with broccoli" */
137 success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
138 "UTF-8 Simple MessageBox",
139 "Unicode text and newline:\r\n'牛肉西蘭花'\n'牛肉西蘭花'",
142 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
146 /* Google says this is Traditional Chinese for "beef with broccoli" */
147 success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
149 "Unicode text in the title.",
152 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
156 button_messagebox(NULL);
158 /* Test showing a message box from a background thread.
160 On Mac OS X, the video subsystem needs to be initialized for this
161 to work, since the message box events are dispatched by the Cocoa
162 subsystem on the main thread.
164 if (SDL_Init(SDL_INIT_VIDEO) < 0) {
165 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL video subsystem: %s\n", SDL_GetError());
171 intptr_t eventNumber = SDL_RegisterEvents(1);
172 SDL_Thread* thread = SDL_CreateThread(&button_messagebox, "MessageBox", (void*)eventNumber);
174 while (SDL_WaitEvent(&event))
176 if (event.type == eventNumber) {
181 SDL_WaitThread(thread, &status);
183 SDL_Log("Message box thread return %i\n", status);
186 /* Test showing a message box with a parent window */
189 SDL_Window *window = SDL_CreateWindow("Test", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, 0);
191 success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
193 "This is a simple error MessageBox with a parent window",
196 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
200 while (SDL_WaitEvent(&event))
202 if (event.type == SDL_QUIT || event.type == SDL_KEYUP) {