After tracing down the code, I found the Width and Height in the GDISP->g has been changed by the function call in _gmouseInitDriver()
void gtimerStart(GTimer *pt, GTimerFunction fn, void *param, bool_t periodic, delaytime_t millisec) {
gfxMutexEnter(&mutex);
// Start our thread if not already going
if (!hThread) {
hThread = gfxThreadCreate(waTimerThread, GTIMER_THREAD_WORKAREA_SIZE, GTIMER_THREAD_PRIORITY, GTimerThreadHandler, 0);
if (hThread) {gfxThreadClose(hThread);} // We never really need the handle again
}
Especially after gfxThreadCreate. Somehow, the GDISP->g.Width got changed to the value of GTIMER_THREAD_WORKAREA_SIZE which is 2048.