mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-09-21 02:51:04 +02:00
fix vector theme appearance
Signed-off-by: SergeySlice <sergey.slice@gmail.com>
This commit is contained in:
parent
a28edd4a35
commit
2a731df6e4
@ -15,7 +15,7 @@ BackgroundSharp="0x80"
|
|||||||
Badges="swap show"
|
Badges="swap show"
|
||||||
BadgeOffsetX="0x0"
|
BadgeOffsetX="0x0"
|
||||||
BadgeOffsetY="0xA"
|
BadgeOffsetY="0xA"
|
||||||
BadgeScale="0x06"
|
BadgeScale="0x08"
|
||||||
CharWidth="14"
|
CharWidth="14"
|
||||||
VerticalLayout="1"
|
VerticalLayout="1"
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 349 KiB After Width: | Height: | Size: 349 KiB |
@ -1981,7 +1981,7 @@ VOID REFIT_MENU_SCREEN::DrawMainMenuEntry(REFIT_ABSTRACT_MENU_ENTRY *Entry, BOOL
|
|||||||
}
|
}
|
||||||
INTN CompWidth = (Entry->Row == 0) ? ThemeX.row0TileSize : ThemeX.row1TileSize;
|
INTN CompWidth = (Entry->Row == 0) ? ThemeX.row0TileSize : ThemeX.row1TileSize;
|
||||||
INTN CompHeight = CompWidth;
|
INTN CompHeight = CompWidth;
|
||||||
// DBG("Entry title=%ls; Width=%d\n", Entry->Title, MainImage->Width);
|
DBG("Entry title=%ls; MainWidth=%lld\n", Entry->Title.wc_str(), MainImage.GetWidth());
|
||||||
float fScale;
|
float fScale;
|
||||||
if (ThemeX.TypeSVG) {
|
if (ThemeX.TypeSVG) {
|
||||||
fScale = (selected ? 1.f : -1.f);
|
fScale = (selected ? 1.f : -1.f);
|
||||||
@ -1991,9 +1991,15 @@ VOID REFIT_MENU_SCREEN::DrawMainMenuEntry(REFIT_ABSTRACT_MENU_ENTRY *Entry, BOOL
|
|||||||
|
|
||||||
if (Entry->Row == 0) {
|
if (Entry->Row == 0) {
|
||||||
BadgeImage = Entry->getBadgeImage();
|
BadgeImage = Entry->getBadgeImage();
|
||||||
|
DBG(" BadgeWidth=%lld\n", BadgeImage->GetWidth());
|
||||||
} //else null
|
} //else null
|
||||||
|
|
||||||
XImage TopImage = ThemeX.SelectionImages[((Entry->Row == 0) ? 0 : 2) + (selected ? 0 : 1)];
|
XImage TopImage = ThemeX.SelectionImages[((Entry->Row == 0) ? 0 : 2) + (selected ? 0 : 1)];
|
||||||
|
DBG(" SelectionWidth=%lld\n", TopImage.GetWidth());
|
||||||
|
if (TopImage.GetWidth() > CompWidth) {
|
||||||
|
CompWidth = TopImage.GetWidth();
|
||||||
|
CompHeight = CompWidth;
|
||||||
|
}
|
||||||
XImage Back(CompWidth, CompHeight);
|
XImage Back(CompWidth, CompHeight);
|
||||||
// Back.GetArea(XPos, YPos, 0, 0); // this is background at this place
|
// Back.GetArea(XPos, YPos, 0, 0); // this is background at this place
|
||||||
Back.CopyRect(ThemeX.Background, XPos, YPos);
|
Back.CopyRect(ThemeX.Background, XPos, YPos);
|
||||||
@ -2003,52 +2009,64 @@ VOID REFIT_MENU_SCREEN::DrawMainMenuEntry(REFIT_ABSTRACT_MENU_ENTRY *Entry, BOOL
|
|||||||
INTN OffsetY = (CompHeight - MainImage.GetHeight()) / 2;
|
INTN OffsetY = (CompHeight - MainImage.GetHeight()) / 2;
|
||||||
OffsetY = (OffsetY > 0) ? OffsetY: 0;
|
OffsetY = (OffsetY > 0) ? OffsetY: 0;
|
||||||
|
|
||||||
|
INTN OffsetTX = (CompWidth - TopImage.GetWidth()) / 2;
|
||||||
|
OffsetTX = (OffsetTX > 0) ? OffsetTX: 0;
|
||||||
|
INTN OffsetTY = (CompHeight - TopImage.GetHeight()) / 2;
|
||||||
|
OffsetTY = (OffsetTY > 0) ? OffsetTY: 0;
|
||||||
|
|
||||||
|
DBG(" Comp=[%lld,%lld], offset=[%lld,%lld]\n", CompWidth, CompHeight, OffsetX, OffsetY);
|
||||||
|
|
||||||
if(ThemeX.SelectionOnTop) {
|
if(ThemeX.SelectionOnTop) {
|
||||||
//place main image in centre. It may be OS or Drive
|
//place main image in centre. It may be OS or Drive
|
||||||
Back.Compose(OffsetX, OffsetY, MainImage, false);
|
Back.Compose(OffsetX, OffsetY, MainImage, false);
|
||||||
} else {
|
} else {
|
||||||
Back.Compose(0, 0, TopImage, false); //selection first
|
Back.Compose(OffsetTX, OffsetTY, TopImage, false); //selection first
|
||||||
Back.Compose(OffsetX, OffsetY, MainImage, false);
|
Back.Compose(OffsetX, OffsetY, MainImage, false);
|
||||||
}
|
}
|
||||||
// DBG("compose size=%lld\n", CompWidth);
|
// DBG("compose size=%lld\n", CompWidth);
|
||||||
//the badge is already scaled?
|
//the badge is already scaled?
|
||||||
// DBG("check Badge size=%lld offset=%lld\n", BadgeImage->GetWidth(), ThemeX.BadgeOffsetX);
|
// DBG("check Badge size=%lld offset=%lld\n", BadgeImage->GetWidth(), ThemeX.BadgeOffsetX);
|
||||||
// place the badge image
|
// place the badge image
|
||||||
if (BadgeImage &&
|
float fBadgeScale = ThemeX.BadgeScale/16.f;
|
||||||
((INTN)BadgeImage->GetWidth() + 8) < CompWidth &&
|
if (BadgeImage && !BadgeImage->isEmpty()) {
|
||||||
((INTN)BadgeImage->GetHeight() + 8) < CompHeight) {
|
INTN BadgeWidth = (INTN)(BadgeImage->GetWidth() * fBadgeScale);
|
||||||
|
INTN BadgeHeight = (INTN)(BadgeImage->GetHeight() * fBadgeScale);
|
||||||
// Check for user badge x offset from theme.plist
|
|
||||||
if (ThemeX.BadgeOffsetX != 0xFFFF) {
|
if ((BadgeWidth + 8) < CompWidth && (BadgeHeight + 8) < CompHeight) {
|
||||||
// Check if value is between 0 and ( width of the main icon - width of badge )
|
|
||||||
if (ThemeX.BadgeOffsetX < 0 || ThemeX.BadgeOffsetX > (CompWidth - (INTN)BadgeImage->GetWidth())) {
|
// Check for user badge x offset from theme.plist
|
||||||
DBG("User offset X %lld is out of range\n", ThemeX.BadgeOffsetX);
|
if (ThemeX.BadgeOffsetX != 0xFFFF) {
|
||||||
ThemeX.BadgeOffsetX = CompWidth - 8 - BadgeImage->GetWidth();
|
// Check if value is between 0 and ( width of the main icon - width of badge )
|
||||||
DBG(" corrected to default %lld\n", ThemeX.BadgeOffsetX);
|
// if (ThemeX.BadgeOffsetX < 0 || ThemeX.BadgeOffsetX > (CompWidth - BadgeWidth)) {
|
||||||
|
// DBG("User offset X %lld is out of range\n", ThemeX.BadgeOffsetX);
|
||||||
|
// ThemeX.BadgeOffsetX = CompWidth - 8 - BadgeWidth;
|
||||||
|
// DBG(" corrected to default %lld\n", ThemeX.BadgeOffsetX);
|
||||||
|
// }
|
||||||
|
OffsetX += ThemeX.BadgeOffsetX;
|
||||||
|
} else {
|
||||||
|
// Set default position
|
||||||
|
OffsetX += CompWidth - 8 - BadgeWidth;
|
||||||
}
|
}
|
||||||
OffsetX += ThemeX.BadgeOffsetX;
|
// Check for user badge y offset from theme.plist
|
||||||
} else {
|
if (ThemeX.BadgeOffsetY != 0xFFFF) {
|
||||||
// Set default position
|
// Check if value is between 0 and ( height of the main icon - height of badge )
|
||||||
OffsetX += CompWidth - 8 - BadgeImage->GetWidth();
|
if (ThemeX.BadgeOffsetY < 0 || ThemeX.BadgeOffsetY > (CompHeight - BadgeHeight)) {
|
||||||
}
|
DBG("User offset Y %lld is out of range\n",ThemeX.BadgeOffsetY);
|
||||||
// Check for user badge y offset from theme.plist
|
// ThemeX.BadgeOffsetY = CompHeight - 8 - BadgeHeight;
|
||||||
if (ThemeX.BadgeOffsetY != 0xFFFF) {
|
DBG(" corrected to default %lld\n", ThemeX.BadgeOffsetY);
|
||||||
// Check if value is between 0 and ( height of the main icon - height of badge )
|
}
|
||||||
if (ThemeX.BadgeOffsetY < 0 || ThemeX.BadgeOffsetY > (CompHeight - (INTN)BadgeImage->GetHeight())) {
|
OffsetY += ThemeX.BadgeOffsetY;
|
||||||
DBG("User offset Y %lld is out of range\n",ThemeX.BadgeOffsetY);
|
} else {
|
||||||
ThemeX.BadgeOffsetY = CompHeight - 8 - BadgeImage->GetHeight();
|
// Set default position
|
||||||
DBG(" corrected to default %lld\n", ThemeX.BadgeOffsetY);
|
OffsetY += CompHeight - 8 - BadgeHeight;
|
||||||
}
|
}
|
||||||
OffsetY += ThemeX.BadgeOffsetY;
|
DBG(" badge offset=[%lld,%lld]\n", OffsetX, OffsetY);
|
||||||
} else {
|
Back.Compose(OffsetX, OffsetY, *BadgeImage, false, fBadgeScale);
|
||||||
// Set default position
|
|
||||||
OffsetY += CompHeight - 8 - BadgeImage->GetHeight();
|
|
||||||
}
|
}
|
||||||
Back.Compose(OffsetX, OffsetY, *BadgeImage, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ThemeX.SelectionOnTop) {
|
if(ThemeX.SelectionOnTop) {
|
||||||
Back.Compose(0, 0, TopImage, false); //selection at the top
|
Back.Compose(OffsetTX, OffsetTY, TopImage, false); //selection at the top
|
||||||
}
|
}
|
||||||
Back.DrawWithoutCompose(XPos, YPos);
|
Back.DrawWithoutCompose(XPos, YPos);
|
||||||
|
|
||||||
|
@ -209,10 +209,11 @@ EFI_STATUS XTheme::ParseSVGXIcon(INTN Id, const XString& IconNameX, XImage* Imag
|
|||||||
// DBG("begin rasterize %s\n", IconNameX.c_str());
|
// DBG("begin rasterize %s\n", IconNameX.c_str());
|
||||||
float tx = 0.f, ty = 0.f;
|
float tx = 0.f, ty = 0.f;
|
||||||
if ((Id != BUILTIN_ICON_BACKGROUND) &&
|
if ((Id != BUILTIN_ICON_BACKGROUND) &&
|
||||||
(Id != BUILTIN_ICON_ANIME) &&
|
(Id != BUILTIN_ICON_ANIME) /*&&
|
||||||
IconNameX.ExistIn("Banner")) {
|
IconNameX.ExistIn("Banner")*/) {
|
||||||
float realWidth = (bounds[2] - bounds[0]) * Scale;
|
float realWidth = (bounds[2] - bounds[0]) * Scale;
|
||||||
float realHeight = (bounds[3] - bounds[1]) * Scale;
|
float realHeight = (bounds[3] - bounds[1]) * Scale;
|
||||||
|
DBG("icon=%s width=%f realwidth=%f\n", IconNameX.c_str(), Width, realWidth);
|
||||||
tx = (Width - realWidth) * 0.5f;
|
tx = (Width - realWidth) * 0.5f;
|
||||||
ty = (Height - realHeight) * 0.5f;
|
ty = (Height - realHeight) * 0.5f;
|
||||||
}
|
}
|
||||||
@ -619,7 +620,7 @@ VOID testSVG()
|
|||||||
Scale = (ScaleX > ScaleY)?ScaleY:ScaleX;
|
Scale = (ScaleX > ScaleY)?ScaleY:ScaleX;
|
||||||
float tx = 0; //-SVGimage->realBounds[0] * Scale;
|
float tx = 0; //-SVGimage->realBounds[0] * Scale;
|
||||||
float ty = 0; //-SVGimage->realBounds[1] * Scale;
|
float ty = 0; //-SVGimage->realBounds[1] * Scale;
|
||||||
DBG("timing rasterize start tx=%f ty=%f\n", tx, ty);
|
DBG("timing rasterize start tx=%f ty=%f\n", tx, ty); //the aim is measure duration
|
||||||
nsvgRasterize(rast, SVGimage, tx,ty,Scale,Scale, (UINT8*)NewImage.GetPixelPtr(0,0), (int)Width, (int)Height, (int)Width*4);
|
nsvgRasterize(rast, SVGimage, tx,ty,Scale,Scale, (UINT8*)NewImage.GetPixelPtr(0,0), (int)Width, (int)Height, (int)Width*4);
|
||||||
DBG("timing rasterize end\n");
|
DBG("timing rasterize end\n");
|
||||||
NewImage.Draw((UGAWidth - Width) / 2,
|
NewImage.Draw((UGAWidth - Width) / 2,
|
||||||
|
@ -238,7 +238,7 @@ void XImage::CopyScaled(const XImage& Image, float scale)
|
|||||||
* Lowest means final image is opaque
|
* Lowest means final image is opaque
|
||||||
* else transparency will be multiplied
|
* else transparency will be multiplied
|
||||||
*/
|
*/
|
||||||
void XImage::Compose(INTN PosX, INTN PosY, const XImage& TopImage, bool Lowest)
|
void XImage::Compose(INTN PosX, INTN PosY, const XImage& TopImage, bool Lowest, float topScale)
|
||||||
{
|
{
|
||||||
EG_RECT OutPlace;
|
EG_RECT OutPlace;
|
||||||
OutPlace.XPos = PosX;
|
OutPlace.XPos = PosX;
|
||||||
@ -251,7 +251,7 @@ void XImage::Compose(INTN PosX, INTN PosY, const XImage& TopImage, bool Lowest)
|
|||||||
Area.YPos = 0;
|
Area.YPos = 0;
|
||||||
Area.Width = TopImage.GetWidth();
|
Area.Width = TopImage.GetWidth();
|
||||||
Area.Height = TopImage.GetHeight();
|
Area.Height = TopImage.GetHeight();
|
||||||
Compose(OutPlace, Area, TopImage, Lowest, 0.f);
|
Compose(OutPlace, Area, TopImage, Lowest, topScale);
|
||||||
}
|
}
|
||||||
// TopScale is for scaling TopImage. = 0.f means no scale or = 1.f
|
// TopScale is for scaling TopImage. = 0.f means no scale or = 1.f
|
||||||
// InPlace is a place in TopImage before scaling
|
// InPlace is a place in TopImage before scaling
|
||||||
|
@ -84,11 +84,11 @@ public:
|
|||||||
void FillArea(const EG_PIXEL* Color, EG_RECT& Rect);
|
void FillArea(const EG_PIXEL* Color, EG_RECT& Rect);
|
||||||
void FillArea(const EFI_GRAPHICS_OUTPUT_BLT_PIXEL& Color, EG_RECT& Rect);
|
void FillArea(const EFI_GRAPHICS_OUTPUT_BLT_PIXEL& Color, EG_RECT& Rect);
|
||||||
void Copy(XImage* Image);
|
void Copy(XImage* Image);
|
||||||
void CopyScaled(const XImage& Image, float scale);
|
void CopyScaled(const XImage& Image, float scale = 0.f);
|
||||||
void CopyRect(const XImage& Image, INTN X, INTN Y);
|
void CopyRect(const XImage& Image, INTN X, INTN Y);
|
||||||
void CopyRect(const XImage& Image, const EG_RECT& OwnPlace, const EG_RECT& InputRect);
|
void CopyRect(const XImage& Image, const EG_RECT& OwnPlace, const EG_RECT& InputRect);
|
||||||
void Compose(const EG_RECT& OwnPlace, const EG_RECT& InputRect, const XImage& TopImage, bool Lowest, float TopScale = 0.f);
|
void Compose(const EG_RECT& OwnPlace, const EG_RECT& InputRect, const XImage& TopImage, bool Lowest, float TopScale = 0.f);
|
||||||
void Compose(INTN PosX, INTN PosY, const XImage& TopImage, bool Lowest); //instead of compose we often can Back.Draw(...) + Top.Draw(...)
|
void Compose(INTN PosX, INTN PosY, const XImage& TopImage, bool Lowest, float topScale = 0); //instead of compose we often can Back.Draw(...) + Top.Draw(...)
|
||||||
void FlipRB();
|
void FlipRB();
|
||||||
EFI_STATUS FromPNG(const UINT8 * Data, UINTN Lenght);
|
EFI_STATUS FromPNG(const UINT8 * Data, UINTN Lenght);
|
||||||
EFI_STATUS ToPNG(UINT8** Data, UINTN& OutSize);
|
EFI_STATUS ToPNG(UINT8** Data, UINTN& OutSize);
|
||||||
|
Loading…
Reference in New Issue
Block a user