Skip to content

Commit b30f74e

Browse files
ShowFonts: add small TTF
1 parent e263af6 commit b30f74e

4 files changed

Lines changed: 111 additions & 30 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ Frameworks:
1616
- SharedPreferences: avoid writing default-only configs at boot and prune empty config dirs/files
1717

1818
OS:
19+
- Add path library
1920
- c_mpos/quirc: fix compilation warnings
2021
- Simplify focusgroup handling
2122
- Disable unused OS facilities (FreeRTOS internals, tracing, INFO logging, broken GIF, Pinyin IME, LVGL window, BMP) to reduce build size by 109KiB
Binary file not shown.

internal_filesystem/apps/com.micropythonos.showfonts/assets/showfonts.py

Lines changed: 27 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,21 @@ def onCreate(self):
99
screen = lv.obj()
1010
screen.set_flex_flow(lv.FLEX_FLOW.COLUMN)
1111

12-
self._emoji_font_small = FontManager.getFont(size=18)
13-
self._emoji_font = FontManager.getFont(size=36)
14-
self._emoji_font_big = FontManager.getFont(size=72)
15-
self._ttf_font = FontManager.getFont(size=24, ttf="M:PrincessSofia-Regular.ttf")
12+
import path
13+
print(f"{__file__}") # apps/com.micropythonos.showfonts/assets/showfonts.py
14+
print(f"{path.abspath(__file__)}")
15+
print(f"{path.dirname(path.abspath(__file__))}")
16+
d = path.dirname(path.abspath(__file__))
17+
self._ttf_font = FontManager.getFont(size=42, ttf=f"M:{d}/Rancourt-SmallCaps.ttf")
1618

17-
self.addImageFontDemo(screen)
1819
self.addAllFontsTitles(screen)
1920
self.addAllGlyphs(screen)
2021

2122
self.setContentView(screen)
2223

2324
def addAllFontsTitles(self, screen):
2425
fonts = FontManager.listFonts()
25-
fonts.append((self._ttf_font, "TTF PrincessSofia 24"))
26+
fonts.append((self._ttf_font, "TTF Rancourt 42"))
2627

2728
for font_info in fonts:
2829
if isinstance(font_info, tuple):
@@ -32,7 +33,7 @@ def addAllFontsTitles(self, screen):
3233
font = font_info["font"]
3334
name = font_info["name"]
3435
title = lv.label(screen)
35-
lv.group_get_default().add_obj(title)
36+
self.labelSelectable(title)
3637
title.set_width(lv.pct(99))
3738
title.set_style_text_font(font, lv.PART.MAIN)
3839
bitcoin_symbol = "\uf15a"
@@ -41,7 +42,7 @@ def addAllFontsTitles(self, screen):
4142
diacritics = "æ ø å Æ Ø Å"
4243
supported_latin = "Æ æ Ð ð ß Þ þ 7"
4344
title.set_text(
44-
"{}: 2 pgj ❤️ !@#$%^&*( {} {} ₿ {} {} {} 丯 丰 {} {}".format(
45+
"{}: ABC 123 xyz ❤️ ☺️ !@#$%^&*( {} {} ₿ {} {} {} 丯 丰 {} {}".format(
4546
name,
4647
lv.SYMBOL.OK,
4748
lv.SYMBOL.BACKSPACE,
@@ -53,26 +54,6 @@ def addAllFontsTitles(self, screen):
5354
)
5455
)
5556

56-
def addImageFontDemo(self, screen):
57-
58-
title = lv.label(screen)
59-
title_font = FontManager.getFont(size=14)
60-
title.set_style_text_font(title_font, lv.PART.MAIN)
61-
title.set_text("Imagefont demo")
62-
63-
demo_small = lv.label(screen)
64-
demo_small.set_style_text_font(self._emoji_font_small, lv.PART.MAIN)
65-
demo_small.set_text(FontManager.normalizeEmojiText("18px: A \u2639 \u263A == \U0001F642/\U0001F600 A"))
66-
67-
demo = lv.label(screen)
68-
demo.set_style_text_font(self._emoji_font, lv.PART.MAIN)
69-
demo.set_text(FontManager.normalizeEmojiText("36px: ❤️ \U0001F929 \u2639/\u263A == \U0001F642/\U0001F600 A"))
70-
71-
demo_big = lv.label(screen)
72-
demo_big.set_style_text_font(self._emoji_font_big, lv.PART.MAIN)
73-
demo_big.set_text(FontManager.normalizeEmojiText("72px: A \u2639/\u263A == \U0001F642/\U0001F600 A"))
74-
75-
7657
def addAllGlyphs(self, screen):
7758
dsc = lv.font_glyph_dsc_t()
7859

@@ -99,5 +80,21 @@ def addAllGlyphs(self, screen):
9980
x = 4
10081

10182
lbl.set_text(alltext)
102-
lv.group_get_default().add_obj(lbl)
103-
83+
self.labelSelectable(lbl)
84+
85+
def labelSelectable(self, label):
86+
label.add_event_cb(self._focus_obj, lv.EVENT.FOCUSED, None)
87+
label.add_event_cb(self._defocus_obj, lv.EVENT.DEFOCUSED, None)
88+
lv.group_get_default().add_obj(label)
89+
90+
@staticmethod
91+
def _focus_obj(event):
92+
target = event.get_target_obj()
93+
target.set_style_border_color(lv.theme_get_color_primary(None),lv.PART.MAIN)
94+
target.set_style_border_width(1, lv.PART.MAIN)
95+
target.scroll_to_view(True)
96+
97+
@staticmethod
98+
def _defocus_obj(event):
99+
target = event.get_target_obj()
100+
target.set_style_border_width(0, lv.PART.MAIN)

internal_filesystem/lib/path.py

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import os
2+
3+
4+
sep = "/"
5+
6+
7+
def normcase(s):
8+
return s
9+
10+
11+
def normpath(s):
12+
return s
13+
14+
15+
def abspath(s):
16+
if s[0] != "/":
17+
return os.getcwd() + "/" + s
18+
return s
19+
20+
21+
def join(*args):
22+
# TODO: this is non-compliant
23+
if type(args[0]) is bytes:
24+
return b"/".join(args)
25+
else:
26+
return "/".join(args)
27+
28+
29+
def split(path):
30+
if path == "":
31+
return ("", "")
32+
r = path.rsplit("/", 1)
33+
if len(r) == 1:
34+
return ("", path)
35+
head = r[0] # .rstrip("/")
36+
if not head:
37+
head = "/"
38+
return (head, r[1])
39+
40+
41+
def dirname(path):
42+
return split(path)[0]
43+
44+
45+
def basename(path):
46+
return split(path)[1]
47+
48+
49+
def exists(path):
50+
try:
51+
os.stat(path)
52+
return True
53+
except OSError:
54+
return False
55+
56+
57+
# TODO
58+
lexists = exists
59+
60+
61+
def isdir(path):
62+
try:
63+
mode = os.stat(path)[0]
64+
return mode & 0o040000
65+
except OSError:
66+
return False
67+
68+
69+
def isfile(path):
70+
try:
71+
return bool(os.stat(path)[0] & 0x8000)
72+
except OSError:
73+
return False
74+
75+
76+
def expanduser(s):
77+
if s == "~" or s.startswith("~/"):
78+
h = os.getenv("HOME")
79+
return h + s[1:]
80+
if s[0] == "~":
81+
# Sorry folks, follow conventions
82+
return "/home/" + s[1:]
83+
return s

0 commit comments

Comments
 (0)