void splashScreen() { Common::MemoryReadStream stream(logo_data, ARRAYSIZE(logo_data)); Image::BitmapDecoder bitmap; if (!bitmap.loadStream(stream)) { warning("Error loading logo file"); return; } g_system->showOverlay(); // Fill with orange Graphics::Surface screen; screen.create(g_system->getOverlayWidth(), g_system->getOverlayHeight(), g_system->getOverlayFormat()); screen.fillRect(Common::Rect(screen.w, screen.h), screen.format.ARGBToColor(0xff, 0xd4, 0x75, 0x0b)); // Load logo Graphics::Surface *logo = bitmap.getSurface()->convertTo(g_system->getOverlayFormat(), bitmap.getPalette()); int lx = MAX((g_system->getOverlayWidth() - logo->w) / 2, 0); int ly = MAX((g_system->getOverlayHeight() - logo->h) / 2, 0); // Print version information const Graphics::Font *font = FontMan.getFontByUsage(Graphics::FontManager::kConsoleFont); int w = font->getStringWidth(gScummVMVersionDate); int x = g_system->getOverlayWidth() - w - 5; // lx + logo->w - w + 5; int y = g_system->getOverlayHeight() - font->getFontHeight() - 5; //ly + logo->h + 5; font->drawString(&screen, gScummVMVersionDate, x, y, w, screen.format.ARGBToColor(0xff, 0, 0, 0)); g_system->copyRectToOverlay(screen.getPixels(), screen.pitch, 0, 0, screen.w, screen.h); screen.free(); // Draw logo int lw = MIN<uint16>(logo->w, g_system->getOverlayWidth() - lx); int lh = MIN<uint16>(logo->h, g_system->getOverlayHeight() - ly); g_system->copyRectToOverlay(logo->getPixels(), logo->pitch, lx, ly, lw, lh); logo->free(); delete logo; // Delay 0.6 secs uint time0 = g_system->getMillis(); Common::Event event; while (time0 + 600 > g_system->getMillis()) { g_system->updateScreen(); (void)g_system->getEventManager()->pollEvent(event); g_system->delayMillis(10); } g_system->hideOverlay(); splash = true; }