2 Copyright (C) 1997-2018 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);
84 main(int argc, char *argv[])
88 /* Enable standard application logging */
89 SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
91 success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
93 "This is a simple error MessageBox",
96 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
100 success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
102 "This is a simple MessageBox with a newline:\r\nHello world!",
105 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
109 /* Google says this is Traditional Chinese for "beef with broccoli" */
110 success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
111 "UTF-8 Simple MessageBox",
112 "Unicode text: '牛肉西蘭花' ...",
115 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
119 /* Google says this is Traditional Chinese for "beef with broccoli" */
120 success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
121 "UTF-8 Simple MessageBox",
122 "Unicode text and newline:\r\n'牛肉西蘭花'\n'牛肉西蘭花'",
125 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
129 /* Google says this is Traditional Chinese for "beef with broccoli" */
130 success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
132 "Unicode text in the title.",
135 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
139 button_messagebox(NULL);
141 /* Test showing a message box from a background thread.
143 On Mac OS X, the video subsystem needs to be initialized for this
144 to work, since the message box events are dispatched by the Cocoa
145 subsystem on the main thread.
147 if (SDL_Init(SDL_INIT_VIDEO) < 0) {
148 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL video subsystem: %s\n", SDL_GetError());
154 intptr_t eventNumber = SDL_RegisterEvents(1);
155 SDL_Thread* thread = SDL_CreateThread(&button_messagebox, "MessageBox", (void*)eventNumber);
157 while (SDL_WaitEvent(&event))
159 if (event.type == eventNumber) {
164 SDL_WaitThread(thread, &status);
166 SDL_Log("Message box thread return %i\n", status);
169 /* Test showing a message box with a parent window */
172 SDL_Window *window = SDL_CreateWindow("Test", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, 0);
174 success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
176 "This is a simple error MessageBox with a parent window",
179 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
183 while (SDL_WaitEvent(&event))
185 if (event.type == SDL_QUIT || event.type == SDL_KEYUP) {