mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2025-01-15 19:51:45 +01:00
Get rid of XStringWP + few cleanings.
This commit is contained in:
parent
8b806cf4e7
commit
23b45d569a
@ -102,6 +102,7 @@ extern "C" {
|
|||||||
#include "../refit/screen.h" // for PauseForKey
|
#include "../refit/screen.h" // for PauseForKey
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
#include "boot.h"
|
#include "boot.h"
|
||||||
|
#include "plist.h"
|
||||||
//#include "PiBootMode.h"
|
//#include "PiBootMode.h"
|
||||||
#ifndef CLOVERAPPLICATION
|
#ifndef CLOVERAPPLICATION
|
||||||
#include "../refit/IO.h"
|
#include "../refit/IO.h"
|
||||||
@ -750,18 +751,6 @@ struct Symbol {
|
|||||||
|
|
||||||
typedef struct Symbol Symbol, *SymbolPtr;
|
typedef struct Symbol Symbol, *SymbolPtr;
|
||||||
|
|
||||||
typedef struct TagStruct {
|
|
||||||
|
|
||||||
UINTN type;
|
|
||||||
CHAR8 *string;
|
|
||||||
UINT8 *data;
|
|
||||||
UINTN dataLen;
|
|
||||||
UINTN offset;
|
|
||||||
struct TagStruct *tag;
|
|
||||||
struct TagStruct *tagNext;
|
|
||||||
|
|
||||||
} TagStruct, *TagPtr;
|
|
||||||
|
|
||||||
#pragma pack(push)
|
#pragma pack(push)
|
||||||
#pragma pack(1)
|
#pragma pack(1)
|
||||||
|
|
||||||
@ -2178,8 +2167,6 @@ ParseXML (
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
EFI_STATUS ParseSVGTheme(CONST CHAR8* buffer, TagPtr * dict);
|
|
||||||
|
|
||||||
//VOID RenderSVGfont(NSVGfont *fontSVG);
|
//VOID RenderSVGfont(NSVGfont *fontSVG);
|
||||||
|
|
||||||
TagPtr
|
TagPtr
|
||||||
|
27
rEFIt_UEFI/Platform/plist.h
Normal file
27
rEFIt_UEFI/Platform/plist.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* plist.h
|
||||||
|
*
|
||||||
|
* Created on: 31 Mar 2020
|
||||||
|
* Author: jief
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PLATFORM_PLIST_H_
|
||||||
|
#define PLATFORM_PLIST_H_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct TagStruct {
|
||||||
|
|
||||||
|
UINTN type;
|
||||||
|
CHAR8 *string;
|
||||||
|
UINT8 *data;
|
||||||
|
UINTN dataLen;
|
||||||
|
UINTN offset;
|
||||||
|
struct TagStruct *tag;
|
||||||
|
struct TagStruct *tagNext;
|
||||||
|
|
||||||
|
} TagStruct, *TagPtr;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* PLATFORM_PLIST_H_ */
|
@ -97,7 +97,7 @@ wchar_t * XStringW::forgetDataWithoutFreeing()
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
const XStringW& XStringW::takeValueFrom(const wchar_t* S)
|
const XStringW& XStringW::takeValueFrom(const wchar_t* S, xsize count)
|
||||||
{
|
{
|
||||||
if ( !S ) {
|
if ( !S ) {
|
||||||
// DebugLog(2, "takeValueFrom(const wchar_t* S) called with NULL. Use setEmpty()\n");
|
// DebugLog(2, "takeValueFrom(const wchar_t* S) called with NULL. Use setEmpty()\n");
|
||||||
@ -105,11 +105,16 @@ const XStringW& XStringW::takeValueFrom(const wchar_t* S)
|
|||||||
Init(0);
|
Init(0);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
Init(wcslen(S));
|
Init(count);
|
||||||
StrCpy(S);
|
StrCpy(S);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const XStringW& XStringW::takeValueFrom(const wchar_t* S)
|
||||||
|
{
|
||||||
|
return takeValueFrom(S, wcslen(S));
|
||||||
|
}
|
||||||
|
|
||||||
const XStringW& XStringW::takeValueFrom(const char* S)
|
const XStringW& XStringW::takeValueFrom(const char* S)
|
||||||
{
|
{
|
||||||
xsize newLen = StrLenInWChar(S);
|
xsize newLen = StrLenInWChar(S);
|
||||||
@ -530,7 +535,15 @@ const XStringW &XStringW::operator +=(const wchar_t *S)
|
|||||||
// Functions
|
// Functions
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
XStringW WPrintf(const char* format, ...)
|
XStringW operator"" _XSW ( const wchar_t* s, size_t len)
|
||||||
|
{
|
||||||
|
XStringW returnValue;
|
||||||
|
if ( len > MAX_XSIZE ) len = MAX_XSIZE;
|
||||||
|
returnValue.takeValueFrom(s, len);
|
||||||
|
return returnValue; // don't do "return returnValue.takeValueFrom(s, len)" because it break the return value optimization.
|
||||||
|
}
|
||||||
|
|
||||||
|
XStringW SWPrintf(const char* format, ...)
|
||||||
{
|
{
|
||||||
va_list va;
|
va_list va;
|
||||||
XStringW str;
|
XStringW str;
|
||||||
|
@ -14,15 +14,15 @@
|
|||||||
|
|
||||||
#define LPATH_SEPARATOR L'\\'
|
#define LPATH_SEPARATOR L'\\'
|
||||||
|
|
||||||
extern UINTN XStringWGrowByDefault;
|
extern xsize XStringWGrowByDefault;
|
||||||
//extern void __GLOBAL__sub_I_XStringW();
|
//extern void __GLOBAL__sub_I_XStringW();
|
||||||
|
|
||||||
class XStringW
|
class XStringW
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
wchar_t *m_data;
|
wchar_t *m_data;
|
||||||
UINTN m_len;
|
xsize m_len;
|
||||||
UINTN m_allocatedSize;
|
xsize m_allocatedSize;
|
||||||
|
|
||||||
// convenience method. Did it this way to avoid #define in header. They can have an impact on other headers
|
// convenience method. Did it this way to avoid #define in header. They can have an impact on other headers
|
||||||
xsize min(xsize x1, xsize x2) const { if ( x1 < x2 ) return x1; return x2; }
|
xsize min(xsize x1, xsize x2) const { if ( x1 < x2 ) return x1; return x2; }
|
||||||
@ -38,18 +38,18 @@ protected:
|
|||||||
wchar_t* _data(xisize i) const { if ( i<0 ) panic("wchar_t* data(xisize i) -> i < 0"); if ( (xsize)i >= m_allocatedSize ) panic("wchar_t* data(xisize i) -> i >= m_allocatedSize"); return m_data+i; }
|
wchar_t* _data(xisize i) const { if ( i<0 ) panic("wchar_t* data(xisize i) -> i < 0"); if ( (xsize)i >= m_allocatedSize ) panic("wchar_t* data(xisize i) -> i >= m_allocatedSize"); return m_data+i; }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void Init(UINTN aSize=0);
|
void Init(xsize aSize=0);
|
||||||
XStringW();
|
XStringW();
|
||||||
XStringW(const XStringW &aString);
|
XStringW(const XStringW &aString);
|
||||||
// XStringW(const wchar_t *);
|
// XStringW(const wchar_t *);
|
||||||
// XStringW(const wchar_t* S, UINTN count);
|
// XStringW(const wchar_t* S, xsize count);
|
||||||
// XStringW(const wchar_t);
|
// XStringW(const wchar_t);
|
||||||
// XStringW(const char*);
|
// XStringW(const char*);
|
||||||
|
|
||||||
~XStringW();
|
~XStringW();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
wchar_t *CheckSize(UINTN nNewSize, UINTN nGrowBy = XStringWGrowByDefault);
|
wchar_t *CheckSize(xsize nNewSize, xsize nGrowBy = XStringWGrowByDefault);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
const wchar_t* wc_str() const { return m_data; } // equivalent as std::string
|
const wchar_t* wc_str() const { return m_data; } // equivalent as std::string
|
||||||
@ -60,10 +60,10 @@ public:
|
|||||||
wchar_t* dataSized(xisize i, xsize sizeMin, xsize nGrowBy=XStringWGrowByDefault) { if ( i<0 ) panic("wchar_t* dataSized(xisize i, xsize sizeMin, xsize nGrowBy) -> i < 0"); CheckSize((xsize)i+sizeMin, nGrowBy); return _data(i); }
|
wchar_t* dataSized(xisize i, xsize sizeMin, xsize nGrowBy=XStringWGrowByDefault) { if ( i<0 ) panic("wchar_t* dataSized(xisize i, xsize sizeMin, xsize nGrowBy) -> i < 0"); CheckSize((xsize)i+sizeMin, nGrowBy); return _data(i); }
|
||||||
wchar_t* forgetDataWithoutFreeing();
|
wchar_t* forgetDataWithoutFreeing();
|
||||||
|
|
||||||
UINTN length() const { return m_len; }
|
xsize length() const { return m_len; }
|
||||||
UINTN size() const { return m_len; }
|
xsize size() const { return m_len; }
|
||||||
UINTN allocatedSize() const { return m_allocatedSize; }
|
xsize allocatedSize() const { return m_allocatedSize; }
|
||||||
void SetLength(UINTN len);
|
void SetLength(xsize len);
|
||||||
const wchar_t* s() { return m_data; }
|
const wchar_t* s() { return m_data; }
|
||||||
|
|
||||||
/* Empty ? */
|
/* Empty ? */
|
||||||
@ -80,7 +80,7 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
int ToInt() const;
|
int ToInt() const;
|
||||||
UINTN ToUInt() const;
|
xsize ToUInt() const;
|
||||||
|
|
||||||
// XString mbs() const;
|
// XString mbs() const;
|
||||||
|
|
||||||
@ -105,14 +105,14 @@ public:
|
|||||||
|
|
||||||
void SetNull() { SetLength(0); };
|
void SetNull() { SetLength(0); };
|
||||||
|
|
||||||
void StrnCpy(const wchar_t *buf, UINTN len);
|
void StrnCpy(const wchar_t *buf, xsize len);
|
||||||
void StrCpy(const wchar_t *buf);
|
void StrCpy(const wchar_t *buf);
|
||||||
void StrnCat(const wchar_t *buf, UINTN len);
|
void StrnCat(const wchar_t *buf, xsize len);
|
||||||
void StrCat(const wchar_t *buf);
|
void StrCat(const wchar_t *buf);
|
||||||
void StrCat(const XStringW &uneXStringW);
|
void StrCat(const XStringW &uneXStringW);
|
||||||
void Delete(UINTN pos, UINTN count=1);
|
void Delete(xsize pos, xsize count=1);
|
||||||
|
|
||||||
void Insert(UINTN pos, const XStringW& Str);
|
void Insert(xsize pos, const XStringW& Str);
|
||||||
|
|
||||||
|
|
||||||
void vSPrintf(const char* format, va_list va);
|
void vSPrintf(const char* format, va_list va);
|
||||||
@ -128,23 +128,24 @@ public:
|
|||||||
// const XStringW &operator =(wchar_t);
|
// const XStringW &operator =(wchar_t);
|
||||||
|
|
||||||
const XStringW& takeValueFrom(const wchar_t* S);
|
const XStringW& takeValueFrom(const wchar_t* S);
|
||||||
|
const XStringW& takeValueFrom(const wchar_t* S, xsize count);
|
||||||
const XStringW& takeValueFrom(const char* S);
|
const XStringW& takeValueFrom(const char* S);
|
||||||
|
|
||||||
const XStringW &operator += (const XStringW &);
|
const XStringW &operator += (const XStringW &);
|
||||||
const XStringW &operator += (const wchar_t* S);
|
const XStringW &operator += (const wchar_t* S);
|
||||||
const XStringW &operator += (wchar_t);
|
const XStringW &operator += (wchar_t);
|
||||||
|
|
||||||
XStringW SubString(UINTN pos, UINTN count) const;
|
XStringW SubString(xsize pos, xsize count) const;
|
||||||
UINTN IdxOf(wchar_t c, UINTN Pos = 0) const;
|
xsize IdxOf(wchar_t c, xsize Pos = 0) const;
|
||||||
UINTN IdxOf(const XStringW& S, UINTN Pos = 0) const;
|
xsize IdxOf(const XStringW& S, xsize Pos = 0) const;
|
||||||
UINTN RIdxOf(const wchar_t c, UINTN Pos = MAX_XSIZE) const;
|
xsize RIdxOf(const wchar_t c, xsize Pos = MAX_XSIZE) const;
|
||||||
UINTN RIdxOf(const XStringW& S, UINTN Pos = MAX_XSIZE) const;
|
xsize RIdxOf(const XStringW& S, xsize Pos = MAX_XSIZE) const;
|
||||||
|
|
||||||
void ToLower(bool FirstCharIsCap = false);
|
void ToLower(bool FirstCharIsCap = false);
|
||||||
bool IsLetters() const;
|
bool IsLetters() const;
|
||||||
bool IsLettersNoAccent() const;
|
bool IsLettersNoAccent() const;
|
||||||
bool IsDigits() const;
|
bool IsDigits() const;
|
||||||
bool IsDigits(UINTN pos, UINTN count) const;
|
bool IsDigits(xsize pos, xsize count) const;
|
||||||
|
|
||||||
bool ExistIn(const XStringW &S) const { return IdxOf(S) != MAX_XSIZE; }
|
bool ExistIn(const XStringW &S) const { return IdxOf(S) != MAX_XSIZE; }
|
||||||
void Replace(wchar_t c1, wchar_t c2);
|
void Replace(wchar_t c1, wchar_t c2);
|
||||||
@ -154,19 +155,19 @@ public:
|
|||||||
|
|
||||||
bool Equal(const wchar_t* S) const { return Compare(S) == 0; };
|
bool Equal(const wchar_t* S) const { return Compare(S) == 0; };
|
||||||
bool BeginingEqual(const wchar_t* S) const { return (memcmp(data(), S, wcslen(S)) == 0); }
|
bool BeginingEqual(const wchar_t* S) const { return (memcmp(data(), S, wcslen(S)) == 0); }
|
||||||
bool SubStringEqual(UINTN Pos, const wchar_t* S) const { return (memcmp(data(Pos), S, wcslen(S)) == 0); }
|
bool SubStringEqual(xsize Pos, const wchar_t* S) const { return (memcmp(data(Pos), S, wcslen(S)) == 0); }
|
||||||
|
|
||||||
XStringW basename() const;
|
XStringW basename() const;
|
||||||
XStringW dirname() const;
|
XStringW dirname() const;
|
||||||
|
|
||||||
// bool ReadFromBuf(const char *buf, UINTN *idx, UINTN count);
|
// bool ReadFromBuf(const char *buf, xsize *idx, xsize count);
|
||||||
// bool WriteToBuf(char *buf, UINTN *idx, UINTN count) const;
|
// bool WriteToBuf(char *buf, xsize *idx, xsize count) const;
|
||||||
// bool ReadFromFILE(FILE *fp);
|
// bool ReadFromFILE(FILE *fp);
|
||||||
// bool WriteToFILE(FILE *fp) const;
|
// bool WriteToFILE(FILE *fp) const;
|
||||||
//
|
//
|
||||||
// bool ReadFromXBuffer(XRBuffer &unXBuffer); // Impossible de mettre le XBuffer en const car il y a une variable d'instance de XBuffer incrémentée par ReadFromXBuffer
|
// bool ReadFromXBuffer(XRBuffer &unXBuffer); // Impossible de mettre le XBuffer en const car il y a une variable d'instance de XBuffer incrémentée par ReadFromXBuffer
|
||||||
// void CatToXBuffer(XBuffer *unXBuffer) const;
|
// void CatToXBuffer(XBuffer *unXBuffer) const;
|
||||||
// void WriteToXBuffer(XBuffer *unXBuffer, UINTN *idx) const;
|
// void WriteToXBuffer(XBuffer *unXBuffer, xsize *idx) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// + operator
|
// + operator
|
||||||
@ -207,15 +208,18 @@ public:
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//extern const XStringW NullXStringW;
|
extern const XStringW NullXStringW;
|
||||||
|
|
||||||
|
XStringW operator"" _XSW ( const wchar_t* s, size_t len);
|
||||||
|
|
||||||
#ifndef _MSC_VER
|
#ifndef _MSC_VER
|
||||||
XStringW WPrintf(const char* format, ...) __attribute__((__format__(__printf__, 1, 2)));
|
XStringW SWPrintf(const char* format, ...) __attribute__((__format__(__printf__, 1, 2)));
|
||||||
#else
|
#else
|
||||||
XStringW WPrintf(const char* format, ...);
|
XStringW SWPrintf(const char* format, ...);
|
||||||
#endif // !__MSC_VER
|
#endif // !__MSC_VER
|
||||||
|
|
||||||
|
|
||||||
XStringW SubString(const wchar_t *S, UINTN pos, UINTN count);
|
XStringW SubString(const wchar_t *S, xsize pos, xsize count);
|
||||||
|
|
||||||
XStringW CleanCtrl(const XStringW &S);
|
XStringW CleanCtrl(const XStringW &S);
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ void XStringWArray::AddStrings(const wchar_t *Val1, ...)
|
|||||||
va_end(va);
|
va_end(va);
|
||||||
}
|
}
|
||||||
|
|
||||||
XStringW XStringWArray::ConcatAll(XStringW Separator, XStringW Prefix, XStringW Suffix) const
|
XStringW XStringWArray::ConcatAll(const XStringW& Separator, const XStringW& Prefix, const XStringW& Suffix) const
|
||||||
{
|
{
|
||||||
xsize i;
|
xsize i;
|
||||||
XStringW s;
|
XStringW s;
|
||||||
|
@ -28,7 +28,7 @@ class XStringWArray : public XStringWArraySuper
|
|||||||
bool IsNull() const { return size() == 0 ; }
|
bool IsNull() const { return size() == 0 ; }
|
||||||
bool NotNull() const { return size() > 0 ; }
|
bool NotNull() const { return size() > 0 ; }
|
||||||
|
|
||||||
XStringW ConcatAll(XStringW Separator = XStringWP(L", "), XStringW Prefix = XStringWP(L""), XStringW Suffix = XStringWP(L"")) const;
|
XStringW ConcatAll(const XStringW& Separator = L", "_XSW, const XStringW& Prefix = NullXStringW, const XStringW& Suffix = NullXStringW) const;
|
||||||
|
|
||||||
bool Equal(const XStringWArray &aStrings) const;
|
bool Equal(const XStringWArray &aStrings) const;
|
||||||
bool operator ==(const XStringWArray &aXStrings) const { return Equal(aXStrings); }
|
bool operator ==(const XStringWArray &aXStrings) const { return Equal(aXStrings); }
|
||||||
@ -50,6 +50,6 @@ class XStringWArray : public XStringWArraySuper
|
|||||||
};
|
};
|
||||||
|
|
||||||
extern const XStringWArray NullXStringws;
|
extern const XStringWArray NullXStringws;
|
||||||
XStringWArray Split(const XStringW &S, const XStringW &Separator = XStringWP(L", "));
|
XStringWArray Split(const XStringW &S, const XStringW &Separator = L", "_XSW);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,55 +1,55 @@
|
|||||||
//*************************************************************************************************
|
////*************************************************************************************************
|
||||||
//*************************************************************************************************
|
////*************************************************************************************************
|
||||||
|
////
|
||||||
|
//// STRING
|
||||||
|
////
|
||||||
|
//// Developed by jief666, from 1997.
|
||||||
|
////
|
||||||
|
////*************************************************************************************************
|
||||||
|
////*************************************************************************************************
|
||||||
//
|
//
|
||||||
// STRING
|
|
||||||
//
|
//
|
||||||
// Developed by jief666, from 1997.
|
//#if !defined(__XStringW_CPP__)
|
||||||
|
//#define __XStringW_CPP__
|
||||||
//
|
//
|
||||||
//*************************************************************************************************
|
//#if 0
|
||||||
//*************************************************************************************************
|
//#define DBG(...) DebugLog(2, __VA_ARGS__)
|
||||||
|
//#else
|
||||||
|
//#define DBG(...)
|
||||||
#if !defined(__XStringW_CPP__)
|
//#endif
|
||||||
#define __XStringW_CPP__
|
//
|
||||||
|
//#include "XToolsCommon.h"
|
||||||
#if 0
|
//#include "XStringWP.h"
|
||||||
#define DBG(...) DebugLog(2, __VA_ARGS__)
|
//
|
||||||
#else
|
//#include "../../Include/Library/printf_lite.h"
|
||||||
#define DBG(...)
|
//
|
||||||
#endif
|
//
|
||||||
|
////xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||||
#include "XToolsCommon.h"
|
//// Constructor
|
||||||
#include "XStringWP.h"
|
////xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||||
|
//
|
||||||
#include "../../Include/Library/printf_lite.h"
|
//
|
||||||
|
//XStringWP::XStringWP(const wchar_t *S)
|
||||||
|
//{
|
||||||
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
// if ( !S ) {
|
||||||
// Constructor
|
//// DebugLog(2, "XStringWP(const wchar_t *S) called with NULL. Use setEmpty()\n");
|
||||||
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
//// panic();
|
||||||
|
// Init(0);
|
||||||
|
// } else {
|
||||||
XStringWP::XStringWP(const wchar_t *S)
|
// DBG("Constructor(const wchar_t *S) : %ls, StrLen(S)=%d\n", S, StrLen(S));
|
||||||
{
|
// Init(wcslen(S));
|
||||||
if ( !S ) {
|
// StrCpy(S);
|
||||||
// DebugLog(2, "XStringWP(const wchar_t *S) called with NULL. Use setEmpty()\n");
|
// }
|
||||||
// panic();
|
//}
|
||||||
Init(0);
|
//
|
||||||
} else {
|
//XStringWP::XStringWP(const char* S)
|
||||||
DBG("Constructor(const wchar_t *S) : %ls, StrLen(S)=%d\n", S, StrLen(S));
|
//{
|
||||||
Init(wcslen(S));
|
// DBG("Constructor(const char* S)\n");
|
||||||
StrCpy(S);
|
// xsize newLen = StrLenInWChar(S);
|
||||||
}
|
// Init(newLen);
|
||||||
}
|
// utf8ToWChar(m_data, m_allocatedSize+1, S); // m_size doesn't count the NULL terminator
|
||||||
|
// SetLength(newLen);
|
||||||
XStringWP::XStringWP(const char* S)
|
//}
|
||||||
{
|
//
|
||||||
DBG("Constructor(const char* S)\n");
|
//
|
||||||
xsize newLen = StrLenInWChar(S);
|
//#endif
|
||||||
Init(newLen);
|
|
||||||
utf8ToWChar(m_data, m_allocatedSize+1, S); // m_size doesn't count the NULL terminator
|
|
||||||
SetLength(newLen);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
@ -1,32 +1,32 @@
|
|||||||
//*************************************************************************************************
|
////*************************************************************************************************
|
||||||
//*************************************************************************************************
|
////*************************************************************************************************
|
||||||
|
////
|
||||||
|
//// STRING
|
||||||
|
////
|
||||||
|
////*************************************************************************************************
|
||||||
|
////*************************************************************************************************
|
||||||
//
|
//
|
||||||
// STRING
|
//#if !defined(__XStringWP_H__)
|
||||||
|
//#define __XStringWP_H__
|
||||||
//
|
//
|
||||||
//*************************************************************************************************
|
//#include "XStringWP.h"
|
||||||
//*************************************************************************************************
|
//#include "XStringW.h"
|
||||||
|
//
|
||||||
#if !defined(__XStringWP_H__)
|
//#include "XToolsCommon.h"
|
||||||
#define __XStringWP_H__
|
//#include "utf8Conversion.h"
|
||||||
|
//
|
||||||
#include "XStringWP.h"
|
//#define XStringWP_super XStringW
|
||||||
#include "XStringW.h"
|
//class XStringWP : public XStringWP_super
|
||||||
|
//{
|
||||||
#include "XToolsCommon.h"
|
//protected:
|
||||||
#include "utf8Conversion.h"
|
//// wchar_t *m_data;
|
||||||
|
//
|
||||||
#define XStringWP_super XStringW
|
//public:
|
||||||
class XStringWP : public XStringWP_super
|
// XStringWP() : XStringWP_super() {};
|
||||||
{
|
// XStringWP(const wchar_t *);
|
||||||
protected:
|
// XStringWP(const char*);
|
||||||
// wchar_t *m_data;
|
// /* XStringWP(const char*, ...); // Cannot define this ctor although it would be handy. Problem is confusion with XStringWP(const char*) as ... can mean 0 arg. */
|
||||||
|
//
|
||||||
public:
|
//};
|
||||||
XStringWP() : XStringWP_super() {};
|
//
|
||||||
XStringWP(const wchar_t *);
|
//#endif
|
||||||
XStringWP(const char*);
|
|
||||||
/* XStringWP(const char*, ...); // Cannot define this ctor although it would be handy. Problem is confusion with XStringWP(const char*) as ... can mean 0 arg. */
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#include <Platform.h>
|
#include <Platform.h>
|
||||||
#include "../cpp_foundation/XStringWArray.h"
|
#include "../cpp_foundation/XStringWArray.h"
|
||||||
#include "../cpp_foundation/XStringWP.h"
|
#include "../cpp_foundation/XStringW.h"
|
||||||
|
|
||||||
int XStringWArray_tests()
|
int XStringWArray_tests()
|
||||||
{
|
{
|
||||||
@ -13,20 +13,20 @@ int XStringWArray_tests()
|
|||||||
|
|
||||||
if ( !array1.IsNull() ) return 1;
|
if ( !array1.IsNull() ) return 1;
|
||||||
|
|
||||||
array1.Add(XStringWP(L"1"));
|
array1.Add(L"1"_XSW);
|
||||||
if ( array1.IsNull() ) return 2;
|
if ( array1.IsNull() ) return 2;
|
||||||
array1.Add(XStringWP(L"2"));
|
array1.Add(L"2"_XSW);
|
||||||
|
|
||||||
if ( array1[0] != L"1" ) return 3;
|
if ( array1[0] != L"1" ) return 3;
|
||||||
if ( array1[1] != L"2" ) return 4;
|
if ( array1[1] != L"2" ) return 4;
|
||||||
|
|
||||||
if ( !array1.Contains(XStringWP(L"2")) ) return 5;
|
if ( !array1.Contains(L"2"_XSW) ) return 5;
|
||||||
|
|
||||||
// Test == and !=
|
// Test == and !=
|
||||||
{
|
{
|
||||||
XStringWArray array1bis;
|
XStringWArray array1bis;
|
||||||
array1bis.Add(XStringWP(L"1"));
|
array1bis.Add(L"1"_XSW);
|
||||||
array1bis.Add(XStringWP(L"2"));
|
array1bis.Add(L"2"_XSW);
|
||||||
|
|
||||||
if ( !(array1 == array1bis) ) return 10;
|
if ( !(array1 == array1bis) ) return 10;
|
||||||
if ( array1 != array1bis ) return 11;
|
if ( array1 != array1bis ) return 11;
|
||||||
@ -34,19 +34,19 @@ int XStringWArray_tests()
|
|||||||
|
|
||||||
// Test concat and Split
|
// Test concat and Split
|
||||||
{
|
{
|
||||||
XStringW c = array1.ConcatAll(XStringWP(L", "), XStringWP(L"^"), XStringWP(L"$"));
|
XStringW c = array1.ConcatAll(L", "_XSW, L"^"_XSW, L"$"_XSW);
|
||||||
if ( c != L"^1, 2$" ) return 1;
|
if ( c != L"^1, 2$" ) return 1;
|
||||||
|
|
||||||
// Split doesn't handle prefix and suffix yet.
|
// Split doesn't handle prefix and suffix yet.
|
||||||
c = array1.ConcatAll(XStringWP(L", "));
|
c = array1.ConcatAll(L", "_XSW);
|
||||||
|
|
||||||
XStringWArray array1bis = Split(c);
|
XStringWArray array1bis = Split(c);
|
||||||
if ( array1 != array1bis ) return 20;
|
if ( array1 != array1bis ) return 20;
|
||||||
}
|
}
|
||||||
|
|
||||||
XStringWArray array2;
|
XStringWArray array2;
|
||||||
array2.Add(XStringWP(L"2"));
|
array2.Add(L"2"_XSW);
|
||||||
array2.Add(XStringWP(L"1"));
|
array2.Add(L"1"_XSW);
|
||||||
|
|
||||||
if ( array2[0] != L"2" ) return 30;
|
if ( array2[0] != L"2" ) return 30;
|
||||||
if ( array2[1] != L"1" ) return 31;
|
if ( array2[1] != L"1" ) return 31;
|
||||||
@ -55,13 +55,13 @@ int XStringWArray_tests()
|
|||||||
if ( array1 == array2 ) return 40; // Array != because order is different
|
if ( array1 == array2 ) return 40; // Array != because order is different
|
||||||
if ( !array1.Same(array2) ) return 41; // Arrays are the same
|
if ( !array1.Same(array2) ) return 41; // Arrays are the same
|
||||||
|
|
||||||
array1.AddNoNull(XStringWP(L"3"));
|
array1.AddNoNull(L"3"_XSW);
|
||||||
if ( array1.size() != 3 ) return 50;
|
if ( array1.size() != 3 ) return 50;
|
||||||
array1.AddNoNull(XStringWP(L""));
|
array1.AddNoNull(L""_XSW);
|
||||||
if ( array1.size() != 3 ) return 51;
|
if ( array1.size() != 3 ) return 51;
|
||||||
array1.AddEvenNull(XStringW());
|
array1.AddEvenNull(XStringW());
|
||||||
if ( array1.size() != 4 ) return 52;
|
if ( array1.size() != 4 ) return 52;
|
||||||
array1.AddID(XStringWP(L"2"));
|
array1.AddID(L"2"_XSW);
|
||||||
if ( array1.size() != 4 ) return 53;
|
if ( array1.size() != 4 ) return 53;
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,6 +11,9 @@ int XStringW_tests()
|
|||||||
{
|
{
|
||||||
|
|
||||||
#ifdef JIEF_DEBUG
|
#ifdef JIEF_DEBUG
|
||||||
|
|
||||||
|
XStringW a = L"toto"_XSW;
|
||||||
|
|
||||||
// DebugLog(2, "XStringW_tests -> Enter\n");
|
// DebugLog(2, "XStringW_tests -> Enter\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -3,13 +3,22 @@
|
|||||||
#include "../cpp_foundation/utf8Conversion.h"
|
#include "../cpp_foundation/utf8Conversion.h"
|
||||||
#include "global_test.h"
|
#include "global_test.h"
|
||||||
|
|
||||||
|
template<int m_size>
|
||||||
|
class Xtest
|
||||||
|
{
|
||||||
|
char m_data[m_size];
|
||||||
|
public:
|
||||||
|
int size() { return m_size; }
|
||||||
|
};
|
||||||
|
|
||||||
int XString_tests()
|
int XString_tests()
|
||||||
{
|
{
|
||||||
|
|
||||||
XString a = "toto"_XS;
|
XString a = "toto"_XS;
|
||||||
|
|
||||||
|
// Xtest<5> b;
|
||||||
|
// int bs = b.size();
|
||||||
|
|
||||||
#ifdef JIEF_DEBUG
|
#ifdef JIEF_DEBUG
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -489,7 +489,7 @@ BOOLEAN AskUserForFilePathFromDir(IN CHAR16 *Title OPTIONAL, IN REFIT_VOLUME *Vo
|
|||||||
// 0, NULL, NULL, FALSE, FALSE, 0, 0, 0, 0,
|
// 0, NULL, NULL, FALSE, FALSE, 0, 0, 0, 0,
|
||||||
// { 0, 0, 0, 0 }, NULL};
|
// { 0, 0, 0, 0 }, NULL};
|
||||||
#if USE_XTHEME
|
#if USE_XTHEME
|
||||||
STATIC REFIT_MENU_SCREEN InitialMenu(0, XStringWP(L"Please Select File..."), XStringW());
|
STATIC REFIT_MENU_SCREEN InitialMenu(0, L"Please Select File..."_XSW, XStringW());
|
||||||
#else
|
#else
|
||||||
STATIC REFIT_MENU_SCREEN InitialMenu(0, L"Please Select File...", NULL);
|
STATIC REFIT_MENU_SCREEN InitialMenu(0, L"Please Select File...", NULL);
|
||||||
#endif
|
#endif
|
||||||
@ -517,7 +517,7 @@ BOOLEAN AskUserForFilePathFromVolumes(IN CHAR16 *Title OPTIONAL, OUT EFI_DEVICE_
|
|||||||
((Volume->DevicePathString == NULL) && (Volume->VolName == NULL))) {
|
((Volume->DevicePathString == NULL) && (Volume->VolName == NULL))) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
REFIT_SIMPLE_MENU_ENTRY_TAG *Entry = new REFIT_SIMPLE_MENU_ENTRY_TAG(XStringWP((Volume->VolName == NULL) ? Volume->DevicePathString : Volume->VolName), TAG_OFFSET + Index, MENU_EXIT_ENTER);
|
REFIT_SIMPLE_MENU_ENTRY_TAG *Entry = new REFIT_SIMPLE_MENU_ENTRY_TAG(SWPrintf("%ls", (Volume->VolName == NULL) ? Volume->DevicePathString : Volume->VolName), TAG_OFFSET + Index, MENU_EXIT_ENTER);
|
||||||
// Entry = Entries[Count++] = EntryPtr++;
|
// Entry = Entries[Count++] = EntryPtr++;
|
||||||
// Entry->Title = (Volume->VolName == NULL) ? Volume->DevicePathString : Volume->VolName;
|
// Entry->Title = (Volume->VolName == NULL) ? Volume->DevicePathString : Volume->VolName;
|
||||||
// Entry->Tag = TAG_OFFSET + Index;
|
// Entry->Tag = TAG_OFFSET + Index;
|
||||||
|
@ -197,7 +197,7 @@ BOOLEAN AddLegacyEntry(IN CONST CHAR16 *FullTitle, IN CONST CHAR16 *LoaderTitle,
|
|||||||
// SubScreen = (__typeof__(SubScreen))AllocateZeroPool(sizeof(REFIT_MENU_SCREEN));
|
// SubScreen = (__typeof__(SubScreen))AllocateZeroPool(sizeof(REFIT_MENU_SCREEN));
|
||||||
SubScreen = new REFIT_MENU_SCREEN();
|
SubScreen = new REFIT_MENU_SCREEN();
|
||||||
#if USE_XTHEME
|
#if USE_XTHEME
|
||||||
SubScreen->Title = XStringWP(L"Boot Options for ") + LoaderTitle + L" on " + VolDesc;
|
SubScreen->Title.SPrintf("Boot Options for %ls on %ls", LoaderTitle, VolDesc);
|
||||||
#else
|
#else
|
||||||
SubScreen->Title = PoolPrint(L"Boot Options for %s on %s", LoaderTitle, VolDesc);
|
SubScreen->Title = PoolPrint(L"Boot Options for %s on %s", LoaderTitle, VolDesc);
|
||||||
#endif
|
#endif
|
||||||
|
@ -783,7 +783,7 @@ STATIC VOID AddDefaultMenu(IN LOADER_ENTRY *Entry)
|
|||||||
// SubScreen = (__typeof__(SubScreen))AllocateZeroPool(sizeof(REFIT_MENU_SCREEN));
|
// SubScreen = (__typeof__(SubScreen))AllocateZeroPool(sizeof(REFIT_MENU_SCREEN));
|
||||||
SubScreen = new REFIT_MENU_SCREEN;
|
SubScreen = new REFIT_MENU_SCREEN;
|
||||||
#if USE_XTHEME
|
#if USE_XTHEME
|
||||||
SubScreen->Title = XStringWP("Options for ") + Entry->Title.s() + L" on " + Entry->VolName;
|
SubScreen->Title.SPrintf("Options for %ls on %ls", Entry->Title.wc_str(), Entry->VolName);
|
||||||
#else
|
#else
|
||||||
//very old mistake!!!
|
//very old mistake!!!
|
||||||
SubScreen->Title = PoolPrint(L"Options for %s on %s", Entry->Title.s(), Entry->VolName);
|
SubScreen->Title = PoolPrint(L"Options for %s on %s", Entry->Title.s(), Entry->VolName);
|
||||||
@ -798,7 +798,7 @@ STATIC VOID AddDefaultMenu(IN LOADER_ENTRY *Entry)
|
|||||||
SubScreen->AddMenuInfoLine(FileDevicePathToStr(Entry->DevicePath));
|
SubScreen->AddMenuInfoLine(FileDevicePathToStr(Entry->DevicePath));
|
||||||
Guid = FindGPTPartitionGuidInDevicePath(Volume->DevicePath);
|
Guid = FindGPTPartitionGuidInDevicePath(Volume->DevicePath);
|
||||||
if (Guid) {
|
if (Guid) {
|
||||||
SubScreen->AddMenuInfoLine(WPrintf("UUID: %s", strguid(Guid)).wc_str());
|
SubScreen->AddMenuInfoLine(SWPrintf("UUID: %s", strguid(Guid)).wc_str());
|
||||||
}
|
}
|
||||||
SubScreen->AddMenuInfoLine(PoolPrint(L"Options: %s", Entry->LoadOptions));
|
SubScreen->AddMenuInfoLine(PoolPrint(L"Options: %s", Entry->LoadOptions));
|
||||||
// loader-specific submenu entries
|
// loader-specific submenu entries
|
||||||
@ -2025,7 +2025,7 @@ STATIC VOID AddCustomEntry(IN UINTN CustomIndex,
|
|||||||
REFIT_MENU_SCREEN *SubScreen = new REFIT_MENU_SCREEN;
|
REFIT_MENU_SCREEN *SubScreen = new REFIT_MENU_SCREEN;
|
||||||
if (SubScreen) {
|
if (SubScreen) {
|
||||||
#if USE_XTHEME
|
#if USE_XTHEME
|
||||||
SubScreen->Title = XStringWP("Boot Options for ") + ((Custom->Title != NULL) ? Custom->Title : CustomPath) + L" on " + Entry->VolName;
|
SubScreen->Title.SPrintf("Boot Options for %ls on %ls", (Custom->Title != NULL) ? Custom->Title : CustomPath, Entry->VolName);
|
||||||
#else
|
#else
|
||||||
SubScreen->Title = PoolPrint(L"Boot Options for %s on %s", (Custom->Title != NULL) ? Custom->Title : CustomPath, Entry->VolName);
|
SubScreen->Title = PoolPrint(L"Boot Options for %s on %s", (Custom->Title != NULL) ? Custom->Title : CustomPath, Entry->VolName);
|
||||||
#endif
|
#endif
|
||||||
@ -2035,10 +2035,10 @@ STATIC VOID AddCustomEntry(IN UINTN CustomIndex,
|
|||||||
SubScreen->ID = Custom->Type + 20;
|
SubScreen->ID = Custom->Type + 20;
|
||||||
SubScreen->AnimeRun = SubScreen->GetAnime();
|
SubScreen->AnimeRun = SubScreen->GetAnime();
|
||||||
VolumeSize = RShiftU64(MultU64x32(Volume->BlockIO->Media->LastBlock, Volume->BlockIO->Media->BlockSize), 20);
|
VolumeSize = RShiftU64(MultU64x32(Volume->BlockIO->Media->LastBlock, Volume->BlockIO->Media->BlockSize), 20);
|
||||||
SubScreen->AddMenuInfoLine(XStringWP(L"Volume size: ") + WPrintf("%lldMb", VolumeSize));
|
SubScreen->AddMenuInfoLine(SWPrintf("Volume size: %lldMb", VolumeSize));
|
||||||
SubScreen->AddMenuInfoLine(FileDevicePathToStr(Entry->DevicePath));
|
SubScreen->AddMenuInfoLine(FileDevicePathToStr(Entry->DevicePath));
|
||||||
if (Guid) {
|
if (Guid) {
|
||||||
SubScreen->AddMenuInfoLine(WPrintf("UUID: %s", strguid(Guid)).wc_str());
|
SubScreen->AddMenuInfoLine(SWPrintf("UUID: %s", strguid(Guid)).wc_str());
|
||||||
}
|
}
|
||||||
SubScreen->AddMenuInfoLine(PoolPrint(L"Options: %s", Entry->LoadOptions));
|
SubScreen->AddMenuInfoLine(PoolPrint(L"Options: %s", Entry->LoadOptions));
|
||||||
DBG("Create sub entries\n");
|
DBG("Create sub entries\n");
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#define TEST_FONT 0
|
#define TEST_FONT 0
|
||||||
#define TEST_DITHER 0
|
#define TEST_DITHER 0
|
||||||
|
|
||||||
|
#include "VectorGraphics.h"
|
||||||
|
|
||||||
#include "../Platform/Platform.h"
|
#include "../Platform/Platform.h"
|
||||||
|
|
||||||
@ -747,8 +747,9 @@ EG_IMAGE * LoadSvgFrame(INTN i)
|
|||||||
//textType = 0-help 1-message 2-menu 3-test
|
//textType = 0-help 1-message 2-menu 3-test
|
||||||
//return text width in pixels
|
//return text width in pixels
|
||||||
#if USE_XTHEME
|
#if USE_XTHEME
|
||||||
INTN renderSVGtext(XImage& TextBufferXY, INTN posX, INTN posY, INTN textType, XStringW string, UINTN Cursor)
|
INTN renderSVGtext(XImage* TextBufferXY_ptr, INTN posX, INTN posY, INTN textType, const XStringW& string, UINTN Cursor)
|
||||||
{
|
{
|
||||||
|
XImage& TextBufferXY = *TextBufferXY_ptr;
|
||||||
INTN Width;
|
INTN Width;
|
||||||
UINTN i;
|
UINTN i;
|
||||||
UINTN len;
|
UINTN len;
|
||||||
@ -1085,7 +1086,7 @@ VOID testSVG()
|
|||||||
FreePool(FileData);
|
FreePool(FileData);
|
||||||
// Scale = Height / fontSVG->unitsPerEm;
|
// Scale = Height / fontSVG->unitsPerEm;
|
||||||
#if USE_XTHEME
|
#if USE_XTHEME
|
||||||
renderSVGtext(TextBufferXY, 0, 0, 3, XStringW().takeValueFrom("Clover Кловер"), 1);
|
renderSVGtext(&TextBufferXY, 0, 0, 3, XStringW().takeValueFrom("Clover Кловер"), 1);
|
||||||
#else
|
#else
|
||||||
renderSVGtext(TextBufferXY, 0, 0, 3, L"Clover Кловер", 1);
|
renderSVGtext(TextBufferXY, 0, 0, 3, L"Clover Кловер", 1);
|
||||||
#endif
|
#endif
|
||||||
|
26
rEFIt_UEFI/libeg/VectorGraphics.h
Normal file
26
rEFIt_UEFI/libeg/VectorGraphics.h
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
* VectorGraphics.h
|
||||||
|
*
|
||||||
|
* Created on: 31 Mar 2020
|
||||||
|
* Author: jief
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef LIBEG_VECTORGRAPHICS_H_
|
||||||
|
#define LIBEG_VECTORGRAPHICS_H_
|
||||||
|
|
||||||
|
#include "../cpp_foundation/XStringW.h"
|
||||||
|
#include "../Platform/plist.h"
|
||||||
|
#include "XImage.h"
|
||||||
|
|
||||||
|
EFI_STATUS ParseSVGTheme(CONST CHAR8* buffer, TagPtr * dict);
|
||||||
|
|
||||||
|
#if USE_XTHEME
|
||||||
|
INTN renderSVGtext(XImage* TextBufferXY, INTN posX, INTN posY, INTN textType, const XStringW& string, UINTN Cursor);
|
||||||
|
#else
|
||||||
|
INTN renderSVGtext(EG_IMAGE* TextBufferXY, INTN posX, INTN posY, INTN textType, CONST CHAR16* text, UINTN Cursor);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
VOID testSVG(VOID);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* LIBEG_VECTORGRAPHICS_H_ */
|
@ -167,6 +167,11 @@ EFI_GRAPHICS_OUTPUT_BLT_PIXEL* XImage::GetPixelPtr(UINTN x, UINTN y)
|
|||||||
return &PixelData[x + y * Width];
|
return &PixelData[x + y * Width];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const EFI_GRAPHICS_OUTPUT_BLT_PIXEL* XImage::GetPixelPtr(UINTN x, UINTN y) const
|
||||||
|
{
|
||||||
|
return &PixelData[x + y * Width];
|
||||||
|
}
|
||||||
|
|
||||||
const EFI_GRAPHICS_OUTPUT_BLT_PIXEL& XImage::GetPixel(UINTN x, UINTN y) const
|
const EFI_GRAPHICS_OUTPUT_BLT_PIXEL& XImage::GetPixel(UINTN x, UINTN y) const
|
||||||
{
|
{
|
||||||
return PixelData[x + y * Width];
|
return PixelData[x + y * Width];
|
||||||
@ -544,12 +549,12 @@ void XImage::Draw(INTN x, INTN y, float scale, bool Opaque)
|
|||||||
*/
|
*/
|
||||||
EFI_STATUS XImage::LoadXImage(EFI_FILE *BaseDir, const char* IconName)
|
EFI_STATUS XImage::LoadXImage(EFI_FILE *BaseDir, const char* IconName)
|
||||||
{
|
{
|
||||||
return LoadXImage(BaseDir, XStringWP(IconName));
|
return LoadXImage(BaseDir, XStringW().takeValueFrom(IconName));
|
||||||
}
|
}
|
||||||
|
|
||||||
EFI_STATUS XImage::LoadXImage(EFI_FILE *BaseDir, const wchar_t* LIconName)
|
EFI_STATUS XImage::LoadXImage(EFI_FILE *BaseDir, const wchar_t* LIconName)
|
||||||
{
|
{
|
||||||
return LoadXImage(BaseDir, XStringWP(LIconName));
|
return LoadXImage(BaseDir, XStringW().takeValueFrom(LIconName));
|
||||||
}
|
}
|
||||||
//dont call this procedure for SVG theme BaseDir == NULL?
|
//dont call this procedure for SVG theme BaseDir == NULL?
|
||||||
EFI_STATUS XImage::LoadXImage(EFI_FILE *BaseDir, const XStringW& IconName)
|
EFI_STATUS XImage::LoadXImage(EFI_FILE *BaseDir, const XStringW& IconName)
|
||||||
|
@ -69,6 +69,7 @@ public:
|
|||||||
const XArray<EFI_GRAPHICS_OUTPUT_BLT_PIXEL>& GetData() const;
|
const XArray<EFI_GRAPHICS_OUTPUT_BLT_PIXEL>& GetData() const;
|
||||||
|
|
||||||
const EFI_GRAPHICS_OUTPUT_BLT_PIXEL& GetPixel(UINTN x, UINTN y) const;
|
const EFI_GRAPHICS_OUTPUT_BLT_PIXEL& GetPixel(UINTN x, UINTN y) const;
|
||||||
|
const EFI_GRAPHICS_OUTPUT_BLT_PIXEL* GetPixelPtr(UINTN x, UINTN y) const ;
|
||||||
EFI_GRAPHICS_OUTPUT_BLT_PIXEL* GetPixelPtr(UINTN x, UINTN y);
|
EFI_GRAPHICS_OUTPUT_BLT_PIXEL* GetPixelPtr(UINTN x, UINTN y);
|
||||||
UINTN GetWidth() const;
|
UINTN GetWidth() const;
|
||||||
UINTN GetHeight() const;
|
UINTN GetHeight() const;
|
||||||
|
@ -586,7 +586,7 @@ void XTheme::FillByDir() //assume ThemeDir is defined by InitTheme() procedure
|
|||||||
for (INTN i = 0; i <= BUILTIN_CHECKBOX_CHECKED; ++i) {
|
for (INTN i = 0; i <= BUILTIN_CHECKBOX_CHECKED; ++i) {
|
||||||
Icon NewIcon(i); //initialize with embedded but further replace by loaded
|
Icon NewIcon(i); //initialize with embedded but further replace by loaded
|
||||||
NewIcon.Image.LoadXImage(ThemeDir, IconsNames[i]);
|
NewIcon.Image.LoadXImage(ThemeDir, IconsNames[i]);
|
||||||
NewIcon.ImageNight.LoadXImage(ThemeDir, XStringWP(IconsNames[i]) + XStringWP("_night"));
|
NewIcon.ImageNight.LoadXImage(ThemeDir, SWPrintf("%s_night", IconsNames[i]));
|
||||||
Icons.AddCopy(NewIcon);
|
Icons.AddCopy(NewIcon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -509,7 +509,6 @@ VOID egTakeImage(IN EG_IMAGE *Image, INTN ScreenPosX, INTN ScreenPosY,
|
|||||||
|
|
||||||
EFI_STATUS egScreenShot(VOID);
|
EFI_STATUS egScreenShot(VOID);
|
||||||
|
|
||||||
VOID testSVG(VOID);
|
|
||||||
|
|
||||||
#endif /* __LIBEG_LIBEG_H__ */
|
#endif /* __LIBEG_LIBEG_H__ */
|
||||||
|
|
||||||
|
@ -182,11 +182,9 @@ EG_IMAGE * egDecodePNG(IN UINT8 *FileData, IN UINTN FileDataLength, IN BOOLEAN W
|
|||||||
//VOID egEncodeBMP(IN EG_IMAGE *Image, OUT UINT8 **FileData, OUT UINTN *FileDataLength);
|
//VOID egEncodeBMP(IN EG_IMAGE *Image, OUT UINT8 **FileData, OUT UINTN *FileDataLength);
|
||||||
|
|
||||||
#if USE_XTHEME
|
#if USE_XTHEME
|
||||||
INTN renderSVGtext(XImage& TextBufferXY, INTN posX, INTN posY, INTN textType, XStringW string, UINTN Cursor);
|
INTN egRenderText(IN const XStringW& Text, OUT XImage* CompImage,
|
||||||
INTN egRenderText(IN XStringW& Text, IN XImage& CompImage,
|
|
||||||
IN INTN PosX, IN INTN PosY, IN INTN Cursor, INTN textType);
|
IN INTN PosX, IN INTN PosY, IN INTN Cursor, INTN textType);
|
||||||
#else
|
#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);
|
INTN egRenderText(IN CONST CHAR16 *Text, IN OUT EG_IMAGE *CompImage, IN INTN PosX, IN INTN PosY, IN INTN Cursor, INTN textType);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -386,7 +386,7 @@ VOID egInitScreen(IN BOOLEAN SetMaxResolution)
|
|||||||
// if it not the first run, just restore resolution
|
// if it not the first run, just restore resolution
|
||||||
if (egScreenWidth != 0 && egScreenHeight != 0) {
|
if (egScreenWidth != 0 && egScreenHeight != 0) {
|
||||||
// Resolution = PoolPrint(L"%dx%d",egScreenWidth,egScreenHeight);
|
// Resolution = PoolPrint(L"%dx%d",egScreenWidth,egScreenHeight);
|
||||||
XStringW Resolution = WPrintf("%llux%llu", egScreenWidth, egScreenHeight);
|
XStringW Resolution = SWPrintf("%llux%llu", egScreenWidth, egScreenHeight);
|
||||||
// if (Resolution) { //no sense
|
// if (Resolution) { //no sense
|
||||||
Status = egSetScreenResolution(Resolution.wc_str());
|
Status = egSetScreenResolution(Resolution.wc_str());
|
||||||
// FreePool(Resolution);
|
// FreePool(Resolution);
|
||||||
@ -648,12 +648,12 @@ EFI_STATUS egScreenShot(VOID)
|
|||||||
return EFI_NOT_READY;
|
return EFI_NOT_READY;
|
||||||
}
|
}
|
||||||
//save file with a first unoccupied name
|
//save file with a first unoccupied name
|
||||||
XStringWP CommonName(L"EFI\\CLOVER\\misc\\screenshot");
|
// XStringW CommonName(L"EFI\\CLOVER\\misc\\screenshot"_XSW);
|
||||||
for (UINTN Index = 0; Index < 60; Index++) {
|
for (UINTN Index = 0; Index < 60; Index++) {
|
||||||
// ScreenshotName = PoolPrint(L"%a%d.png", ScreenShotName, Index);
|
// ScreenshotName = PoolPrint(L"%a%d.png", ScreenShotName, Index);
|
||||||
XStringW Name = CommonName + WPrintf("%lld", Index) + L".png";
|
XStringW Name = SWPrintf("EFI\\CLOVER\\misc\\screenshot%lld.png", Index);
|
||||||
if (!FileExists(SelfRootDir, Name.data())) {
|
if (!FileExists(SelfRootDir, Name.wc_str())) {
|
||||||
Status = egSaveFile(SelfRootDir, Name.data(), FileData, FileDataLength);
|
Status = egSaveFile(SelfRootDir, Name.wc_str(), FileData, FileDataLength);
|
||||||
if (!EFI_ERROR(Status)) {
|
if (!EFI_ERROR(Status)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
|
|
||||||
#include "libegint.h"
|
#include "libegint.h"
|
||||||
#include "nanosvg.h"
|
#include "nanosvg.h"
|
||||||
|
#include "VectorGraphics.h"
|
||||||
|
|
||||||
//#include "egemb_font.h"
|
//#include "egemb_font.h"
|
||||||
//#define FONT_CELL_WIDTH (7)
|
//#define FONT_CELL_WIDTH (7)
|
||||||
@ -312,13 +313,16 @@ INTN GetEmpty(EG_PIXEL *Ptr, EG_PIXEL *FirstPixel, INTN MaxWidth, INTN Step, INT
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if USE_XTHEME
|
#if USE_XTHEME
|
||||||
INTN egRenderText(IN XStringW& Text, IN XImage& CompImage,
|
INTN egRenderText(IN const XStringW& Text, OUT XImage* CompImage_ptr,
|
||||||
IN INTN PosX, IN INTN PosY, IN INTN Cursor, INTN textType)
|
IN INTN PosX, IN INTN PosY, IN INTN Cursor, INTN textType)
|
||||||
#else
|
#else
|
||||||
INTN egRenderText(IN CONST CHAR16 *Text, IN OUT EG_IMAGE *CompImage,
|
INTN egRenderText(IN CONST CHAR16 *Text, IN OUT EG_IMAGE *CompImage,
|
||||||
IN INTN PosX, IN INTN PosY, IN INTN Cursor, INTN textType)
|
IN INTN PosX, IN INTN PosY, IN INTN Cursor, INTN textType)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
#if USE_XTHEME
|
||||||
|
XImage& CompImage = *CompImage_ptr;
|
||||||
|
#endif
|
||||||
EG_PIXEL *BufferPtr;
|
EG_PIXEL *BufferPtr;
|
||||||
EG_PIXEL *FontPixelData;
|
EG_PIXEL *FontPixelData;
|
||||||
EG_PIXEL *FirstPixelBuf;
|
EG_PIXEL *FirstPixelBuf;
|
||||||
@ -335,7 +339,7 @@ INTN egRenderText(IN CONST CHAR16 *Text, IN OUT EG_IMAGE *CompImage,
|
|||||||
#if USE_XTHEME
|
#if USE_XTHEME
|
||||||
INTN ScaledWidth = (INTN)(ThemeX.CharWidth * ThemeX.Scale);
|
INTN ScaledWidth = (INTN)(ThemeX.CharWidth * ThemeX.Scale);
|
||||||
if (ThemeX.TypeSVG) {
|
if (ThemeX.TypeSVG) {
|
||||||
return renderSVGtext(CompImage, PosX, PosY, textType, Text, Cursor);
|
return renderSVGtext(&CompImage, PosX, PosY, textType, Text, Cursor);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
INTN ScaledWidth = (INTN)(GlobalConfig.CharWidth * GlobalConfig.Scale);
|
INTN ScaledWidth = (INTN)(GlobalConfig.CharWidth * GlobalConfig.Scale);
|
||||||
|
@ -2323,10 +2323,9 @@ RefitMain (IN EFI_HANDLE ImageHandle,
|
|||||||
// DBG("DBG: messages\n");
|
// DBG("DBG: messages\n");
|
||||||
if (!GlobalConfig.NoEarlyProgress && !GlobalConfig.FastBoot && GlobalConfig.Timeout>0) {
|
if (!GlobalConfig.NoEarlyProgress && !GlobalConfig.FastBoot && GlobalConfig.Timeout>0) {
|
||||||
#if USE_XTHEME
|
#if USE_XTHEME
|
||||||
XStringW Message = XStringWP(" Welcome to Clover ") + gFirmwareRevision;
|
XStringW Message = SWPrintf(" Welcome to Clover %ls ", gFirmwareRevision);
|
||||||
DrawTextXY(Message, (UGAWidth >> 1), UGAHeight >> 1, X_IS_CENTER);
|
DrawTextXY(Message, (UGAWidth >> 1), UGAHeight >> 1, X_IS_CENTER);
|
||||||
Message = XStringWP("... testing hardware ...");
|
DrawTextXY(L"... testing hardware ..."_XSW, (UGAWidth >> 1), (UGAHeight >> 1) + 20, X_IS_CENTER);
|
||||||
DrawTextXY(Message, (UGAWidth >> 1), (UGAHeight >> 1) + 20, X_IS_CENTER);
|
|
||||||
#else
|
#else
|
||||||
FirstMessage = PoolPrint(L" Welcome to Clover %s ", gFirmwareRevision);
|
FirstMessage = PoolPrint(L" Welcome to Clover %s ", gFirmwareRevision);
|
||||||
DrawTextXY(FirstMessage, (UGAWidth >> 1), UGAHeight >> 1, X_IS_CENTER);
|
DrawTextXY(FirstMessage, (UGAWidth >> 1), UGAHeight >> 1, X_IS_CENTER);
|
||||||
@ -2395,7 +2394,7 @@ RefitMain (IN EFI_HANDLE ImageHandle,
|
|||||||
|
|
||||||
if (!GlobalConfig.NoEarlyProgress && !GlobalConfig.FastBoot && GlobalConfig.Timeout>0) {
|
if (!GlobalConfig.NoEarlyProgress && !GlobalConfig.FastBoot && GlobalConfig.Timeout>0) {
|
||||||
#if USE_XTHEME
|
#if USE_XTHEME
|
||||||
XStringW Message = XStringWP("... user settings ...");
|
XStringW Message = SWPrintf("... user settings ...");
|
||||||
DrawTextXY(Message, (UGAWidth >> 1), (UGAHeight >> 1) + 20, X_IS_CENTER);
|
DrawTextXY(Message, (UGAWidth >> 1), (UGAHeight >> 1) + 20, X_IS_CENTER);
|
||||||
#else
|
#else
|
||||||
FirstMessage = PoolPrint(L"... user settings ...");
|
FirstMessage = PoolPrint(L"... user settings ...");
|
||||||
@ -2472,7 +2471,7 @@ RefitMain (IN EFI_HANDLE ImageHandle,
|
|||||||
|
|
||||||
if (!GlobalConfig.NoEarlyProgress && !GlobalConfig.FastBoot && GlobalConfig.Timeout>0) {
|
if (!GlobalConfig.NoEarlyProgress && !GlobalConfig.FastBoot && GlobalConfig.Timeout>0) {
|
||||||
#if USE_XTHEME
|
#if USE_XTHEME
|
||||||
XStringW Message = XStringWP("... scan entries ...");
|
XStringW Message = SWPrintf("... scan entries ...");
|
||||||
DrawTextXY(Message, (UGAWidth >> 1), (UGAHeight >> 1) + 20, X_IS_CENTER);
|
DrawTextXY(Message, (UGAWidth >> 1), (UGAHeight >> 1) + 20, X_IS_CENTER);
|
||||||
#else
|
#else
|
||||||
FirstMessage = PoolPrint(L"... scan entries ...");
|
FirstMessage = PoolPrint(L"... scan entries ...");
|
||||||
@ -2665,7 +2664,7 @@ RefitMain (IN EFI_HANDLE ImageHandle,
|
|||||||
// font already changed and this message very quirky, clear line here
|
// font already changed and this message very quirky, clear line here
|
||||||
if (!GlobalConfig.NoEarlyProgress && !GlobalConfig.FastBoot && GlobalConfig.Timeout>0) {
|
if (!GlobalConfig.NoEarlyProgress && !GlobalConfig.FastBoot && GlobalConfig.Timeout>0) {
|
||||||
#if USE_XTHEME
|
#if USE_XTHEME
|
||||||
XStringW Message = XStringWP(" ");
|
XStringW Message = L" "_XSW;
|
||||||
DrawTextXY(Message, (UGAWidth >> 1), (UGAHeight >> 1) + 20, X_IS_CENTER);
|
DrawTextXY(Message, (UGAWidth >> 1), (UGAHeight >> 1) + 20, X_IS_CENTER);
|
||||||
#else
|
#else
|
||||||
DrawTextXY(L" ", (UGAWidth >> 1), (UGAHeight >> 1) + 20, X_IS_CENTER);
|
DrawTextXY(L" ", (UGAWidth >> 1), (UGAHeight >> 1) + 20, X_IS_CENTER);
|
||||||
|
@ -215,11 +215,11 @@ BOOLEAN mGuiReady = FALSE;
|
|||||||
|
|
||||||
|
|
||||||
//REFIT_MENU_ITEM_OPTIONS(CONST CHAR16 *Title_, UINTN Row_, CHAR16 ShortcutDigit_, CHAR16 ShortcutLetter_, ACTION AtClick_)
|
//REFIT_MENU_ITEM_OPTIONS(CONST CHAR16 *Title_, UINTN Row_, CHAR16 ShortcutDigit_, CHAR16 ShortcutLetter_, ACTION AtClick_)
|
||||||
REFIT_MENU_ITEM_OPTIONS MenuEntryOptions (XStringWP("Options"), 1, 0, 'O', ActionEnter);
|
REFIT_MENU_ITEM_OPTIONS MenuEntryOptions (L"Options"_XSW, 1, 0, 'O', ActionEnter);
|
||||||
REFIT_MENU_ITEM_ABOUT MenuEntryAbout (XStringWP("About Clover"), 1, 0, 'A', ActionEnter);
|
REFIT_MENU_ITEM_ABOUT MenuEntryAbout (L"About Clover"_XSW, 1, 0, 'A', ActionEnter);
|
||||||
REFIT_MENU_ITEM_RESET MenuEntryReset (XStringWP("Restart Computer"), 1, 0, 'R', ActionSelect);
|
REFIT_MENU_ITEM_RESET MenuEntryReset (L"Restart Computer"_XSW, 1, 0, 'R', ActionSelect);
|
||||||
REFIT_MENU_ITEM_SHUTDOWN MenuEntryShutdown(XStringWP("Exit Clover"), 1, 0, 'U', ActionSelect);
|
REFIT_MENU_ITEM_SHUTDOWN MenuEntryShutdown(L"Exit Clover"_XSW, 1, 0, 'U', ActionSelect);
|
||||||
REFIT_MENU_ITEM_RETURN MenuEntryReturn (XStringWP("Return"), 0, 0, 0, ActionEnter);
|
REFIT_MENU_ITEM_RETURN MenuEntryReturn (L"Return"_XSW, 0, 0, 0, ActionEnter);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -2611,7 +2611,7 @@ UINTN REFIT_MENU_SCREEN::RunGenericMenu(IN MENU_STYLE_FUNC StyleFunc, IN OUT INT
|
|||||||
if (HaveTimeout) {
|
if (HaveTimeout) {
|
||||||
#if USE_XTHEME
|
#if USE_XTHEME
|
||||||
//TimeoutMessage = PoolPrint(L"%s in %d seconds", TimeoutText.data(), TimeoutCountdown);
|
//TimeoutMessage = PoolPrint(L"%s in %d seconds", TimeoutText.data(), TimeoutCountdown);
|
||||||
XStringW TOMessage = TimeoutText + L" in " + WPrintf("%lld", TimeoutCountdown) + L" seconds";
|
XStringW TOMessage = SWPrintf("%ls in %lld seconds", TimeoutText.wc_str(), TimeoutCountdown);
|
||||||
((*this).*(StyleFunc))(MENU_FUNCTION_PAINT_TIMEOUT, TOMessage.data());
|
((*this).*(StyleFunc))(MENU_FUNCTION_PAINT_TIMEOUT, TOMessage.data());
|
||||||
// FreePool(TimeoutMessage);
|
// FreePool(TimeoutMessage);
|
||||||
#else
|
#else
|
||||||
@ -3131,7 +3131,7 @@ VOID REFIT_MENU_SCREEN::TextMenuStyle(IN UINTN Function, IN CONST CHAR16 *ParamT
|
|||||||
|
|
||||||
|
|
||||||
#if USE_XTHEME
|
#if USE_XTHEME
|
||||||
INTN DrawTextXY(IN XStringW& Text, IN INTN XPos, IN INTN YPos, IN UINT8 XAlign)
|
INTN DrawTextXY(IN const XStringW& Text, IN INTN XPos, IN INTN YPos, IN UINT8 XAlign)
|
||||||
{
|
{
|
||||||
INTN TextWidth = 0;
|
INTN TextWidth = 0;
|
||||||
INTN XText = 0;
|
INTN XText = 0;
|
||||||
@ -3175,7 +3175,7 @@ INTN DrawTextXY(IN XStringW& Text, IN INTN XPos, IN INTN YPos, IN UINT8 XAlign)
|
|||||||
TextBufferXY.Fill(&MenuBackgroundPixel);
|
TextBufferXY.Fill(&MenuBackgroundPixel);
|
||||||
|
|
||||||
// render the text
|
// render the text
|
||||||
TextWidth = egRenderText(Text, TextBufferXY, 0, 0, 0xFFFF, TextXYStyle);
|
TextWidth = egRenderText(Text, &TextBufferXY, 0, 0, 0xFFFF, TextXYStyle);
|
||||||
|
|
||||||
if (XAlign != X_IS_LEFT) {
|
if (XAlign != X_IS_LEFT) {
|
||||||
// shift 64 is prohibited
|
// shift 64 is prohibited
|
||||||
@ -3360,11 +3360,11 @@ VOID DrawMenuText(IN XStringW& Text, IN INTN SelectedWidth, IN INTN XPos, IN INT
|
|||||||
// render the text
|
// render the text
|
||||||
if (ThemeX.TypeSVG) {
|
if (ThemeX.TypeSVG) {
|
||||||
//clovy - text veltically centred on Height
|
//clovy - text veltically centred on Height
|
||||||
egRenderText(Text, TextBufferX, 0,
|
egRenderText(Text, &TextBufferX, 0,
|
||||||
(INTN)((TextHeight - (textFace[TextStyle].size * ThemeX.Scale)) / 2),
|
(INTN)((TextHeight - (textFace[TextStyle].size * ThemeX.Scale)) / 2),
|
||||||
Cursor, TextStyle);
|
Cursor, TextStyle);
|
||||||
} else {
|
} else {
|
||||||
egRenderText(Text, TextBufferX, TEXT_XMARGIN, TEXT_YMARGIN, Cursor, TextStyle);
|
egRenderText(Text, &TextBufferX, TEXT_XMARGIN, TEXT_YMARGIN, Cursor, TextStyle);
|
||||||
}
|
}
|
||||||
TextBufferX.Draw((INTN)XPos, (INTN)YPos);
|
TextBufferX.Draw((INTN)XPos, (INTN)YPos);
|
||||||
}
|
}
|
||||||
|
@ -10,8 +10,8 @@
|
|||||||
VOID OptionsMenu(OUT REFIT_ABSTRACT_MENU_ENTRY **ChosenEntry);
|
VOID OptionsMenu(OUT REFIT_ABSTRACT_MENU_ENTRY **ChosenEntry);
|
||||||
VOID FreeScrollBar(VOID);
|
VOID FreeScrollBar(VOID);
|
||||||
#if USE_XTHEME
|
#if USE_XTHEME
|
||||||
INTN DrawTextXY(IN XStringW& Text, IN INTN XPos, IN INTN YPos, IN UINT8 XAlign);
|
INTN DrawTextXY(IN const XStringW& Text, IN INTN XPos, IN INTN YPos, IN UINT8 XAlign);
|
||||||
VOID DrawMenuText(IN XStringW& Text, IN INTN SelectedWidth, IN INTN XPos, IN INTN YPos, IN INTN Cursor);
|
VOID DrawMenuText(IN const XStringW& Text, IN INTN SelectedWidth, IN INTN XPos, IN INTN YPos, IN INTN Cursor);
|
||||||
#else
|
#else
|
||||||
INTN DrawTextXY(IN CONST CHAR16 *Text, IN INTN XPos, IN INTN YPos, IN UINT8 XAlign);
|
INTN DrawTextXY(IN CONST CHAR16 *Text, IN INTN XPos, IN INTN YPos, IN UINT8 XAlign);
|
||||||
VOID DrawMenuText(IN CONST CHAR16 *Text, IN INTN SelectedWidth, IN INTN XPos, IN INTN YPos, IN INTN Cursor);
|
VOID DrawMenuText(IN CONST CHAR16 *Text, IN INTN SelectedWidth, IN INTN XPos, IN INTN YPos, IN INTN Cursor);
|
||||||
|
Loading…
Reference in New Issue
Block a user