diff options
author | qctecmdr <qctecmdr@localhost> | 2019-06-28 00:22:07 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2019-06-28 00:22:07 -0700 |
commit | 3d9862e335af6eb09f20cac4da7773b89ec2aed3 (patch) | |
tree | 7f01ce7fcd3081ac593a230d35254e2e92d6b75f | |
parent | 73f1219f4c9c68ded269f1622cab05c3046b8b83 (diff) | |
parent | 45882c3300df21650a5d27c22435b55e5d254562 (diff) |
Merge "QcomModulePkg: Add max row check when chosening font scale factor"
-rw-r--r-- | QcomModulePkg/Include/Library/DrawUI.h | 24 | ||||
-rw-r--r-- | QcomModulePkg/Library/BootLib/DrawUI.c | 43 |
2 files changed, 61 insertions, 6 deletions
diff --git a/QcomModulePkg/Include/Library/DrawUI.h b/QcomModulePkg/Include/Library/DrawUI.h index 770d75f2a0..72260dd086 100644 --- a/QcomModulePkg/Include/Library/DrawUI.h +++ b/QcomModulePkg/Include/Library/DrawUI.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2016, 2017, The Linux Foundation. All rights reserved. +/* Copyright (c) 2016, 2017, 2019, The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -48,10 +48,32 @@ */ #define CHAR_NUM_PERROW_HOR 80 +/* Max row for portrait orientation + * "720 (W) 1280(H)" : "sysfont2x" -- 1280/(19*2) = 33 + * "1080(W) 1920(H)" : "sysfont3x" -- 1920/(19*3) = 33 + * "1440(W) 2560(H)" : "sysfont4x" -- 2560/(19*4) = 33 + * "2160(W) 3840(H)" : "sysfont6x" -- 3840/(19*6) = 33 + */ +#define MAX_ROW_FOR_POR 33 + +/* Max row for horizontal orientation + * "480 (H) 640 (W)" : "" -- 480/(19*1) = 25 + * "720 (H) 1280(W)" : "" -- 720/(19*1) = 37 + * "1080(H) 1920(W)" : "sysfont2" -- 1080/(19*2) = 28 + * "1440(H) 2560(W)" : "sysfont3" -- 1440/(19*3) = 25 + * "2160(H) 3840(W)" : "sysfont4" -- 2160/(19*4) = 28 + */ +#define MAX_ROW_FOR_HOR 25 + #define MAX_MSG_SIZE 256 #define MAX_RSP_SIZE 64 typedef enum { + PORTRAIT_MODE = 0, + HORIZONTAL_MODE +} DISPLAY_MODE; + +typedef enum { DISPLAY_MENU_YELLOW = 0, DISPLAY_MENU_ORANGE, DISPLAY_MENU_RED, diff --git a/QcomModulePkg/Library/BootLib/DrawUI.c b/QcomModulePkg/Library/BootLib/DrawUI.c index ab594a18ec..e4be16a688 100644 --- a/QcomModulePkg/Library/BootLib/DrawUI.c +++ b/QcomModulePkg/Library/BootLib/DrawUI.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -220,6 +220,33 @@ VOID FreeBootLogoBltBuffer (VOID) } } +STATIC UINT32 GetDisplayMode (VOID) +{ + if (GetResolutionWidth () < GetResolutionHeight ()) { + return PORTRAIT_MODE; + } + + return HORIZONTAL_MODE; +} + +/* Get max row */ +STATIC UINT32 GetMaxRow (VOID) +{ + EFI_STATUS Status; + UINT32 FontBaseHeight = EFI_GLYPH_HEIGHT; + UINT32 MaxRow = 0; + EFI_IMAGE_OUTPUT *Blt = NULL; + + Status = gHiiFont->GetGlyph (gHiiFont, 'a', NULL, &Blt, NULL); + if (!EFI_ERROR (Status)) { + if (Blt) { + FontBaseHeight = Blt->Height; + } + } + MaxRow = GetResolutionHeight() / FontBaseHeight; + return MaxRow; +} + /* Get Max font count per row */ STATIC UINT32 GetMaxFontCount (VOID) { @@ -248,14 +275,20 @@ GetFontScaleFactor (UINT32 ScaleFactorType) { UINT32 NumPerRow = 0; UINT32 ScaleFactor = 0; + UINT32 ScaleFactor1 = 0; + UINT32 ScaleFactor2 = 0; + UINT32 MaxRow = 0; - if (GetResolutionWidth () < GetResolutionHeight ()) { - NumPerRow = CHAR_NUM_PERROW_POR; - } else { + NumPerRow = CHAR_NUM_PERROW_POR; + MaxRow = MAX_ROW_FOR_POR; + if (GetDisplayMode () == HORIZONTAL_MODE) { NumPerRow = CHAR_NUM_PERROW_HOR; + MaxRow = MAX_ROW_FOR_HOR; } - ScaleFactor = GetMaxFontCount () / NumPerRow; + ScaleFactor1 = GetMaxFontCount () / NumPerRow; + ScaleFactor2 = GetMaxRow () / MaxRow; + ScaleFactor = ScaleFactor1 > ScaleFactor2 ? ScaleFactor2 : ScaleFactor1; if (ScaleFactor < 2) { ScaleFactor = 1; } else if (ScaleFactor > ((ARRAY_SIZE (mFactorName) - 1) / MAX_FACTORTYPE)) { |