Skip to content

Instantly share code, notes, and snippets.

@savegame
Last active March 7, 2022 09:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save savegame/f5fae932cd704c16237f2d891b682e93 to your computer and use it in GitHub Desktop.
Save savegame/f5fae932cd704c16237f2d891b682e93 to your computer and use it in GitHub Desktop.
Simpel SDL2 applcation for testing catching DISPLAY_ORIENTATION_EVENTS
#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();
}
@savegame
Copy link
Author

savegame commented Mar 7, 2022

screen colour changed when we rotate phone

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment