| /** @file | |
| The file provides services to access to images in the images database. | |
| Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| @par Revision Reference: | |
| This Protocol was introduced in UEFI Specification 2.1. | |
| **/ | |
| #ifndef __HII_IMAGE_H__ | |
| #define __HII_IMAGE_H__ | |
| #include <Protocol/GraphicsOutput.h> | |
| #define EFI_HII_IMAGE_PROTOCOL_GUID \ | |
| { 0x31a6406a, 0x6bdf, 0x4e46, { 0xb2, 0xa2, 0xeb, 0xaa, 0x89, 0xc4, 0x9, 0x20 } } | |
| typedef struct _EFI_HII_IMAGE_PROTOCOL EFI_HII_IMAGE_PROTOCOL; | |
| /// | |
| /// Flags in EFI_IMAGE_INPUT | |
| /// | |
| #define EFI_IMAGE_TRANSPARENT 0x00000001 | |
| /** | |
| Definition of EFI_IMAGE_INPUT. | |
| @param Flags Describe image characteristics. If | |
| EFI_IMAGE_TRANSPARENT is set, then the image was | |
| designed for transparent display. | |
| @param Width Image width, in pixels. | |
| @param Height Image height, in pixels. | |
| @param Bitmap A pointer to the actual bitmap, organized left-to-right, | |
| top-to-bottom. The size of the bitmap is | |
| Width*Height*sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL). | |
| **/ | |
| typedef struct _EFI_IMAGE_INPUT { | |
| UINT32 Flags; | |
| UINT16 Width; | |
| UINT16 Height; | |
| EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Bitmap; | |
| } EFI_IMAGE_INPUT; | |
| /** | |
| This function adds the image Image to the group of images | |
| owned by PackageList, and returns a new image identifier | |
| (ImageId). | |
| @param This A pointer to the EFI_HII_IMAGE_PROTOCOL instance. | |
| @param PackageList Handle of the package list where this image will be added. | |
| @param ImageId On return, contains the new image id, which is | |
| unique within PackageList. | |
| @param Image Points to the image. | |
| @retval EFI_SUCCESS The new image was added | |
| successfully | |
| @retval EFI_OUT_OF_RESOURCES Could not add the image. | |
| @retval EFI_INVALID_PARAMETER Image is NULL or ImageId is | |
| NULL. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_HII_NEW_IMAGE)( | |
| IN CONST EFI_HII_IMAGE_PROTOCOL *This, | |
| IN EFI_HII_HANDLE PackageList, | |
| OUT EFI_IMAGE_ID *ImageId, | |
| IN CONST EFI_IMAGE_INPUT *Image | |
| ); | |
| /** | |
| This function retrieves the image specified by ImageId which | |
| is associated with the specified PackageList and copies it | |
| into the buffer specified by Image. If the image specified by | |
| ImageId is not present in the specified PackageList, then | |
| EFI_NOT_FOUND is returned. If the buffer specified by | |
| ImageSize is too small to hold the image, then | |
| EFI_BUFFER_TOO_SMALL will be returned. ImageSize will be | |
| updated to the size of buffer actually required to hold the | |
| image. | |
| @param This A pointer to the EFI_HII_IMAGE_PROTOCOL instance. | |
| @param PackageList The package list in the HII database to | |
| search for the specified image. | |
| @param ImageId The image's id, which is unique within | |
| PackageList. | |
| @param Image Points to the new image. | |
| @retval EFI_SUCCESS The image was returned successfully. | |
| @retval EFI_NOT_FOUND The image specified by ImageId is not | |
| available. Or The specified PackageList is not in the database. | |
| @retval EFI_INVALID_PARAMETER The Image or Langugae was NULL. | |
| @retval EFI_OUT_OF_RESOURCES The bitmap could not be retrieved because there was not | |
| enough memory. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_HII_GET_IMAGE)( | |
| IN CONST EFI_HII_IMAGE_PROTOCOL *This, | |
| IN EFI_HII_HANDLE PackageList, | |
| IN EFI_IMAGE_ID ImageId, | |
| OUT EFI_IMAGE_INPUT *Image | |
| ); | |
| /** | |
| This function updates the image specified by ImageId in the | |
| specified PackageListHandle to the image specified by Image. | |
| @param This A pointer to the EFI_HII_IMAGE_PROTOCOL instance. | |
| @param PackageList The package list containing the images. | |
| @param ImageId The image id, which is unique within PackageList. | |
| @param Image Points to the image. | |
| @retval EFI_SUCCESS The image was successfully updated. | |
| @retval EFI_NOT_FOUND The image specified by ImageId is not in the database. | |
| The specified PackageList is not in the database. | |
| @retval EFI_INVALID_PARAMETER The Image or Language was NULL. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_HII_SET_IMAGE)( | |
| IN CONST EFI_HII_IMAGE_PROTOCOL *This, | |
| IN EFI_HII_HANDLE PackageList, | |
| IN EFI_IMAGE_ID ImageId, | |
| IN CONST EFI_IMAGE_INPUT *Image | |
| ); | |
| /// | |
| /// EFI_HII_DRAW_FLAGS describes how the image is to be drawn. | |
| /// These flags are defined as EFI_HII_DRAW_FLAG_*** | |
| /// | |
| typedef UINT32 EFI_HII_DRAW_FLAGS; | |
| #define EFI_HII_DRAW_FLAG_CLIP 0x00000001 | |
| #define EFI_HII_DRAW_FLAG_TRANSPARENT 0x00000030 | |
| #define EFI_HII_DRAW_FLAG_DEFAULT 0x00000000 | |
| #define EFI_HII_DRAW_FLAG_FORCE_TRANS 0x00000010 | |
| #define EFI_HII_DRAW_FLAG_FORCE_OPAQUE 0x00000020 | |
| #define EFI_HII_DIRECT_TO_SCREEN 0x00000080 | |
| /** | |
| Definition of EFI_IMAGE_OUTPUT. | |
| @param Width Width of the output image. | |
| @param Height Height of the output image. | |
| @param Bitmap Points to the output bitmap. | |
| @param Screen Points to the EFI_GRAPHICS_OUTPUT_PROTOCOL which | |
| describes the screen on which to draw the | |
| specified image. | |
| **/ | |
| typedef struct _EFI_IMAGE_OUTPUT { | |
| UINT16 Width; | |
| UINT16 Height; | |
| union { | |
| EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Bitmap; | |
| EFI_GRAPHICS_OUTPUT_PROTOCOL *Screen; | |
| } Image; | |
| } EFI_IMAGE_OUTPUT; | |
| /** | |
| This function renders an image to a bitmap or the screen using | |
| the specified color and options. It draws the image on an | |
| existing bitmap, allocates a new bitmap or uses the screen. The | |
| images can be clipped. If EFI_HII_DRAW_FLAG_CLIP is set, then | |
| all pixels drawn outside the bounding box specified by Width and | |
| Height are ignored. If EFI_HII_DRAW_FLAG_TRANSPARENT is set, | |
| then all 'off' pixels in the images drawn will use the | |
| pixel value from Blt. This flag cannot be used if Blt is NULL | |
| upon entry. If EFI_HII_DIRECT_TO_SCREEN is set, then the image | |
| will be written directly to the output device specified by | |
| Screen. Otherwise the image will be rendered to the bitmap | |
| specified by Bitmap. | |
| @param This A pointer to the EFI_HII_IMAGE_PROTOCOL instance. | |
| @param Flags Describes how the image is to be drawn. | |
| EFI_HII_DRAW_FLAGS is defined in Related | |
| Definitions, below. | |
| @param Image Points to the image to be displayed. | |
| @param Blt If this points to a non-NULL on entry, this points | |
| to the image, which is Width pixels wide and | |
| Height pixels high. The image will be drawn onto | |
| this image and EFI_HII_DRAW_FLAG_CLIP is implied. | |
| If this points to a NULL on entry, then a buffer | |
| will be allocated to hold the generated image and | |
| the pointer updated on exit. It is the caller's | |
| responsibility to free this buffer. | |
| @param BltX, BltY Specifies the offset from the left and top | |
| edge of the image of the first pixel in | |
| the image. | |
| @retval EFI_SUCCESS The image was successfully updated. | |
| @retval EFI_OUT_OF_RESOURCES Unable to allocate an output | |
| buffer for RowInfoArray or Blt. | |
| @retval EFI_INVALID_PARAMETER The Image or Blt or Height or | |
| Width was NULL. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_HII_DRAW_IMAGE)( | |
| IN CONST EFI_HII_IMAGE_PROTOCOL *This, | |
| IN EFI_HII_DRAW_FLAGS Flags, | |
| IN CONST EFI_IMAGE_INPUT *Image, | |
| IN OUT EFI_IMAGE_OUTPUT **Blt, | |
| IN UINTN BltX, | |
| IN UINTN BltY | |
| ); | |
| /** | |
| This function renders an image as a bitmap or to the screen and | |
| can clip the image. The bitmap is either supplied by the caller | |
| or else is allocated by the function. The images can be drawn | |
| transparently or opaquely. If EFI_HII_DRAW_FLAG_CLIP is set, | |
| then all pixels drawn outside the bounding box specified by | |
| Width and Height are ignored. If EFI_HII_DRAW_FLAG_TRANSPARENT | |
| is set, then all "off" pixels in the character's glyph will | |
| use the pixel value from Blt. This flag cannot be used if Blt | |
| is NULL upon entry. If EFI_HII_DIRECT_TO_SCREEN is set, then | |
| the image will be written directly to the output device | |
| specified by Screen. Otherwise the image will be rendered to | |
| the bitmap specified by Bitmap. | |
| This function renders an image to a bitmap or the screen using | |
| the specified color and options. It draws the image on an | |
| existing bitmap, allocates a new bitmap or uses the screen. The | |
| images can be clipped. If EFI_HII_DRAW_FLAG_CLIP is set, then | |
| all pixels drawn outside the bounding box specified by Width and | |
| Height are ignored. The EFI_HII_DRAW_FLAG_TRANSPARENT flag | |
| determines whether the image will be drawn transparent or | |
| opaque. If EFI_HII_DRAW_FLAG_FORCE_TRANS is set, then the image | |
| will be drawn so that all 'off' pixels in the image will | |
| be drawn using the pixel value from Blt and all other pixels | |
| will be copied. If EFI_HII_DRAW_FLAG_FORCE_OPAQUE is set, then | |
| the image's pixels will be copied directly to the | |
| destination. If EFI_HII_DRAW_FLAG_DEFAULT is set, then the image | |
| will be drawn transparently or opaque, depending on the | |
| image's transparency setting (see EFI_IMAGE_TRANSPARENT). | |
| Images cannot be drawn transparently if Blt is NULL. If | |
| EFI_HII_DIRECT_TO_SCREEN is set, then the image will be written | |
| directly to the output device specified by Screen. Otherwise the | |
| image will be rendered to the bitmap specified by Bitmap. | |
| @param This A pointer to the EFI_HII_IMAGE_PROTOCOL instance. | |
| @param Flags Describes how the image is to be drawn. | |
| @param PackageList The package list in the HII database to | |
| search for the specified image. | |
| @param ImageId The image's id, which is unique within PackageList. | |
| @param Blt If this points to a non-NULL on entry, this points | |
| to the image, which is Width pixels wide and | |
| Height pixels high. The image will be drawn onto | |
| this image and EFI_HII_DRAW_FLAG_CLIP is implied. | |
| If this points to a NULL on entry, then a buffer | |
| will be allocated to hold the generated image and | |
| the pointer updated on exit. It is the caller's | |
| responsibility to free this buffer. | |
| @param BltX, BltY Specifies the offset from the left and top | |
| edge of the output image of the first | |
| pixel in the image. | |
| @retval EFI_SUCCESS The image was successfully updated. | |
| @retval EFI_OUT_OF_RESOURCES Unable to allocate an output | |
| buffer for RowInfoArray or Blt. | |
| @retval EFI_NOT_FOUND The image specified by ImageId is not in the database. | |
| Or The specified PackageList is not in the database. | |
| @retval EFI_INVALID_PARAMETER The Blt was NULL. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_HII_DRAW_IMAGE_ID)( | |
| IN CONST EFI_HII_IMAGE_PROTOCOL *This, | |
| IN EFI_HII_DRAW_FLAGS Flags, | |
| IN EFI_HII_HANDLE PackageList, | |
| IN EFI_IMAGE_ID ImageId, | |
| IN OUT EFI_IMAGE_OUTPUT **Blt, | |
| IN UINTN BltX, | |
| IN UINTN BltY | |
| ); | |
| /// | |
| /// Services to access to images in the images database. | |
| /// | |
| struct _EFI_HII_IMAGE_PROTOCOL { | |
| EFI_HII_NEW_IMAGE NewImage; | |
| EFI_HII_GET_IMAGE GetImage; | |
| EFI_HII_SET_IMAGE SetImage; | |
| EFI_HII_DRAW_IMAGE DrawImage; | |
| EFI_HII_DRAW_IMAGE_ID DrawImageId; | |
| }; | |
| extern EFI_GUID gEfiHiiImageProtocolGuid; | |
| #endif |