correct codepage for help screen

Signed-off-by: Sergey Isakov <isakov-sl@bk.ru>
This commit is contained in:
Sergey Isakov 2020-04-08 12:45:36 +03:00
parent 91ba53fd1c
commit 4be33ca401
5 changed files with 34 additions and 68 deletions

View File

@ -264,8 +264,10 @@ REFIT_CONFIG GlobalConfig = {
FALSE, // BOOLEAN Proportional;
FALSE, // BOOLEAN DarkEmbedded;
FALSE, // BOOLEAN TypeSVG;
#endif
0xC0, // INTN Codepage;
0xC0, // INTN CodepageSize; //extended latin
#if !USE_XTHEME
1.0f, // float Scale;
0.0f, // float CentreShift;
#endif
@ -3289,57 +3291,6 @@ GetEarlyUserSettings (
}
Prop = GetProperty (DictPointer, "Language");
#if USE_XTHEME
if (Prop != NULL) {
AsciiStrCpyS (gSettings.Language, 16, Prop->string);
if (AsciiStrStr (Prop->string, "en")) {
gLanguage = english;
ThemeX.Codepage = 0xC0;
ThemeX.CodepageSize = 0;
} else if (AsciiStrStr (Prop->string, "ru")) {
gLanguage = russian;
ThemeX.Codepage = 0x410;
ThemeX.CodepageSize = 0x40;
} else if (AsciiStrStr (Prop->string, "ua")) {
gLanguage = ukrainian;
ThemeX.Codepage = 0x400;
ThemeX.CodepageSize = 0x60;
} else if (AsciiStrStr (Prop->string, "fr")) {
gLanguage = french; //default is extended latin
} else if (AsciiStrStr (Prop->string, "it")) {
gLanguage = italian;
} else if (AsciiStrStr (Prop->string, "es")) {
gLanguage = spanish;
} else if (AsciiStrStr (Prop->string, "pt")) {
gLanguage = portuguese;
} else if (AsciiStrStr (Prop->string, "br")) {
gLanguage = brasil;
} else if (AsciiStrStr (Prop->string, "de")) {
gLanguage = german;
} else if (AsciiStrStr (Prop->string, "nl")) {
gLanguage = dutch;
} else if (AsciiStrStr (Prop->string, "pl")) {
gLanguage = polish;
} else if (AsciiStrStr (Prop->string, "cz")) {
gLanguage = czech;
} else if (AsciiStrStr (Prop->string, "hr")) {
gLanguage = croatian;
} else if (AsciiStrStr (Prop->string, "id")) {
gLanguage = indonesian;
} else if (AsciiStrStr (Prop->string, "zh_CN")) {
gLanguage = chinese;
ThemeX.Codepage = 0x3400;
ThemeX.CodepageSize = 0x19C0;
} else if (AsciiStrStr (Prop->string, "ro")) {
gLanguage = romanian;
} else if (AsciiStrStr (Prop->string, "ko")) {
gLanguage = korean;
ThemeX.Codepage = 0x1100;
ThemeX.CodepageSize = 0x100;
}
}
#else
if (Prop != NULL) {
AsciiStrCpyS (gSettings.Language, 16, Prop->string);
if (AsciiStrStr (Prop->string, "en")) {
@ -3389,8 +3340,6 @@ GetEarlyUserSettings (
}
}
#endif
// if (gSettings.Language != NULL) { // gSettings.Language != NULL cannot be false because gSettings.Language is dclared as CHAR8 Language[16]; Must we replace by gSettings.Language[0] != NULL
Prop = GetProperty (DictPointer, "KbdPrevLang");
if (Prop != NULL) {

View File

@ -279,8 +279,8 @@ void XTheme::Init()
// ShowOptimus = FALSE;
DarkEmbedded = FALSE; //looks like redundant, we always check Night or Daylight
TypeSVG = FALSE;
Codepage = 0xC0; //this is for PNG theme
CodepageSize = 0xC0; // INTN CodepageSize; //extended latin
// Codepage = 0xC0; //this is for PNG theme
// CodepageSize = 0xC0; // INTN CodepageSize; //extended latin
Scale = 1.0f;
CentreShift = 0.0f;
Daylight = true;

View File

@ -77,8 +77,8 @@ public:
BOOLEAN embedded;
BOOLEAN DarkEmbedded;
BOOLEAN TypeSVG;
INTN Codepage;
INTN CodepageSize;
// INTN Codepage; //no! it is global settings
// INTN CodepageSize;
float Scale;
float CentreShift;
INTN row0TileSize;
@ -133,6 +133,9 @@ public:
INTN GetEmpty(const XImage& Buffer, const EFI_GRAPHICS_OUTPUT_BLT_PIXEL& FirstPixel, INTN Start, INTN Step);
INTN RenderText(IN const XStringW& Text, OUT XImage* CompImage_ptr,
IN INTN PosX, IN INTN PosY, IN INTN Cursor, INTN textType);
//overload for UTF8 text
INTN RenderText(IN const XString& Text, OUT XImage* CompImage_ptr,
IN INTN PosX, IN INTN PosY, IN INTN Cursor, INTN textType);
// void AddIcon(Icon& NewIcon); //return EFI_STATUS?

View File

@ -33,7 +33,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
//Slice 2011 - 2016 numerous improvements
//Slice 2011 - 2016 numerous improvements, 2020 full rewritten
extern "C" {
#include <Protocol/GraphicsOutput.h>
@ -386,7 +386,6 @@ INTN XTheme::GetEmpty(const XImage& Buffer, const EFI_GRAPHICS_OUTPUT_BLT_PIXEL&
{
INTN m, i;
// INTN Shift = (Step > 0)?0:1;
// EFI_GRAPHICS_OUTPUT_BLT_PIXEL ThePixel;
m = FontWidth;
if (Step == 1) {
for (INTN j = 0; j < FontHeight; j++) {
@ -447,6 +446,13 @@ INTN GetEmpty(EG_PIXEL *Ptr, EG_PIXEL *FirstPixel, INTN MaxWidth, INTN Step, INT
#endif
#if USE_XTHEME
INTN XTheme::RenderText(IN const XString& Text, OUT XImage* CompImage_ptr,
IN INTN PosX, IN INTN PosY, IN INTN Cursor, INTN textType)
{
const XStringW& UTF16Text = XStringW().takeValueFrom(Text.c_str());
return RenderText(UTF16Text, CompImage_ptr, PosX, PosY, Cursor, textType);
}
INTN XTheme::RenderText(IN const XStringW& Text, OUT XImage* CompImage_ptr,
IN INTN PosX, IN INTN PosY, IN INTN Cursor, INTN textType)
{
@ -503,15 +509,19 @@ INTN XTheme::RenderText(IN const XStringW& Text, OUT XImage* CompImage_ptr,
Bukva.YPos = 0;
Bukva.Width = FontWidth;
Bukva.Height = FontHeight;
DBG("codepage=%llx, asciiPage=%x\n", GlobalConfig.Codepage, AsciiPageSize);
for (INTN i = 0; i < TextLength; i++) {
UINT16 c = Text.wc_str()[i];
UINT16 c1;
DBG("initial char to render 0x%x\n", c);
if (gLanguage != korean) {
c1 = (((c >= Codepage) ? (c - (Codepage - AsciiPageSize)) : c) & 0xff); //International letters
c = c1;
UINT16 c = Text[i];
DBG("initial char to render 0x%x\n", c); //good
if (gLanguage != korean) { //russian Codepage = 0x410
if (c >= 0x410 && c < 0x450) {
//we have russian raster fonts with chars at 0xC0
c -= 0x350;
} else {
INTN c2 = (c >= GlobalConfig.Codepage) ? (c - GlobalConfig.Codepage + AsciiPageSize) : c; //International letters
c = c2 & 0xFF; //this maximum raster font size
}
DBG("char to render 0x%x\n", c);
if (Proportional) {
//find spaces {---comp--__left__|__right__--char---}
if (c0 <= 0x20) { // space before or at buffer edge
@ -534,12 +544,13 @@ INTN XTheme::RenderText(IN const XStringW& Text, OUT XImage* CompImage_ptr,
LeftSpace = 2;
RightSpace = 0;
}
DBG(" RealWidth = %lld LeftSpace = %lld RightSpace = %lld\n", RealWidth, LeftSpace, RightSpace);
c0 = c; //old value
if (PosX + RealWidth > CompImage.GetWidth()) {
//no more place for character
break;
}
DBG("char to render 0x%x\n", c);
Area.XPos = PosX + 2 - LeftSpace;
Area.Width = RealWidth;
Bukva.XPos = c * FontWidth + RightSpace;
@ -560,6 +571,7 @@ INTN XTheme::RenderText(IN const XStringW& Text, OUT XImage* CompImage_ptr,
//Slice - I am not sure in any of this digits
//someone knowning korean should revise this
//
UINT16 c1 = c;
if ((c >= 0x20) && (c <= 0x7F)) {
c1 = ((c - 0x20) >> 4) * 28 + (c & 0x0F);
Cho = c1;

View File

@ -371,8 +371,10 @@ typedef struct {
BOOLEAN Proportional;
BOOLEAN DarkEmbedded;
BOOLEAN TypeSVG;
#endif
INTN Codepage;
INTN CodepageSize;
#if !USE_XTHEME
float Scale;
float CentreShift;
#endif