VOID SwitchToGraphics(VOID) { if (AllowGraphicsMode && !egIsGraphicsModeEnabled()) { egSetGraphicsModeEnabled(TRUE); GraphicsScreenDirty = TRUE; } }
VOID InitScreen(VOID) { // initialize libeg egInitScreen(); if (egHasGraphicsMode()) { egGetScreenSize(&UGAWidth, &UGAHeight); AllowGraphicsMode = TRUE; } else { AllowGraphicsMode = FALSE; egSetTextMode(GlobalConfig.RequestedTextMode); egSetGraphicsModeEnabled(FALSE); // just to be sure we are in text mode } GraphicsScreenDirty = TRUE; // disable cursor refit_call2_wrapper(ST->ConOut->EnableCursor, ST->ConOut, FALSE); // get size of text console if (refit_call4_wrapper(ST->ConOut->QueryMode, ST->ConOut, ST->ConOut->Mode->Mode, &ConWidth, &ConHeight) != EFI_SUCCESS) { // use default values on error ConWidth = 80; ConHeight = 25; } PrepareBlankLine(); // show the banner if in text mode if (GlobalConfig.TextOnly && (GlobalConfig.ScreensaverTime != -1)) DrawScreenHeader(L"Initializing..."); }
VOID SwitchToText(IN BOOLEAN CursorEnabled) { egSetGraphicsModeEnabled(FALSE); refit_call2_wrapper(ST->ConOut->EnableCursor, ST->ConOut, CursorEnabled); // get size of text console if (refit_call4_wrapper(ST->ConOut->QueryMode, ST->ConOut, ST->ConOut->Mode->Mode, &ConWidth, &ConHeight) != EFI_SUCCESS) { // use default values on error ConWidth = 80; ConHeight = 25; } PrepareBlankLine(); }
VOID egScreenShot(VOID) { EFI_STATUS Status; EG_IMAGE *Image; UINT8 *FileData; UINTN FileDataLength; UINTN Index; if (!egHasGraphics) return; // allocate a buffer for the whole screen Image = egCreateImage(egScreenWidth, egScreenHeight, FALSE); if (Image == NULL) { Print(L"Error egCreateImage returned NULL\n"); goto bailout_wait; } // get full screen image if (GraphicsOutput != NULL) { GraphicsOutput->Blt(GraphicsOutput, (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)Image->PixelData, EfiBltVideoToBltBuffer, 0, 0, 0, 0, Image->Width, Image->Height, 0); } else if (UgaDraw != NULL) { UgaDraw->Blt(UgaDraw, (EFI_UGA_PIXEL *)Image->PixelData, EfiUgaVideoToBltBuffer, 0, 0, 0, 0, Image->Width, Image->Height, 0); } // encode as BMP egEncodeBMP(Image, &FileData, &FileDataLength); egFreeImage(Image); if (FileData == NULL) { Print(L"Error egEncodeBMP returned NULL\n"); goto bailout_wait; } // save to file on the ESP Status = egSaveFile(NULL, L"screenshot.bmp", FileData, FileDataLength); FreePool(FileData); if (EFI_ERROR(Status)) { Print(L"Error egSaveFile: %x\n", Status); goto bailout_wait; } return; // DEBUG: switch to text mode bailout_wait: egSetGraphicsModeEnabled(FALSE); BS->WaitForEvent(1, &ST->ConIn->WaitForKey, &Index); }