CloverBootloader/rEFIt_UEFI/libeg/libegint.h
Sergey Isakov a3f3053c30 rewrite render text
Signed-off-by: Sergey Isakov <isakov-sl@bk.ru>
2020-03-23 22:10:16 +03:00

197 lines
8.8 KiB
C

/*
* libeg/libegint.h
* EFI graphics library internal header
*
* Copyright (c) 2006 Christoph Pfisterer
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the
* distribution.
*
* * Neither the name of Christoph Pfisterer nor the names of the
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __LIBEG_LIBEGINT_H__
#define __LIBEG_LIBEGINT_H__
//#include <efi.h>
//#include <efilib.h>
#include "../Platform/Platform.h"
#if defined(_MSC_VER)
# define ALIGN_64 __declspec(align(8))
#else
# define ALIGN_64 __attribute__((__aligned__(8)))
#endif
#define DEFINE_EMB_DATA(ico) UINT8 ALIGN_64 const ico[] =
#define DEFINE_EMB_SIZE(ico) UINTN const ico##_size = sizeof(ico);
//REVIEW: const would be more useful if the cast was not needed, but that
// would require correct use of const in the related functions.
#define ACCESS_EMB_DATA(ico) ((UINT8*)ico)
#define ACCESS_EMB_SIZE(ico) ico##_size
#define DECLARE_EMB_EXTERN_WITH_SIZE(ico) extern UINT8 const ico[]; extern UINTN const ico##_size;
DECLARE_EMB_EXTERN_WITH_SIZE(emb_font_data)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_pointer)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_func_about)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_func_clover)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_func_options)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_func_reset)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_func_secureboot_config)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_func_secureboot)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_func_shell)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_func_exit)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_func_help)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_logo)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_selection_big)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_selection_small)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_selection_indicator)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_vol_internal)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_vol_internal_booter)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_vol_internal_hfs)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_vol_internal_apfs)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_vol_internal_ntfs)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_vol_internal_ext)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_vol_internal_recovery)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_vol_external)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_vol_optical)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_scroll_up_button)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_scroll_bar_start)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_scroll_scroll_start)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_scroll_scroll_fill)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_scroll_scroll_end)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_scroll_bar_fill)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_scroll_bar_end)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_scroll_down_button)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_radio_button_selected)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_radio_button)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_checkbox)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_checkbox_checked)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_font_data)
//DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_pointer)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_func_about)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_func_clover)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_func_options)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_func_reset)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_func_secureboot_config)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_func_secureboot)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_func_shell)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_func_exit)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_func_help)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_logo)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_selection_big)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_selection_small)
//DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_selection_indicator)
// same volumes for both light and dark mode
/*
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_vol_internal)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_vol_internal_booter)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_vol_internal_hfs)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_vol_internal_apfs)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_vol_internal_ntfs)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_vol_internal_ext)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_vol_internal_recovery)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_vol_external)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_vol_optical)
*/
#define emb_dark_vol_internal emb_vol_internal
#define emb_dark_vol_internal_booter emb_vol_internal_booter
#define emb_dark_vol_internal_hfs emb_vol_internal_hfs
#define emb_dark_vol_internal_apfs emb_vol_internal_apfs
#define emb_dark_vol_internal_ntfs emb_vol_internal_ntfs
#define emb_dark_vol_internal_ext emb_vol_internal_ext
#define emb_dark_vol_internal_recovery emb_vol_internal_recovery
#define emb_dark_vol_external emb_vol_external
#define emb_dark_vol_optical emb_vol_optical
/*
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_scroll_up_button)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_scroll_bar_start)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_scroll_scroll_start)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_scroll_scroll_fill)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_scroll_scroll_end)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_scroll_bar_fill)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_scroll_bar_end)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_scroll_down_button)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_radio_button_selected)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_radio_button)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_checkbox)
DECLARE_EMB_EXTERN_WITH_SIZE(emb_dark_checkbox_checked)
*/
/* types */
//typedef EG_IMAGE * (*EG_DECODE_FUNC)(IN UINT8 *FileData, IN UINTN FileDataLength, IN UINTN IconSize, IN BOOLEAN WantAlpha);
/* functions */
VOID egRestrictImageArea(IN EG_IMAGE *Image,
IN INTN AreaPosX, IN INTN AreaPosY,
IN OUT INTN *AreaWidth, IN OUT INTN *AreaHeight);
VOID egRawCopy(IN OUT EG_PIXEL *CompBasePtr, IN EG_PIXEL *TopBasePtr,
IN INTN Width, IN INTN Height,
IN INTN CompLineOffset, IN INTN TopLineOffset);
VOID egRawCompose(IN OUT EG_PIXEL *CompBasePtr, IN EG_PIXEL *TopBasePtr,
IN INTN Width, IN INTN Height,
IN INTN CompLineOffset, IN INTN TopLineOffset);
VOID egRawComposeOnFlat(IN OUT EG_PIXEL *CompBasePtr, IN EG_PIXEL *TopBasePtr,
IN INTN Width, IN INTN Height,
IN INTN CompLineOffset, IN INTN TopLineOffset);
//#define PLPTR(imagevar, colorname) ((UINT8 *) &((imagevar)->PixelData->colorname))
//VOID egDecompressIcnsRLE(IN OUT UINT8 **CompData, IN OUT UINTN *CompLen, IN UINT8 *DestPlanePtr, IN UINTN PixelCount);
//VOID egInsertPlane(IN UINT8 *SrcDataPtr, IN UINT8 *DestPlanePtr, IN UINTN PixelCount);
//VOID egSetPlane(IN UINT8 *DestPlanePtr, IN UINT8 Value, IN UINT64 PixelCount);
//VOID egCopyPlane(IN UINT8 *SrcPlanePtr, IN UINT8 *DestPlanePtr, IN UINTN PixelCount);
//EG_IMAGE * egDecodeBMP(IN UINT8 *FileData, IN UINTN FileDataLength, IN UINTN IconSize, IN BOOLEAN WantAlpha);
EG_IMAGE * egDecodeICNS(IN UINT8 *FileData, IN UINTN FileDataLength, IN UINTN IconSize, IN BOOLEAN WantAlpha);
EG_IMAGE * egDecodePNG(IN UINT8 *FileData, IN UINTN FileDataLength, IN BOOLEAN WantAlpha);
//VOID egEncodeBMP(IN EG_IMAGE *Image, OUT UINT8 **FileData, OUT UINTN *FileDataLength);
#if USE_XTHEME
INTN renderSVGtext(XImage& TextBufferXY, INTN posX, INTN posY, INTN textType, XStringW string, UINTN Cursor);
INTN egRenderText(IN XStringW& Text, IN XImage& CompImage,
IN INTN PosX, IN INTN PosY, IN INTN Cursor, INTN textType);
#else
INTN renderSVGtext(EG_IMAGE* TextBufferXY, INTN posX, INTN posY, INTN textType, CONST CHAR16* text, UINTN Cursor);
INTN egRenderText(IN CONST CHAR16 *Text, IN OUT EG_IMAGE *CompImage, IN INTN PosX, IN INTN PosY, IN INTN Cursor, INTN textType);
#endif
#endif /* __LIBEG_LIBEGINT_H__ */
/* EOF */