SDL 2.0
testmessage.c
Go to the documentation of this file.
1/*
2 Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
3
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.
7
8 Permission is granted to anyone to use this software for any purpose,
9 including commercial applications, and to alter it and redistribute it
10 freely.
11*/
12
13/* Simple test of the SDL MessageBox API */
14
15#include <stdio.h>
16#include <stdlib.h>
17
18#include "SDL.h"
19
20/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
21static void
22quit(int rc)
23{
24 SDL_Quit();
25 exit(rc);
26}
27
28static int SDLCALL
29button_messagebox(void *eventNumber)
30{
31 const SDL_MessageBoxButtonData buttons[] = {
32 {
34 0,
35 "OK"
36 },{
38 1,
39 "Cancel"
40 },
41 };
42
45 NULL, /* no parent window */
46 "Custom MessageBox",
47 "This is a custom messagebox",
48 2,
49 NULL,/* buttons */
50 NULL /* Default color scheme */
51 };
52
53 int button = -1;
54 int success = 0;
55 data.buttons = buttons;
56 if (eventNumber) {
57 data.message = "This is a custom messagebox from a background thread.";
58 }
59
60 success = SDL_ShowMessageBox(&data, &button);
61 if (success == -1) {
62 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
63 if (eventNumber) {
65 event.type = (intptr_t)eventNumber;
67 return 1;
68 } else {
69 quit(2);
70 }
71 }
72 SDL_Log("Pressed button: %d, %s\n", button, button == -1 ? "[closed]" : button == 1 ? "Cancel" : "OK");
73
74 if (eventNumber) {
76 event.type = (intptr_t)eventNumber;
78 }
79
80 return 0;
81}
82
83int
84main(int argc, char *argv[])
85{
86 int success;
87
88 /* Enable standard application logging */
90
92 "Simple MessageBox",
93 "This is a simple error MessageBox",
94 NULL);
95 if (success == -1) {
96 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
97 quit(1);
98 }
99
101 "Simple MessageBox",
102 "This is a simple MessageBox with a newline:\r\nHello world!",
103 NULL);
104 if (success == -1) {
105 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
106 quit(1);
107 }
108
109 /* Google says this is Traditional Chinese for "beef with broccoli" */
111 "UTF-8 Simple MessageBox",
112 "Unicode text: '牛肉西蘭花' ...",
113 NULL);
114 if (success == -1) {
115 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
116 quit(1);
117 }
118
119 /* Google says this is Traditional Chinese for "beef with broccoli" */
121 "UTF-8 Simple MessageBox",
122 "Unicode text and newline:\r\n'牛肉西蘭花'\n'牛肉西蘭花'",
123 NULL);
124 if (success == -1) {
125 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
126 quit(1);
127 }
128
129 /* Google says this is Traditional Chinese for "beef with broccoli" */
131 "牛肉西蘭花",
132 "Unicode text in the title.",
133 NULL);
134 if (success == -1) {
135 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
136 quit(1);
137 }
138
140
141 /* Test showing a message box from a background thread.
142
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.
146 */
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());
149 return (1);
150 }
151 {
152 int status = 0;
154 intptr_t eventNumber = SDL_RegisterEvents(1);
155 SDL_Thread* thread = SDL_CreateThread(&button_messagebox, "MessageBox", (void*)eventNumber);
156
157 while (SDL_WaitEvent(&event))
158 {
159 if (event.type == eventNumber) {
160 break;
161 }
162 }
163
164 SDL_WaitThread(thread, &status);
165
166 SDL_Log("Message box thread return %i\n", status);
167 }
168
169 /* Test showing a message box with a parent window */
170 {
173
175 "Simple MessageBox",
176 "This is a simple error MessageBox with a parent window",
177 window);
178 if (success == -1) {
179 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
180 quit(1);
181 }
182
183 while (SDL_WaitEvent(&event))
184 {
185 if (event.type == SDL_QUIT || event.type == SDL_KEYUP) {
186 break;
187 }
188 }
189 }
190
191 SDL_Quit();
192 return (0);
193}
#define SDL_INIT_VIDEO
Definition: SDL.h:79
#define SDL_GetError
#define SDL_CreateThread
#define SDL_PushEvent
#define SDL_CreateWindow
#define SDL_RegisterEvents
#define SDL_LogSetPriority
#define SDL_LogError
#define SDL_ShowSimpleMessageBox
#define SDL_WaitThread
#define SDL_ShowMessageBox
#define SDL_Quit
#define SDL_Init
#define SDL_Log
#define SDL_WaitEvent
@ SDL_QUIT
Definition: SDL_events.h:60
@ SDL_KEYUP
Definition: SDL_events.h:97
#define SDLCALL
Definition: SDL_internal.h:49
@ SDL_LOG_PRIORITY_INFO
Definition: SDL_log.h:106
@ SDL_LOG_CATEGORY_APPLICATION
Definition: SDL_log.h:66
@ SDL_MESSAGEBOX_ERROR
@ SDL_MESSAGEBOX_INFORMATION
@ SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT
@ SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: SDL_opengl.h:1974
struct _cl_event * event
#define SDL_WINDOWPOS_CENTERED
Definition: SDL_video.h:139
#define NULL
Definition: begin_code.h:167
EGLSurface EGLNativeWindowType * window
Definition: eglext.h:1025
Individual button data.
MessageBox structure containing title, text, window, etc.
A user-defined event type (event.user.*)
Definition: SDL_events.h:528
The type used to identify a window.
Definition: SDL_sysvideo.h:74
SDL_Texture * button
int main(int argc, char *argv[])
Definition: testmessage.c:84
static void quit(int rc)
Definition: testmessage.c:22
static int button_messagebox(void *eventNumber)
Definition: testmessage.c:29
General event structure.
Definition: SDL_events.h:558