static qboolean sound_active = true;
int keycode;
int i;
+ qboolean isdown;
Uchar unicode;
SDL_Event event;
VID_EnableJoystick(true);
while( SDL_PollEvent( &event ) )
+ loop_start:
switch( event.type ) {
case SDL_QUIT:
#ifdef DEBUGSDLEVENTS
Con_DPrintf("SDL_Event: SDL_KEYUP %i\n", event.key.keysym.sym);
#endif
keycode = MapKey(event.key.keysym.sym);
+ isdown = (event.key.state == SDL_PRESSED);
+ unicode = 0;
+ if(isdown)
+ {
+ if(SDL_PollEvent(&event))
+ {
+ if(event.type == SDL_TEXTINPUT)
+ {
+ // combine key code from SDL_KEYDOWN event and character
+ // from SDL_TEXTINPUT event in a single Key_Event call
+#ifdef DEBUGSDLEVENTS
+ Con_DPrintf("SDL_Event: SDL_TEXTINPUT - text: %s\n", event.text.text);
+#endif
+ unicode = u8_getchar_utf8_enabled(event.text.text + (int)u8_bytelen(event.text.text, 0), NULL);
+ }
+ else
+ {
+ if (!VID_JoyBlockEmulatedKeys(keycode))
+ Key_Event(keycode, 0, isdown);
+ goto loop_start;
+ }
+ }
+ }
if (!VID_JoyBlockEmulatedKeys(keycode))
- Key_Event(keycode, 0, (event.key.state == SDL_PRESSED));
+ Key_Event(keycode, unicode, isdown);
break;
case SDL_MOUSEBUTTONDOWN:
case SDL_MOUSEBUTTONUP:
Calling them just threw an exception. Android developer relations confirmed that they forgot to implement these. (yeah...)
It's apparently been fixed in 2.2, though I haven't tested."
*/
- vid.support.ext_framebuffer_object = false;//true;
+ // LadyHavoc: Android 2.1 is way old now, enabling this again, it's going to be required soon.
+ vid.support.ext_framebuffer_object = true;
vid.support.ext_packed_depth_stencil = false;
vid.support.ext_stencil_two_side = false;
}
#endif
+#if SDL_MAJOR_VERSION != 1
+#include <SDL_syswm.h>
+#endif
+
static qboolean VID_InitModeGL(viddef_mode_t *mode)
{
#if SDL_MAJOR_VERSION == 1
VID_Shutdown();
return false;
}
+
+ {
+ static SDL_Surface *icon = NULL;
+ int j;
+ char *data;
+ SDL_version version;
+
+ if (icon)
+ SDL_FreeSurface(icon);
+ icon = NULL;
+ SDL_GetVersion(&version);
+
+ if(version.major >= 2 || (version.major == 1 && version.minor >= 3))
+ {
+ SDL_SysWMinfo info;
+ SDL_VERSION(&info.version);
+ if(SDL_GetWindowWMInfo(window, &info) == 1 && info.subsystem == SDL_SYSWM_X11)
+ {
+ data = (char *) loadimagepixelsbgra("darkplaces-icon", false, false, false, NULL);
+ if(data)
+ {
+ // use _NET_WM_ICON too
+ static long netwm_icon[MAX_NETWM_ICON];
+ int pos = 0;
+ int i = 1;
+ char vabuf[1024];
+
+ while(data)
+ {
+ if(pos + 2 * image_width * image_height < MAX_NETWM_ICON)
+ {
+ netwm_icon[pos++] = image_width;
+ netwm_icon[pos++] = image_height;
+ for(i = 0; i < image_height; ++i)
+ for(j = 0; j < image_width; ++j)
+ netwm_icon[pos++] = BuffLittleLong((unsigned char *) &data[(i*image_width+j)*4]);
+ }
+ else
+ {
+ Con_Printf("Skipping NETWM icon #%d because there is no space left\n", i);
+ }
+ ++i;
+ Mem_Free(data);
+ data = (char *) loadimagepixelsbgra(va(vabuf, sizeof(vabuf), "darkplaces-icon%d", i), false, false, false, NULL);
+ }
+
+ {
+ Atom net_wm_icon = XInternAtom(info.info.x11.display, "_NET_WM_ICON", false);
+ XChangeProperty(info.info.x11.display, info.info.x11.window, net_wm_icon, XA_CARDINAL, 32, PropModeReplace, (const unsigned char *) netwm_icon, pos);
+ //SDL_SetWindowIcon(window, icon);
+ }
+ }
+ }
+ }
+ }
+
SDL_GetWindowSize(window, &mode->width, &mode->height);
context = SDL_GL_CreateContext(window);
if (context == NULL)
{
VID_EnableJoystick(false);
VID_SetMouse(false, false, false);
- VID_RestoreSystemGamma();
#if SDL_MAJOR_VERSION == 1
#ifndef WIN32
gl_platformextensions = "";
}
-int VID_SetGamma (unsigned short *ramps, int rampsize)
-{
-#if SDL_MAJOR_VERSION == 1
- return !SDL_SetGammaRamp (ramps, ramps + rampsize, ramps + rampsize*2);
-#else
- return !SDL_SetWindowGammaRamp (window, ramps, ramps + rampsize, ramps + rampsize*2);
-#endif
-}
-
-int VID_GetGamma (unsigned short *ramps, int rampsize)
-{
-#if SDL_MAJOR_VERSION == 1
- return !SDL_GetGammaRamp (ramps, ramps + rampsize, ramps + rampsize*2);
-#else
- return !SDL_GetWindowGammaRamp (window, ramps, ramps + rampsize, ramps + rampsize*2);
-#endif
-}
-
void VID_Finish (void)
{
#if SDL_MAJOR_VERSION == 1
#endif
vid_activewindow = !vid_hidden && vid_hasfocus;
- VID_UpdateGamma(false, 256);
+ VID_UpdateGamma();
if (!vid_hidden)
{