Add PR_RTL_XFLIP print flag

This lets you mirror the X axis specifically in RTL languages, so the
left border is 320 and the right border is 0, and invert the meaning of
PR_LEFT (0) and PR_RIGHT. Most of the time this is not necessary,
it's just for stuff where a label is followed by a different print,
like "Font: " followed by the font name, time trial time displays, etc
This commit is contained in:
Dav999 2024-01-03 22:21:37 +01:00 committed by Misa Elizabeth Kai
parent 3588168c4d
commit eac612c309
3 changed files with 14 additions and 2 deletions

View File

@ -103,6 +103,9 @@ A not-technically-exhaustive list of all flags (which are defined in Font.h):
- PR_CJK_LOW Larger fonts should stick out fully on the bottom
(draw at Y)
- PR_CJK_HIGH Larger fonts should stick out fully on the top
- PR_RTL_XFLIP In RTL languages, mirror the X axis, so left is 320
and right is 0, and invert the meaning of PR_LEFT and
PR_RIGHT

View File

@ -86,6 +86,7 @@ struct PrintFlags
bool cjk_low;
bool cjk_high;
bool rtl;
bool rtl_xflip;
};
static FontContainer fonts_main = {};
@ -830,6 +831,7 @@ static PrintFlags decode_print_flags(uint32_t flags)
pf.align_right = flags & PR_RIGHT;
pf.cjk_low = flags & PR_CJK_LOW;
pf.cjk_high = flags & PR_CJK_HIGH;
pf.rtl_xflip = flags & PR_RTL_XFLIP;
if (pf.full_border)
{
@ -1269,6 +1271,12 @@ void print(
return;
}
if (pf.rtl && pf.rtl_xflip && (!pf.align_cen || x != -1))
{
x = SCREEN_WIDTH_PIXELS - x;
pf.align_right = !pf.align_right;
}
if (pf.align_cen || pf.align_right)
{
const int textlen = len(flags, text);
@ -1294,7 +1302,7 @@ void print(
for (int offset = 0; offset < 4; offset++)
{
print(
flags & ~PR_BOR & ~PR_CEN & ~PR_RIGHT,
flags & ~PR_BOR & ~PR_CEN & ~PR_RIGHT & ~PR_RTL_XFLIP,
x + offsets[offset][0]*pf.scale,
y + offsets[offset][1]*pf.scale,
text,
@ -1310,7 +1318,7 @@ void print(
for (int offset = 0; offset < 8; offset++)
{
print(
flags & ~PR_FULLBOR & ~PR_CEN & ~PR_RIGHT,
flags & ~PR_FULLBOR & ~PR_CEN & ~PR_RIGHT & ~PR_RTL_XFLIP,
x + offsets[offset][0] * pf.scale,
y + offsets[offset][1] * pf.scale,
text,

View File

@ -55,6 +55,7 @@
#define PR_CJK_LOW (1 << 20) /* larger fonts should stick out fully on the bottom (draw at Y) */
#define PR_CJK_HIGH (2 << 20) /* larger fonts should stick out fully on the top */
#define PR_RTL_FORCE (1 << 22) /* force the RTL flag, not needed if the font is set to INTERFACE or LEVEL */
#define PR_RTL_XFLIP (1 << 23) /* in RTL languages, mirror the X axis, so left is 320 and right is 0, and invert the meaning of PR_LEFT and PR_RIGHT */
namespace font