* Make the FULLSCREEN function bindable on platforms that support it.
* Linux has F as default binding.
* Windows support is not implemented, but is there ; applications will
  just not suggest it under windows for the moment.
This commit is contained in:
jean.chalard
2010-02-28 12:31:51 +00:00
parent db8724e045
commit c2549af81d
5 changed files with 30 additions and 9 deletions
+1
View File
@@ -46,6 +46,7 @@ void JGECreateDefaultBindings();
int JGEGetTime(); int JGEGetTime();
u8 JGEGetAnalogX(); u8 JGEGetAnalogX();
u8 JGEGetAnalogY(); u8 JGEGetAnalogY();
bool JGEToggleFullscreen();
#if !defined(WIN32) && !defined(LINUX) #if !defined(WIN32) && !defined(LINUX)
+1
View File
@@ -227,6 +227,7 @@ typedef enum Buttons
JGE_BTN_SEC, // Cross or Circle (secondary) JGE_BTN_SEC, // Cross or Circle (secondary)
JGE_BTN_PREV, // Left trigger JGE_BTN_PREV, // Left trigger
JGE_BTN_NEXT, // Right trigger JGE_BTN_NEXT, // Right trigger
JGE_BTN_FULLSCREEN, // Switch to fullscreen (obviously, PC only)
JGE_BTN_MAX = JGE_BTN_NEXT + 1 JGE_BTN_MAX = JGE_BTN_NEXT + 1
} JButton; } JButton;
+20 -1
View File
@@ -78,11 +78,18 @@ void JGE::PressKey(const LocalKeySym sym)
const pair<keycodes_it, keycodes_it> rng = keyBinds.equal_range(sym); const pair<keycodes_it, keycodes_it> rng = keyBinds.equal_range(sym);
if (rng.first == rng.second) if (rng.first == rng.second)
keyBuffer.push(triplet(sym, JGE_BTN_NONE, false)); keyBuffer.push(triplet(sym, JGE_BTN_NONE, false));
else for (keycodes_it it = rng.first; it != rng.second; ++it) else for (keycodes_it it = rng.first; it != rng.second; ++it) {
#if defined (WIN32) || defined (LINUX)
if (JGE_BTN_FULLSCREEN == it->second) JGEToggleFullscreen();
#endif
keyBuffer.push(triplet(*it, held(it->second))); keyBuffer.push(triplet(*it, held(it->second)));
}
} }
void JGE::PressKey(const JButton sym) void JGE::PressKey(const JButton sym)
{ {
#if defined (WIN32) || defined (LINUX)
if (sym == JGE_BTN_FULLSCREEN) JGEToggleFullscreen();
#endif
keyBuffer.push(triplet(LOCAL_KEY_NONE, sym, held(sym))); keyBuffer.push(triplet(LOCAL_KEY_NONE, sym, held(sym)));
} }
void JGE::HoldKey(const LocalKeySym sym) void JGE::HoldKey(const LocalKeySym sym)
@@ -92,6 +99,9 @@ void JGE::HoldKey(const LocalKeySym sym)
keyBuffer.push(triplet(sym, JGE_BTN_NONE, false)); keyBuffer.push(triplet(sym, JGE_BTN_NONE, false));
else for (keycodes_it it = rng.first; it != rng.second; ++it) else for (keycodes_it it = rng.first; it != rng.second; ++it)
{ {
#if defined (WIN32) || defined (LINUX)
if (JGE_BTN_FULLSCREEN == it->second) JGEToggleFullscreen();
#endif
if (!held(it->second)) if (!held(it->second))
{ {
keyBuffer.push(triplet(*it, false)); keyBuffer.push(triplet(*it, false));
@@ -107,6 +117,9 @@ void JGE::HoldKey_NoRepeat(const LocalKeySym sym)
keyBuffer.push(triplet(sym, JGE_BTN_NONE, false)); keyBuffer.push(triplet(sym, JGE_BTN_NONE, false));
else for (keycodes_it it = rng.first; it != rng.second; ++it) else for (keycodes_it it = rng.first; it != rng.second; ++it)
{ {
#if defined (WIN32) || defined (LINUX)
if (JGE_BTN_FULLSCREEN == it->second) JGEToggleFullscreen();
#endif
keyBuffer.push(triplet(*it, true)); keyBuffer.push(triplet(*it, true));
if (!held(it->second)) if (!held(it->second))
holds[it->second] = std::numeric_limits<float>::quiet_NaN(); holds[it->second] = std::numeric_limits<float>::quiet_NaN();
@@ -114,6 +127,9 @@ void JGE::HoldKey_NoRepeat(const LocalKeySym sym)
} }
void JGE::HoldKey(const JButton sym) void JGE::HoldKey(const JButton sym)
{ {
#if defined (WIN32) || defined (LINUX)
if (JGE_BTN_FULLSCREEN == sym) JGEToggleFullscreen();
#endif
if (!held(sym)) if (!held(sym))
{ {
keyBuffer.push(triplet(LOCAL_KEY_NONE, sym, false)); keyBuffer.push(triplet(LOCAL_KEY_NONE, sym, false));
@@ -123,6 +139,9 @@ void JGE::HoldKey(const JButton sym)
} }
void JGE::HoldKey_NoRepeat(const JButton sym) void JGE::HoldKey_NoRepeat(const JButton sym)
{ {
#if defined (WIN32) || defined (LINUX)
if (JGE_BTN_FULLSCREEN == sym) JGEToggleFullscreen();
#endif
keyBuffer.push(triplet(LOCAL_KEY_NONE, sym, true)); keyBuffer.push(triplet(LOCAL_KEY_NONE, sym, true));
if (!held(sym)) if (!held(sym))
holds[sym] = std::numeric_limits<float>::quiet_NaN(); holds[sym] = std::numeric_limits<float>::quiet_NaN();
+3 -5
View File
@@ -77,9 +77,7 @@ static const struct { LocalKeySym keysym; JButton keycode; } gDefaultBindings[]
{ XK_Caps_Lock, JGE_BTN_SEC }, { XK_Caps_Lock, JGE_BTN_SEC },
{ XK_Shift_L, JGE_BTN_PREV }, { XK_Shift_L, JGE_BTN_PREV },
{ XK_Shift_R, JGE_BTN_NEXT }, { XK_Shift_R, JGE_BTN_NEXT },
{ XK_F1, JGE_BTN_QUIT }, { XK_F, JGE_BTN_FULLSCREEN },
{ XK_F2, JGE_BTN_POWER },
{ XK_F3, JGE_BTN_SOUND }
}; };
GLvoid ReSizeGLScene(GLsizei width, GLsizei height) // Resize The GL Window GLvoid ReSizeGLScene(GLsizei width, GLsizei height) // Resize The GL Window
@@ -300,7 +298,7 @@ void reshapeFunc(int width, int height)
ReSizeGLScene(width, height); ReSizeGLScene(width, height);
} }
void fullscreen() bool JGEToggleFullscreen()
{ {
Atom wmState = XInternAtom(gXDisplay, "_NET_WM_STATE", False); Atom wmState = XInternAtom(gXDisplay, "_NET_WM_STATE", False);
Atom fullScreen = XInternAtom(gXDisplay, "_NET_WM_STATE_FULLSCREEN", False); Atom fullScreen = XInternAtom(gXDisplay, "_NET_WM_STATE_FULLSCREEN", False);
@@ -337,6 +335,7 @@ void fullscreen()
XGetWindowAttributes(gXDisplay, DefaultRootWindow(gXDisplay), &xwa); XGetWindowAttributes(gXDisplay, DefaultRootWindow(gXDisplay), &xwa);
XMoveResizeWindow(gXDisplay, gXWindow, 0, 0, xwa.width, xwa.height); XMoveResizeWindow(gXDisplay, gXWindow, 0, 0, xwa.width, xwa.height);
} }
return true;
} }
int main(int argc, char* argv[]) int main(int argc, char* argv[])
@@ -392,7 +391,6 @@ int main(int argc, char* argv[])
case KeyPress: case KeyPress:
{ {
const KeySym sym = XKeycodeToKeysym(gXDisplay, event.xkey.keycode, 1); const KeySym sym = XKeycodeToKeysym(gXDisplay, event.xkey.keycode, 1);
if (sym == XK_F) fullscreen();
g_engine->HoldKey_NoRepeat(sym); g_engine->HoldKey_NoRepeat(sym);
} }
break; break;
+5 -3
View File
@@ -179,9 +179,6 @@ static const struct { LocalKeySym keysym; JButton keycode; } gDefaultBindings[]
{ VK_SPACE, JGE_BTN_OK }, { VK_SPACE, JGE_BTN_OK },
{ 'K', JGE_BTN_SEC }, { 'K', JGE_BTN_SEC },
{ 'J', JGE_BTN_PRI }, { 'J', JGE_BTN_PRI },
{ VK_F1, JGE_BTN_QUIT },
{ VK_F2, JGE_BTN_POWER },
{ VK_F3, JGE_BTN_SOUND }
}; };
void JGECreateDefaultBindings() void JGECreateDefaultBindings()
@@ -634,6 +631,11 @@ LRESULT CALLBACK WndProc( HWND hWnd, // Handle For This Window
return DefWindowProc(hWnd,uMsg,wParam,lParam); return DefWindowProc(hWnd,uMsg,wParam,lParam);
} }
bool JGEToggleFullscreen()
{
return false; // Not implemented under windows
}
int WINAPI WinMain( HINSTANCE hInstance, // Instance int WINAPI WinMain( HINSTANCE hInstance, // Instance
HINSTANCE hPrevInstance, // Previous Instance HINSTANCE hPrevInstance, // Previous Instance
LPSTR lpCmdLine, // Command Line Parameters LPSTR lpCmdLine, // Command Line Parameters