mirror of https://github.com/encounter/SDL.git
N-Gage port: add changes from code reviews, overall cleanup (#5618)
* Add changes from code review by @ccawley2011, #5597, overall cleanup * Update N-Gage README, minor cleanup and rephrasing * Call SDL_SetMainReady() before calling SDL_main, return SDL_main instead of main
This commit is contained in:
parent
2c2cbbe664
commit
9b75fa0165
|
@ -1,7 +1,7 @@
|
||||||
Nokia N-Gage
|
Nokia N-Gage
|
||||||
============
|
============
|
||||||
|
|
||||||
SDL2 port for Symbian S60v1/2 with a main focus on the Nokia N-Gage
|
SDL2 port for Symbian S60v1 and v2 with a main focus on the Nokia N-Gage
|
||||||
(Classic and QD) by [Michael Fitzmayer](https://github.com/mupfdev).
|
(Classic and QD) by [Michael Fitzmayer](https://github.com/mupfdev).
|
||||||
|
|
||||||
Compiling
|
Compiling
|
||||||
|
@ -13,8 +13,7 @@ The library is included in the
|
||||||
sub-module.
|
sub-module.
|
||||||
|
|
||||||
A complete example project based on SDL2 can be found in the GitHub
|
A complete example project based on SDL2 can be found in the GitHub
|
||||||
account of the SDK: [Example
|
account of the SDK: [Wordle](https://github.com/ngagesdk/wordle).
|
||||||
project](https://github.com/ngagesdk/wordle).
|
|
||||||
|
|
||||||
Current level of implementation
|
Current level of implementation
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
@ -30,8 +29,9 @@ Acknowledgements
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
Thanks to Hannu Viitala, Kimmo Kinnunen and Markus Mertama for the
|
Thanks to Hannu Viitala, Kimmo Kinnunen and Markus Mertama for the
|
||||||
valuable insight into Symbian programming. Without the SDL 1.2 port for
|
valuable insight into Symbian programming. Without the SDL 1.2 port
|
||||||
CDoom, this adaptation would not have been possible.
|
which was specially developed for CDoom (Doom for the Nokia 9210), this
|
||||||
|
adaptation would not have been possible.
|
||||||
|
|
||||||
I would like to thank my friends
|
I would like to thank my friends
|
||||||
[Razvan](https://twitter.com/bewarerazvan) and [Dan
|
[Razvan](https://twitter.com/bewarerazvan) and [Dan
|
||||||
|
@ -39,6 +39,6 @@ Whelan](https://danwhelan.ie/), for their continuous support. Without
|
||||||
you and the [N-Gage community](https://discord.gg/dbUzqJ26vs), I would
|
you and the [N-Gage community](https://discord.gg/dbUzqJ26vs), I would
|
||||||
have lost my patience long ago.
|
have lost my patience long ago.
|
||||||
|
|
||||||
Last but not least, I would like to say a special thank you to the
|
Last but not least, I would like to thank the development team of
|
||||||
[EKA2L1](https://12z1.com/) team. Thank you for all your patience and
|
[EKA2L1](https://12z1.com/) (an experimental Symbian OS emulator). Your
|
||||||
support in troubleshooting.
|
patience and support in troubleshooting helped me a lot.
|
||||||
|
|
|
@ -62,7 +62,7 @@ typedef unsigned long uintptr_t;
|
||||||
/* Enable the N-Gage timer support (src/timer/ngage/\*.c) */
|
/* Enable the N-Gage timer support (src/timer/ngage/\*.c) */
|
||||||
#define SDL_TIMER_NGAGE 1
|
#define SDL_TIMER_NGAGE 1
|
||||||
|
|
||||||
/* Enable the N=Hahe video driver (src/video/ngage/\*.c) */
|
/* Enable the N-Gage video driver (src/video/ngage/\*.c) */
|
||||||
#define SDL_VIDEO_DRIVER_NGAGE 1
|
#define SDL_VIDEO_DRIVER_NGAGE 1
|
||||||
|
|
||||||
/* Enable the dummy audio driver (src/audio/dummy/\*.c) */
|
/* Enable the dummy audio driver (src/audio/dummy/\*.c) */
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
/*
|
/*
|
||||||
EPOC version (originally for SDL 1.2) by Hannu Viitala
|
SDL_ngage_main.c, originally for SDL 1.2 by Hannu Viitala
|
||||||
(hannu.j.viitala@mbnet.fi).
|
|
||||||
*/
|
*/
|
||||||
#include "../../SDL_internal.h"
|
#include "../../SDL_internal.h"
|
||||||
|
|
||||||
|
@ -68,7 +67,8 @@ TInt E32Main()
|
||||||
{
|
{
|
||||||
oldHeap = User::SwitchHeap(newHeap);
|
oldHeap = User::SwitchHeap(newHeap);
|
||||||
/* Call stdlib main */
|
/* Call stdlib main */
|
||||||
ret = main(argc, argv);
|
SDL_SetMainReady();
|
||||||
|
ret = SDL_main(argc, argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
*/
|
*/
|
||||||
#include "../../SDL_internal.h"
|
#include "../../SDL_internal.h"
|
||||||
|
|
||||||
/* An implementation of mutexes using semaphores */
|
/* An implementation of mutexes using the Symbian API. */
|
||||||
|
|
||||||
#include <e32std.h>
|
#include <e32std.h>
|
||||||
|
|
||||||
|
@ -70,6 +70,22 @@ SDL_DestroyMutex(SDL_mutex * mutex)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Try to lock the mutex */
|
||||||
|
#if 0
|
||||||
|
int
|
||||||
|
SDL_TryLockMutex(SDL_mutex * mutex)
|
||||||
|
{
|
||||||
|
if (mutex == NULL)
|
||||||
|
{
|
||||||
|
SDL_SetError("Passed a NULL mutex.");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Not yet implemented.
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Lock the mutex */
|
/* Lock the mutex */
|
||||||
int
|
int
|
||||||
SDL_LockMutex(SDL_mutex * mutex)
|
SDL_LockMutex(SDL_mutex * mutex)
|
||||||
|
@ -89,7 +105,7 @@ SDL_LockMutex(SDL_mutex * mutex)
|
||||||
|
|
||||||
/* Unlock the mutex */
|
/* Unlock the mutex */
|
||||||
int
|
int
|
||||||
SDL_mutexV(SDL_mutex * mutex)
|
SDL_UnlockMutex(SDL_mutex * mutex)
|
||||||
{
|
{
|
||||||
if ( mutex == NULL )
|
if ( mutex == NULL )
|
||||||
{
|
{
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
*/
|
*/
|
||||||
#include "../../SDL_internal.h"
|
#include "../../SDL_internal.h"
|
||||||
|
|
||||||
/* An implementation of semaphores using mutexes and condition variables */
|
/* An implementation of semaphores using the Symbian API. */
|
||||||
|
|
||||||
#include <e32std.h>
|
#include <e32std.h>
|
||||||
|
|
||||||
|
|
|
@ -128,19 +128,6 @@ SDL_SYS_DetachThread(SDL_Thread * thread)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* WARNING: This function is really a last resort.
|
|
||||||
* Threads should be signaled and then exit by themselves.
|
|
||||||
* TerminateThread() doesn't perform stack and DLL cleanup.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
SDL_SYS_KillThread(SDL_Thread *thread)
|
|
||||||
{
|
|
||||||
RThread rthread;
|
|
||||||
rthread.SetHandle(thread->handle);
|
|
||||||
rthread.Kill(0);
|
|
||||||
rthread.Close();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* SDL_THREAD_NGAGE */
|
#endif /* SDL_THREAD_NGAGE */
|
||||||
|
|
||||||
/* vim: ts=4 sw=4
|
/* vim: ts=4 sw=4
|
||||||
|
|
|
@ -113,7 +113,7 @@ static SDL_Scancode ConvertScancode(_THIS, int key)
|
||||||
keycode = SDLK_ASTERISK;
|
keycode = SDLK_ASTERISK;
|
||||||
break;
|
break;
|
||||||
case EStdKeyHash: // Hash
|
case EStdKeyHash: // Hash
|
||||||
keycode = SDLK_SLASH;
|
keycode = SDLK_HASH;
|
||||||
break;
|
break;
|
||||||
case EStdKeyDevice0: // Left softkey
|
case EStdKeyDevice0: // Left softkey
|
||||||
keycode = SDLK_SOFTLEFT;
|
keycode = SDLK_SOFTLEFT;
|
||||||
|
@ -121,14 +121,14 @@ static SDL_Scancode ConvertScancode(_THIS, int key)
|
||||||
case EStdKeyDevice1: // Right softkey
|
case EStdKeyDevice1: // Right softkey
|
||||||
keycode = SDLK_SOFTRIGHT;
|
keycode = SDLK_SOFTRIGHT;
|
||||||
break;
|
break;
|
||||||
case EStdKeyApplication0: // Green softkey
|
case EStdKeyApplication0: // Call softkey
|
||||||
keycode = SDLK_CALL;
|
keycode = SDLK_CALL;
|
||||||
break;
|
break;
|
||||||
case EStdKeyApplication1: // Red softkey
|
case EStdKeyApplication1: // End call softkey
|
||||||
keycode = SDLK_ENDCALL;
|
keycode = SDLK_ENDCALL;
|
||||||
break;
|
break;
|
||||||
case EStdKeyDevice3: // Middle softkey
|
case EStdKeyDevice3: // Middle softkey
|
||||||
keycode = SDLK_RETURN;
|
keycode = SDLK_SELECT;
|
||||||
break;
|
break;
|
||||||
case EStdKeyUpArrow: // Up arrow
|
case EStdKeyUpArrow: // Up arrow
|
||||||
keycode = SDLK_UP;
|
keycode = SDLK_UP;
|
||||||
|
@ -166,7 +166,7 @@ int HandleWsEvent(_THIS, const TWsEvent& aWsEvent)
|
||||||
case EEventFocusGained: /* SDL window got focus */
|
case EEventFocusGained: /* SDL window got focus */
|
||||||
phdata->NGAGE_IsWindowFocused = ETrue;
|
phdata->NGAGE_IsWindowFocused = ETrue;
|
||||||
/* Draw window background and screen buffer */
|
/* Draw window background and screen buffer */
|
||||||
DisableKeyBlocking(_this); //Markus: guess why :-)
|
DisableKeyBlocking(_this);
|
||||||
RedrawWindowL(_this);
|
RedrawWindowL(_this);
|
||||||
break;
|
break;
|
||||||
case EEventFocusLost: /* SDL window lost focus */
|
case EEventFocusLost: /* SDL window lost focus */
|
||||||
|
|
|
@ -106,11 +106,16 @@ int SDL_NGAGE_CreateWindowFramebuffer(_THIS, SDL_Window * window, Uint32 * forma
|
||||||
{
|
{
|
||||||
phdata->NGAGE_FrameBuffer += 32;
|
phdata->NGAGE_FrameBuffer += 32;
|
||||||
}
|
}
|
||||||
/*if (phdata->NGAGE_HasFrameBuffer && GetBpp(displayMode) == 12)
|
#if 0
|
||||||
phdata->NGAGE_FrameBuffer += 16 * 2;
|
if (phdata->NGAGE_HasFrameBuffer && GetBpp(displayMode) == 12)
|
||||||
if (phdata->NGAGE_HasFrameBuffer && GetBpp(displayMode) == 16)
|
{
|
||||||
phdata->NGAGE_FrameBuffer += 16 * 2;
|
phdata->NGAGE_FrameBuffer += 16 * 2;
|
||||||
*/
|
}
|
||||||
|
if (phdata->NGAGE_HasFrameBuffer && GetBpp(displayMode) == 16)
|
||||||
|
{
|
||||||
|
phdata->NGAGE_FrameBuffer += 16 * 2;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Get draw device for updating the screen
|
// Get draw device for updating the screen
|
||||||
TScreenInfoV01 screenInfo2;
|
TScreenInfoV01 screenInfo2;
|
||||||
|
@ -367,11 +372,13 @@ void DirectUpdate(_THIS, int numrects, SDL_Rect *rects)
|
||||||
|
|
||||||
TUint16* screenBuffer = (TUint16*)phdata->NGAGE_FrameBuffer;
|
TUint16* screenBuffer = (TUint16*)phdata->NGAGE_FrameBuffer;
|
||||||
|
|
||||||
/*if (phdata->NGAGE_ScreenOrientation == CFbsBitGc::EGraphicsOrientationRotated270)
|
#if 0
|
||||||
|
if (phdata->NGAGE_ScreenOrientation == CFbsBitGc::EGraphicsOrientationRotated270)
|
||||||
{
|
{
|
||||||
// ...
|
// ...
|
||||||
}
|
}
|
||||||
else */
|
else
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
DirectDraw(_this, numrects, rects, screenBuffer);
|
DirectDraw(_this, numrects, rects, screenBuffer);
|
||||||
}
|
}
|
||||||
|
@ -385,7 +392,7 @@ void DirectUpdate(_THIS, int numrects, SDL_Rect *rects)
|
||||||
TInt aBy = rects[i].h;
|
TInt aBy = rects[i].h;
|
||||||
TRect rect2 = TRect(aAx, aAy, aBx, aBy);
|
TRect rect2 = TRect(aAx, aAy, aBx, aBy);
|
||||||
|
|
||||||
phdata->NGAGE_DrawDevice->UpdateRegion(rect2); /* Should we update rects parameter area only?? */
|
phdata->NGAGE_DrawDevice->UpdateRegion(rect2); /* Should we update rects parameter area only? */
|
||||||
phdata->NGAGE_DrawDevice->Update();
|
phdata->NGAGE_DrawDevice->Update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue