CloverBootloader/rEFIt_UEFI/libeg/XImage.h
Sergey Isakov 5dbf1e0360 always create cloverx64.efi
Signed-off-by: Sergey Isakov <isakov-sl@bk.ru>
2020-03-06 22:56:32 +03:00

107 lines
2.6 KiB
C++

/*
This class will replace EG_IMAGE structure and methods
*/
#if !defined(__XIMAGE_H__)
#define __XIMAGE_H__
//#include <Platform.h>
//
extern "C" {
#include <Protocol/GraphicsOutput.h>
}
#include "../cpp_foundation/XToolsCommon.h"
#include "../cpp_foundation/XArray.h"
#include "../libeg/libeg.h"
//#include "lodepng.h"
//
//#include "nanosvg.h"
//#include "FloatLib.h"
#define USE_ARRAY 0
#if 0 //ndef EFI_GRAPHICS_OUTPUT_BLT_PIXEL
typedef struct {
UINT8 Blue;
UINT8 Green;
UINT8 Red;
UINT8 Reserved; //this is Alpha. 0 means full transparent, 0xFF means opaque
} EFI_GRAPHICS_OUTPUT_BLT_PIXEL;
typedef union {
EFI_GRAPHICS_OUTPUT_BLT_PIXEL Pixel;
UINT32 Raw;
} EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION;
#endif
typedef struct {
UINTN Xpos;
UINTN Ypos;
UINTN Width;
UINTN Height;
} EgRect;
class XImage
{
protected:
UINTN Width;
UINTN Height;
#if USE_ARRAY
EFI_GRAPHICS_OUTPUT_BLT_PIXEL *PixelData;
#else
XArray<EFI_GRAPHICS_OUTPUT_BLT_PIXEL> PixelData;
#endif
public:
XImage();
XImage(UINTN W, UINTN H);
XImage(EG_IMAGE* egImage);
XImage(const XImage& Image, float scale);
XImage(UINTN W, UINTN H, const EFI_GRAPHICS_OUTPUT_BLT_PIXEL* Data);
~XImage();
protected:
UINTN GetSize() const; //in bytes
public:
#if !USE_ARRAY
const XArray<EFI_GRAPHICS_OUTPUT_BLT_PIXEL>& GetData() const;
#else
const EFI_GRAPHICS_OUTPUT_BLT_PIXEL* GetData() const;
#endif
const EFI_GRAPHICS_OUTPUT_BLT_PIXEL& GetPixel(UINTN x, UINTN y) const;
EFI_GRAPHICS_OUTPUT_BLT_PIXEL* GetPixelPtr(UINTN x, UINTN y);
UINTN GetWidth() const;
UINTN GetHeight() const;
#if USE_ARRAY
void setEmpty() {
Width = 0; Height = 0; if (PixelData) {
FreePool(PixelData); PixelData = nullptr;
}
}
bool isEmpty() const { return PixelData == nullptr; }
#else
void setEmpty() { Width=0; Height=0; PixelData.setEmpty(); }
bool isEmpty() const { return PixelData.size() == 0; }
#endif
void Fill(const EFI_GRAPHICS_OUTPUT_BLT_PIXEL& Color = { 0, 0, 0, 0 });
void FillArea(const EFI_GRAPHICS_OUTPUT_BLT_PIXEL& Color, const EgRect& Rect);
void CopyScaled(const XImage& Image, float scale);
void Compose(INTN PosX, INTN PosY, const XImage& TopImage, bool Lowest); //instead of compose we can Back.Draw(...) + Top.Draw(...)
void FlipRB(bool WantAlpha);
unsigned FromPNG(const UINT8 * Data, UINTN Lenght);
unsigned ToPNG(UINT8** Data, UINTN& OutSize);
unsigned FromSVG(const CHAR8 *SVGData, UINTN SVGDataLength, float scale);
void GetArea(const EG_RECT& Rect);
void GetArea(INTN x, INTN y, UINTN W, UINTN H);
void Draw(INTN x, INTN y, float scale);
};
#endif //__XSTRINGW_H__