/*++ Copyright (c) 1993 Microsoft Corporation Module Name: graphics.h Abstract: Bitmap display support with text mode for upgrade. This file has three core abstractions Bitmap, Animated bitmap and Graphics Progress bar. Author: Vijay Jayaseelan (vijayj) 01 July 2000 Revision History: None --*/ #ifndef _GRAPHICS_H_ #define _GRAPHICS_H_ #include "spprecmp.h" #pragma hdrstop #define MAX_ANIMATED_BITMAPS 256 // // Bitmap abstraction // // A textmode bitmap can be created using a resource ID // or a fully qualified bitmap file name. // // Note : Since currently we support only 640 * 480 * 16 (colors) // VGA mode, its necessary that all the bitmap // resources and files adhere to this format. // typedef struct _TM_BITMAP { PVOID ViewBase; PVOID Data; WCHAR FileName[MAX_PATH]; HANDLE FileHandle; HANDLE SectionHandle; } TM_BITMAP, *PTM_BITMAP, *TM_BITMAP_HANDLE; // // Bitmap methods // TM_BITMAP_HANDLE TextmodeBitmapCreate( IN ULONG ResourceId ); TM_BITMAP_HANDLE TextmodeBitmapCreateFromFile( IN PWSTR FileName ); NTSTATUS TextmodeBitmapDelete( IN TM_BITMAP_HANDLE hBitmap ); NTSTATUS TextmodeBitmapDisplay( IN TM_BITMAP_HANDLE hBitmap, IN ULONG X, IN ULONG Y ); // // Animated bitmap abstraction // // Animated bitmap consists of multiple bitmaps of the same // size. Each next bitmap is drawn at the same location // after the specified time out, creating an illusion of // animation. // // Note : Since animated bitmap is just a collection of // regular textmode bitmap abstraction, its format // is also restricted as regular textmode bitmap. // typedef struct _TM_ANIMATED_BITMAP { TM_BITMAP_HANDLE Bitmaps[MAX_ANIMATED_BITMAPS]; ULONG FlipTime; ULONG CurrentBitmap; ULONG X; ULONG Y; HANDLE ThreadHandle; LONG StopAnimating; } TM_ANIMATED_BITMAP, *PTM_ANIMATED_BITMAP, *TM_ANIMATED_BITMAP_HANDLE; // // Animated bitmap methods // TM_ANIMATED_BITMAP_HANDLE TextmodeAnimatedBitmapCreate( IN ULONG *ResourceIds ); TM_ANIMATED_BITMAP_HANDLE TextmodeAnimatedBitmapCreateFromFiles( IN WCHAR *FileNames[] ); NTSTATUS TexmodeAnimatedBitmapDelete( IN TM_ANIMATED_BITMAP_HANDLE hAnimatedBitmap ); NTSTATUS TextmodeAnimatedBitmapAnimate( IN TM_ANIMATED_BITMAP_HANDLE hAnimatedBitmap, IN ULONG X, IN ULONG Y, IN ULONG Speed ); VOID TextmodeAnimatedBitmapAnimator( IN PVOID Context ); // // Progress Bar abstraction // // Note : Progress bar can use bitmaps or solid // fills based on the way its created. In case // the progress bar uses bitmaps, then the // foreground & background bitmaps are each 1 pixel // wide and background bitmap is assumed to be // 2 pixels shorter than foreground bitmap. // // typedef struct _TM_GRAPHICS_PRGBAR { ULONG X; ULONG Y; ULONG Length; ULONG Height; ULONG BackgroundColor; ULONG ForegroundColor; ULONG Fill; TM_BITMAP_HANDLE Background; TM_BITMAP_HANDLE Foreground; } TM_GRAPHICS_PRGBAR, *TM_GRAPHICS_PRGBAR_HANDLE; // // Progress bar methods // TM_GRAPHICS_PRGBAR_HANDLE TextmodeGraphicsProgBarCreate( IN ULONG X, IN ULONG Y, IN ULONG Length, IN ULONG Height, IN ULONG ForegroundColor, IN ULONG BackgroundColor, IN ULONG InitialFill ); TM_GRAPHICS_PRGBAR_HANDLE TextmodeGraphicsProgBarCreateUsingBmps( IN ULONG X, IN ULONG Y, IN ULONG Length, IN ULONG Height, IN ULONG BackgroundBmpId, IN ULONG CellBmpId, IN ULONG InitialFill ); NTSTATUS TextmodeGraphicsProgBarUpdate( IN TM_GRAPHICS_PRGBAR_HANDLE hPrgBar, IN ULONG Fill ); NTSTATUS TextmodeGraphicsProgBarRefresh( IN TM_GRAPHICS_PRGBAR_HANDLE hPrgBar, IN BOOLEAN UpdateBackground ); NTSTATUS TextmodeGraphicsProgBarDelete( IN TM_GRAPHICS_PRGBAR_HANDLE hPrgBar ); // // Vga graphics interface // NTSTATUS VgaGraphicsInit( PSP_VIDEO_VARS VideoVars ); NTSTATUS VgaGraphicsTerminate( PSP_VIDEO_VARS VideoVars ); VOID VgaGraphicsSolidColorFill( IN ULONG x1, IN ULONG y1, IN ULONG x2, IN ULONG y2, IN ULONG Color ); VOID VgaGraphicsBitBlt( IN PUCHAR Buffer, IN ULONG x, IN ULONG y ); // // Misc functions // NTSTATUS UpgradeGraphicsInit( VOID ); NTSTATUS UpgradeGraphicsStart( VOID ); VOID GraphicsModeProgressUpdate( IN TM_SETUP_MAJOR_EVENT MajorEvent, IN TM_SETUP_MINOR_EVENT MinorEvent, IN PVOID Context, IN PVOID EventData ); VOID UpgradeGraphicsThread( IN PVOID Context ); // // Indicates that graphics mode is needed for upgrade // cases, with actual textmode running in the background // #define SP_IS_UPGRADE_GRAPHICS_MODE() (VideoVars.UpgradeGraphicsMode) #define SP_SET_UPGRADE_GRAPHICS_MODE(_Value) \ (VideoVars.UpgradeGraphicsMode = (_Value)); // // #define _GRAPHICS_TESTING_ TRUE // #endif // for _GRAPHICS_H_