-
-
Save savegame/f5fae932cd704c16237f2d891b682e93 to your computer and use it in GitHub Desktop.
Simpel SDL2 applcation for testing catching DISPLAY_ORIENTATION_EVENTS
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <SDL.h> | |
#include <GLES2/gl2.h> | |
#include <string> | |
#include <memory> | |
#include <iostream> | |
#include <strstream> | |
#define UNUSED(x) (void)x | |
void sdlwLogOutputFunction(void *userdata, int category, SDL_LogPriority priority, const char *message) | |
{ | |
const char *categoryString = ""; | |
switch (category) | |
{ | |
default: | |
categoryString = "unknown"; | |
break; | |
case SDL_LOG_CATEGORY_APPLICATION: | |
categoryString = "application"; | |
break; | |
case SDL_LOG_CATEGORY_ERROR: | |
categoryString = "error"; | |
break; | |
case SDL_LOG_CATEGORY_ASSERT: | |
categoryString = "assert"; | |
break; | |
case SDL_LOG_CATEGORY_SYSTEM: | |
categoryString = "system"; | |
break; | |
case SDL_LOG_CATEGORY_AUDIO: | |
categoryString = "audio"; | |
break; | |
case SDL_LOG_CATEGORY_VIDEO: | |
categoryString = "video"; | |
break; | |
case SDL_LOG_CATEGORY_RENDER: | |
categoryString = "render"; | |
break; | |
case SDL_LOG_CATEGORY_INPUT: | |
categoryString = "input"; | |
break; | |
case SDL_LOG_CATEGORY_TEST: | |
categoryString = "test"; | |
break; | |
} | |
const char *priorityString = "unknown"; | |
switch (priority) | |
{ | |
default: | |
priorityString = "unknown"; | |
break; | |
case SDL_LOG_PRIORITY_VERBOSE: | |
priorityString = "verbose"; | |
break; | |
case SDL_LOG_PRIORITY_DEBUG: | |
priorityString = "debug"; | |
break; | |
case SDL_LOG_PRIORITY_INFO: | |
priorityString = "info"; | |
break; | |
case SDL_LOG_PRIORITY_WARN: | |
priorityString = "warn"; | |
break; | |
case SDL_LOG_PRIORITY_ERROR: | |
priorityString = "error"; | |
break; | |
case SDL_LOG_PRIORITY_CRITICAL: | |
priorityString = "critical"; | |
break; | |
} | |
printf("SDL - %s - %s - %s", categoryString, priorityString, message); | |
} | |
std::string EventType2String(unsigned int et) { | |
switch(et) { | |
case (unsigned int)SDL_QUIT: | |
return std::string("SDL_QUIT"); | |
case (unsigned int)SDL_APP_TERMINATING: | |
return std::string("SDL_APP_TERMINATING"); | |
case (unsigned int)SDL_APP_LOWMEMORY: | |
return std::string("SDL_APP_LOWMEMORY"); | |
case (unsigned int)SDL_APP_WILLENTERBACKGROUND: | |
return std::string("SDL_APP_WILLENTERBACKGROUND"); | |
case (unsigned int)SDL_APP_DIDENTERBACKGROUND: | |
return std::string("SDL_APP_DIDENTERBACKGROUND"); | |
case (unsigned int)SDL_APP_WILLENTERFOREGROUND: | |
return std::string("SDL_APP_WILLENTERFOREGROUND"); | |
case (unsigned int)SDL_APP_DIDENTERFOREGROUND: | |
return std::string("SDL_APP_DIDENTERFOREGROUND"); | |
case (unsigned int)SDL_LOCALECHANGED: | |
return std::string("SDL_LOCALECHANGED"); | |
case (unsigned int)SDL_DISPLAYEVENT: | |
return std::string("SDL_DISPLAYEVENT"); | |
case (unsigned int)SDL_WINDOWEVENT: | |
return std::string("SDL_WINDOWEVENT"); | |
case (unsigned int)SDL_SYSWMEVENT: | |
return std::string("SDL_SYSWMEVENT"); | |
case (unsigned int)SDL_KEYDOWN: | |
return std::string("SDL_KEYDOWN"); | |
case (unsigned int)SDL_KEYUP: | |
return std::string("SDL_KEYUP"); | |
case (unsigned int)SDL_TEXTEDITING: | |
return std::string("SDL_TEXTEDITING"); | |
case (unsigned int)SDL_TEXTINPUT: | |
return std::string("SDL_TEXTINPUT"); | |
case (unsigned int)SDL_KEYMAPCHANGED: | |
return std::string("SDL_KEYMAPCHANGED"); | |
case (unsigned int)SDL_MOUSEMOTION: | |
return std::string("SDL_MOUSEMOTION"); | |
case (unsigned int)SDL_MOUSEBUTTONDOWN: | |
return std::string("SDL_MOUSEBUTTONDOWN"); | |
case (unsigned int)SDL_MOUSEBUTTONUP: | |
return std::string("SDL_MOUSEBUTTONUP"); | |
case (unsigned int)SDL_MOUSEWHEEL: | |
return std::string("SDL_MOUSEWHEEL"); | |
case (unsigned int)SDL_JOYAXISMOTION: | |
return std::string("SDL_JOYAXISMOTION"); | |
case (unsigned int)SDL_JOYBALLMOTION: | |
return std::string("SDL_JOYBALLMOTION"); | |
case (unsigned int)SDL_JOYHATMOTION: | |
return std::string("SDL_JOYHATMOTION"); | |
case (unsigned int)SDL_JOYBUTTONDOWN: | |
return std::string("SDL_JOYBUTTONDOWN"); | |
case (unsigned int)SDL_JOYBUTTONUP: | |
return std::string("SDL_JOYBUTTONUP"); | |
case (unsigned int)SDL_JOYDEVICEADDED: | |
return std::string("SDL_JOYDEVICEADDED"); | |
case (unsigned int)SDL_JOYDEVICEREMOVED: | |
return std::string("SDL_JOYDEVICEREMOVED"); | |
case (unsigned int)SDL_CONTROLLERAXISMOTION: | |
return std::string("SDL_CONTROLLERAXISMOTION"); | |
case (unsigned int)SDL_CONTROLLERBUTTONDOWN: | |
return std::string("SDL_CONTROLLERBUTTONDOWN"); | |
case (unsigned int)SDL_CONTROLLERBUTTONUP: | |
return std::string("SDL_CONTROLLERBUTTONUP"); | |
case (unsigned int)SDL_CONTROLLERDEVICEADDED: | |
return std::string("SDL_CONTROLLERDEVICEADDED"); | |
case (unsigned int)SDL_CONTROLLERDEVICEREMOVED: | |
return std::string("SDL_CONTROLLERDEVICEREMOVED"); | |
case (unsigned int)SDL_CONTROLLERDEVICEREMAPPED: | |
return std::string("SDL_CONTROLLERDEVICEREMAPPED"); | |
case (unsigned int)SDL_CONTROLLERTOUCHPADDOWN: | |
return std::string("SDL_CONTROLLERTOUCHPADDOWN"); | |
case (unsigned int)SDL_CONTROLLERTOUCHPADMOTION: | |
return std::string("SDL_CONTROLLERTOUCHPADMOTION"); | |
case (unsigned int)SDL_CONTROLLERTOUCHPADUP: | |
return std::string("SDL_CONTROLLERTOUCHPADUP"); | |
case (unsigned int)SDL_CONTROLLERSENSORUPDATE: | |
return std::string("SDL_CONTROLLERSENSORUPDATE"); | |
case (unsigned int)SDL_FINGERDOWN: | |
return std::string("SDL_FINGERDOWN"); | |
case (unsigned int)SDL_FINGERUP: | |
return std::string("SDL_FINGERUP"); | |
case (unsigned int)SDL_FINGERMOTION: | |
return std::string("SDL_FINGERMOTION"); | |
case (unsigned int)SDL_DOLLARGESTURE: | |
return std::string("SDL_DOLLARGESTURE"); | |
case (unsigned int)SDL_DOLLARRECORD: | |
return std::string("SDL_DOLLARRECORD"); | |
case (unsigned int)SDL_MULTIGESTURE: | |
return std::string("SDL_MULTIGESTURE"); | |
case (unsigned int)SDL_CLIPBOARDUPDATE: | |
return std::string("SDL_CLIPBOARDUPDATE"); | |
case (unsigned int)SDL_DROPFILE: | |
return std::string("SDL_DROPFILE"); | |
case (unsigned int)SDL_DROPTEXT: | |
return std::string("SDL_DROPTEXT"); | |
case (unsigned int)SDL_DROPBEGIN: | |
return std::string("SDL_DROPBEGIN"); | |
case (unsigned int)SDL_DROPCOMPLETE: | |
return std::string("SDL_DROPCOMPLETE"); | |
case (unsigned int)SDL_AUDIODEVICEADDED: | |
return std::string("SDL_AUDIODEVICEADDED"); | |
case (unsigned int)SDL_AUDIODEVICEREMOVED: | |
return std::string("SDL_AUDIODEVICEREMOVED"); | |
case (unsigned int)SDL_SENSORUPDATE: | |
return std::string("SDL_SENSORUPDATE"); | |
case (unsigned int)SDL_RENDER_TARGETS_RESET: | |
return std::string("SDL_RENDER_TARGETS_RESET"); | |
case (unsigned int)SDL_RENDER_DEVICE_RESET: | |
return std::string("SDL_RENDER_DEVICE_RESET"); | |
case (unsigned int)SDL_USEREVENT: | |
return std::string("SDL_USEREVENT"); | |
case (unsigned int)SDL_POLLSENTINEL: | |
return std::string("SDL_POLLSENTINEL"); | |
case (unsigned int)SDL_LASTEVENT: | |
return std::string("SDL_LASTEVENT"); | |
} | |
std::strstream strstream; | |
strstream << et << "\0"; | |
return std::string("unknown event: ") + strstream.str(); | |
} | |
class GLColor { | |
public: | |
GLColor() {} | |
GLColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha = 1.0) | |
: r(red), g(green), b(blue), a(alpha) | |
{ | |
} | |
GLColor(Uint8 red, Uint8 green, Uint8 blue, Uint8 alpha = 255) | |
{ | |
r = GLfloat(red)/255.0; | |
g = GLfloat(green)/255.0; | |
b = GLfloat(blue)/255.0; | |
a = GLfloat(alpha)/255.0; | |
} | |
GLColor& operator=(const GLColor &other) | |
{ | |
r = other.r; | |
g = other.g; | |
b = other.b; | |
a = other.a; | |
return *this; | |
} | |
GLfloat r = 1.0, g = 1.0, b = 1.0, a = 1.0; | |
}; | |
int main(int argc, char *argv[]) | |
{ | |
UNUSED(argc); | |
UNUSED(argv); | |
bool quit = false; | |
SDL_Event event; | |
GLColor color1, color2, color3, currentColor; | |
color1 = {(Uint8)60,(Uint8)60,(Uint8)255,(Uint8)255}; | |
color2 = {(Uint8)60,(Uint8)255,(Uint8)60,(Uint8)255}; | |
color3 = {1.0f,0.0f,0.0f,1.0f}; | |
currentColor = color1; | |
SDL_Init(SDL_INIT_VIDEO); | |
SDL_LogSetOutputFunction(sdlwLogOutputFunction, NULL); | |
// | |
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); | |
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); | |
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); | |
// // | |
SDL_Window* window = SDL_CreateWindow("SDL2 Sailfish App", | |
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, | |
-1, -1, | |
SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN | SDL_WINDOW_FULLSCREEN); | |
int winWidth, winHeight; | |
SDL_GetWindowSize(window, &winWidth, &winHeight); | |
SDL_GLContext glContext = SDL_GL_CreateContext(window); | |
UNUSED(glContext); | |
std::string message; | |
while (!quit) | |
{ | |
SDL_PollEvent(&event); | |
message = EventType2String(event.type); | |
std::cout << message << std::endl; | |
switch (event.type) | |
{ | |
case (unsigned int)SDL_DISPLAYEVENT: { | |
if( event.display.event == SDL_DISPLAYEVENT_ORIENTATION ) { | |
printf("DISPLAY ORIENTATION CHANGED\n"); | |
switch(event.display.data1){ | |
case SDL_ORIENTATION_LANDSCAPE : | |
currentColor = color1; | |
break; | |
case SDL_ORIENTATION_LANDSCAPE_FLIPPED : | |
currentColor = color2; | |
break; | |
case SDL_ORIENTATION_PORTRAIT : | |
currentColor = color3; | |
break; | |
case SDL_ORIENTATION_PORTRAIT_FLIPPED : | |
currentColor = {0.0f,0.0f,0.0f,1.0f}; | |
break; | |
}; | |
} | |
} | |
break; | |
case (unsigned int)SDL_QUIT: | |
quit = true; | |
break; | |
} | |
glViewport(0, 0, winWidth, winHeight); | |
glClearColor(currentColor.r, currentColor.g, currentColor.b, currentColor.a); | |
glClear(GL_COLOR_BUFFER_BIT); | |
SDL_GL_SwapWindow(window); | |
} | |
SDL_Quit(); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
screen colour changed when we rotate phone