static void Instance_DidChangeView(PP_Instance instance, PP_Resource view) { struct PP_Rect rect; if (PSInterfaceView()->GetRect(view, &rect)) { PSInstanceLog("Got View change: %d,%d\n", rect.size.width, rect.size.height); PSEventPostResource(PSE_INSTANCE_DIDCHANGEVIEW, view); } }
int nacl_main(int argc, char *argv[]) { int status; PSEvent* ps_event; PP_Resource event; struct PP_Rect rect; int ready = 0; const PPB_View *ppb_view = PSInterfaceView(); /* This is started in a worker thread by ppapi_simple! */ /* Wait for the first PSE_INSTANCE_DIDCHANGEVIEW event before starting the app */ PSEventSetFilter(PSE_INSTANCE_DIDCHANGEVIEW); while (!ready) { /* Process all waiting events without blocking */ while (!ready && (ps_event = PSEventWaitAcquire()) != NULL) { event = ps_event->as_resource; switch(ps_event->type) { /* From DidChangeView, contains a view resource */ case PSE_INSTANCE_DIDCHANGEVIEW: ppb_view->GetRect(event, &rect); NACL_SetScreenResolution(rect.size.width, rect.size.height, 0); ready = 1; break; default: break; } PSEventRelease(ps_event); } } /* Do a default httpfs mount on /, * apps can override this by unmounting / * and remounting with the desired configuration */ nacl_io_init_ppapi(PSGetInstanceId(), PSGetInterface); umount("/"); mount( "", /* source */ "/", /* target */ "httpfs", /* filesystemtype */ 0, /* mountflags */ ""); /* data specific to the html5fs type */ /* Everything is ready, start the user main function */ SDL_SetMainReady(); status = SDL_main(argc, argv); return 0; }
int NACL_VideoInit(_THIS) { SDL_VideoData *driverdata = (SDL_VideoData *) _this->driverdata; SDL_DisplayMode mode; SDL_zero(mode); mode.format = driverdata->format; mode.w = driverdata->w; mode.h = driverdata->h; mode.refresh_rate = 0; mode.driverdata = NULL; if (SDL_AddBasicVideoDisplay(&mode) < 0) { return -1; } SDL_AddDisplayMode(&_this->displays[0], &mode); PSInterfaceInit(); driverdata->instance = PSGetInstanceId(); driverdata->ppb_graphics = PSInterfaceGraphics3D(); driverdata->ppb_message_loop = PSInterfaceMessageLoop(); driverdata->ppb_core = PSInterfaceCore(); driverdata->ppb_fullscreen = PSInterfaceFullscreen(); driverdata->ppb_instance = PSInterfaceInstance(); driverdata->ppb_image_data = PSInterfaceImageData(); driverdata->ppb_view = PSInterfaceView(); driverdata->ppb_var = PSInterfaceVar(); driverdata->ppb_input_event = (PPB_InputEvent*) PSGetInterface(PPB_INPUT_EVENT_INTERFACE); driverdata->ppb_keyboard_input_event = (PPB_KeyboardInputEvent*) PSGetInterface(PPB_KEYBOARD_INPUT_EVENT_INTERFACE); driverdata->ppb_mouse_input_event = (PPB_MouseInputEvent*) PSGetInterface(PPB_MOUSE_INPUT_EVENT_INTERFACE); driverdata->ppb_wheel_input_event = (PPB_WheelInputEvent*) PSGetInterface(PPB_WHEEL_INPUT_EVENT_INTERFACE); driverdata->ppb_touch_input_event = (PPB_TouchInputEvent*) PSGetInterface(PPB_TOUCH_INPUT_EVENT_INTERFACE); driverdata->message_loop = driverdata->ppb_message_loop->Create(driverdata->instance); PSEventSetFilter(PSE_ALL); /* We're done! */ return 0; }