Various improvements (#673)
Graphics & rendering - Implement `binfont-module` to generate bitmap fonts on the device itself - Remove lodepng support from LVGL library and create `Modules/lodepng-module` to make the feature re-usable in non-LVGL apps too. Add binding functions for LVGL support. - Implement large icons for boot screen (Tactility and USB logos) - Remove unused asset files in `Data/` Boot - Split up `Tactility.cpp` and its `run()` function into various `Init*.cpp` files. - Re-implement `Boot.cpp` app as non-LVGL app - Boot app now has a `BootSequence.cpp` for the init code. - LVGL is now started when the Boot app finishes - Move more init logic into Boot app BLE - Don't allocate scan result buffers unless BLE is on - Allocate scan results in external memory if possible UX & UI - USB Settings app: remove border from the button container
@ -36,7 +36,7 @@ CONFIG_LV_USE_FS_STDIO=y
|
||||
CONFIG_LV_FS_STDIO_LETTER=65
|
||||
CONFIG_LV_FS_STDIO_PATH=""
|
||||
CONFIG_LV_FS_STDIO_CACHE_SIZE=4096
|
||||
CONFIG_LV_USE_LODEPNG=y
|
||||
CONFIG_LV_USE_LODEPNG=n
|
||||
CONFIG_LV_USE_BUILTIN_MALLOC=n
|
||||
# Routes lv_malloc/realloc/free through Modules/lvgl-module/source/lv_mem_custom.c, which prefers
|
||||
# PSRAM (falls back to internal RAM automatically) instead of a fixed-size pool or plain malloc.
|
||||
@ -170,6 +170,8 @@ if (NOT DEFINED ENV{ESP_IDF_VERSION})
|
||||
add_subdirectory(Libraries/minmea)
|
||||
add_subdirectory(Modules/lvgl-module)
|
||||
add_subdirectory(Modules/audio-decoder-module)
|
||||
add_subdirectory(Modules/binfont-module)
|
||||
add_subdirectory(Modules/lodepng-module)
|
||||
add_subdirectory(Modules/c-symbols-module)
|
||||
add_subdirectory(Modules/cjson-module)
|
||||
add_subdirectory(Modules/cpp-symbols-module)
|
||||
|
||||
BIN
Data/system/app/Boot/assets/logo_large.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
Data/system/app/Boot/assets/logo_usb_large.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
Data/system/app/Boot/assets/logo_usb_small.png
Normal file
|
After Width: | Height: | Size: 685 B |
69
Data/system/fonts/MaterialSymbolsRounded.codepoints
Normal file
@ -0,0 +1,69 @@
|
||||
add e145
|
||||
app_registration ef40
|
||||
apps e5c3
|
||||
area_chart e770
|
||||
battery_android_frame_1 f257
|
||||
battery_android_frame_2 f256
|
||||
battery_android_frame_3 f255
|
||||
battery_android_frame_4 f254
|
||||
battery_android_frame_5 f253
|
||||
battery_android_frame_6 f252
|
||||
battery_android_frame_bolt f250
|
||||
battery_android_frame_full f24f
|
||||
bluetooth e1a7
|
||||
bluetooth_connected e1a8
|
||||
bluetooth_disabled e1a9
|
||||
bluetooth_searching e60f
|
||||
cable efe6
|
||||
calendar_month ebcc
|
||||
camera e3af
|
||||
check e668
|
||||
circle ef4a
|
||||
close e5cd
|
||||
cloud f15c
|
||||
delete e92e
|
||||
deployed_code f720
|
||||
devices e326
|
||||
display_settings eb97
|
||||
download f090
|
||||
edit_note e745
|
||||
electric_bolt ec1c
|
||||
folder e2c7
|
||||
forum e8af
|
||||
gamepad e30f
|
||||
help e8fd
|
||||
hub e9f4
|
||||
image e3f4
|
||||
keyboard_alt f028
|
||||
keyboard_arrow_up e316
|
||||
language ea07
|
||||
lightbulb e90f
|
||||
lightstrip fff75
|
||||
lists e9b9
|
||||
location_on f1db
|
||||
logo_dev ead6
|
||||
mail e159
|
||||
memory e322
|
||||
menu e5d2
|
||||
mop e28d
|
||||
more_vert e5d4
|
||||
music_note e405
|
||||
navigation e55d
|
||||
network_wifi_1_bar ebe4
|
||||
network_wifi_2_bar ebd6
|
||||
network_wifi_3_bar ebe1
|
||||
note_add e89c
|
||||
power_settings_new f8c7
|
||||
refresh e5d5
|
||||
sd_card e623
|
||||
sd_card_alert f057
|
||||
search ef7a
|
||||
settings e8b8
|
||||
signal_wifi_0_bar f0b0
|
||||
signal_wifi_4_bar f065
|
||||
signal_wifi_bad f064
|
||||
signal_wifi_off e1da
|
||||
terminal eb8e
|
||||
toolbar e9f7
|
||||
usb e1e0
|
||||
wifi e63e
|
||||
BIN
Data/system/fonts/MaterialSymbolsRounded.ttf
Normal file
@ -1,306 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="512"
|
||||
height="512"
|
||||
viewBox="0 0 512 512"
|
||||
version="1.1"
|
||||
id="svg11"
|
||||
sodipodi:docname="Desktop Icons.svg"
|
||||
xml:space="preserve"
|
||||
inkscape:export-filename="../assets/app_icon_i2c.png"
|
||||
inkscape:export-xdpi="3"
|
||||
inkscape:export-ydpi="3"
|
||||
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><style
|
||||
id="style1"><![CDATA[
|
||||
#keylines circle, #keylines rect {
|
||||
vector-effect: non-scaling-stroke;
|
||||
fill: none;
|
||||
stroke: #0000FF;
|
||||
}
|
||||
#mask path, #mask rect, #mask circle, #hatching path {
|
||||
vector-effect: non-scaling-stroke;
|
||||
fill: none;
|
||||
stroke: #FF0000;
|
||||
}
|
||||
#keylines, #mask {
|
||||
opacity: 0.5;
|
||||
}
|
||||
]]></style><inkscape:_templateinfo><inkscape:_name>Android O icon template</inkscape:_name><inkscape:author>Venceslas DUET</inkscape:author><inkscape:_shortdesc>A collection of keylines and guides used to make adaptive icons for android O</inkscape:_shortdesc><inkscape:date>2021-02-14</inkscape:date><inkscape:_keywords>Android Icon Adaptive Keylines</inkscape:_keywords></inkscape:_templateinfo><defs
|
||||
id="defs1"><inkscape:path-effect
|
||||
effect="bspline"
|
||||
id="path-effect3"
|
||||
is_visible="true"
|
||||
lpeversion="1.3"
|
||||
weight="33.333333"
|
||||
steps="2"
|
||||
helper_size="0"
|
||||
apply_no_weight="true"
|
||||
apply_with_weight="true"
|
||||
only_selected="false"
|
||||
uniform="false" /><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipHatching"><rect
|
||||
width="8"
|
||||
height="8"
|
||||
x="0"
|
||||
y="0"
|
||||
id="rect1" /></clipPath><pattern
|
||||
patternUnits="userSpaceOnUse"
|
||||
width="8"
|
||||
height="8"
|
||||
id="hatching"><path
|
||||
d="M 1,-1 -1,1 M 9,7 7,9 M 9,-1 -1,9"
|
||||
clip-path="url(#clipHatching)"
|
||||
id="path1" /></pattern><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipHatching-2"><rect
|
||||
width="8"
|
||||
height="8"
|
||||
x="0"
|
||||
y="0"
|
||||
id="rect1-7" /></clipPath><pattern
|
||||
patternUnits="userSpaceOnUse"
|
||||
width="8"
|
||||
height="8"
|
||||
id="hatching-0"><path
|
||||
d="M 1,-1 -1,1 M 9,7 7,9 M 9,-1 -1,9"
|
||||
clip-path="url(#clipHatching-2)"
|
||||
id="path1-9" /></pattern><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath17"><rect
|
||||
width="512"
|
||||
height="512"
|
||||
x="0.0081919599"
|
||||
y="0.01246433"
|
||||
ry="128"
|
||||
id="rect17"
|
||||
style="display:inline" /></clipPath><filter
|
||||
style="color-interpolation-filters:sRGB;"
|
||||
inkscape:label="Drop Shadow"
|
||||
id="filter41"
|
||||
x="-0.04317569"
|
||||
y="-0.040927102"
|
||||
width="1.1013429"
|
||||
height="1.096065"><feFlood
|
||||
result="flood"
|
||||
in="SourceGraphic"
|
||||
flood-opacity="0.29915108267716534"
|
||||
flood-color="rgb(0,0,0)"
|
||||
id="feFlood40" /><feGaussianBlur
|
||||
result="blur"
|
||||
in="SourceGraphic"
|
||||
stdDeviation="6"
|
||||
id="feGaussianBlur40" /><feOffset
|
||||
result="offset"
|
||||
in="blur"
|
||||
dx="5"
|
||||
dy="5"
|
||||
id="feOffset40" /><feComposite
|
||||
result="comp1"
|
||||
operator="in"
|
||||
in="flood"
|
||||
in2="offset"
|
||||
id="feComposite40" /><feComposite
|
||||
result="comp2"
|
||||
operator="over"
|
||||
in="SourceGraphic"
|
||||
in2="comp1"
|
||||
id="feComposite41" /></filter></defs><sodipodi:namedview
|
||||
id="base"
|
||||
inkscape:current-layer="g6"
|
||||
showgrid="true"
|
||||
units="px"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:cx="211.14908"
|
||||
inkscape:cy="264.49672"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="1.1153257"
|
||||
inkscape:window-width="1503"
|
||||
inkscape:window-height="930"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"><inkscape:grid
|
||||
type="xygrid"
|
||||
empspacing="8"
|
||||
id="grid1"
|
||||
visible="true"
|
||||
originx="0"
|
||||
originy="0"
|
||||
spacingy="1"
|
||||
spacingx="1"
|
||||
units="px" /><sodipodi:guide
|
||||
position="256,256"
|
||||
orientation="0,1"
|
||||
inkscape:locked="false"
|
||||
id="guide1" /><sodipodi:guide
|
||||
position="256,200"
|
||||
orientation="0,1"
|
||||
inkscape:locked="false"
|
||||
id="guide2" /><sodipodi:guide
|
||||
position="256,312"
|
||||
orientation="0,1"
|
||||
inkscape:locked="false"
|
||||
id="guide3" /><sodipodi:guide
|
||||
position="256,256"
|
||||
orientation="1,0"
|
||||
inkscape:locked="false"
|
||||
id="guide4" /><sodipodi:guide
|
||||
position="200,256"
|
||||
orientation="1,0"
|
||||
inkscape:locked="false"
|
||||
id="guide5" /><sodipodi:guide
|
||||
position="312,256"
|
||||
orientation="1,0"
|
||||
inkscape:locked="false"
|
||||
id="guide6" /><sodipodi:guide
|
||||
position="256,256"
|
||||
orientation="1,1"
|
||||
inkscape:locked="false"
|
||||
id="guide7" /><sodipodi:guide
|
||||
position="256,256"
|
||||
orientation="1,-1"
|
||||
inkscape:locked="false"
|
||||
id="guide8" /></sodipodi:namedview><rect
|
||||
style="display:none;opacity:1;fill:#9e9e9e;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="Background"
|
||||
width="512"
|
||||
height="512"
|
||||
x="0.02173974"
|
||||
y="0.030385898"
|
||||
clip-path="url(#clipPath17)" /><g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer4"
|
||||
inkscape:label="Icons"><path
|
||||
d="m 212.48429,510.5 h 84.3951 l 18.4617,-74.4906 c 12.30779,-4.1402 23.95604,-9.07563 34.9447,-14.80628 10.98912,-5.73277 21.31888,-13.00885 30.98932,-21.82812 l 72.527,21.16643 L 496,347.78125 441.93403,296.82377 c 1.75966,-11.88934 3.07831,-25.11001 3.95602,-39.66212 0.8777,-14.55209 -0.003,-27.56091 -2.63946,-39.02647 l 52.74749,-50.2704 -42.19787,-72.760837 -71.20854,19.843727 C 372.92125,106.1284 362.3718,98.631997 350.94345,92.458553 339.51504,86.284646 327.64696,80.99297 315.33917,76.583523 L 298.19662,2.5 H 212.4824 l -15.82412,74.083523 c -12.30736,4.409447 -24.17545,9.701123 -35.60426,15.87503 -11.42839,6.173444 -21.97781,13.669847 -31.64825,22.489117 L 58.197238,93.781248 16,167.86478 l 54.0653,50.2704 c -2.637344,12.34739 -3.956016,25.35618 -3.956016,39.02647 0,13.66984 1.318672,26.67847 3.956016,39.02583 L 16,347.78125 58.197238,421.86476 130.72486,399.375 c 9.67003,7.93749 19.9996,14.99297 30.9887,21.16643 10.98911,6.17392 22.63736,11.46556 34.94472,15.87501 z m 43.2372,-158.75 c -26.18744,0 -48.51191,-9.35395 -66.97336,-28.06191 -18.46149,-18.70839 -27.69222,-41.19798 -27.69222,-67.46879 0,-26.27119 9.32399,-48.66724 27.97199,-67.18805 18.64883,-18.52082 41.06634,-27.78125 67.25251,-27.78125 26.18701,0 48.51126,9.35395 66.97272,28.0619 18.4615,18.70836 27.69223,41.19795 27.69223,67.46876 0,26.27122 -9.32399,48.66722 -27.97198,67.18809 C 304.32494,342.48958 281.90766,351.75 255.72149,351.75 Z"
|
||||
id="Settings"
|
||||
style="display:none;fill:#333333;fill-opacity:1;stroke:none;stroke-width:1.3208;stroke-opacity:1"
|
||||
sodipodi:nodetypes="ccccccccsccccccccccccccscccccccscscscscs" /><path
|
||||
d="M 51.047467,512 Q 28.952485,512 14.476063,497.52393 0,483.0475 0,460.95253 V 51.047462 Q 0,28.190328 14.476063,14.095334 28.952485,0 51.047467,0 H 460.95253 Q 483.80967,0 497.90466,14.095334 512,28.190328 512,51.047462 V 460.95253 q 0,22.09497 -14.09534,36.5714 Q 483.80967,512 460.95253,512 Z M 54.857141,127.99998 H 457.14285 V 54.857136 H 54.857141 Z M 457.14285,182.85714 H 54.857141 V 457.14285 H 457.14285 Z M 54.857141,127.99998 v 54.85716 z m 0,0 V 54.857136 Z m 0,54.85716 v 274.28571 z"
|
||||
id="Fallback"
|
||||
style="display:none;fill:#333333;fill-opacity:1;stroke-width:0.761904" /><g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer5"
|
||||
inkscape:label="System Info"
|
||||
style="display:none"><path
|
||||
d="m 207.3461,368.61149 c 4.24475,0 8.2964,-1.10767 12.15495,-3.323 3.85898,-2.21507 6.79308,-5.34536 8.80231,-9.39085 l 74.74094,-136.81458 26.5827,49.17833 c 1.7715,4.4304 4.54058,7.64247 8.30725,9.63617 3.76584,1.9937 8.08555,2.99055 12.95914,2.99055 H 510.3904 V 233.03904 H 365.51384 L 324.31067,157.9424 c -2.21531,-4.43039 -5.25245,-7.64244 -9.11143,-9.63616 -3.85853,-1.99263 -7.91018,-2.98895 -12.15494,-2.98895 -4.24475,0 -8.2964,0.99632 -12.15496,2.98895 -3.85897,1.99266 -6.8961,5.20471 -9.11139,9.63616 L 207.3461,294.84409 180.49221,245.81347 c -2.03515,-4.0859 -4.9819,-7.23639 -8.84026,-9.45148 -3.85856,-2.2153 -7.9102,-3.32295 -12.15494,-3.32295 H 0 v 47.84907 h 144.87656 l 41.5177,75.09183 c 2.00541,3.99063 4.93771,7.09348 8.7969,9.30855 3.85853,2.21533 7.91018,3.323 12.15494,3.323 z"
|
||||
style="fill:#0d00be;fill-opacity:1;stroke-width:0.664569"
|
||||
id="path1-8" /><path
|
||||
d="m 0.48281402,192.83596 v -79.74848 c 0,-14.177585 4.99842408,-25.696778 14.99527098,-34.557575 C 25.47472,69.668868 37.492176,65.238358 51.530467,65.238358 H 459.91073 c 14.03785,0 26.04106,4.43051 36.00962,13.291547 9.96858,8.860797 14.95286,20.37999 14.95286,34.557575 v 79.74848 H 463.02408 V 113.08748 H 48.331914 v 79.74848 z M 51.445288,448.03116 c -14.037857,0 -26.041069,-4.43051 -36.009631,-13.29154 -9.9685626,-8.8608 -14.95284298,-20.38 -14.95284298,-34.55758 V 320.43356 H 48.331914 v 79.74848 H 463.02408 v -79.74848 h 47.84913 v 79.74848 c 0,14.17758 -4.99842,25.69678 -14.99528,34.55758 -9.99707,8.86103 -22.01453,13.29154 -36.0524,13.29154 z"
|
||||
id="System_Info"
|
||||
style="display:inline;fill:#333333;fill-opacity:1;stroke-width:0.664569"
|
||||
sodipodi:nodetypes="cscsscsccccccscsccccccssss" /></g><g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:label="Power_Settings"
|
||||
style="display:none"><rect
|
||||
style="display:inline;fill:#000000;fill-opacity:1;stroke-width:0.8862;paint-order:stroke fill markers"
|
||||
id="rect4"
|
||||
width="346.68829"
|
||||
height="197.63705"
|
||||
x="65.055527"
|
||||
y="164.69754"
|
||||
inkscape:label="Power_at_100" /><rect
|
||||
style="display:none;fill:#000000;fill-opacity:1;stroke-width:0.8862;paint-order:stroke fill markers"
|
||||
id="rect16"
|
||||
width="277"
|
||||
height="197.63705"
|
||||
x="65.055527"
|
||||
y="164.69754"
|
||||
inkscape:label="Power_at_080" /><rect
|
||||
style="display:none;fill:#000000;fill-opacity:1;stroke-width:0.8862;paint-order:stroke fill markers"
|
||||
id="rect18"
|
||||
width="208"
|
||||
height="197.63705"
|
||||
x="65.055527"
|
||||
y="164.69754"
|
||||
inkscape:label="Power_at_060" /><rect
|
||||
style="display:none;fill:#000000;fill-opacity:1;stroke-width:0.8862;paint-order:stroke fill markers"
|
||||
id="rect19"
|
||||
width="139"
|
||||
height="197.63705"
|
||||
x="65.055527"
|
||||
y="164.69754"
|
||||
inkscape:label="Power_at_040" /><rect
|
||||
style="display:none;fill:#000000;fill-opacity:1;stroke-width:0.8862;paint-order:stroke fill markers"
|
||||
id="rect20"
|
||||
width="70"
|
||||
height="197.63705"
|
||||
x="65.055527"
|
||||
y="164.69754"
|
||||
inkscape:label="Power_at_020" /><g
|
||||
id="g3"
|
||||
inkscape:label="Shared"
|
||||
transform="translate(0.41209841,0.82986943)"><path
|
||||
id="rect15"
|
||||
style="fill:#000000;paint-order:stroke fill markers"
|
||||
d="M 1.6464844,104.58203 V 417.50781 H 475.15234 V 104.58203 Z M 23.880859,125.99414 H 451.27148 v 269.2793 H 23.880859 Z"
|
||||
transform="translate(-0.41209841,-0.82986943)" /><rect
|
||||
style="display:inline;fill:#000000;paint-order:stroke fill markers"
|
||||
id="rect2-7"
|
||||
width="39.527409"
|
||||
height="113.6413"
|
||||
x="471.03497"
|
||||
y="201.28403" /></g></g><path
|
||||
d="m 128.42457,319.70188 h 31.96224 V 223.81515 H 128.42457 V 255.7774 H 96.462329 v 31.96225 h 31.962241 z m 63.92449,-31.96223 H 416.08475 V 255.7774 H 192.34906 Z m 159.81121,-63.9245 h 31.96224 v -31.96223 h 31.96224 V 159.89067 H 384.12251 V 127.92843 H 352.16027 Z M 96.462329,191.85292 H 320.19802 V 159.89067 H 96.462329 Z m 63.924481,287.66019 v -63.9245 H 48.518961 q -19.776638,0 -33.860161,-14.09119 Q 0.575596,387.40591 0.575596,367.61871 V 79.796797 q 0,-19.788137 14.083204,-33.77162 Q 28.742323,32.041695 48.518961,32.041695 H 464.02812 q 19.77663,0 33.85984,14.091514 14.08352,14.091196 14.08352,33.878376 V 367.83383 q 0,19.78783 -14.08352,33.7713 -14.08321,13.98348 -33.85984,13.98348 H 352.16027 v 63.9245 z M 48.518961,367.64525 H 464.02812 V 79.98506 H 48.518961 Z m 0,0 V 79.98506 Z"
|
||||
id="Display_Settings"
|
||||
style="display:none;fill:#333333;fill-opacity:1;stroke-width:0.665879" /><path
|
||||
d="m 47.867683,447.55649 q -19.326766,0 -33.654939,-14.32849 Q -0.1157482,418.89983 -0.1157482,399.57306 V 111.67248 q 0,-19.793166 14.3284922,-33.888136 Q 28.540917,63.689052 47.867683,63.689052 H 191.81797 l 63.97791,63.977908 h 207.9282 q 19.79316,0 33.88814,14.09529 14.09529,14.09497 14.09529,33.88814 v 223.92267 q 0,19.32677 -14.09529,33.65494 -14.09498,14.32849 -33.88814,14.32849 z m 0,-47.98343 H 463.72408 V 175.65039 h -227.9213 l -63.9779,-63.97791 H 47.867683 Z m 0,0 V 111.67248 Z"
|
||||
id="Files"
|
||||
style="display:none;fill:#333333;fill-opacity:1;stroke-width:0.666435" /><g
|
||||
id="g6"
|
||||
inkscape:label="I2C"><path
|
||||
style="fill:#333333;stroke-width:1.10895;paint-order:stroke fill markers"
|
||||
d="M 1.1034012,386.61813 V 121.14457 H 512.16486 V 388.6067 H 406.77087 v -75.56551 h 27.83993 v 44.74274 h 51.70271 V 146.99592 H 28.943326 V 360.76677 H 82.634608 V 313.04119 H 106.4974 v 75.56551 z"
|
||||
id="path4"
|
||||
inkscape:label="housing" /><circle
|
||||
style="fill:#1a1a1a;stroke-width:1.68907;paint-order:stroke fill markers"
|
||||
id="path5"
|
||||
cx="416.15726"
|
||||
cy="233.15318"
|
||||
inkscape:label="pin4"
|
||||
r="36.346325" /><circle
|
||||
style="fill:#800000;stroke-width:1.68909;paint-order:stroke fill markers"
|
||||
id="path5-62"
|
||||
cx="311.80624"
|
||||
cy="232.68082"
|
||||
inkscape:label="pin3"
|
||||
r="36.346325" /><circle
|
||||
style="fill:#aa8800;stroke-width:1.68907;paint-order:stroke fill markers"
|
||||
id="path5-6"
|
||||
cx="201.49115"
|
||||
cy="232.88933"
|
||||
inkscape:label="pin2"
|
||||
r="36.346325" /><circle
|
||||
style="fill:#000080;stroke-width:1.68907;paint-order:stroke fill markers"
|
||||
id="path5-9"
|
||||
cx="94.05365"
|
||||
cy="233.18108"
|
||||
inkscape:label="pin1"
|
||||
r="36.346325" /></g></g><style
|
||||
id="style1-9"><![CDATA[
|
||||
#keylines circle, #keylines rect {
|
||||
vector-effect: non-scaling-stroke;
|
||||
fill: none;
|
||||
stroke: #0000FF;
|
||||
}
|
||||
#mask path, #mask rect, #mask circle, #hatching path {
|
||||
vector-effect: non-scaling-stroke;
|
||||
fill: none;
|
||||
stroke: #FF0000;
|
||||
}
|
||||
#keylines, #mask {
|
||||
opacity: 0.5;
|
||||
}
|
||||
]]></style></svg>
|
||||
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 446 B |
|
Before Width: | Height: | Size: 522 B |
|
Before Width: | Height: | Size: 333 B |
|
Before Width: | Height: | Size: 240 B |
|
Before Width: | Height: | Size: 286 B |
|
Before Width: | Height: | Size: 403 B |
|
Before Width: | Height: | Size: 429 B |
|
Before Width: | Height: | Size: 491 B |
|
Before Width: | Height: | Size: 299 B |
|
Before Width: | Height: | Size: 535 B |
|
Before Width: | Height: | Size: 436 B |
|
Before Width: | Height: | Size: 392 B |
@ -1,42 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
height="24px"
|
||||
viewBox="0 -960 960 960"
|
||||
width="24px"
|
||||
fill="#e8eaed"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="apps.svg"
|
||||
inkscape:export-filename="icon_apps.png"
|
||||
inkscape:export-xdpi="160"
|
||||
inkscape:export-ydpi="160"
|
||||
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="17.088414"
|
||||
inkscape:cx="14.600536"
|
||||
inkscape:cy="18.960215"
|
||||
inkscape:window-width="1503"
|
||||
inkscape:window-height="933"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
d="m 122.37644,-3.1685927 q -49.173234,0 -84.190541,-35.0173063 -35.0173063,-35.017307 -35.0173063,-84.190541 0,-49.17324 35.0173063,-84.19055 35.017307,-35.01731 84.190541,-35.01731 49.17324,0 84.19055,35.01731 35.01731,35.01731 35.01731,84.19055 0,49.173234 -35.01731,84.190541 -35.01731,35.0173063 -84.19055,35.0173063 z m 357.62356,0 q -49.17324,0 -84.19055,-35.0173063 -35.0173,-35.017307 -35.0173,-84.190541 0,-49.17324 35.0173,-84.19055 35.01731,-35.01731 84.19055,-35.01731 49.17324,0 84.19055,35.01731 35.0173,35.01731 35.0173,84.19055 0,49.173234 -35.0173,84.190541 Q 529.17324,-3.1685927 480,-3.1685927 Z m 357.62356,0 q -49.17324,0 -84.19055,-35.0173063 -35.01731,-35.017307 -35.01731,-84.190541 0,-49.17324 35.01731,-84.19055 35.01731,-35.01731 84.19055,-35.01731 49.17323,0 84.19054,35.01731 35.01731,35.01731 35.01731,84.19055 0,49.173234 -35.01731,84.190541 -35.01731,35.0173063 -84.19054,35.0173063 z M 122.37644,-360.79215 q -49.173234,0 -84.190541,-35.0173 Q 3.1685927,-430.82676 3.1685927,-480 q 0,-49.17324 35.0173063,-84.19055 35.017307,-35.0173 84.190541,-35.0173 49.17324,0 84.19055,35.0173 35.01731,35.01731 35.01731,84.19055 0,49.17324 -35.01731,84.19055 -35.01731,35.0173 -84.19055,35.0173 z m 357.62356,0 q -49.17324,0 -84.19055,-35.0173 -35.0173,-35.01731 -35.0173,-84.19055 0,-49.17324 35.0173,-84.19055 35.01731,-35.0173 84.19055,-35.0173 49.17324,0 84.19055,35.0173 35.0173,35.01731 35.0173,84.19055 0,49.17324 -35.0173,84.19055 -35.01731,35.0173 -84.19055,35.0173 z m 357.62356,0 q -49.17324,0 -84.19055,-35.0173 Q 718.4157,-430.82676 718.4157,-480 q 0,-49.17324 35.01731,-84.19055 35.01731,-35.0173 84.19055,-35.0173 49.17323,0 84.19054,35.0173 35.01731,35.01731 35.01731,84.19055 0,49.17324 -35.01731,84.19055 -35.01731,35.0173 -84.19054,35.0173 z M 122.37644,-718.4157 q -49.173234,0 -84.190541,-35.01731 -35.0173063,-35.01731 -35.0173063,-84.19055 0,-49.17323 35.0173063,-84.19054 35.017307,-35.01731 84.190541,-35.01731 49.17324,0 84.19055,35.01731 35.01731,35.01731 35.01731,84.19054 0,49.17324 -35.01731,84.19055 -35.01731,35.01731 -84.19055,35.01731 z m 357.62356,0 q -49.17324,0 -84.19055,-35.01731 -35.0173,-35.01731 -35.0173,-84.19055 0,-49.17323 35.0173,-84.19054 35.01731,-35.01731 84.19055,-35.01731 49.17324,0 84.19055,35.01731 35.0173,35.01731 35.0173,84.19054 0,49.17324 -35.0173,84.19055 Q 529.17324,-718.4157 480,-718.4157 Z m 357.62356,0 q -49.17324,0 -84.19055,-35.01731 -35.01731,-35.01731 -35.01731,-84.19055 0,-49.17323 35.01731,-84.19054 35.01731,-35.01731 84.19055,-35.01731 49.17323,0 84.19054,35.01731 35.01731,35.01731 35.01731,84.19054 0,49.17324 -35.01731,84.19055 -35.01731,35.01731 -84.19054,35.01731 z"
|
||||
id="path1"
|
||||
style="stroke-width:1.4901" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 3.8 KiB |
@ -1,42 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
height="24px"
|
||||
viewBox="0 -960 960 960"
|
||||
width="24px"
|
||||
fill="#e8eaed"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="folder.svg"
|
||||
inkscape:export-filename="icon_files.png"
|
||||
inkscape:export-xdpi="160"
|
||||
inkscape:export-ydpi="160"
|
||||
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="48.333333"
|
||||
inkscape:cx="11.989655"
|
||||
inkscape:cy="12"
|
||||
inkscape:window-width="1503"
|
||||
inkscape:window-height="933"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
d="m 96.441379,-96.441379 q -39.554482,0 -67.722069,-28.167591 -28.16758586,-28.16758 -28.16758586,-67.72206 v -575.33794 q 0,-39.55448 28.16758586,-67.72206 28.167587,-28.16759 67.722069,-28.16759 H 384.11034 L 480,-767.66897 h 383.55862 q 39.55448,0 67.72207,28.16759 28.16759,28.16759 28.16759,67.72207 v 479.44828 q 0,39.55448 -28.16759,67.72206 -28.16759,28.167591 -67.72207,28.167591 z m 0,-95.889651 H 863.55862 v -479.44828 h -423.1131 l -95.88966,-95.88966 H 96.441379 Z m 0,0 v -575.33794 z"
|
||||
id="path1"
|
||||
style="stroke-width:1.19862" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.7 KiB |
@ -1,42 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
height="24px"
|
||||
viewBox="0 -960 960 960"
|
||||
width="24px"
|
||||
fill="#e8eaed"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="settings.svg"
|
||||
inkscape:export-filename="icon_settings.png"
|
||||
inkscape:export-xdpi="160"
|
||||
inkscape:export-ydpi="160"
|
||||
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="48.333333"
|
||||
inkscape:cx="11.989655"
|
||||
inkscape:cy="12"
|
||||
inkscape:window-width="1503"
|
||||
inkscape:window-height="933"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
d="M 347.80751,0.69994853 328.57952,-153.12403 q -15.62275,-6.00875 -29.44288,-14.421 -13.82012,-8.41225 -27.03937,-18.02625 L 129.08904,-125.48379 -3.1034483,-353.81626 120.67679,-447.55275 q -1.20175,-8.41225 -1.20175,-16.22363 v -32.44724 q 0,-7.81138 1.20175,-16.22363 L -3.1034483,-606.18374 129.08904,-834.51621 l 143.00823,60.08749 q 13.21925,-9.614 27.64025,-18.02625 14.421,-8.41225 28.842,-14.421 l 19.22799,-153.82398 h 264.38498 l 19.22799,153.82398 q 15.62275,6.00875 29.44288,14.421 13.82012,8.41225 27.03937,18.02625 l 143.00823,-60.08749 132.19249,228.33247 -123.78024,93.73649 q 1.20175,8.41225 1.20175,16.22363 v 32.44724 q 0,7.81138 -2.4035,16.22363 l 123.78024,93.73649 -132.19249,228.33247 -141.80648,-60.08749 q -13.21925,9.614 -27.64025,18.02625 -14.421,8.41225 -28.842,14.421 L 612.19249,0.69994853 Z m 84.1225,-96.13998953 h 94.93823 l 16.8245,-127.385489 q 37.25425,-9.614 69.10062,-28.24112 31.84637,-18.62712 58.28487,-45.06562 l 118.97324,49.27175 46.86824,-81.719 -103.35049,-78.11374 q 6.00875,-16.8245 8.41225,-35.45162 2.4035,-18.62712 2.4035,-37.85512 0,-19.228 -2.4035,-37.85512 -2.4035,-18.62712 -8.41225,-35.45162 l 103.35049,-78.11374 -46.86824,-81.719 -118.97324,50.4735 q -26.4385,-27.64025 -58.28487,-46.26737 -31.84637,-18.62712 -69.10062,-28.24112 l -15.62275,-127.38549 h -94.93823 l -16.8245,127.38549 q -37.25425,9.614 -69.10062,28.24112 -31.84637,18.62712 -58.28487,45.06562 l -118.97324,-49.27175 -46.86824,81.719 103.35049,76.91199 q -6.00875,18.02625 -8.41225,36.05249 -2.4035,18.02625 -2.4035,38.456 0,19.228 2.4035,37.25425 2.4035,18.02624 8.41225,36.05249 l -103.35049,78.11374 46.86824,81.719 118.97324,-50.4735 q 26.4385,27.64025 58.28487,46.26737 31.84637,18.62712 69.10062,28.24112 z M 482.4035,-311.75502 q 69.70149,0 118.97324,-49.27174 49.27174,-49.27175 49.27174,-118.97324 0,-69.70149 -49.27174,-118.97324 -49.27175,-49.27174 -118.97324,-49.27174 -70.90324,0 -119.57411,49.27174 -48.67087,49.27175 -48.67087,118.97324 0,69.70149 48.67087,118.97324 48.67087,49.27174 119.57411,49.27174 z M 480,-480 Z"
|
||||
id="path1"
|
||||
style="stroke-width:1.20175" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 3.2 KiB |
@ -1,42 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
height="24px"
|
||||
viewBox="0 -960 960 960"
|
||||
width="24px"
|
||||
fill="#e8eaed"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="search.svg"
|
||||
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
|
||||
inkscape:export-filename="search.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="47.5"
|
||||
inkscape:cx="12"
|
||||
inkscape:cy="10.989474"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1368"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
d="M 884.20117,0.42105034 548.79064,-334.98948 q -39.92982,31.94386 -91.8386,50.57778 -51.90877,18.63392 -110.47251,18.63392 -145.07836,0 -245.56842,-100.49006 Q 0.42105263,-466.7579 0.42105263,-611.83626 q 0,-145.07836 100.49005737,-245.56842 100.49006,-100.49006 245.56842,-100.49006 145.07836,0 245.56842,100.49006 100.49006,100.49006 100.49006,245.56842 0,58.56374 -18.63392,110.47251 -18.63392,51.90878 -50.57778,91.8386 L 958.73684,-74.114622 Z M 346.47953,-372.25731 q 99.82456,0 169.70175,-69.8772 69.8772,-69.87719 69.8772,-169.70175 0,-99.82456 -69.8772,-169.70175 -69.87719,-69.8772 -169.70175,-69.8772 -99.82456,0 -169.70176,69.8772 -69.87718,69.87719 -69.87718,169.70175 0,99.82456 69.87718,169.70175 69.8772,69.8772 169.70176,69.8772 z"
|
||||
id="path1"
|
||||
style="stroke-width:1.33099" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.9 KiB |
@ -1,42 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
height="24px"
|
||||
viewBox="0 -960 960 960"
|
||||
width="24px"
|
||||
fill="#e8eaed"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="wifi_lock_black.svg"
|
||||
inkscape:export-filename="wifi_lock_black.png"
|
||||
inkscape:export-xdpi="64"
|
||||
inkscape:export-ydpi="64"
|
||||
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="27.5"
|
||||
inkscape:cx="12.054545"
|
||||
inkscape:cy="12.072727"
|
||||
inkscape:window-width="1503"
|
||||
inkscape:window-height="930"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
d="M240-80q-33 0-56.5-23.5T160-160v-400q0-33 23.5-56.5T240-640h40v-80q0-83 58.5-141.5T480-920q83 0 141.5 58.5T680-720v80h40q33 0 56.5 23.5T800-560v400q0 33-23.5 56.5T720-80H240Zm0-80h480v-400H240v400Zm240-120q33 0 56.5-23.5T560-360q0-33-23.5-56.5T480-440q-33 0-56.5 23.5T400-360q0 33 23.5 56.5T480-280ZM360-640h240v-80q0-50-35-85t-85-35q-50 0-85 35t-35 85v80ZM240-160v-400 400Z"
|
||||
id="path1"
|
||||
style="fill:#000000" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.5 KiB |
@ -1,50 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
height="24px"
|
||||
viewBox="0 -960 960 960"
|
||||
width="24px"
|
||||
fill="#e8eaed"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="wifi_signal_medium_black.svg"
|
||||
inkscape:export-filename="../assets/wifi_signal_medium_black.png"
|
||||
inkscape:export-xdpi="64"
|
||||
inkscape:export-ydpi="64"
|
||||
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="27.5"
|
||||
inkscape:cx="10.563636"
|
||||
inkscape:cy="12.072727"
|
||||
inkscape:window-width="1503"
|
||||
inkscape:window-height="930"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
d="m 480,-120 c -28,0 -51.66667,-9.66667 -71,-29 -19.33333,-19.33333 -29,-43 -29,-71 0,-28 9.66667,-51.66667 29,-71 19.33333,-19.33333 43,-29 71,-29 28,0 51.66667,9.66667 71,29 19.33333,19.33333 29,43 29,71 0,28 -9.66667,51.66667 -29,71 -19.33333,19.33333 -43,29 -71,29 z"
|
||||
id="path1"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
d="m 254,-346 -84,-86 c 39.33333,-39.33333 85.5,-70.5 138.5,-93.5 53,-23 110.16667,-34.5 171.5,-34.5 61.33333,0 118.5,11.66667 171.5,35 53,23.33333 99.16667,55 138.5,95 l -84,84 c -29.33333,-29.33333 -63.33333,-52.33333 -102,-69 -38.66667,-16.66667 -80,-25 -124,-25 -44,0 -85.33333,8.33333 -124,25 -38.66667,16.66667 -72.66667,39.66667 -102,69 z"
|
||||
id="path2"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
d="M 84,-516 0,-600 c 61.333333,-62.66667 133,-111.66667 215,-147 82,-35.33333 170.33333,-53 265,-53 94.66667,0 183,17.66667 265,53 82,35.33333 153.66667,84.33333 215,147 l -84,84 C 824.66667,-567.33333 765.16667,-607.5 697.5,-636.5 629.83333,-665.5 557.33333,-680 480,-680 c -77.33333,0 -149.83333,14.5 -217.5,43.5 -67.66667,29 -127.16667,69.16667 -178.5,120.5 z"
|
||||
id="path3"
|
||||
style="fill:#b3b3b3" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.3 KiB |
@ -1,50 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
height="24px"
|
||||
viewBox="0 -960 960 960"
|
||||
width="24px"
|
||||
fill="#e8eaed"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="wifi_signal_strong_black.svg"
|
||||
inkscape:export-filename="wifi_signal_full_black.png"
|
||||
inkscape:export-xdpi="64"
|
||||
inkscape:export-ydpi="64"
|
||||
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="27.5"
|
||||
inkscape:cx="10.563636"
|
||||
inkscape:cy="12.072727"
|
||||
inkscape:window-width="1503"
|
||||
inkscape:window-height="930"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
d="m 480,-120 c -28,0 -51.66667,-9.66667 -71,-29 -19.33333,-19.33333 -29,-43 -29,-71 0,-28 9.66667,-51.66667 29,-71 19.33333,-19.33333 43,-29 71,-29 28,0 51.66667,9.66667 71,29 19.33333,19.33333 29,43 29,71 0,28 -9.66667,51.66667 -29,71 -19.33333,19.33333 -43,29 -71,29 z"
|
||||
id="path1"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
d="m 254,-346 -84,-86 c 39.33333,-39.33333 85.5,-70.5 138.5,-93.5 53,-23 110.16667,-34.5 171.5,-34.5 61.33333,0 118.5,11.66667 171.5,35 53,23.33333 99.16667,55 138.5,95 l -84,84 c -29.33333,-29.33333 -63.33333,-52.33333 -102,-69 -38.66667,-16.66667 -80,-25 -124,-25 -44,0 -85.33333,8.33333 -124,25 -38.66667,16.66667 -72.66667,39.66667 -102,69 z"
|
||||
id="path2"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
d="M 84,-516 0,-600 c 61.333333,-62.66667 133,-111.66667 215,-147 82,-35.33333 170.33333,-53 265,-53 94.66667,0 183,17.66667 265,53 82,35.33333 153.66667,84.33333 215,147 l -84,84 C 824.66667,-567.33333 765.16667,-607.5 697.5,-636.5 629.83333,-665.5 557.33333,-680 480,-680 c -77.33333,0 -149.83333,14.5 -217.5,43.5 -67.66667,29 -127.16667,69.16667 -178.5,120.5 z"
|
||||
id="path3"
|
||||
style="fill:#000000" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.3 KiB |
@ -1,50 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
height="24px"
|
||||
viewBox="0 -960 960 960"
|
||||
width="24px"
|
||||
fill="#e8eaed"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="wifi_signal_weak_black.svg"
|
||||
inkscape:export-filename="../assets/wifi_signal_weak_black.png"
|
||||
inkscape:export-xdpi="64"
|
||||
inkscape:export-ydpi="64"
|
||||
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="27.5"
|
||||
inkscape:cx="10.563636"
|
||||
inkscape:cy="12.072727"
|
||||
inkscape:window-width="1503"
|
||||
inkscape:window-height="930"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
d="m 480,-120 c -28,0 -51.66667,-9.66667 -71,-29 -19.33333,-19.33333 -29,-43 -29,-71 0,-28 9.66667,-51.66667 29,-71 19.33333,-19.33333 43,-29 71,-29 28,0 51.66667,9.66667 71,29 19.33333,19.33333 29,43 29,71 0,28 -9.66667,51.66667 -29,71 -19.33333,19.33333 -43,29 -71,29 z"
|
||||
id="path1"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
d="m 254,-346 -84,-86 c 39.33333,-39.33333 85.5,-70.5 138.5,-93.5 53,-23 110.16667,-34.5 171.5,-34.5 61.33333,0 118.5,11.66667 171.5,35 53,23.33333 99.16667,55 138.5,95 l -84,84 c -29.33333,-29.33333 -63.33333,-52.33333 -102,-69 -38.66667,-16.66667 -80,-25 -124,-25 -44,0 -85.33333,8.33333 -124,25 -38.66667,16.66667 -72.66667,39.66667 -102,69 z"
|
||||
id="path2"
|
||||
style="fill:#b3b3b3" />
|
||||
<path
|
||||
d="M 84,-516 0,-600 c 61.333333,-62.66667 133,-111.66667 215,-147 82,-35.33333 170.33333,-53 265,-53 94.66667,0 183,17.66667 265,53 82,35.33333 153.66667,84.33333 215,147 l -84,84 C 824.66667,-567.33333 765.16667,-607.5 697.5,-636.5 629.83333,-665.5 557.33333,-680 480,-680 c -77.33333,0 -149.83333,14.5 -217.5,43.5 -67.66667,29 -127.16667,69.16667 -178.5,120.5 z"
|
||||
id="path3"
|
||||
style="fill:#b3b3b3" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.3 KiB |
@ -1,3 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- License: Apache. Made by Iconscout: https://github.com/Iconscout/unicons -->
|
||||
<svg fill="#000000" width="800px" height="800px" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" data-name="Layer 1"><path d="M12.71,17.29a1,1,0,0,0-.16-.12.56.56,0,0,0-.17-.09.6.6,0,0,0-.19-.06.93.93,0,0,0-.57.06.9.9,0,0,0-.54.54A.84.84,0,0,0,11,18a1,1,0,0,0,.07.38,1.46,1.46,0,0,0,.22.33A1,1,0,0,0,12,19a.84.84,0,0,0,.38-.08,1.15,1.15,0,0,0,.33-.21A1,1,0,0,0,13,18a1,1,0,0,0-.08-.38A1,1,0,0,0,12.71,17.29ZM8.55,13.17a.56.56,0,0,0-.17-.09A.6.6,0,0,0,8.19,13a.86.86,0,0,0-.39,0l-.18.06-.18.09-.15.12A1.05,1.05,0,0,0,7,14a1,1,0,0,0,.29.71,1.15,1.15,0,0,0,.33.21A1,1,0,0,0,9,14a1.05,1.05,0,0,0-.29-.71Zm.16,4.12a1,1,0,0,0-.33-.21A1,1,0,0,0,7.8,17l-.18.06a.76.76,0,0,0-.18.09,1.58,1.58,0,0,0-.15.12,1,1,0,0,0-.21.33.94.94,0,0,0,0,.76,1.15,1.15,0,0,0,.21.33A1,1,0,0,0,8,19a.84.84,0,0,0,.38-.08,1.15,1.15,0,0,0,.33-.21,1.15,1.15,0,0,0,.21-.33.94.94,0,0,0,0-.76A1,1,0,0,0,8.71,17.29Zm2.91-4.21a1,1,0,0,0-.33.21A1.05,1.05,0,0,0,11,14a1,1,0,0,0,1.38.92,1.15,1.15,0,0,0,.33-.21A1,1,0,0,0,13,14a1.05,1.05,0,0,0-.29-.71A1,1,0,0,0,11.62,13.08Zm5.09,4.21a1.15,1.15,0,0,0-.33-.21,1,1,0,0,0-1.09.21,1,1,0,0,0-.21.33.94.94,0,0,0,0,.76,1.15,1.15,0,0,0,.21.33A1,1,0,0,0,16,19a.84.84,0,0,0,.38-.08,1.15,1.15,0,0,0,.33-.21,1,1,0,0,0,.21-1.09A1,1,0,0,0,16.71,17.29ZM16,5H8A1,1,0,0,0,7,6v4a1,1,0,0,0,1,1h8a1,1,0,0,0,1-1V6A1,1,0,0,0,16,5ZM15,9H9V7h6Zm3-8H6A3,3,0,0,0,3,4V20a3,3,0,0,0,3,3H18a3,3,0,0,0,3-3V4A3,3,0,0,0,18,1Zm1,19a1,1,0,0,1-1,1H6a1,1,0,0,1-1-1V4A1,1,0,0,1,6,3H18a1,1,0,0,1,1,1Zm-2.45-6.83a.56.56,0,0,0-.17-.09.6.6,0,0,0-.19-.06.86.86,0,0,0-.39,0l-.18.06-.18.09-.15.12A1.05,1.05,0,0,0,15,14a1,1,0,0,0,1.38.92,1.15,1.15,0,0,0,.33-.21A1,1,0,0,0,17,14a1.05,1.05,0,0,0-.29-.71Z"/></svg>
|
||||
|
Before Width: | Height: | Size: 1.8 KiB |
@ -1,3 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- License: PD. Made by Mary Akveo: https://maryakveo.com/ -->
|
||||
<svg fill="#000000" width="800px" height="800px" viewBox="0 0 24 24" id="chat" data-name="Line Color" xmlns="http://www.w3.org/2000/svg" class="icon line-color"><path id="primary" d="M18.81,16.23,20,21l-4.95-2.48A9.84,9.84,0,0,1,12,19c-5,0-9-3.58-9-8s4-8,9-8,9,3.58,9,8A7.49,7.49,0,0,1,18.81,16.23Z" style="fill: none; stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2;"></path></svg>
|
||||
|
Before Width: | Height: | Size: 518 B |
@ -1,3 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- License: PD. Made by Mary Akveo: https://maryakveo.com/ -->
|
||||
<svg fill="#000000" width="800px" height="800px" viewBox="0 0 24 24" id="chip" data-name="Flat Line" xmlns="http://www.w3.org/2000/svg" class="icon flat-line"><rect id="secondary" x="6" y="6" width="12" height="12" rx="1" style="fill: none; stroke-width: 2;"></rect><path id="primary" d="M12,6V3m4,3V4M8,6V4m10,8h3m-3,4h2M18,8h2M12,18v3M8,18v2m8-2v2M6,12H3M6,8H4m2,8H4m14,1V7a1,1,0,0,0-1-1H7A1,1,0,0,0,6,7V17a1,1,0,0,0,1,1H17A1,1,0,0,0,18,17Z" style="fill: none; stroke: #333333; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2;"></path></svg>
|
||||
|
Before Width: | Height: | Size: 662 B |
@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- License: MIT. Made by vmware: https://github.com/vmware/clarity-assets -->
|
||||
<svg fill="#000000" width="800px" height="800px" viewBox="0 0 36 36" version="1.1" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>note-line</title>
|
||||
<path d="M28,30H6V8H19.22l2-2H6A2,2,0,0,0,4,8V30a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V15l-2,2Z" class="clr-i-outline clr-i-outline-path-1"></path><path d="M33.53,5.84,30.16,2.47a1.61,1.61,0,0,0-2.28,0L14.17,16.26l-1.11,4.81A1.61,1.61,0,0,0,14.63,23,1.69,1.69,0,0,0,15,23l4.85-1.07L33.53,8.12A1.61,1.61,0,0,0,33.53,5.84ZM18.81,20.08l-3.66.81L16,17.26,26.32,6.87l2.82,2.82ZM30.27,8.56,27.45,5.74,29,4.16,31.84,7Z" class="clr-i-outline clr-i-outline-path-2"></path>
|
||||
<rect x="0" y="0" width="36" height="36" fill-opacity="0"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 878 B |
@ -1,42 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
height="16"
|
||||
viewBox="0 -960 640 640"
|
||||
width="16"
|
||||
fill="#e8eaed"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="calendar_clock_24dp_E8EAED_FILL0_wght400_GRAD0_opsz24.svg"
|
||||
inkscape:export-filename="calendar_clock_24dp_E8EAED_FILL0_wght400_GRAD0_opsz24.png"
|
||||
inkscape:export-xdpi="96.18351"
|
||||
inkscape:export-ydpi="96.18351"
|
||||
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="47.5"
|
||||
inkscape:cx="10.842105"
|
||||
inkscape:cy="10.821053"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1368"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
d="M 61.257143,-775.80752 H 487.10977 v -60.83609 H 61.257143 Z m 0,0 v -60.83609 z m 0,425.85263 q -25.094888,0 -42.965489,-17.8706 -17.870601,-17.8706 -17.870601,-42.96549 v -425.85263 q 0,-25.09489 17.870601,-42.96549 17.870601,-17.8706 42.965489,-17.8706 H 91.67518 v -60.83609 h 60.83609 v 60.83609 h 243.34437 v -60.83609 h 60.83609 v 60.83609 h 30.41804 q 25.09489,0 42.96549,17.8706 17.8706,17.8706 17.8706,42.96549 v 172.62241 q -14.44857,-6.84406 -29.6576,-11.40677 -15.20901,-4.56271 -31.17849,-6.84406 v -32.6994 H 61.257143 v 304.18045 H 252.89083 q 5.32315,16.72993 12.54744,31.93895 7.22428,15.20902 17.11015,28.89714 z m 395.434587,30.41805 q -63.11745,0 -107.60384,-44.48639 -44.48639,-44.4864 -44.48639,-107.60384 0,-63.11744 44.48639,-107.60384 44.48639,-44.48638 107.60384,-44.48638 63.11744,0 107.60383,44.48638 44.48639,44.4864 44.48639,107.60384 0,63.11744 -44.48639,107.60384 -44.48639,44.48639 -107.60383,44.48639 z m 50.95022,-79.84737 21.29264,-21.29263 -57.03384,-57.03384 V -562.8812 H 441.4827 v 97.33774 z"
|
||||
id="path1"
|
||||
style="stroke-width:0.760454;fill:#000000" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.3 KiB |
@ -1,42 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
height="16"
|
||||
viewBox="0 -960 640 640"
|
||||
width="16"
|
||||
fill="#e8eaed"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="location.svg"
|
||||
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
|
||||
inkscape:export-filename="location.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="47.5"
|
||||
inkscape:cx="12"
|
||||
inkscape:cy="12"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1368"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
d="M 347.36841,-361.6842 259.36842,-579.36842 41.684211,-667.36841 V -710.5965 L 597.47368,-917.47368 390.59649,-361.6842 Z m 20.07018,-114.24563 125.05263,-336.5614 -336.5614,125.05264 151.29825,60.21052 z m -60.21052,-151.29824 z"
|
||||
id="path1"
|
||||
style="stroke-width:0.771924" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.4 KiB |
@ -1,41 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
height="20"
|
||||
viewBox="0 -960 960 960"
|
||||
width="20"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="wifi_off_white.svg"
|
||||
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
|
||||
inkscape:export-filename="../assets/wifi_off_white.png"
|
||||
inkscape:export-xdpi="76.800003"
|
||||
inkscape:export-ydpi="76.800003"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="33"
|
||||
inkscape:cx="10.045455"
|
||||
inkscape:cy="10"
|
||||
inkscape:window-width="1503"
|
||||
inkscape:window-height="930"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
d="m699-363-51-51 206-205q-81-61-176-93t-198-32q-36.667 0-73.333 4.5Q370-735 335-727l-59-59q48-15 99.241-22.5T480-816q140 0 263 51t217 141L699-363ZM480-246l66-66-359-359q-21 11-41 24.5T106-619l374 373ZM813-45 597-261 480-144 0-624q30-29 63.533-54.224Q97.065-703.447 134-724l-89-89 51-51L864-96l-51 51ZM492-571Zm-125 79Z"
|
||||
id="path1"
|
||||
style="fill:#ffffff" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.5 KiB |
@ -1,41 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
height="20"
|
||||
viewBox="0 -960 960 960"
|
||||
width="20"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="wifi_scan_white.svg"
|
||||
inkscape:export-filename="../assets/wifi_scan_white.png"
|
||||
inkscape:export-xdpi="76.800003"
|
||||
inkscape:export-ydpi="76.800003"
|
||||
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="33"
|
||||
inkscape:cx="10.015152"
|
||||
inkscape:cy="10"
|
||||
inkscape:window-width="1503"
|
||||
inkscape:window-height="930"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
d="M480-144 0-624q97-94 221-143t259-49q135 0 259 49t221 143l-51 52q-86-85-197-128.5T480-744q-102 0-197.5 32T106-619l427 422-53 53Zm381-48L745-308q-17 10-35 15t-38 5q-60 0-102-42t-42-102q0-60 42-102t102-42q60 0 102 42t42 102q0 20-4.5 38.5T796-359l116 116-51 51ZM672-360q30 0 51-21t21-51q0-30-21-51t-51-21q-30 0-51 21t-21 51q0 30 21 51t51 21ZM480-196Z"
|
||||
id="path1"
|
||||
style="fill:#ffffff" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.5 KiB |
@ -1,48 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
height="24px"
|
||||
viewBox="0 -960 960 960"
|
||||
width="24px"
|
||||
fill="#e8eaed"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="wifi_signal_medium_white.svg"
|
||||
inkscape:export-filename="../assets/wifi_signal_medium_white.png"
|
||||
inkscape:export-xdpi="64"
|
||||
inkscape:export-ydpi="64"
|
||||
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="27.5"
|
||||
inkscape:cx="10.563636"
|
||||
inkscape:cy="12.072727"
|
||||
inkscape:window-width="1503"
|
||||
inkscape:window-height="930"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
d="m 480,-120 c -28,0 -51.66667,-9.66667 -71,-29 -19.33333,-19.33333 -29,-43 -29,-71 0,-28 9.66667,-51.66667 29,-71 19.33333,-19.33333 43,-29 71,-29 28,0 51.66667,9.66667 71,29 19.33333,19.33333 29,43 29,71 0,28 -9.66667,51.66667 -29,71 -19.33333,19.33333 -43,29 -71,29 z"
|
||||
id="path1" />
|
||||
<path
|
||||
d="m 254,-346 -84,-86 c 39.33333,-39.33333 85.5,-70.5 138.5,-93.5 53,-23 110.16667,-34.5 171.5,-34.5 61.33333,0 118.5,11.66667 171.5,35 53,23.33333 99.16667,55 138.5,95 l -84,84 c -29.33333,-29.33333 -63.33333,-52.33333 -102,-69 -38.66667,-16.66667 -80,-25 -124,-25 -44,0 -85.33333,8.33333 -124,25 -38.66667,16.66667 -72.66667,39.66667 -102,69 z"
|
||||
id="path2" />
|
||||
<path
|
||||
d="M 84,-516 0,-600 c 61.333333,-62.66667 133,-111.66667 215,-147 82,-35.33333 170.33333,-53 265,-53 94.66667,0 183,17.66667 265,53 82,35.33333 153.66667,84.33333 215,147 l -84,84 C 824.66667,-567.33333 765.16667,-607.5 697.5,-636.5 629.83333,-665.5 557.33333,-680 480,-680 c -77.33333,0 -149.83333,14.5 -217.5,43.5 -67.66667,29 -127.16667,69.16667 -178.5,120.5 z"
|
||||
id="path3"
|
||||
style="fill:#666666" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.2 KiB |
@ -1,47 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
height="24px"
|
||||
viewBox="0 -960 960 960"
|
||||
width="24px"
|
||||
fill="#e8eaed"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="wifi_signal_strong_white.svg"
|
||||
inkscape:export-filename="../assets/wifi_signal_strong_white.png"
|
||||
inkscape:export-xdpi="64"
|
||||
inkscape:export-ydpi="64"
|
||||
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="27.5"
|
||||
inkscape:cx="10.563636"
|
||||
inkscape:cy="12.036364"
|
||||
inkscape:window-width="1503"
|
||||
inkscape:window-height="930"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
d="m 480,-120 c -28,0 -51.66667,-9.66667 -71,-29 -19.33333,-19.33333 -29,-43 -29,-71 0,-28 9.66667,-51.66667 29,-71 19.33333,-19.33333 43,-29 71,-29 28,0 51.66667,9.66667 71,29 19.33333,19.33333 29,43 29,71 0,28 -9.66667,51.66667 -29,71 -19.33333,19.33333 -43,29 -71,29 z"
|
||||
id="path1" />
|
||||
<path
|
||||
d="m 254,-346 -84,-86 c 39.33333,-39.33333 85.5,-70.5 138.5,-93.5 53,-23 110.16667,-34.5 171.5,-34.5 61.33333,0 118.5,11.66667 171.5,35 53,23.33333 99.16667,55 138.5,95 l -84,84 c -29.33333,-29.33333 -63.33333,-52.33333 -102,-69 -38.66667,-16.66667 -80,-25 -124,-25 -44,0 -85.33333,8.33333 -124,25 -38.66667,16.66667 -72.66667,39.66667 -102,69 z"
|
||||
id="path2" />
|
||||
<path
|
||||
d="M 84,-516 0,-600 c 61.333333,-62.66667 133,-111.66667 215,-147 82,-35.33333 170.33333,-53 265,-53 94.66667,0 183,17.66667 265,53 82,35.33333 153.66667,84.33333 215,147 l -84,84 C 824.66667,-567.33333 765.16667,-607.5 697.5,-636.5 629.83333,-665.5 557.33333,-680 480,-680 c -77.33333,0 -149.83333,14.5 -217.5,43.5 -67.66667,29 -127.16667,69.16667 -178.5,120.5 z"
|
||||
id="path3" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.2 KiB |
@ -1,49 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
height="24px"
|
||||
viewBox="0 -960 960 960"
|
||||
width="24px"
|
||||
fill="#e8eaed"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="wifi_signal_weak_white.svg"
|
||||
inkscape:export-filename="../assets/wifi_signal_weak_white.png"
|
||||
inkscape:export-xdpi="64"
|
||||
inkscape:export-ydpi="64"
|
||||
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="27.5"
|
||||
inkscape:cx="10.563636"
|
||||
inkscape:cy="12.072727"
|
||||
inkscape:window-width="1503"
|
||||
inkscape:window-height="930"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<path
|
||||
d="m 480,-120 c -28,0 -51.66667,-9.66667 -71,-29 -19.33333,-19.33333 -29,-43 -29,-71 0,-28 9.66667,-51.66667 29,-71 19.33333,-19.33333 43,-29 71,-29 28,0 51.66667,9.66667 71,29 19.33333,19.33333 29,43 29,71 0,28 -9.66667,51.66667 -29,71 -19.33333,19.33333 -43,29 -71,29 z"
|
||||
id="path1" />
|
||||
<path
|
||||
d="m 254,-346 -84,-86 c 39.33333,-39.33333 85.5,-70.5 138.5,-93.5 53,-23 110.16667,-34.5 171.5,-34.5 61.33333,0 118.5,11.66667 171.5,35 53,23.33333 99.16667,55 138.5,95 l -84,84 c -29.33333,-29.33333 -63.33333,-52.33333 -102,-69 -38.66667,-16.66667 -80,-25 -124,-25 -44,0 -85.33333,8.33333 -124,25 -38.66667,16.66667 -72.66667,39.66667 -102,69 z"
|
||||
id="path2"
|
||||
style="fill:#666666" />
|
||||
<path
|
||||
d="M 84,-516 0,-600 c 61.333333,-62.66667 133,-111.66667 215,-147 82,-35.33333 170.33333,-53 265,-53 94.66667,0 183,17.66667 265,53 82,35.33333 153.66667,84.33333 215,147 l -84,84 C 824.66667,-567.33333 765.16667,-607.5 697.5,-636.5 629.83333,-665.5 557.33333,-680 480,-680 c -77.33333,0 -149.83333,14.5 -217.5,43.5 -67.66667,29 -127.16667,69.16667 -178.5,120.5 z"
|
||||
id="path3"
|
||||
style="fill:#666666" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.3 KiB |
@ -67,7 +67,7 @@
|
||||
i2c_internal: i2c0 {
|
||||
compatible = "espressif,esp32-i2c-master";
|
||||
port = <I2C_NUM_0>;
|
||||
clock-frequency = <100000>;
|
||||
clock-frequency = <400000>;
|
||||
pin-sda = <&gpio0 31 GPIO_FLAG_PULL_UP>;
|
||||
pin-scl = <&gpio0 32 GPIO_FLAG_PULL_UP>;
|
||||
|
||||
|
||||
@ -32,7 +32,7 @@
|
||||
- Improve Setup: Show "Step done" screen
|
||||
- Make it more clear to end-users that an SD card is required to run Tactility
|
||||
- Warn if file operations are done from prohibited tasks (e.g. lvgl task)
|
||||
- stopAppFromToolbar() in Tactility.cpp stops the top-most app. Change it so the toolbar knows for which app id it is created, so it can rely on that.
|
||||
- stopAppFromToolbar() in lvgl/Lvgl.cpp stops the top-most app. Change it so the toolbar knows for which app id it is created, so it can rely on that.
|
||||
- Consider not unpacking `.app` files and executing them directly. Might want to cache file offsets. Cache file must be pinned to app version.
|
||||
- lvgl-module's spinner relies on hard-coded spinner asset from Tactility main project.
|
||||
- esp_lvgl_port settings has a large stack size (~9kB) to fix stackoverflow when LVGL events (e.g. button click) do actions like file operations do actions like file operations. Can we reduce the callstack?
|
||||
|
||||
@ -5,7 +5,7 @@ if (DEFINED ENV{ESP_IDF_VERSION})
|
||||
SRC_DIRS "Source/"
|
||||
INCLUDE_DIRS "Source/"
|
||||
PRIV_INCLUDE_DIRS "Private/"
|
||||
REQUIRES lvgl
|
||||
REQUIRES lvgl lodepng-module
|
||||
)
|
||||
|
||||
else()
|
||||
@ -25,6 +25,6 @@ else()
|
||||
)
|
||||
|
||||
target_link_libraries(lv_screenshot
|
||||
PUBLIC lvgl
|
||||
PUBLIC lvgl lodepng-module
|
||||
)
|
||||
endif()
|
||||
@ -1,11 +1,32 @@
|
||||
#include "src/libs/lodepng/lodepng.h"
|
||||
#include "save_png.h"
|
||||
|
||||
#include <lodepng/lodepng.h>
|
||||
#include <lvgl.h>
|
||||
|
||||
bool lv_screenshot_save_png_file(const uint8_t* image, uint32_t w, uint32_t h, uint32_t bpp, const char* filename) {
|
||||
unsigned char* png = NULL;
|
||||
size_t png_size = 0;
|
||||
unsigned error;
|
||||
if (bpp == 32) {
|
||||
return lodepng_encode32_file(filename, image, w, h) == 0;
|
||||
error = lodepng_encode32(&png, &png_size, image, w, h);
|
||||
} else if (bpp == 24) {
|
||||
return lodepng_encode24_file(filename, image, w, h) == 0;
|
||||
error = lodepng_encode24(&png, &png_size, image, w, h);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
if (error) {
|
||||
lodepng_free(png);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Written through lv_fs, so LVGL drive letter paths ("A:...") work
|
||||
bool success = false;
|
||||
lv_fs_file_t file;
|
||||
if (lv_fs_open(&file, filename, LV_FS_MODE_WR) == LV_FS_RES_OK) {
|
||||
uint32_t written = 0;
|
||||
success = lv_fs_write(&file, png, png_size, &written) == LV_FS_RES_OK && written == png_size;
|
||||
lv_fs_close(&file);
|
||||
}
|
||||
lodepng_free(png);
|
||||
return success;
|
||||
}
|
||||
|
||||
17
Modules/binfont-module/CMakeLists.txt
Normal file
@ -0,0 +1,17 @@
|
||||
cmake_minimum_required(VERSION 3.20)
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/../../Buildscripts/module.cmake")
|
||||
|
||||
file(GLOB_RECURSE SOURCE_FILES "source/*.c*")
|
||||
|
||||
list(APPEND REQUIRES_LIST
|
||||
TactilityKernel
|
||||
graphics-module
|
||||
)
|
||||
|
||||
tactility_add_module(binfont-module
|
||||
SRCS ${SOURCE_FILES}
|
||||
INCLUDE_DIRS include/
|
||||
PRIV_INCLUDE_DIRS private/
|
||||
REQUIRES ${REQUIRES_LIST}
|
||||
)
|
||||
195
Modules/binfont-module/LICENSE-Apache-2.0.md
Normal file
@ -0,0 +1,195 @@
|
||||
Apache License
|
||||
==============
|
||||
|
||||
_Version 2.0, January 2004_
|
||||
_<<http://www.apache.org/licenses/>>_
|
||||
|
||||
### Terms and Conditions for use, reproduction, and distribution
|
||||
|
||||
#### 1. Definitions
|
||||
|
||||
“License” shall mean the terms and conditions for use, reproduction, and
|
||||
distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
“Licensor” shall mean the copyright owner or entity authorized by the copyright
|
||||
owner that is granting the License.
|
||||
|
||||
“Legal Entity” shall mean the union of the acting entity and all other entities
|
||||
that control, are controlled by, or are under common control with that entity.
|
||||
For the purposes of this definition, “control” means **(i)** the power, direct or
|
||||
indirect, to cause the direction or management of such entity, whether by
|
||||
contract or otherwise, or **(ii)** ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or **(iii)** beneficial ownership of such entity.
|
||||
|
||||
“You” (or “Your”) shall mean an individual or Legal Entity exercising
|
||||
permissions granted by this License.
|
||||
|
||||
“Source” form shall mean the preferred form for making modifications, including
|
||||
but not limited to software source code, documentation source, and configuration
|
||||
files.
|
||||
|
||||
“Object” form shall mean any form resulting from mechanical transformation or
|
||||
translation of a Source form, including but not limited to compiled object code,
|
||||
generated documentation, and conversions to other media types.
|
||||
|
||||
“Work” shall mean the work of authorship, whether in Source or Object form, made
|
||||
available under the License, as indicated by a copyright notice that is included
|
||||
in or attached to the work (an example is provided in the Appendix below).
|
||||
|
||||
“Derivative Works” shall mean any work, whether in Source or Object form, that
|
||||
is based on (or derived from) the Work and for which the editorial revisions,
|
||||
annotations, elaborations, or other modifications represent, as a whole, an
|
||||
original work of authorship. For the purposes of this License, Derivative Works
|
||||
shall not include works that remain separable from, or merely link (or bind by
|
||||
name) to the interfaces of, the Work and Derivative Works thereof.
|
||||
|
||||
“Contribution” shall mean any work of authorship, including the original version
|
||||
of the Work and any modifications or additions to that Work or Derivative Works
|
||||
thereof, that is intentionally submitted to Licensor for inclusion in the Work
|
||||
by the copyright owner or by an individual or Legal Entity authorized to submit
|
||||
on behalf of the copyright owner. For the purposes of this definition,
|
||||
“submitted” means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems, and
|
||||
issue tracking systems that are managed by, or on behalf of, the Licensor for
|
||||
the purpose of discussing and improving the Work, but excluding communication
|
||||
that is conspicuously marked or otherwise designated in writing by the copyright
|
||||
owner as “Not a Contribution.”
|
||||
|
||||
“Contributor” shall mean Licensor and any individual or Legal Entity on behalf
|
||||
of whom a Contribution has been received by Licensor and subsequently
|
||||
incorporated within the Work.
|
||||
|
||||
#### 2. Grant of Copyright License
|
||||
|
||||
Subject to the terms and conditions of this License, each Contributor hereby
|
||||
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
|
||||
irrevocable copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the Work and such
|
||||
Derivative Works in Source or Object form.
|
||||
|
||||
#### 3. Grant of Patent License
|
||||
|
||||
Subject to the terms and conditions of this License, each Contributor hereby
|
||||
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
|
||||
irrevocable (except as stated in this section) patent license to make, have
|
||||
made, use, offer to sell, sell, import, and otherwise transfer the Work, where
|
||||
such license applies only to those patent claims licensable by such Contributor
|
||||
that are necessarily infringed by their Contribution(s) alone or by combination
|
||||
of their Contribution(s) with the Work to which such Contribution(s) was
|
||||
submitted. If You institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work or a
|
||||
Contribution incorporated within the Work constitutes direct or contributory
|
||||
patent infringement, then any patent licenses granted to You under this License
|
||||
for that Work shall terminate as of the date such litigation is filed.
|
||||
|
||||
#### 4. Redistribution
|
||||
|
||||
You may reproduce and distribute copies of the Work or Derivative Works thereof
|
||||
in any medium, with or without modifications, and in Source or Object form,
|
||||
provided that You meet the following conditions:
|
||||
|
||||
* **(a)** You must give any other recipients of the Work or Derivative Works a copy of
|
||||
this License; and
|
||||
* **(b)** You must cause any modified files to carry prominent notices stating that You
|
||||
changed the files; and
|
||||
* **(c)** You must retain, in the Source form of any Derivative Works that You distribute,
|
||||
all copyright, patent, trademark, and attribution notices from the Source form
|
||||
of the Work, excluding those notices that do not pertain to any part of the
|
||||
Derivative Works; and
|
||||
* **(d)** If the Work includes a “NOTICE” text file as part of its distribution, then any
|
||||
Derivative Works that You distribute must include a readable copy of the
|
||||
attribution notices contained within such NOTICE file, excluding those notices
|
||||
that do not pertain to any part of the Derivative Works, in at least one of the
|
||||
following places: within a NOTICE text file distributed as part of the
|
||||
Derivative Works; within the Source form or documentation, if provided along
|
||||
with the Derivative Works; or, within a display generated by the Derivative
|
||||
Works, if and wherever such third-party notices normally appear. The contents of
|
||||
the NOTICE file are for informational purposes only and do not modify the
|
||||
License. You may add Your own attribution notices within Derivative Works that
|
||||
You distribute, alongside or as an addendum to the NOTICE text from the Work,
|
||||
provided that such additional attribution notices cannot be construed as
|
||||
modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and may provide
|
||||
additional or different license terms and conditions for use, reproduction, or
|
||||
distribution of Your modifications, or for any such Derivative Works as a whole,
|
||||
provided Your use, reproduction, and distribution of the Work otherwise complies
|
||||
with the conditions stated in this License.
|
||||
|
||||
#### 5. Submission of Contributions
|
||||
|
||||
Unless You explicitly state otherwise, any Contribution intentionally submitted
|
||||
for inclusion in the Work by You to the Licensor shall be under the terms and
|
||||
conditions of this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify the terms of
|
||||
any separate license agreement you may have executed with Licensor regarding
|
||||
such Contributions.
|
||||
|
||||
#### 6. Trademarks
|
||||
|
||||
This License does not grant permission to use the trade names, trademarks,
|
||||
service marks, or product names of the Licensor, except as required for
|
||||
reasonable and customary use in describing the origin of the Work and
|
||||
reproducing the content of the NOTICE file.
|
||||
|
||||
#### 7. Disclaimer of Warranty
|
||||
|
||||
Unless required by applicable law or agreed to in writing, Licensor provides the
|
||||
Work (and each Contributor provides its Contributions) on an “AS IS” BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
|
||||
including, without limitation, any warranties or conditions of TITLE,
|
||||
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
|
||||
solely responsible for determining the appropriateness of using or
|
||||
redistributing the Work and assume any risks associated with Your exercise of
|
||||
permissions under this License.
|
||||
|
||||
#### 8. Limitation of Liability
|
||||
|
||||
In no event and under no legal theory, whether in tort (including negligence),
|
||||
contract, or otherwise, unless required by applicable law (such as deliberate
|
||||
and grossly negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special, incidental,
|
||||
or consequential damages of any character arising as a result of this License or
|
||||
out of the use or inability to use the Work (including but not limited to
|
||||
damages for loss of goodwill, work stoppage, computer failure or malfunction, or
|
||||
any and all other commercial damages or losses), even if such Contributor has
|
||||
been advised of the possibility of such damages.
|
||||
|
||||
#### 9. Accepting Warranty or Additional Liability
|
||||
|
||||
While redistributing the Work or Derivative Works thereof, You may choose to
|
||||
offer, and charge a fee for, acceptance of support, warranty, indemnity, or
|
||||
other liability obligations and/or rights consistent with this License. However,
|
||||
in accepting such obligations, You may act only on Your own behalf and on Your
|
||||
sole responsibility, not on behalf of any other Contributor, and only if You
|
||||
agree to indemnify, defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason of your
|
||||
accepting any such warranty or additional liability.
|
||||
|
||||
_END OF TERMS AND CONDITIONS_
|
||||
|
||||
### APPENDIX: How to apply the Apache License to your work
|
||||
|
||||
To apply the Apache License to your work, attach the following boilerplate
|
||||
notice, with the fields enclosed by brackets `[]` replaced with your own
|
||||
identifying information. (Don't include the brackets!) The text should be
|
||||
enclosed in the appropriate comment syntax for the file format. We also
|
||||
recommend that a file or class name and description of purpose be included on
|
||||
the same “printed page” as the copyright notice for easier identification within
|
||||
third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
14
Modules/binfont-module/README.md
Normal file
@ -0,0 +1,14 @@
|
||||
# binfont-module
|
||||
|
||||
Bitmap fonts in the [lv_font_conv](https://github.com/lvgl/lv_font_conv) binary format (`--format bin`), usable with and without LVGL.
|
||||
|
||||
- `<binfont/binfont.h>`: load fonts and decode glyphs
|
||||
- `<binfont/generator.h>`: rasterize a TTF into the binary format on device
|
||||
- `<binfont/render.h>`: draw glyphs and text into a `PixelBuffer`
|
||||
|
||||
For LVGL, see `lvgl_binfont_create()` in lvgl-module's `<lvgl/binfont.h>`.
|
||||
|
||||
## License
|
||||
|
||||
This module is licensed under the [Apache v2.0](LICENSE-Apache-2.0.md) license.
|
||||
Uses [stb_truetype](https://github.com/nothings/stb) (public domain).
|
||||
118
Modules/binfont-module/include/binfont/binfont.h
Normal file
@ -0,0 +1,118 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
#pragma once
|
||||
|
||||
#include <tactility/error.h>
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* A bitmap font in the lv_font_conv binary format (lv_font_conv --format bin).
|
||||
* Thread-safe: a font can be used from multiple tasks at the same time.
|
||||
*/
|
||||
struct BinFont;
|
||||
|
||||
typedef struct BinFontMetrics {
|
||||
/** Font size in pixels, as passed to the converter */
|
||||
uint16_t size;
|
||||
/** Pixels above the baseline */
|
||||
int16_t ascent;
|
||||
/** Pixels below the baseline (negative) */
|
||||
int16_t descent;
|
||||
/** ascent - descent */
|
||||
uint16_t line_height;
|
||||
/** Distance from the bottom of the line to the baseline (-descent) */
|
||||
int16_t base_line;
|
||||
int16_t underline_position;
|
||||
uint16_t underline_thickness;
|
||||
/** Bits per pixel of the stored bitmaps (1-4) */
|
||||
uint8_t bpp;
|
||||
} BinFontMetrics;
|
||||
|
||||
typedef struct BinFontGlyph {
|
||||
uint32_t glyph_id;
|
||||
/** Horizontal advance in 1/16th pixels */
|
||||
uint32_t advance_x16;
|
||||
/** Bounding box left, relative to the pen position */
|
||||
int16_t x;
|
||||
/** Bounding box bottom, relative to the baseline (positive is up) */
|
||||
int16_t y;
|
||||
uint16_t width;
|
||||
uint16_t height;
|
||||
} BinFontGlyph;
|
||||
|
||||
/**
|
||||
* @brief Opens a font file.
|
||||
* The whole file is loaded into external memory (PSRAM) when available, otherwise into internal memory.
|
||||
* When that allocation fails, only the lookup tables are loaded and glyph data is read from the file
|
||||
* on demand: the file is opened and closed for every glyph lookup, unless it's kept open with
|
||||
* binfont_begin()/binfont_end().
|
||||
* @param[in] path the file path
|
||||
* @param[out] out the opened font
|
||||
* @retval ERROR_NONE on success
|
||||
* @retval ERROR_NOT_FOUND when the file can't be opened
|
||||
* @retval ERROR_NOT_SUPPORTED when the file is not a valid or supported font
|
||||
* @retval ERROR_OUT_OF_MEMORY when memory allocation failed
|
||||
*/
|
||||
error_t binfont_open_file(const char* path, struct BinFont** out);
|
||||
|
||||
/**
|
||||
* @brief Opens a font from memory.
|
||||
* @param[in] data the font file contents, which must stay valid until binfont_close()
|
||||
* @param[in] size the size of data in bytes
|
||||
* @param[in] take_ownership when true, data is released with memory_free() by binfont_close() (also on failure)
|
||||
* @param[out] out the opened font
|
||||
* @retval ERROR_NONE on success
|
||||
* @retval ERROR_NOT_SUPPORTED when the data is not a valid or supported font
|
||||
* @retval ERROR_OUT_OF_MEMORY when memory allocation failed
|
||||
*/
|
||||
error_t binfont_open_memory(const void* data, size_t size, bool take_ownership, struct BinFont** out);
|
||||
|
||||
/** Releases the font and all its resources. */
|
||||
void binfont_close(struct BinFont* font);
|
||||
|
||||
/**
|
||||
* @brief Keeps the font file open until the matching binfont_end(), so rendering many glyphs
|
||||
* doesn't open and close the file for each of them. Calls can be nested and used from multiple tasks.
|
||||
* Does nothing for fonts that are fully loaded in memory.
|
||||
* @retval ERROR_NONE on success
|
||||
* @retval ERROR_NOT_FOUND when the file can't be opened
|
||||
*/
|
||||
error_t binfont_begin(struct BinFont* font);
|
||||
|
||||
/** Ends a binfont_begin() session. The file is closed when no sessions remain. */
|
||||
void binfont_end(struct BinFont* font);
|
||||
|
||||
void binfont_get_metrics(const struct BinFont* font, BinFontMetrics* out);
|
||||
|
||||
/**
|
||||
* @param[in] font the font
|
||||
* @param[in] codepoint the Unicode codepoint
|
||||
* @param[out] out the glyph info
|
||||
* @return false when the font has no glyph for this codepoint
|
||||
*/
|
||||
bool binfont_get_glyph(struct BinFont* font, uint32_t codepoint, BinFontGlyph* out);
|
||||
|
||||
/** @return the kerning adjustment for a glyph pair in 1/16th pixels, or 0 when there is none */
|
||||
int32_t binfont_get_kerning_x16(struct BinFont* font, uint32_t left_glyph_id, uint32_t right_glyph_id);
|
||||
|
||||
/**
|
||||
* @brief Decodes a glyph bitmap as 8-bit alpha (0 = transparent, 255 = opaque).
|
||||
* @param[in] font the font
|
||||
* @param[in] glyph a glyph from binfont_get_glyph()
|
||||
* @param[out] out the destination: glyph->height rows of glyph->width bytes
|
||||
* @param[in] stride bytes per row in out (at least glyph->width)
|
||||
* @retval ERROR_NONE on success
|
||||
* @retval ERROR_INVALID_ARGUMENT when stride is too small
|
||||
* @retval ERROR_RESOURCE when the glyph data can't be read
|
||||
*/
|
||||
error_t binfont_get_glyph_bitmap(struct BinFont* font, const BinFontGlyph* glyph, uint8_t* out, size_t stride);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
40
Modules/binfont-module/include/binfont/generator.h
Normal file
@ -0,0 +1,40 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
#pragma once
|
||||
|
||||
#include <tactility/error.h>
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct BinFontGeneratorConfig {
|
||||
/** Path to a TrueType (.ttf) file */
|
||||
const char* ttf_path;
|
||||
/** Font size in pixels (em height) */
|
||||
uint16_t size;
|
||||
/** Bits per pixel: 1, 2, 3 or 4 */
|
||||
uint8_t bpp;
|
||||
/** Codepoints to include. Codepoints that the TTF doesn't contain are skipped. */
|
||||
const uint32_t* codepoints;
|
||||
size_t codepoint_count;
|
||||
} BinFontGeneratorConfig;
|
||||
|
||||
/**
|
||||
* @brief Rasterizes a TrueType font into the lv_font_conv binary format.
|
||||
* @param[in] config the generator configuration
|
||||
* @param[out] out_data the generated font file contents, to be released with memory_free()
|
||||
* @param[out] out_size the size of out_data in bytes
|
||||
* @retval ERROR_NONE on success
|
||||
* @retval ERROR_INVALID_ARGUMENT when the configuration is invalid
|
||||
* @retval ERROR_NOT_FOUND when the TTF file can't be read
|
||||
* @retval ERROR_NOT_SUPPORTED when the TTF file can't be parsed or contains none of the codepoints
|
||||
* @retval ERROR_OUT_OF_MEMORY when memory allocation failed
|
||||
*/
|
||||
error_t binfont_generate(const BinFontGeneratorConfig* config, uint8_t** out_data, size_t* out_size);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
14
Modules/binfont-module/include/binfont/module.h
Normal file
@ -0,0 +1,14 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
#pragma once
|
||||
|
||||
#include <tactility/module.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern struct Module binfont_module;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
57
Modules/binfont-module/include/binfont/render.h
Normal file
@ -0,0 +1,57 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
#pragma once
|
||||
|
||||
#include <binfont/binfont.h>
|
||||
#include <graphics/pixel_buffer.h>
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Alpha-blends one glyph over the existing pixels of a PixelBuffer.
|
||||
* @param[out] buffer destination, in any pixel format
|
||||
* @param[in] x pen position x
|
||||
* @param[in] baseline_y pen position y (the baseline)
|
||||
* @param[in] font the font
|
||||
* @param[in] codepoint the Unicode codepoint
|
||||
* @param[in] color glyph colour as RGB565
|
||||
* @param[in] conversion how colours reduce into the buffer's native format (see PixelBufferConversion)
|
||||
* @return the horizontal advance in pixels, or 0 when the font has no glyph for the codepoint
|
||||
*/
|
||||
int binfont_draw_glyph_rgb565(
|
||||
struct PixelBuffer* buffer,
|
||||
int x,
|
||||
int baseline_y,
|
||||
struct BinFont* font,
|
||||
uint32_t codepoint,
|
||||
uint16_t color,
|
||||
enum PixelBufferConversion conversion
|
||||
);
|
||||
|
||||
/**
|
||||
* @brief Alpha-blends a UTF-8 string over the existing pixels of a PixelBuffer, applying kerning.
|
||||
* @param[out] buffer destination, in any pixel format
|
||||
* @param[in] x pen position x
|
||||
* @param[in] baseline_y pen position y (the baseline)
|
||||
* @param[in] font the font
|
||||
* @param[in] text UTF-8 encoded, null-terminated text
|
||||
* @param[in] color glyph colour as RGB565
|
||||
* @param[in] conversion how colours reduce into the buffer's native format (see PixelBufferConversion)
|
||||
* @return the total advance in pixels
|
||||
*/
|
||||
int binfont_draw_text_rgb565(
|
||||
struct PixelBuffer* buffer,
|
||||
int x,
|
||||
int baseline_y,
|
||||
struct BinFont* font,
|
||||
const char* text,
|
||||
uint16_t color,
|
||||
enum PixelBufferConversion conversion
|
||||
);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
19
Modules/binfont-module/private/binfont_private.h
Normal file
@ -0,0 +1,19 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
#pragma once
|
||||
|
||||
#include <binfont/binfont.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Opens a font file without loading it into memory: only the lookup tables are loaded and
|
||||
* glyph data is read from the file on demand. binfont_open_file() falls back to this when the file
|
||||
* doesn't fit in memory.
|
||||
*/
|
||||
error_t binfont_open_file_streaming(const char* path, struct BinFont** out);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
5079
Modules/binfont-module/private/stb_truetype.h
Normal file
803
Modules/binfont-module/source/binfont.cpp
Normal file
@ -0,0 +1,803 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
#include <binfont/binfont.h>
|
||||
#include <binfont_private.h>
|
||||
|
||||
#include <tactility/concurrent/mutex.h>
|
||||
#include <tactility/memory.h>
|
||||
|
||||
#include <cstdint>
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
#include <initializer_list>
|
||||
|
||||
namespace {
|
||||
|
||||
constexpr size_t RECORD_HEADER_SIZE = 8;
|
||||
constexpr size_t HEAD_MIN_SIZE = 48;
|
||||
constexpr size_t CMAP_SUBTABLE_HEADER_SIZE = 16;
|
||||
constexpr size_t GLYPH_HEADER_MAX_BYTES = 16;
|
||||
|
||||
enum CmapFormat : uint8_t {
|
||||
CMAP_FORMAT_0 = 0,
|
||||
CMAP_FORMAT_SPARSE = 1,
|
||||
CMAP_FORMAT_0_TINY = 2,
|
||||
CMAP_FORMAT_SPARSE_TINY = 3,
|
||||
};
|
||||
|
||||
enum Compression : uint8_t {
|
||||
COMPRESSION_NONE = 0,
|
||||
COMPRESSION_RLE_PREFILTER = 1,
|
||||
COMPRESSION_RLE = 2,
|
||||
};
|
||||
|
||||
uint16_t read_u16(const uint8_t* p) {
|
||||
return static_cast<uint16_t>(p[0] | (p[1] << 8));
|
||||
}
|
||||
|
||||
int16_t read_i16(const uint8_t* p) {
|
||||
return static_cast<int16_t>(read_u16(p));
|
||||
}
|
||||
|
||||
uint32_t read_u32(const uint8_t* p) {
|
||||
return static_cast<uint32_t>(p[0]) | (static_cast<uint32_t>(p[1]) << 8) | (static_cast<uint32_t>(p[2]) << 16) | (static_cast<uint32_t>(p[3]) << 24);
|
||||
}
|
||||
|
||||
bool has_marker(const uint8_t* record, const char* marker) {
|
||||
return memcmp(record + 4, marker, 4) == 0;
|
||||
}
|
||||
|
||||
/** MSB-first bit reader. Bits past the end read as 0. */
|
||||
class BitReader {
|
||||
const uint8_t* data;
|
||||
size_t sizeBits;
|
||||
size_t position;
|
||||
|
||||
public:
|
||||
BitReader(const uint8_t* data, size_t size, size_t bitOffset = 0) : data(data), sizeBits(size * 8), position(bitOffset) {}
|
||||
|
||||
uint32_t read(uint8_t bits) {
|
||||
uint32_t value = 0;
|
||||
for (uint8_t i = 0; i < bits; i++) {
|
||||
value <<= 1;
|
||||
if (position < sizeBits) {
|
||||
value |= (data[position >> 3] >> (7 - (position & 7))) & 1U;
|
||||
}
|
||||
position++;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
int32_t readSigned(uint8_t bits) {
|
||||
if (bits == 0) {
|
||||
return 0;
|
||||
}
|
||||
const uint32_t value = read(bits);
|
||||
if (value & (1U << (bits - 1))) {
|
||||
return static_cast<int32_t>(value | (~0U << bits));
|
||||
}
|
||||
return static_cast<int32_t>(value);
|
||||
}
|
||||
};
|
||||
|
||||
/** Decoder for the modified I3BN RLE stream of lv_font_conv. */
|
||||
class RleReader {
|
||||
enum class State { Single, Repeated, Counter };
|
||||
|
||||
BitReader& bits;
|
||||
uint8_t bpp;
|
||||
State state = State::Single;
|
||||
bool first = true;
|
||||
uint8_t previous = 0;
|
||||
uint32_t count = 0;
|
||||
|
||||
uint8_t readSingle() {
|
||||
previous = static_cast<uint8_t>(bits.read(bpp));
|
||||
state = State::Single;
|
||||
return previous;
|
||||
}
|
||||
|
||||
public:
|
||||
RleReader(BitReader& bits, uint8_t bpp) : bits(bits), bpp(bpp) {}
|
||||
|
||||
uint8_t next() {
|
||||
switch (state) {
|
||||
case State::Single: {
|
||||
const auto value = static_cast<uint8_t>(bits.read(bpp));
|
||||
if (!first && value == previous) {
|
||||
count = 0;
|
||||
state = State::Repeated;
|
||||
}
|
||||
first = false;
|
||||
previous = value;
|
||||
return value;
|
||||
}
|
||||
case State::Repeated: {
|
||||
count++;
|
||||
if (bits.read(1) == 0) {
|
||||
return readSingle();
|
||||
}
|
||||
if (count == 11) {
|
||||
count = bits.read(6);
|
||||
if (count != 0) {
|
||||
state = State::Counter;
|
||||
} else {
|
||||
return readSingle();
|
||||
}
|
||||
}
|
||||
return previous;
|
||||
}
|
||||
case State::Counter:
|
||||
count--;
|
||||
if (count == 0) {
|
||||
return readSingle();
|
||||
}
|
||||
return previous;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
struct Header {
|
||||
uint16_t fontSize;
|
||||
int16_t ascent;
|
||||
int16_t descent;
|
||||
uint16_t defaultAdvanceWidth;
|
||||
uint16_t kerningScale;
|
||||
uint8_t indexToLocFormat;
|
||||
uint8_t glyphIdFormat;
|
||||
uint8_t advanceWidthFormat;
|
||||
uint8_t bpp;
|
||||
uint8_t xyBits;
|
||||
uint8_t whBits;
|
||||
uint8_t advanceWidthBits;
|
||||
uint8_t compression;
|
||||
uint8_t subpixelMode;
|
||||
int16_t underlinePosition;
|
||||
uint16_t underlineThickness;
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
struct BinFont {
|
||||
Header header;
|
||||
/** The whole file in memory mode, nullptr in stream mode */
|
||||
const uint8_t* data;
|
||||
bool ownsData;
|
||||
/** Stream mode only: the file path, and the file while it's open (guarded by mutex) */
|
||||
char* path;
|
||||
FILE* file;
|
||||
uint32_t sessionCount;
|
||||
Mutex mutex;
|
||||
/** Owned copy of the cmap/loca/kern records in stream mode */
|
||||
uint8_t* tables;
|
||||
/** Each record pointer includes its 8-byte record header */
|
||||
const uint8_t* cmap;
|
||||
size_t cmapSize;
|
||||
const uint8_t* loca;
|
||||
size_t locaSize;
|
||||
uint32_t locaCount;
|
||||
const uint8_t* kern;
|
||||
size_t kernSize;
|
||||
size_t glyfOffset;
|
||||
size_t glyfSize;
|
||||
};
|
||||
|
||||
namespace {
|
||||
|
||||
bool read_at(BinFont* font, size_t offset, uint8_t* out, size_t size) {
|
||||
if (fseek(font->file, static_cast<long>(offset), SEEK_SET) != 0) {
|
||||
return false;
|
||||
}
|
||||
return fread(out, 1, size, font->file) == size;
|
||||
}
|
||||
|
||||
bool parse_header(const uint8_t* record, size_t size, Header& header) {
|
||||
if (size < HEAD_MIN_SIZE || !has_marker(record, "head")) {
|
||||
return false;
|
||||
}
|
||||
header.fontSize = read_u16(record + 14);
|
||||
header.ascent = read_i16(record + 16);
|
||||
header.descent = read_i16(record + 18);
|
||||
header.defaultAdvanceWidth = read_u16(record + 30);
|
||||
header.kerningScale = read_u16(record + 32);
|
||||
header.indexToLocFormat = record[34];
|
||||
header.glyphIdFormat = record[35];
|
||||
header.advanceWidthFormat = record[36];
|
||||
header.bpp = record[37];
|
||||
header.xyBits = record[38];
|
||||
header.whBits = record[39];
|
||||
header.advanceWidthBits = record[40];
|
||||
header.compression = record[41];
|
||||
header.subpixelMode = record[42];
|
||||
header.underlinePosition = read_i16(record + 44);
|
||||
header.underlineThickness = read_u16(record + 46);
|
||||
|
||||
return header.bpp >= 1 && header.bpp <= 4 &&
|
||||
header.compression <= COMPRESSION_RLE &&
|
||||
header.subpixelMode == 0 &&
|
||||
header.indexToLocFormat <= 1 &&
|
||||
header.xyBits <= 16 && header.whBits <= 16 && header.advanceWidthBits <= 32;
|
||||
}
|
||||
|
||||
bool validate_cmap(const uint8_t* cmap, size_t size) {
|
||||
if (size < 12) {
|
||||
return false;
|
||||
}
|
||||
const uint32_t count = read_u32(cmap + 8);
|
||||
if (count > (size - 12) / CMAP_SUBTABLE_HEADER_SIZE) {
|
||||
return false;
|
||||
}
|
||||
for (uint32_t i = 0; i < count; i++) {
|
||||
const uint8_t* subtable = cmap + 12 + i * CMAP_SUBTABLE_HEADER_SIZE;
|
||||
const size_t data_offset = read_u32(subtable);
|
||||
const size_t range_length = read_u16(subtable + 8);
|
||||
const size_t entries = read_u16(subtable + 12);
|
||||
size_t data_size;
|
||||
switch (subtable[14]) {
|
||||
case CMAP_FORMAT_0: data_size = range_length; break;
|
||||
case CMAP_FORMAT_SPARSE: data_size = entries * 4; break;
|
||||
case CMAP_FORMAT_0_TINY: data_size = 0; break;
|
||||
case CMAP_FORMAT_SPARSE_TINY: data_size = entries * 2; break;
|
||||
default: return false;
|
||||
}
|
||||
if (data_size > 0 && (data_offset > size || data_size > size - data_offset)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool validate_kern(const uint8_t* kern, size_t size, uint8_t glyphIdFormat) {
|
||||
if (size < 16) {
|
||||
return false;
|
||||
}
|
||||
const uint8_t format = kern[8];
|
||||
if (format == 0) {
|
||||
const size_t count = read_u32(kern + 12);
|
||||
const size_t entry_size = (glyphIdFormat ? 4 : 2) + 1;
|
||||
return count <= (size - 16) / entry_size;
|
||||
} else if (format == 3) {
|
||||
const size_t glyph_count = read_u16(kern + 12);
|
||||
const size_t left_count = kern[14];
|
||||
const size_t right_count = kern[15];
|
||||
return 16 + glyph_count * 2 + left_count * right_count <= size;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Locates all tables. In memory mode the table pointers point into font->data, in stream mode
|
||||
* the lookup tables are copied into font->tables.
|
||||
*/
|
||||
error_t parse_layout(BinFont* font, size_t fileSize) {
|
||||
uint8_t record_header[RECORD_HEADER_SIZE];
|
||||
uint8_t head[64];
|
||||
|
||||
auto read = [font](size_t offset, uint8_t* out, size_t size) {
|
||||
if (font->data != nullptr) {
|
||||
memcpy(out, font->data + offset, size);
|
||||
return true;
|
||||
}
|
||||
return read_at(font, offset, out, size);
|
||||
};
|
||||
|
||||
// head
|
||||
if (fileSize < RECORD_HEADER_SIZE || !read(0, record_header, RECORD_HEADER_SIZE)) {
|
||||
return ERROR_NOT_SUPPORTED;
|
||||
}
|
||||
const size_t head_size = read_u32(record_header);
|
||||
if (head_size < HEAD_MIN_SIZE || head_size > fileSize) {
|
||||
return ERROR_NOT_SUPPORTED;
|
||||
}
|
||||
if (!read(0, head, HEAD_MIN_SIZE) || !parse_header(head, HEAD_MIN_SIZE, font->header)) {
|
||||
return ERROR_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
// cmap, loca, glyf and optionally kern follow each other
|
||||
size_t offsets[4] = {};
|
||||
size_t sizes[4] = {};
|
||||
const char* markers[4] = { "cmap", "loca", "glyf", "kern" };
|
||||
size_t offset = head_size;
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if (offset > fileSize || fileSize - offset < RECORD_HEADER_SIZE || !read(offset, record_header, RECORD_HEADER_SIZE)) {
|
||||
if (i == 3) {
|
||||
break; // kern is optional
|
||||
}
|
||||
return ERROR_NOT_SUPPORTED;
|
||||
}
|
||||
const size_t size = read_u32(record_header);
|
||||
if (!has_marker(record_header, markers[i]) || size < RECORD_HEADER_SIZE || size > fileSize - offset) {
|
||||
if (i == 3) {
|
||||
break;
|
||||
}
|
||||
return ERROR_NOT_SUPPORTED;
|
||||
}
|
||||
offsets[i] = offset;
|
||||
sizes[i] = size;
|
||||
offset += size;
|
||||
}
|
||||
|
||||
font->glyfOffset = offsets[2];
|
||||
font->glyfSize = sizes[2];
|
||||
|
||||
if (font->data != nullptr) {
|
||||
font->cmap = font->data + offsets[0];
|
||||
font->loca = font->data + offsets[1];
|
||||
font->kern = sizes[3] ? font->data + offsets[3] : nullptr;
|
||||
} else {
|
||||
font->tables = static_cast<uint8_t*>(memory_alloc(sizes[0] + sizes[1] + sizes[3]));
|
||||
if (font->tables == nullptr) {
|
||||
return ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
uint8_t* cursor = font->tables;
|
||||
for (int i : { 0, 1, 3 }) {
|
||||
if (sizes[i] > 0 && !read_at(font, offsets[i], cursor, sizes[i])) {
|
||||
return ERROR_NOT_SUPPORTED;
|
||||
}
|
||||
cursor += sizes[i];
|
||||
}
|
||||
font->cmap = font->tables;
|
||||
font->loca = font->tables + sizes[0];
|
||||
font->kern = sizes[3] ? font->tables + sizes[0] + sizes[1] : nullptr;
|
||||
}
|
||||
font->cmapSize = sizes[0];
|
||||
font->locaSize = sizes[1];
|
||||
font->kernSize = sizes[3];
|
||||
|
||||
if (!validate_cmap(font->cmap, font->cmapSize)) {
|
||||
return ERROR_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
if (font->locaSize < 12) {
|
||||
return ERROR_NOT_SUPPORTED;
|
||||
}
|
||||
font->locaCount = read_u32(font->loca + 8);
|
||||
const size_t loca_entry_size = font->header.indexToLocFormat ? 4 : 2;
|
||||
if (font->locaCount > (font->locaSize - 12) / loca_entry_size) {
|
||||
return ERROR_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
if (font->kern != nullptr && !validate_kern(font->kern, font->kernSize, font->header.glyphIdFormat)) {
|
||||
font->kern = nullptr;
|
||||
font->kernSize = 0;
|
||||
}
|
||||
|
||||
return ERROR_NONE;
|
||||
}
|
||||
|
||||
BinFont* create_font() {
|
||||
auto* font = static_cast<BinFont*>(memory_calloc(1, sizeof(BinFont)));
|
||||
if (font != nullptr) {
|
||||
mutex_construct(&font->mutex);
|
||||
}
|
||||
return font;
|
||||
}
|
||||
|
||||
uint32_t find_glyph_id(const BinFont* font, uint32_t codepoint) {
|
||||
const uint8_t* cmap = font->cmap;
|
||||
const uint32_t count = read_u32(cmap + 8);
|
||||
|
||||
// Find the last subtable that starts at or before the codepoint
|
||||
uint32_t low = 0;
|
||||
uint32_t high = count;
|
||||
while (low < high) {
|
||||
const uint32_t mid = (low + high) / 2;
|
||||
if (read_u32(cmap + 12 + mid * CMAP_SUBTABLE_HEADER_SIZE + 4) <= codepoint) {
|
||||
low = mid + 1;
|
||||
} else {
|
||||
high = mid;
|
||||
}
|
||||
}
|
||||
if (low == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
const uint8_t* subtable = cmap + 12 + (low - 1) * CMAP_SUBTABLE_HEADER_SIZE;
|
||||
const uint32_t data_offset = read_u32(subtable);
|
||||
const uint32_t range_start = read_u32(subtable + 4);
|
||||
const uint16_t range_length = read_u16(subtable + 8);
|
||||
const uint16_t glyph_id_start = read_u16(subtable + 10);
|
||||
const uint16_t entries = read_u16(subtable + 12);
|
||||
const uint32_t relative = codepoint - range_start;
|
||||
if (relative >= range_length) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
switch (subtable[14]) {
|
||||
case CMAP_FORMAT_0:
|
||||
return glyph_id_start + cmap[data_offset + relative];
|
||||
case CMAP_FORMAT_0_TINY:
|
||||
return glyph_id_start + relative;
|
||||
case CMAP_FORMAT_SPARSE:
|
||||
case CMAP_FORMAT_SPARSE_TINY: {
|
||||
const uint8_t* list = cmap + data_offset;
|
||||
uint32_t list_low = 0;
|
||||
uint32_t list_high = entries;
|
||||
while (list_low < list_high) {
|
||||
const uint32_t mid = (list_low + list_high) / 2;
|
||||
const uint16_t value = read_u16(list + mid * 2);
|
||||
if (value == relative) {
|
||||
if (subtable[14] == CMAP_FORMAT_SPARSE_TINY) {
|
||||
return glyph_id_start + mid;
|
||||
}
|
||||
return glyph_id_start + read_u16(list + entries * 2 + mid * 2);
|
||||
} else if (value < relative) {
|
||||
list_low = mid + 1;
|
||||
} else {
|
||||
list_high = mid;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/** Gets the offset and size of a glyph record, relative to the glyf data (after its record header). */
|
||||
bool get_glyph_location(const BinFont* font, uint32_t glyphId, size_t& offset, size_t& size) {
|
||||
if (glyphId == 0 || glyphId >= font->locaCount) {
|
||||
return false;
|
||||
}
|
||||
const uint8_t* entries = font->loca + 12;
|
||||
auto entry = [&](uint32_t index) -> size_t {
|
||||
return font->header.indexToLocFormat ? read_u32(entries + index * 4) : read_u16(entries + index * 2);
|
||||
};
|
||||
const size_t start = entry(glyphId);
|
||||
const size_t end = (glyphId + 1 < font->locaCount) ? entry(glyphId + 1) : font->glyfSize;
|
||||
if (start < RECORD_HEADER_SIZE || end < start || end > font->glyfSize) {
|
||||
return false;
|
||||
}
|
||||
offset = start;
|
||||
size = end - start;
|
||||
return true;
|
||||
}
|
||||
|
||||
/** Reads from the font file in stream mode. Outside of a session, the file is opened for this read only. */
|
||||
bool read_glyph_data(BinFont* font, size_t offset, uint8_t* out, size_t size) {
|
||||
mutex_lock(&font->mutex);
|
||||
const bool temporary = font->file == nullptr;
|
||||
if (temporary) {
|
||||
font->file = fopen(font->path, "rb");
|
||||
}
|
||||
const bool success = font->file != nullptr && read_at(font, offset, out, size);
|
||||
if (temporary && font->file != nullptr) {
|
||||
fclose(font->file);
|
||||
font->file = nullptr;
|
||||
}
|
||||
mutex_unlock(&font->mutex);
|
||||
return success;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the record of a glyph. In memory mode it points into the font data, in stream mode it
|
||||
* is read into buffer (bufferSize bytes) or, when that is too small, into an allocation returned
|
||||
* via allocated (to be freed by the caller).
|
||||
*/
|
||||
bool get_glyph_record(BinFont* font, uint32_t glyphId, size_t maxSize, uint8_t* buffer, size_t bufferSize, const uint8_t*& record, size_t& size, uint8_t*& allocated) {
|
||||
size_t offset;
|
||||
allocated = nullptr;
|
||||
if (!get_glyph_location(font, glyphId, offset, size)) {
|
||||
return false;
|
||||
}
|
||||
if (font->data != nullptr) {
|
||||
record = font->data + font->glyfOffset + offset;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (size > maxSize) {
|
||||
size = maxSize;
|
||||
}
|
||||
uint8_t* target = buffer;
|
||||
if (size > bufferSize) {
|
||||
allocated = static_cast<uint8_t*>(memory_alloc(size));
|
||||
if (allocated == nullptr) {
|
||||
return false;
|
||||
}
|
||||
target = allocated;
|
||||
}
|
||||
|
||||
const bool success = read_glyph_data(font, font->glyfOffset + offset, target, size);
|
||||
|
||||
if (!success) {
|
||||
memory_free(allocated);
|
||||
allocated = nullptr;
|
||||
return false;
|
||||
}
|
||||
record = target;
|
||||
return true;
|
||||
}
|
||||
|
||||
void parse_glyph(const Header& header, BitReader& reader, uint32_t glyphId, BinFontGlyph* out) {
|
||||
uint32_t advance = header.advanceWidthBits ? reader.read(header.advanceWidthBits) : header.defaultAdvanceWidth;
|
||||
if (header.advanceWidthFormat == 0) {
|
||||
advance *= 16;
|
||||
}
|
||||
out->glyph_id = glyphId;
|
||||
out->advance_x16 = advance;
|
||||
out->x = static_cast<int16_t>(reader.readSigned(header.xyBits));
|
||||
out->y = static_cast<int16_t>(reader.readSigned(header.xyBits));
|
||||
out->width = static_cast<uint16_t>(reader.read(header.whBits));
|
||||
out->height = static_cast<uint16_t>(reader.read(header.whBits));
|
||||
}
|
||||
|
||||
/** Opens a file for reading and determines its size */
|
||||
error_t open_file(const char* path, FILE*& file, size_t& size) {
|
||||
file = fopen(path, "rb");
|
||||
if (file == nullptr) {
|
||||
return ERROR_NOT_FOUND;
|
||||
}
|
||||
if (fseek(file, 0, SEEK_END) != 0) {
|
||||
fclose(file);
|
||||
return ERROR_NOT_SUPPORTED;
|
||||
}
|
||||
const long file_size = ftell(file);
|
||||
if (file_size <= 0 || fseek(file, 0, SEEK_SET) != 0) {
|
||||
fclose(file);
|
||||
return ERROR_NOT_SUPPORTED;
|
||||
}
|
||||
size = static_cast<size_t>(file_size);
|
||||
return ERROR_NONE;
|
||||
}
|
||||
|
||||
/** Loads the lookup tables from an open file, then closes it. Glyph data is read on demand. */
|
||||
error_t open_streaming(const char* path, FILE* file, size_t size, BinFont** out) {
|
||||
BinFont* font = create_font();
|
||||
if (font == nullptr) {
|
||||
fclose(file);
|
||||
return ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
font->file = file;
|
||||
|
||||
const size_t path_size = strlen(path) + 1;
|
||||
font->path = static_cast<char*>(memory_alloc(path_size));
|
||||
if (font->path == nullptr) {
|
||||
binfont_close(font);
|
||||
return ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
memcpy(font->path, path, path_size);
|
||||
|
||||
const error_t error = parse_layout(font, size);
|
||||
fclose(font->file);
|
||||
font->file = nullptr;
|
||||
if (error != ERROR_NONE) {
|
||||
binfont_close(font);
|
||||
return error;
|
||||
}
|
||||
*out = font;
|
||||
return ERROR_NONE;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
extern "C" {
|
||||
|
||||
error_t binfont_open_memory(const void* data, size_t size, bool take_ownership, BinFont** out) {
|
||||
BinFont* font = create_font();
|
||||
if (font == nullptr) {
|
||||
if (take_ownership) {
|
||||
memory_free(const_cast<void*>(data));
|
||||
}
|
||||
return ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
font->data = static_cast<const uint8_t*>(data);
|
||||
font->ownsData = take_ownership;
|
||||
|
||||
const error_t error = parse_layout(font, size);
|
||||
if (error != ERROR_NONE) {
|
||||
binfont_close(font);
|
||||
return error;
|
||||
}
|
||||
*out = font;
|
||||
return ERROR_NONE;
|
||||
}
|
||||
|
||||
error_t binfont_open_file(const char* path, BinFont** out) {
|
||||
FILE* file;
|
||||
size_t size;
|
||||
const error_t open_error = open_file(path, file, size);
|
||||
if (open_error != ERROR_NONE) {
|
||||
return open_error;
|
||||
}
|
||||
|
||||
const uint16_t memory_capability = memory_external_total() > 0 ? MEMORY_CAPABILITY_EXTERNAL : MEMORY_CAPABILITY_INTERNAL;
|
||||
const MemoryPolicy policy = { .required = memory_capability, .desired = 0, .alignment = 0 };
|
||||
auto* data = static_cast<uint8_t*>(memory_alloc_with_policy(size, &policy));
|
||||
if (data == nullptr) {
|
||||
return open_streaming(path, file, size, out);
|
||||
}
|
||||
|
||||
const bool success = fread(data, 1, size, file) == size;
|
||||
fclose(file);
|
||||
if (!success) {
|
||||
memory_free(data);
|
||||
return ERROR_NOT_SUPPORTED;
|
||||
}
|
||||
return binfont_open_memory(data, size, true, out);
|
||||
}
|
||||
|
||||
error_t binfont_open_file_streaming(const char* path, BinFont** out) {
|
||||
FILE* file;
|
||||
size_t size;
|
||||
const error_t open_error = open_file(path, file, size);
|
||||
if (open_error != ERROR_NONE) {
|
||||
return open_error;
|
||||
}
|
||||
return open_streaming(path, file, size, out);
|
||||
}
|
||||
|
||||
error_t binfont_begin(BinFont* font) {
|
||||
if (font->data != nullptr) {
|
||||
return ERROR_NONE;
|
||||
}
|
||||
mutex_lock(&font->mutex);
|
||||
if (font->sessionCount == 0) {
|
||||
font->file = fopen(font->path, "rb");
|
||||
if (font->file == nullptr) {
|
||||
mutex_unlock(&font->mutex);
|
||||
return ERROR_NOT_FOUND;
|
||||
}
|
||||
}
|
||||
font->sessionCount++;
|
||||
mutex_unlock(&font->mutex);
|
||||
return ERROR_NONE;
|
||||
}
|
||||
|
||||
void binfont_end(BinFont* font) {
|
||||
if (font->data != nullptr) {
|
||||
return;
|
||||
}
|
||||
mutex_lock(&font->mutex);
|
||||
if (font->sessionCount > 0) {
|
||||
font->sessionCount--;
|
||||
if (font->sessionCount == 0) {
|
||||
fclose(font->file);
|
||||
font->file = nullptr;
|
||||
}
|
||||
}
|
||||
mutex_unlock(&font->mutex);
|
||||
}
|
||||
|
||||
void binfont_close(BinFont* font) {
|
||||
if (font->ownsData) {
|
||||
memory_free(const_cast<uint8_t*>(font->data));
|
||||
}
|
||||
if (font->file != nullptr) {
|
||||
fclose(font->file);
|
||||
}
|
||||
memory_free(font->path);
|
||||
memory_free(font->tables);
|
||||
mutex_destruct(&font->mutex);
|
||||
memory_free(font);
|
||||
}
|
||||
|
||||
void binfont_get_metrics(const BinFont* font, BinFontMetrics* out) {
|
||||
const Header& header = font->header;
|
||||
out->size = header.fontSize;
|
||||
out->ascent = header.ascent;
|
||||
out->descent = header.descent;
|
||||
out->line_height = static_cast<uint16_t>(header.ascent - header.descent);
|
||||
out->base_line = static_cast<int16_t>(-header.descent);
|
||||
out->underline_position = header.underlinePosition;
|
||||
out->underline_thickness = header.underlineThickness;
|
||||
out->bpp = header.bpp;
|
||||
}
|
||||
|
||||
bool binfont_get_glyph(BinFont* font, uint32_t codepoint, BinFontGlyph* out) {
|
||||
const uint32_t glyph_id = find_glyph_id(font, codepoint);
|
||||
uint8_t buffer[GLYPH_HEADER_MAX_BYTES];
|
||||
const uint8_t* record;
|
||||
size_t size;
|
||||
uint8_t* allocated;
|
||||
if (!get_glyph_record(font, glyph_id, sizeof(buffer), buffer, sizeof(buffer), record, size, allocated)) {
|
||||
return false;
|
||||
}
|
||||
BitReader reader(record, size);
|
||||
parse_glyph(font->header, reader, glyph_id, out);
|
||||
return true;
|
||||
}
|
||||
|
||||
int32_t binfont_get_kerning_x16(BinFont* font, uint32_t left_glyph_id, uint32_t right_glyph_id) {
|
||||
const uint8_t* kern = font->kern;
|
||||
if (kern == nullptr) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int8_t value = 0;
|
||||
if (kern[8] == 0) {
|
||||
const uint32_t count = read_u32(kern + 12);
|
||||
const uint8_t* pairs = kern + 16;
|
||||
const bool wide = font->header.glyphIdFormat != 0;
|
||||
const size_t pair_size = wide ? 4 : 2;
|
||||
const uint32_t key = (left_glyph_id << 16) | right_glyph_id;
|
||||
uint32_t low = 0;
|
||||
uint32_t high = count;
|
||||
while (low < high) {
|
||||
const uint32_t mid = (low + high) / 2;
|
||||
const uint8_t* pair = pairs + mid * pair_size;
|
||||
const uint32_t left = wide ? read_u16(pair) : pair[0];
|
||||
const uint32_t right = wide ? read_u16(pair + 2) : pair[1];
|
||||
const uint32_t mid_key = (left << 16) | right;
|
||||
if (mid_key == key) {
|
||||
value = static_cast<int8_t>(pairs[count * pair_size + mid]);
|
||||
break;
|
||||
} else if (mid_key < key) {
|
||||
low = mid + 1;
|
||||
} else {
|
||||
high = mid;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
const uint16_t glyph_count = read_u16(kern + 12);
|
||||
const uint8_t right_count = kern[15];
|
||||
if (left_glyph_id >= glyph_count || right_glyph_id >= glyph_count) {
|
||||
return 0;
|
||||
}
|
||||
const uint8_t* left_classes = kern + 16;
|
||||
const uint8_t* right_classes = left_classes + glyph_count;
|
||||
const uint8_t* values = right_classes + glyph_count;
|
||||
const uint8_t left_class = left_classes[left_glyph_id];
|
||||
const uint8_t right_class = right_classes[right_glyph_id];
|
||||
if (left_class == 0 || right_class == 0 || left_class > kern[14] || right_class > right_count) {
|
||||
return 0;
|
||||
}
|
||||
value = static_cast<int8_t>(values[(left_class - 1) * right_count + (right_class - 1)]);
|
||||
}
|
||||
|
||||
return (static_cast<int32_t>(value) * font->header.kerningScale) >> 4;
|
||||
}
|
||||
|
||||
error_t binfont_get_glyph_bitmap(BinFont* font, const BinFontGlyph* glyph, uint8_t* out, size_t stride) {
|
||||
if (stride < glyph->width) {
|
||||
return ERROR_INVALID_ARGUMENT;
|
||||
}
|
||||
if (glyph->width == 0 || glyph->height == 0) {
|
||||
return ERROR_NONE;
|
||||
}
|
||||
|
||||
const uint8_t* record;
|
||||
size_t size;
|
||||
uint8_t* allocated;
|
||||
if (!get_glyph_record(font, glyph->glyph_id, SIZE_MAX, nullptr, 0, record, size, allocated)) {
|
||||
return ERROR_RESOURCE;
|
||||
}
|
||||
|
||||
const Header& header = font->header;
|
||||
const uint8_t bpp = header.bpp;
|
||||
const size_t header_bits = header.advanceWidthBits + 2U * header.xyBits + 2U * header.whBits;
|
||||
BitReader reader(record, size, header_bits);
|
||||
|
||||
// Raw pixel values first, so the XOR prefilter can work on the previous line
|
||||
if (header.compression == COMPRESSION_NONE) {
|
||||
for (uint16_t y = 0; y < glyph->height; y++) {
|
||||
uint8_t* line = out + y * stride;
|
||||
for (uint16_t x = 0; x < glyph->width; x++) {
|
||||
line[x] = static_cast<uint8_t>(reader.read(bpp));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
RleReader rle(reader, bpp);
|
||||
const bool prefilter = header.compression == COMPRESSION_RLE_PREFILTER;
|
||||
for (uint16_t y = 0; y < glyph->height; y++) {
|
||||
uint8_t* line = out + y * stride;
|
||||
const uint8_t* previous = line - stride;
|
||||
for (uint16_t x = 0; x < glyph->width; x++) {
|
||||
const uint8_t value = rle.next();
|
||||
line[x] = (prefilter && y > 0) ? (value ^ previous[x]) : value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const uint32_t max_value = (1U << bpp) - 1;
|
||||
for (uint16_t y = 0; y < glyph->height; y++) {
|
||||
uint8_t* line = out + y * stride;
|
||||
for (uint16_t x = 0; x < glyph->width; x++) {
|
||||
line[x] = static_cast<uint8_t>(line[x] * 255U / max_value);
|
||||
}
|
||||
}
|
||||
|
||||
memory_free(allocated);
|
||||
return ERROR_NONE;
|
||||
}
|
||||
|
||||
}
|
||||
443
Modules/binfont-module/source/generator.cpp
Normal file
@ -0,0 +1,443 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
#include <binfont/generator.h>
|
||||
|
||||
#include <tactility/memory.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
#include <cstdint>
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
|
||||
#define STBTT_STATIC
|
||||
#define STB_TRUETYPE_IMPLEMENTATION
|
||||
#define STBTT_malloc(size, user) ((void)(user), memory_alloc(size))
|
||||
#define STBTT_free(pointer, user) ((void)(user), memory_free(pointer))
|
||||
#include "stb_truetype.h"
|
||||
|
||||
namespace {
|
||||
|
||||
constexpr size_t HEAD_SIZE = 48;
|
||||
constexpr uint8_t CMAP_FORMAT_0_TINY = 2;
|
||||
constexpr uint8_t CMAP_FORMAT_SPARSE_TINY = 3;
|
||||
constexpr uint32_t CMAP_MAX_RANGE = 0xFFFF;
|
||||
|
||||
constexpr MemoryPolicy EXTERNAL_PREFERRED = { .required = 0, .desired = MEMORY_CAPABILITY_EXTERNAL, .alignment = 0 };
|
||||
|
||||
class ByteBuffer {
|
||||
uint8_t* data = nullptr;
|
||||
size_t size = 0;
|
||||
size_t capacity = 0;
|
||||
bool failed = false;
|
||||
|
||||
bool reserve(size_t required) {
|
||||
if (failed) {
|
||||
return false;
|
||||
}
|
||||
if (required <= capacity) {
|
||||
return true;
|
||||
}
|
||||
size_t new_capacity = capacity ? capacity * 2 : 4096;
|
||||
while (new_capacity < required) {
|
||||
new_capacity *= 2;
|
||||
}
|
||||
auto* new_data = static_cast<uint8_t*>(memory_realloc_with_policy(data, new_capacity, &EXTERNAL_PREFERRED));
|
||||
if (new_data == nullptr) {
|
||||
failed = true;
|
||||
return false;
|
||||
}
|
||||
data = new_data;
|
||||
capacity = new_capacity;
|
||||
return true;
|
||||
}
|
||||
|
||||
public:
|
||||
~ByteBuffer() { memory_free(data); }
|
||||
|
||||
size_t getSize() const { return size; }
|
||||
bool hasFailed() const { return failed; }
|
||||
|
||||
void append(const void* bytes, size_t count) {
|
||||
if (reserve(size + count)) {
|
||||
memcpy(data + size, bytes, count);
|
||||
size += count;
|
||||
}
|
||||
}
|
||||
|
||||
void appendZeros(size_t count) {
|
||||
if (reserve(size + count)) {
|
||||
memset(data + size, 0, count);
|
||||
size += count;
|
||||
}
|
||||
}
|
||||
|
||||
void appendU8(uint8_t value) { append(&value, 1); }
|
||||
|
||||
void appendU16(uint16_t value) {
|
||||
const uint8_t bytes[2] = { static_cast<uint8_t>(value), static_cast<uint8_t>(value >> 8) };
|
||||
append(bytes, 2);
|
||||
}
|
||||
|
||||
void appendU32(uint32_t value) {
|
||||
const uint8_t bytes[4] = { static_cast<uint8_t>(value), static_cast<uint8_t>(value >> 8), static_cast<uint8_t>(value >> 16), static_cast<uint8_t>(value >> 24) };
|
||||
append(bytes, 4);
|
||||
}
|
||||
|
||||
void setU32(size_t offset, uint32_t value) {
|
||||
if (!failed) {
|
||||
data[offset] = static_cast<uint8_t>(value);
|
||||
data[offset + 1] = static_cast<uint8_t>(value >> 8);
|
||||
data[offset + 2] = static_cast<uint8_t>(value >> 16);
|
||||
data[offset + 3] = static_cast<uint8_t>(value >> 24);
|
||||
}
|
||||
}
|
||||
|
||||
void alignTo4() { appendZeros((4 - size % 4) % 4); }
|
||||
|
||||
/** Starts a record and returns its offset, for endRecord(). */
|
||||
size_t beginRecord(const char* marker) {
|
||||
const size_t offset = size;
|
||||
appendU32(0);
|
||||
append(marker, 4);
|
||||
return offset;
|
||||
}
|
||||
|
||||
void endRecord(size_t offset) { setU32(offset, static_cast<uint32_t>(size - offset)); }
|
||||
|
||||
uint8_t* release() {
|
||||
uint8_t* result = data;
|
||||
data = nullptr;
|
||||
size = 0;
|
||||
capacity = 0;
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
/** MSB-first bit writer */
|
||||
class BitWriter {
|
||||
ByteBuffer& buffer;
|
||||
uint8_t current = 0;
|
||||
uint8_t used = 0;
|
||||
|
||||
public:
|
||||
explicit BitWriter(ByteBuffer& buffer) : buffer(buffer) {}
|
||||
|
||||
void write(uint32_t value, uint8_t bits) {
|
||||
while (bits > 0) {
|
||||
bits--;
|
||||
current = static_cast<uint8_t>((current << 1) | ((value >> bits) & 1U));
|
||||
used++;
|
||||
if (used == 8) {
|
||||
buffer.appendU8(current);
|
||||
current = 0;
|
||||
used = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void flush() {
|
||||
if (used > 0) {
|
||||
buffer.appendU8(static_cast<uint8_t>(current << (8 - used)));
|
||||
current = 0;
|
||||
used = 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
struct GlyphInfo {
|
||||
uint32_t codepoint;
|
||||
int ttfIndex;
|
||||
uint32_t advanceX16;
|
||||
int x0, y0, x1, y1; // stb_truetype bitmap box: y points down
|
||||
};
|
||||
|
||||
uint8_t bits_for_unsigned(uint32_t value) {
|
||||
uint8_t bits = 1;
|
||||
while (bits < 32 && (value >> bits) != 0) {
|
||||
bits++;
|
||||
}
|
||||
return bits;
|
||||
}
|
||||
|
||||
uint8_t bits_for_signed(int32_t min, int32_t max) {
|
||||
uint8_t bits = 1;
|
||||
while (bits < 32 && (min < -(1 << (bits - 1)) || max > (1 << (bits - 1)) - 1)) {
|
||||
bits++;
|
||||
}
|
||||
return bits;
|
||||
}
|
||||
|
||||
int16_t scale_metric(int value, float scale) {
|
||||
return static_cast<int16_t>(std::lround(static_cast<float>(value) * scale));
|
||||
}
|
||||
|
||||
uint8_t* read_file(const char* path, size_t& size) {
|
||||
FILE* file = fopen(path, "rb");
|
||||
if (file == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
uint8_t* data = nullptr;
|
||||
long file_size = 0;
|
||||
if (fseek(file, 0, SEEK_END) == 0 && (file_size = ftell(file)) > 0 && fseek(file, 0, SEEK_SET) == 0) {
|
||||
data = static_cast<uint8_t*>(memory_alloc_with_policy(static_cast<size_t>(file_size), &EXTERNAL_PREFERRED));
|
||||
if (data != nullptr && fread(data, 1, static_cast<size_t>(file_size), file) != static_cast<size_t>(file_size)) {
|
||||
memory_free(data);
|
||||
data = nullptr;
|
||||
}
|
||||
}
|
||||
fclose(file);
|
||||
size = static_cast<size_t>(file_size);
|
||||
return data;
|
||||
}
|
||||
|
||||
void write_cmap(ByteBuffer& out, const GlyphInfo* glyphs, size_t count) {
|
||||
// Glyph ids are 1..count in codepoint order, so every subtable can be a "tiny" format
|
||||
struct Range {
|
||||
size_t first;
|
||||
size_t count;
|
||||
bool contiguous;
|
||||
};
|
||||
|
||||
auto next_range = [&](size_t first) {
|
||||
Range range = { first, 1, true };
|
||||
while (first + range.count < count && range.count < CMAP_MAX_RANGE) {
|
||||
const GlyphInfo& candidate = glyphs[first + range.count];
|
||||
if (candidate.codepoint - glyphs[first].codepoint >= CMAP_MAX_RANGE) {
|
||||
break;
|
||||
}
|
||||
if (candidate.codepoint != glyphs[first].codepoint + range.count) {
|
||||
range.contiguous = false;
|
||||
}
|
||||
range.count++;
|
||||
}
|
||||
return range;
|
||||
};
|
||||
|
||||
uint32_t range_count = 0;
|
||||
for (size_t i = 0; i < count; i += next_range(i).count) {
|
||||
range_count++;
|
||||
}
|
||||
|
||||
const size_t record = out.beginRecord("cmap");
|
||||
out.appendU32(range_count);
|
||||
|
||||
size_t data_offset = 12 + range_count * 16;
|
||||
for (size_t i = 0; i < count;) {
|
||||
const Range range = next_range(i);
|
||||
const uint32_t range_start = glyphs[i].codepoint;
|
||||
const uint32_t range_length = glyphs[i + range.count - 1].codepoint - range_start + 1;
|
||||
out.appendU32(range.contiguous ? 0 : static_cast<uint32_t>(data_offset));
|
||||
out.appendU32(range_start);
|
||||
out.appendU16(static_cast<uint16_t>(range_length));
|
||||
out.appendU16(static_cast<uint16_t>(i + 1));
|
||||
out.appendU16(range.contiguous ? 0 : static_cast<uint16_t>(range.count));
|
||||
out.appendU8(range.contiguous ? CMAP_FORMAT_0_TINY : CMAP_FORMAT_SPARSE_TINY);
|
||||
out.appendU8(0);
|
||||
if (!range.contiguous) {
|
||||
data_offset += (range.count * 2 + 3) & ~static_cast<size_t>(3);
|
||||
}
|
||||
i += range.count;
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < count;) {
|
||||
const Range range = next_range(i);
|
||||
if (!range.contiguous) {
|
||||
for (size_t j = 0; j < range.count; j++) {
|
||||
out.appendU16(static_cast<uint16_t>(glyphs[i + j].codepoint - glyphs[i].codepoint));
|
||||
}
|
||||
out.alignTo4();
|
||||
}
|
||||
i += range.count;
|
||||
}
|
||||
|
||||
out.endRecord(record);
|
||||
}
|
||||
|
||||
error_t generate(const BinFontGeneratorConfig* config, const stbtt_fontinfo& info, GlyphInfo* glyphs, ByteBuffer& out) {
|
||||
const float scale = stbtt_ScaleForMappingEmToPixels(&info, config->size);
|
||||
|
||||
// Collect glyphs, sorted by codepoint and without duplicates or missing glyphs
|
||||
size_t count = 0;
|
||||
for (size_t i = 0; i < config->codepoint_count; i++) {
|
||||
const int index = stbtt_FindGlyphIndex(&info, static_cast<int>(config->codepoints[i]));
|
||||
if (index != 0) {
|
||||
glyphs[count].codepoint = config->codepoints[i];
|
||||
glyphs[count].ttfIndex = index;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
std::sort(glyphs, glyphs + count, [](const GlyphInfo& a, const GlyphInfo& b) { return a.codepoint < b.codepoint; });
|
||||
count = std::unique(glyphs, glyphs + count, [](const GlyphInfo& a, const GlyphInfo& b) { return a.codepoint == b.codepoint; }) - glyphs;
|
||||
if (count == 0 || count >= 0xFFFF) {
|
||||
return ERROR_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
int32_t min_xy = 0;
|
||||
int32_t max_xy = 0;
|
||||
uint32_t max_wh = 0;
|
||||
uint32_t max_advance = 0;
|
||||
// Like lv_font_conv, ascent and descent are the extents of the included glyphs
|
||||
int32_t min_y = INT32_MAX;
|
||||
int32_t max_y = INT32_MIN;
|
||||
for (size_t i = 0; i < count; i++) {
|
||||
GlyphInfo& glyph = glyphs[i];
|
||||
int advance;
|
||||
int left_side_bearing;
|
||||
stbtt_GetGlyphHMetrics(&info, glyph.ttfIndex, &advance, &left_side_bearing);
|
||||
glyph.advanceX16 = static_cast<uint32_t>(std::lround(static_cast<float>(advance) * scale * 16.0f));
|
||||
stbtt_GetGlyphBitmapBox(&info, glyph.ttfIndex, scale, scale, &glyph.x0, &glyph.y0, &glyph.x1, &glyph.y1);
|
||||
|
||||
const int32_t bottom = -glyph.y1;
|
||||
min_xy = std::min({ min_xy, static_cast<int32_t>(glyph.x0), bottom });
|
||||
max_xy = std::max({ max_xy, static_cast<int32_t>(glyph.x0), bottom });
|
||||
max_wh = std::max({ max_wh, static_cast<uint32_t>(glyph.x1 - glyph.x0), static_cast<uint32_t>(glyph.y1 - glyph.y0) });
|
||||
max_advance = std::max(max_advance, glyph.advanceX16);
|
||||
min_y = std::min(min_y, bottom);
|
||||
max_y = std::max(max_y, static_cast<int32_t>(-glyph.y0));
|
||||
}
|
||||
|
||||
const uint8_t xy_bits = bits_for_signed(min_xy, max_xy);
|
||||
const uint8_t wh_bits = bits_for_unsigned(max_wh);
|
||||
const uint8_t advance_bits = bits_for_unsigned(max_advance);
|
||||
const uint32_t glyph_count = static_cast<uint32_t>(count) + 1;
|
||||
|
||||
int typo_ascent = 0;
|
||||
int typo_descent = 0;
|
||||
int typo_line_gap = 0;
|
||||
stbtt_GetFontVMetricsOS2(&info, &typo_ascent, &typo_descent, &typo_line_gap);
|
||||
int underline_position = 0;
|
||||
int underline_thickness = 0;
|
||||
const stbtt_uint32 post = stbtt__find_table(info.data, info.fontstart, "post");
|
||||
if (post != 0) {
|
||||
underline_position = ttSHORT(info.data + post + 8);
|
||||
underline_thickness = ttSHORT(info.data + post + 10);
|
||||
}
|
||||
|
||||
// head
|
||||
const size_t head = out.beginRecord("head");
|
||||
out.appendU32(1); // version
|
||||
out.appendU16(3); // additional tables: cmap, loca, glyf
|
||||
out.appendU16(config->size);
|
||||
out.appendU16(static_cast<uint16_t>(max_y));
|
||||
out.appendU16(static_cast<uint16_t>(min_y));
|
||||
out.appendU16(static_cast<uint16_t>(scale_metric(typo_ascent, scale)));
|
||||
out.appendU16(static_cast<uint16_t>(scale_metric(typo_descent, scale)));
|
||||
out.appendU16(static_cast<uint16_t>(scale_metric(typo_line_gap, scale)));
|
||||
out.appendU16(static_cast<uint16_t>(min_y));
|
||||
out.appendU16(static_cast<uint16_t>(max_y));
|
||||
out.appendU16(0); // default advance width
|
||||
out.appendU16(16); // kerning scale 1.0 in FP12.4
|
||||
out.appendU8(1); // loca: Offset32
|
||||
out.appendU8(glyph_count > 256 ? 1 : 0);
|
||||
out.appendU8(1); // advance width with 4 fractional bits
|
||||
out.appendU8(config->bpp);
|
||||
out.appendU8(xy_bits);
|
||||
out.appendU8(wh_bits);
|
||||
out.appendU8(advance_bits);
|
||||
out.appendU8(0); // no compression
|
||||
out.appendU8(0); // no subpixel rendering
|
||||
out.appendU8(0);
|
||||
out.appendU16(static_cast<uint16_t>(scale_metric(underline_position, scale)));
|
||||
out.appendU16(static_cast<uint16_t>(scale_metric(underline_thickness, scale)));
|
||||
out.endRecord(head);
|
||||
|
||||
write_cmap(out, glyphs, count);
|
||||
|
||||
const size_t loca = out.beginRecord("loca");
|
||||
out.appendU32(glyph_count);
|
||||
const size_t loca_entries = out.getSize();
|
||||
out.appendZeros(glyph_count * 4);
|
||||
out.endRecord(loca);
|
||||
|
||||
const size_t glyf = out.beginRecord("glyf");
|
||||
uint8_t* bitmap = nullptr;
|
||||
size_t bitmap_capacity = 0;
|
||||
const uint32_t max_value = (1U << config->bpp) - 1;
|
||||
for (uint32_t id = 0; id < glyph_count && !out.hasFailed(); id++) {
|
||||
out.setU32(loca_entries + id * 4, static_cast<uint32_t>(out.getSize() - glyf));
|
||||
BitWriter writer(out);
|
||||
if (id == 0) {
|
||||
writer.write(0, advance_bits);
|
||||
writer.write(0, xy_bits);
|
||||
writer.write(0, xy_bits);
|
||||
writer.write(0, wh_bits);
|
||||
writer.write(0, wh_bits);
|
||||
writer.flush();
|
||||
continue;
|
||||
}
|
||||
|
||||
const GlyphInfo& glyph = glyphs[id - 1];
|
||||
const int width = glyph.x1 - glyph.x0;
|
||||
const int height = glyph.y1 - glyph.y0;
|
||||
writer.write(glyph.advanceX16, advance_bits);
|
||||
writer.write(static_cast<uint32_t>(glyph.x0), xy_bits);
|
||||
writer.write(static_cast<uint32_t>(-glyph.y1), xy_bits);
|
||||
writer.write(static_cast<uint32_t>(width), wh_bits);
|
||||
writer.write(static_cast<uint32_t>(height), wh_bits);
|
||||
|
||||
const size_t pixel_count = static_cast<size_t>(width) * height;
|
||||
if (pixel_count > 0) {
|
||||
if (pixel_count > bitmap_capacity) {
|
||||
memory_free(bitmap);
|
||||
bitmap = static_cast<uint8_t*>(memory_alloc_with_policy(pixel_count, &EXTERNAL_PREFERRED));
|
||||
if (bitmap == nullptr) {
|
||||
return ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
bitmap_capacity = pixel_count;
|
||||
}
|
||||
stbtt_MakeGlyphBitmap(&info, bitmap, width, height, width, scale, scale, glyph.ttfIndex);
|
||||
for (size_t i = 0; i < pixel_count; i++) {
|
||||
writer.write((bitmap[i] * max_value + 127) / 255, config->bpp);
|
||||
}
|
||||
}
|
||||
writer.flush();
|
||||
}
|
||||
memory_free(bitmap);
|
||||
out.alignTo4();
|
||||
out.endRecord(glyf);
|
||||
|
||||
return out.hasFailed() ? ERROR_OUT_OF_MEMORY : ERROR_NONE;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
extern "C" {
|
||||
|
||||
error_t binfont_generate(const BinFontGeneratorConfig* config, uint8_t** out_data, size_t* out_size) {
|
||||
if (config->ttf_path == nullptr || config->size == 0 || config->bpp < 1 || config->bpp > 4 || config->codepoint_count == 0) {
|
||||
return ERROR_INVALID_ARGUMENT;
|
||||
}
|
||||
|
||||
size_t ttf_size = 0;
|
||||
uint8_t* ttf = read_file(config->ttf_path, ttf_size);
|
||||
if (ttf == nullptr) {
|
||||
return ERROR_NOT_FOUND;
|
||||
}
|
||||
|
||||
stbtt_fontinfo info;
|
||||
const int font_offset = stbtt_GetFontOffsetForIndex(ttf, 0);
|
||||
if (font_offset < 0 || stbtt_InitFont(&info, ttf, font_offset) == 0) {
|
||||
memory_free(ttf);
|
||||
return ERROR_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
auto* glyphs = static_cast<GlyphInfo*>(memory_alloc(config->codepoint_count * sizeof(GlyphInfo)));
|
||||
if (glyphs == nullptr) {
|
||||
memory_free(ttf);
|
||||
return ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
ByteBuffer out;
|
||||
const error_t error = generate(config, info, glyphs, out);
|
||||
memory_free(glyphs);
|
||||
memory_free(ttf);
|
||||
if (error != ERROR_NONE) {
|
||||
return error;
|
||||
}
|
||||
|
||||
*out_size = out.getSize();
|
||||
*out_data = out.release();
|
||||
return ERROR_NONE;
|
||||
}
|
||||
|
||||
}
|
||||
33
Modules/binfont-module/source/module.c
Normal file
@ -0,0 +1,33 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
#include <binfont/binfont.h>
|
||||
#include <binfont/generator.h>
|
||||
#include <binfont/module.h>
|
||||
#include <binfont/render.h>
|
||||
|
||||
static const struct ModuleSymbol SYMBOLS[] = {
|
||||
// binfont
|
||||
DEFINE_MODULE_SYMBOL(binfont_open_file),
|
||||
DEFINE_MODULE_SYMBOL(binfont_open_memory),
|
||||
DEFINE_MODULE_SYMBOL(binfont_close),
|
||||
DEFINE_MODULE_SYMBOL(binfont_begin),
|
||||
DEFINE_MODULE_SYMBOL(binfont_end),
|
||||
DEFINE_MODULE_SYMBOL(binfont_get_metrics),
|
||||
DEFINE_MODULE_SYMBOL(binfont_get_glyph),
|
||||
DEFINE_MODULE_SYMBOL(binfont_get_kerning_x16),
|
||||
DEFINE_MODULE_SYMBOL(binfont_get_glyph_bitmap),
|
||||
// generator
|
||||
DEFINE_MODULE_SYMBOL(binfont_generate),
|
||||
// render
|
||||
DEFINE_MODULE_SYMBOL(binfont_draw_glyph_rgb565),
|
||||
DEFINE_MODULE_SYMBOL(binfont_draw_text_rgb565),
|
||||
MODULE_SYMBOL_TERMINATOR,
|
||||
};
|
||||
|
||||
struct Module binfont_module = {
|
||||
.name = "binfont",
|
||||
.start = NULL,
|
||||
.stop = NULL,
|
||||
.drivers = NULL,
|
||||
.symbols = SYMBOLS,
|
||||
.internal = NULL,
|
||||
};
|
||||
126
Modules/binfont-module/source/render.cpp
Normal file
@ -0,0 +1,126 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
#include <binfont/render.h>
|
||||
|
||||
#include <tactility/memory.h>
|
||||
|
||||
namespace {
|
||||
|
||||
constexpr size_t STACK_BITMAP_SIZE = 1024;
|
||||
|
||||
uint16_t blend_rgb565(uint16_t foreground, uint16_t background, uint8_t alpha) {
|
||||
const uint32_t inverse = 255U - alpha;
|
||||
const uint32_t r = (((foreground >> 11) & 0x1FU) * alpha + ((background >> 11) & 0x1FU) * inverse + 127U) / 255U;
|
||||
const uint32_t g = (((foreground >> 5) & 0x3FU) * alpha + ((background >> 5) & 0x3FU) * inverse + 127U) / 255U;
|
||||
const uint32_t b = ((foreground & 0x1FU) * alpha + (background & 0x1FU) * inverse + 127U) / 255U;
|
||||
return static_cast<uint16_t>((r << 11) | (g << 5) | b);
|
||||
}
|
||||
|
||||
void draw_glyph(PixelBuffer* buffer, int x, int baselineY, BinFont* font, const BinFontGlyph& glyph, uint16_t color, PixelBufferConversion conversion) {
|
||||
const size_t pixel_count = static_cast<size_t>(glyph.width) * glyph.height;
|
||||
if (pixel_count == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
uint8_t stack_bitmap[STACK_BITMAP_SIZE];
|
||||
uint8_t* allocated = nullptr;
|
||||
uint8_t* bitmap = stack_bitmap;
|
||||
if (pixel_count > sizeof(stack_bitmap)) {
|
||||
allocated = static_cast<uint8_t*>(memory_alloc(pixel_count));
|
||||
if (allocated == nullptr) {
|
||||
return;
|
||||
}
|
||||
bitmap = allocated;
|
||||
}
|
||||
|
||||
if (binfont_get_glyph_bitmap(font, &glyph, bitmap, glyph.width) == ERROR_NONE) {
|
||||
const int left = x + glyph.x;
|
||||
const int top = baselineY - glyph.y - glyph.height;
|
||||
for (int row = 0; row < glyph.height; row++) {
|
||||
const uint8_t* line = bitmap + row * glyph.width;
|
||||
for (int column = 0; column < glyph.width; column++) {
|
||||
const uint8_t alpha = line[column];
|
||||
if (alpha == 0) {
|
||||
continue;
|
||||
}
|
||||
const int pixel_x = left + column;
|
||||
const int pixel_y = top + row;
|
||||
const uint16_t pixel = (alpha == 255) ? color : blend_rgb565(color, pixel_buffer_get_pixel_rgb565(buffer, pixel_x, pixel_y), alpha);
|
||||
pixel_buffer_set_pixel_rgb565(buffer, pixel_x, pixel_y, pixel, conversion);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
memory_free(allocated);
|
||||
}
|
||||
|
||||
/** Decodes one UTF-8 codepoint and advances text. Invalid sequences decode as U+FFFD. */
|
||||
uint32_t next_codepoint(const char*& text) {
|
||||
const auto* bytes = reinterpret_cast<const uint8_t*>(text);
|
||||
const uint8_t lead = bytes[0];
|
||||
int length;
|
||||
uint32_t codepoint;
|
||||
if (lead < 0x80) {
|
||||
length = 1;
|
||||
codepoint = lead;
|
||||
} else if ((lead & 0xE0) == 0xC0) {
|
||||
length = 2;
|
||||
codepoint = lead & 0x1FU;
|
||||
} else if ((lead & 0xF0) == 0xE0) {
|
||||
length = 3;
|
||||
codepoint = lead & 0x0FU;
|
||||
} else if ((lead & 0xF8) == 0xF0) {
|
||||
length = 4;
|
||||
codepoint = lead & 0x07U;
|
||||
} else {
|
||||
text++;
|
||||
return 0xFFFD;
|
||||
}
|
||||
for (int i = 1; i < length; i++) {
|
||||
if ((bytes[i] & 0xC0) != 0x80) {
|
||||
text += i;
|
||||
return 0xFFFD;
|
||||
}
|
||||
codepoint = (codepoint << 6) | (bytes[i] & 0x3FU);
|
||||
}
|
||||
text += length;
|
||||
return codepoint;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
extern "C" {
|
||||
|
||||
int binfont_draw_glyph_rgb565(PixelBuffer* buffer, int x, int baseline_y, BinFont* font, uint32_t codepoint, uint16_t color, PixelBufferConversion conversion) {
|
||||
BinFontGlyph glyph;
|
||||
if (!binfont_get_glyph(font, codepoint, &glyph)) {
|
||||
return 0;
|
||||
}
|
||||
draw_glyph(buffer, x, baseline_y, font, glyph, color, conversion);
|
||||
return static_cast<int>((glyph.advance_x16 + 8) >> 4);
|
||||
}
|
||||
|
||||
int binfont_draw_text_rgb565(PixelBuffer* buffer, int x, int baseline_y, BinFont* font, const char* text, uint16_t color, PixelBufferConversion conversion) {
|
||||
// When the file can't be kept open, every glyph lookup opens it by itself
|
||||
const bool session = binfont_begin(font) == ERROR_NONE;
|
||||
int32_t pen_x16 = 0;
|
||||
uint32_t previous_glyph_id = 0;
|
||||
while (*text != '\0') {
|
||||
BinFontGlyph glyph;
|
||||
if (!binfont_get_glyph(font, next_codepoint(text), &glyph)) {
|
||||
previous_glyph_id = 0;
|
||||
continue;
|
||||
}
|
||||
if (previous_glyph_id != 0) {
|
||||
pen_x16 += binfont_get_kerning_x16(font, previous_glyph_id, glyph.glyph_id);
|
||||
}
|
||||
draw_glyph(buffer, x + ((pen_x16 + 8) >> 4), baseline_y, font, glyph, color, conversion);
|
||||
pen_x16 += static_cast<int32_t>(glyph.advance_x16);
|
||||
previous_glyph_id = glyph.glyph_id;
|
||||
}
|
||||
if (session) {
|
||||
binfont_end(font);
|
||||
}
|
||||
return (pen_x16 + 8) >> 4;
|
||||
}
|
||||
|
||||
}
|
||||
23
Modules/binfont-module/tests/CMakeLists.txt
Normal file
@ -0,0 +1,23 @@
|
||||
project(BinFontModuleTests)
|
||||
|
||||
enable_language(C CXX ASM)
|
||||
|
||||
file(GLOB_RECURSE TEST_SOURCES CONFIGURE_DEPENDS ${PROJECT_SOURCE_DIR}/source/*.cpp)
|
||||
add_executable(BinFontModuleTests EXCLUDE_FROM_ALL ${TEST_SOURCES})
|
||||
|
||||
target_include_directories(BinFontModuleTests PRIVATE ${DOCTESTINC} ${PROJECT_SOURCE_DIR}/../private)
|
||||
|
||||
target_compile_definitions(BinFontModuleTests PRIVATE
|
||||
"BINFONT_TEST_FIXTURES_DIR=\"${PROJECT_SOURCE_DIR}/fixtures\""
|
||||
"BINFONT_TEST_TEMP_DIR=\"${CMAKE_CURRENT_BINARY_DIR}\""
|
||||
"BINFONT_TEST_ICON_TTF=\"${CMAKE_SOURCE_DIR}/Data/system/fonts/MaterialSymbolsRounded.ttf\""
|
||||
)
|
||||
|
||||
add_test(NAME BinFontModuleTests COMMAND BinFontModuleTests)
|
||||
|
||||
target_link_libraries(BinFontModuleTests PUBLIC
|
||||
binfont-module
|
||||
graphics-module
|
||||
TactilityKernel
|
||||
freertos_kernel
|
||||
)
|
||||
BIN
Modules/binfont-module/tests/fixtures/icons_raw_2.bin
vendored
Normal file
BIN
Modules/binfont-module/tests/fixtures/icons_raw_4.bin
vendored
Normal file
BIN
Modules/binfont-module/tests/fixtures/icons_rle_2.bin
vendored
Normal file
BIN
Modules/binfont-module/tests/fixtures/icons_rle_4.bin
vendored
Normal file
BIN
Modules/binfont-module/tests/fixtures/icons_rlepf_2.bin
vendored
Normal file
BIN
Modules/binfont-module/tests/fixtures/icons_rlepf_4.bin
vendored
Normal file
BIN
Modules/binfont-module/tests/fixtures/text_kern_classes.bin
vendored
Normal file
BIN
Modules/binfont-module/tests/fixtures/text_kern_pairs.bin
vendored
Normal file
340
Modules/binfont-module/tests/source/binfont_test.cpp
Normal file
@ -0,0 +1,340 @@
|
||||
#include "doctest.h"
|
||||
|
||||
#include <binfont/binfont.h>
|
||||
#include <binfont_private.h>
|
||||
#include <binfont/generator.h>
|
||||
#include <binfont/render.h>
|
||||
#include <graphics/pixel_buffer.h>
|
||||
#include <tactility/memory.h>
|
||||
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace {
|
||||
|
||||
constexpr uint32_t ICON_CODEPOINTS[] = { 0xE5C3, 0xE8B8, 0xE2C7, 0xE63E, 0xE1A7 };
|
||||
|
||||
std::string fixture(const char* name) {
|
||||
return std::string(BINFONT_TEST_FIXTURES_DIR) + "/" + name;
|
||||
}
|
||||
|
||||
/** Loads a file into memory allocated with memory_alloc() */
|
||||
uint8_t* load_file(const std::string& path, size_t& size) {
|
||||
FILE* file = fopen(path.c_str(), "rb");
|
||||
REQUIRE(file != nullptr);
|
||||
fseek(file, 0, SEEK_END);
|
||||
size = static_cast<size_t>(ftell(file));
|
||||
fseek(file, 0, SEEK_SET);
|
||||
auto* data = static_cast<uint8_t*>(memory_alloc(size));
|
||||
REQUIRE(fread(data, 1, size, file) == size);
|
||||
fclose(file);
|
||||
return data;
|
||||
}
|
||||
|
||||
BinFont* open_fixture_in_memory(const char* name) {
|
||||
size_t size;
|
||||
uint8_t* data = load_file(fixture(name), size);
|
||||
BinFont* font = nullptr;
|
||||
REQUIRE(binfont_open_memory(data, size, true, &font) == ERROR_NONE);
|
||||
return font;
|
||||
}
|
||||
|
||||
std::vector<uint8_t> decode(BinFont* font, const BinFontGlyph& glyph) {
|
||||
std::vector<uint8_t> bitmap(static_cast<size_t>(glyph.width) * glyph.height);
|
||||
REQUIRE(binfont_get_glyph_bitmap(font, &glyph, bitmap.data(), glyph.width) == ERROR_NONE);
|
||||
return bitmap;
|
||||
}
|
||||
|
||||
uint32_t sum(const std::vector<uint8_t>& bitmap) {
|
||||
uint32_t total = 0;
|
||||
for (uint8_t value : bitmap) {
|
||||
total += value;
|
||||
}
|
||||
return total;
|
||||
}
|
||||
|
||||
void check_same_glyph(const BinFontGlyph& a, const BinFontGlyph& b) {
|
||||
CHECK_EQ(a.glyph_id, b.glyph_id);
|
||||
CHECK_EQ(a.advance_x16, b.advance_x16);
|
||||
CHECK_EQ(a.x, b.x);
|
||||
CHECK_EQ(a.y, b.y);
|
||||
CHECK_EQ(a.width, b.width);
|
||||
CHECK_EQ(a.height, b.height);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
TEST_CASE("binfont_open_file returns ERROR_NOT_FOUND for a missing file") {
|
||||
BinFont* font = nullptr;
|
||||
CHECK_EQ(binfont_open_file(fixture("missing.bin").c_str(), &font), ERROR_NOT_FOUND);
|
||||
}
|
||||
|
||||
TEST_CASE("binfont_open_memory rejects data that is not a font") {
|
||||
const uint8_t data[64] = { 1, 2, 3, 4 };
|
||||
BinFont* font = nullptr;
|
||||
CHECK_EQ(binfont_open_memory(data, sizeof(data), false, &font), ERROR_NOT_SUPPORTED);
|
||||
}
|
||||
|
||||
TEST_CASE("binfont reads metrics, glyphs and bitmaps that match lv_font_conv's C output") {
|
||||
BinFont* font = open_fixture_in_memory("text_kern_pairs.bin");
|
||||
|
||||
BinFontMetrics metrics;
|
||||
binfont_get_metrics(font, &metrics);
|
||||
CHECK_EQ(metrics.size, 20);
|
||||
CHECK_EQ(metrics.line_height, 20);
|
||||
CHECK_EQ(metrics.base_line, 5);
|
||||
CHECK_EQ(metrics.ascent, 15);
|
||||
CHECK_EQ(metrics.descent, -5);
|
||||
CHECK_EQ(metrics.underline_position, 1);
|
||||
CHECK_EQ(metrics.underline_thickness, 0);
|
||||
CHECK_EQ(metrics.bpp, 4);
|
||||
|
||||
BinFontGlyph glyph;
|
||||
REQUIRE(binfont_get_glyph(font, 'A', &glyph));
|
||||
CHECK_EQ(glyph.glyph_id, 1);
|
||||
CHECK_EQ(glyph.advance_x16, 195);
|
||||
CHECK_EQ(glyph.x, 0);
|
||||
CHECK_EQ(glyph.y, 0);
|
||||
CHECK_EQ(glyph.width, 13);
|
||||
CHECK_EQ(glyph.height, 14);
|
||||
|
||||
const auto bitmap = decode(font, glyph);
|
||||
const std::vector<uint8_t> first_row = { 0, 0, 0, 0, 0, 238, 255, 17, 0, 0, 0, 0, 0 };
|
||||
const std::vector<uint8_t> last_row = { 221, 255, 0, 0, 0, 0, 0, 0, 0, 0, 238, 238, 0 };
|
||||
CHECK(std::vector<uint8_t>(bitmap.begin(), bitmap.begin() + 13) == first_row);
|
||||
CHECK(std::vector<uint8_t>(bitmap.end() - 13, bitmap.end()) == last_row);
|
||||
CHECK_EQ(sum(bitmap), 13974);
|
||||
|
||||
REQUIRE(binfont_get_glyph(font, 'V', &glyph));
|
||||
CHECK_EQ(glyph.glyph_id, 22);
|
||||
REQUIRE(binfont_get_glyph(font, 'z', &glyph));
|
||||
CHECK_EQ(glyph.glyph_id, 52);
|
||||
|
||||
CHECK_FALSE(binfont_get_glyph(font, '0', &glyph));
|
||||
CHECK_FALSE(binfont_get_glyph(font, 0x5B, &glyph));
|
||||
CHECK_FALSE(binfont_get_glyph(font, 0x10FFFF, &glyph));
|
||||
|
||||
binfont_close(font);
|
||||
}
|
||||
|
||||
TEST_CASE("binfont kerning is the same for the pairs and the classes format") {
|
||||
BinFont* pairs = open_fixture_in_memory("text_kern_pairs.bin");
|
||||
BinFont* classes = open_fixture_in_memory("text_kern_classes.bin");
|
||||
|
||||
CHECK_EQ(binfont_get_kerning_x16(pairs, 1, 22), -10);
|
||||
CHECK_EQ(binfont_get_kerning_x16(classes, 1, 22), -10);
|
||||
|
||||
int non_zero = 0;
|
||||
for (uint32_t left = 1; left <= 52; left++) {
|
||||
for (uint32_t right = 1; right <= 52; right++) {
|
||||
const int32_t value = binfont_get_kerning_x16(pairs, left, right);
|
||||
CHECK_EQ(value, binfont_get_kerning_x16(classes, left, right));
|
||||
if (value != 0) {
|
||||
non_zero++;
|
||||
}
|
||||
}
|
||||
}
|
||||
CHECK(non_zero > 0);
|
||||
CHECK_EQ(binfont_get_kerning_x16(pairs, 1, 1000), 0);
|
||||
CHECK_EQ(binfont_get_kerning_x16(classes, 1, 1000), 0);
|
||||
|
||||
binfont_close(pairs);
|
||||
binfont_close(classes);
|
||||
}
|
||||
|
||||
TEST_CASE("binfont decodes identical bitmaps for raw, RLE and RLE with prefilter") {
|
||||
for (const char* bpp : { "2", "4" }) {
|
||||
CAPTURE(bpp);
|
||||
BinFont* raw = open_fixture_in_memory((std::string("icons_raw_") + bpp + ".bin").c_str());
|
||||
BinFont* rle = open_fixture_in_memory((std::string("icons_rle_") + bpp + ".bin").c_str());
|
||||
BinFont* prefiltered = open_fixture_in_memory((std::string("icons_rlepf_") + bpp + ".bin").c_str());
|
||||
|
||||
for (uint32_t codepoint : ICON_CODEPOINTS) {
|
||||
CAPTURE(codepoint);
|
||||
BinFontGlyph raw_glyph, rle_glyph, prefiltered_glyph;
|
||||
REQUIRE(binfont_get_glyph(raw, codepoint, &raw_glyph));
|
||||
REQUIRE(binfont_get_glyph(rle, codepoint, &rle_glyph));
|
||||
REQUIRE(binfont_get_glyph(prefiltered, codepoint, &prefiltered_glyph));
|
||||
check_same_glyph(raw_glyph, rle_glyph);
|
||||
check_same_glyph(raw_glyph, prefiltered_glyph);
|
||||
|
||||
const auto raw_bitmap = decode(raw, raw_glyph);
|
||||
CHECK(sum(raw_bitmap) > 0);
|
||||
CHECK(decode(rle, rle_glyph) == raw_bitmap);
|
||||
CHECK(decode(prefiltered, prefiltered_glyph) == raw_bitmap);
|
||||
}
|
||||
|
||||
binfont_close(raw);
|
||||
binfont_close(rle);
|
||||
binfont_close(prefiltered);
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("binfont gives the same results when streaming from a file") {
|
||||
BinFont* memory_font = open_fixture_in_memory("icons_rlepf_4.bin");
|
||||
BinFont* file_font = nullptr;
|
||||
REQUIRE(binfont_open_file_streaming(fixture("icons_rlepf_4.bin").c_str(), &file_font) == ERROR_NONE);
|
||||
|
||||
for (uint32_t codepoint : ICON_CODEPOINTS) {
|
||||
BinFontGlyph memory_glyph, file_glyph;
|
||||
REQUIRE(binfont_get_glyph(memory_font, codepoint, &memory_glyph));
|
||||
REQUIRE(binfont_get_glyph(file_font, codepoint, &file_glyph));
|
||||
check_same_glyph(memory_glyph, file_glyph);
|
||||
CHECK(decode(memory_font, memory_glyph) == decode(file_font, file_glyph));
|
||||
}
|
||||
|
||||
binfont_close(memory_font);
|
||||
binfont_close(file_font);
|
||||
}
|
||||
|
||||
TEST_CASE("binfont_open_file loads the font into memory") {
|
||||
const std::string path = std::string(BINFONT_TEST_TEMP_DIR) + "/binfont_memory_test.bin";
|
||||
size_t size;
|
||||
uint8_t* data = load_file(fixture("icons_rlepf_4.bin"), size);
|
||||
FILE* copy = fopen(path.c_str(), "wb");
|
||||
REQUIRE(copy != nullptr);
|
||||
REQUIRE(fwrite(data, 1, size, copy) == size);
|
||||
fclose(copy);
|
||||
memory_free(data);
|
||||
|
||||
BinFont* font = nullptr;
|
||||
REQUIRE(binfont_open_file(path.c_str(), &font) == ERROR_NONE);
|
||||
REQUIRE(remove(path.c_str()) == 0);
|
||||
|
||||
BinFontGlyph glyph;
|
||||
CHECK(binfont_get_glyph(font, ICON_CODEPOINTS[0], &glyph));
|
||||
CHECK(sum(decode(font, glyph)) > 0);
|
||||
|
||||
binfont_close(font);
|
||||
}
|
||||
|
||||
TEST_CASE("binfont only keeps a streamed font file open during a session") {
|
||||
// An open file stays readable after it's deleted, so deleting it shows whether it's kept open
|
||||
const std::string path = std::string(BINFONT_TEST_TEMP_DIR) + "/binfont_session_test.bin";
|
||||
size_t size;
|
||||
uint8_t* data = load_file(fixture("icons_rlepf_4.bin"), size);
|
||||
FILE* copy = fopen(path.c_str(), "wb");
|
||||
REQUIRE(copy != nullptr);
|
||||
REQUIRE(fwrite(data, 1, size, copy) == size);
|
||||
fclose(copy);
|
||||
memory_free(data);
|
||||
|
||||
BinFont* font = nullptr;
|
||||
REQUIRE(binfont_open_file_streaming(path.c_str(), &font) == ERROR_NONE);
|
||||
BinFontGlyph glyph;
|
||||
REQUIRE(binfont_get_glyph(font, ICON_CODEPOINTS[0], &glyph));
|
||||
|
||||
REQUIRE(binfont_begin(font) == ERROR_NONE);
|
||||
REQUIRE(binfont_begin(font) == ERROR_NONE);
|
||||
REQUIRE(remove(path.c_str()) == 0);
|
||||
binfont_end(font);
|
||||
// Still open: one session remains
|
||||
CHECK(binfont_get_glyph(font, ICON_CODEPOINTS[1], &glyph));
|
||||
CHECK_FALSE(decode(font, glyph).empty());
|
||||
binfont_end(font);
|
||||
|
||||
// Closed: the deleted file can't be opened again
|
||||
CHECK_FALSE(binfont_get_glyph(font, ICON_CODEPOINTS[2], &glyph));
|
||||
CHECK_EQ(binfont_begin(font), ERROR_NOT_FOUND);
|
||||
|
||||
binfont_close(font);
|
||||
}
|
||||
|
||||
TEST_CASE("binfont_get_glyph_bitmap rejects a stride smaller than the glyph width") {
|
||||
BinFont* font = open_fixture_in_memory("icons_raw_2.bin");
|
||||
BinFontGlyph glyph;
|
||||
REQUIRE(binfont_get_glyph(font, ICON_CODEPOINTS[0], &glyph));
|
||||
std::vector<uint8_t> bitmap(static_cast<size_t>(glyph.width) * glyph.height);
|
||||
CHECK_EQ(binfont_get_glyph_bitmap(font, &glyph, bitmap.data(), glyph.width - 1), ERROR_INVALID_ARGUMENT);
|
||||
binfont_close(font);
|
||||
}
|
||||
|
||||
TEST_CASE("binfont_generate rasterizes a TTF close to lv_font_conv") {
|
||||
uint32_t codepoints[] = { 0xE8B8, 0xE5C3, 0x41, 0xE1A7, 0xE2C7, 0xE63E, 0xE5C3 }; // unsorted, duplicate and missing entries
|
||||
const BinFontGeneratorConfig config = {
|
||||
.ttf_path = BINFONT_TEST_ICON_TTF,
|
||||
.size = 24,
|
||||
.bpp = 4,
|
||||
.codepoints = codepoints,
|
||||
.codepoint_count = sizeof(codepoints) / sizeof(codepoints[0]),
|
||||
};
|
||||
uint8_t* data = nullptr;
|
||||
size_t size = 0;
|
||||
REQUIRE(binfont_generate(&config, &data, &size) == ERROR_NONE);
|
||||
|
||||
BinFont* generated = nullptr;
|
||||
REQUIRE(binfont_open_memory(data, size, true, &generated) == ERROR_NONE);
|
||||
BinFont* reference = open_fixture_in_memory("icons_raw_4.bin");
|
||||
|
||||
BinFontMetrics generated_metrics, reference_metrics;
|
||||
binfont_get_metrics(generated, &generated_metrics);
|
||||
binfont_get_metrics(reference, &reference_metrics);
|
||||
CHECK_EQ(generated_metrics.size, 24);
|
||||
CHECK_EQ(generated_metrics.bpp, 4);
|
||||
CHECK_EQ(generated_metrics.ascent, reference_metrics.ascent);
|
||||
CHECK_EQ(generated_metrics.descent, reference_metrics.descent);
|
||||
|
||||
BinFontGlyph glyph;
|
||||
CHECK_FALSE(binfont_get_glyph(generated, 0x41, &glyph));
|
||||
|
||||
for (uint32_t codepoint : ICON_CODEPOINTS) {
|
||||
CAPTURE(codepoint);
|
||||
BinFontGlyph generated_glyph, reference_glyph;
|
||||
REQUIRE(binfont_get_glyph(generated, codepoint, &generated_glyph));
|
||||
REQUIRE(binfont_get_glyph(reference, codepoint, &reference_glyph));
|
||||
CHECK(std::abs(static_cast<int>(generated_glyph.advance_x16) - static_cast<int>(reference_glyph.advance_x16)) <= 16);
|
||||
CHECK(std::abs(generated_glyph.x - reference_glyph.x) <= 1);
|
||||
CHECK(std::abs(generated_glyph.y - reference_glyph.y) <= 1);
|
||||
CHECK(std::abs(generated_glyph.width - reference_glyph.width) <= 1);
|
||||
CHECK(std::abs(generated_glyph.height - reference_glyph.height) <= 1);
|
||||
|
||||
const auto generated_sum = static_cast<double>(sum(decode(generated, generated_glyph)));
|
||||
const auto reference_sum = static_cast<double>(sum(decode(reference, reference_glyph)));
|
||||
CHECK(generated_sum > reference_sum * 0.9);
|
||||
CHECK(generated_sum < reference_sum * 1.1);
|
||||
}
|
||||
|
||||
binfont_close(generated);
|
||||
binfont_close(reference);
|
||||
}
|
||||
|
||||
TEST_CASE("binfont_generate fails for a missing TTF") {
|
||||
const uint32_t codepoint = 0xE5C3;
|
||||
const BinFontGeneratorConfig config = {
|
||||
.ttf_path = BINFONT_TEST_FIXTURES_DIR "/missing.ttf",
|
||||
.size = 24,
|
||||
.bpp = 2,
|
||||
.codepoints = &codepoint,
|
||||
.codepoint_count = 1,
|
||||
};
|
||||
uint8_t* data = nullptr;
|
||||
size_t size = 0;
|
||||
CHECK_EQ(binfont_generate(&config, &data, &size), ERROR_NOT_FOUND);
|
||||
}
|
||||
|
||||
TEST_CASE("binfont draws glyphs and text into a PixelBuffer") {
|
||||
BinFont* font = open_fixture_in_memory("text_kern_pairs.bin");
|
||||
PixelBuffer* buffer = pixel_buffer_create(DISPLAY_COLOR_FORMAT_RGB565, 64, 24);
|
||||
REQUIRE(buffer != nullptr);
|
||||
pixel_buffer_clear(buffer);
|
||||
|
||||
const int advance = binfont_draw_glyph_rgb565(buffer, 0, 18, font, 'A', 0xFFFF, PIXEL_BUFFER_CONVERSION_EXACT_BLACK);
|
||||
CHECK_EQ(advance, (195 + 8) >> 4);
|
||||
// Top of 'A' (row 0 of the glyph, column 6 is fully opaque) sits 14 rows above the baseline
|
||||
CHECK_EQ(pixel_buffer_get_pixel_rgb565(buffer, 6, 18 - 14), 0xFFFF);
|
||||
CHECK_EQ(pixel_buffer_get_pixel_rgb565(buffer, 0, 0), 0x0000);
|
||||
|
||||
CHECK_EQ(binfont_draw_glyph_rgb565(buffer, 0, 18, font, '0', 0xFFFF, PIXEL_BUFFER_CONVERSION_EXACT_BLACK), 0);
|
||||
|
||||
// "AV" is kerned: 195 - 10 + V's advance
|
||||
BinFontGlyph v;
|
||||
REQUIRE(binfont_get_glyph(font, 'V', &v));
|
||||
pixel_buffer_clear(buffer);
|
||||
const int width = binfont_draw_text_rgb565(buffer, 0, 18, font, "AV", 0xFFFF, PIXEL_BUFFER_CONVERSION_EXACT_BLACK);
|
||||
CHECK_EQ(width, static_cast<int>((195 - 10 + v.advance_x16 + 8) >> 4));
|
||||
|
||||
pixel_buffer_free(buffer);
|
||||
binfont_close(font);
|
||||
}
|
||||
64
Modules/binfont-module/tests/source/main.cpp
Normal file
@ -0,0 +1,64 @@
|
||||
#define DOCTEST_CONFIG_IMPLEMENT
|
||||
#include "doctest.h"
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
|
||||
typedef struct {
|
||||
int argc;
|
||||
char** argv;
|
||||
int result;
|
||||
} TestTaskData;
|
||||
|
||||
void test_task(void* parameter) {
|
||||
auto* data = (TestTaskData*)parameter;
|
||||
|
||||
doctest::Context context;
|
||||
|
||||
context.applyCommandLine(data->argc, data->argv);
|
||||
|
||||
// overrides
|
||||
context.setOption("no-breaks", true); // don't break in the debugger when assertions fail
|
||||
|
||||
data->result = context.run();
|
||||
|
||||
vTaskEndScheduler();
|
||||
|
||||
vTaskDelete(nullptr);
|
||||
}
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
TestTaskData data = {
|
||||
.argc = argc,
|
||||
.argv = argv,
|
||||
.result = 0
|
||||
};
|
||||
|
||||
BaseType_t task_result = xTaskCreate(
|
||||
test_task,
|
||||
"test_task",
|
||||
8192,
|
||||
&data,
|
||||
1,
|
||||
nullptr
|
||||
);
|
||||
|
||||
if (task_result != pdPASS) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
vTaskStartScheduler();
|
||||
|
||||
return data.result;
|
||||
}
|
||||
|
||||
// NOTE: This is normally provided by the platform kernel module, but that's not loaded for binfont-module
|
||||
extern "C" {
|
||||
// Required for FreeRTOS
|
||||
void vAssertCalled(unsigned long line, const char* const file) {
|
||||
std::fprintf(stderr, "assert failed at %s:%lu\n", file, line);
|
||||
std::abort();
|
||||
}
|
||||
}
|
||||
15
Modules/lodepng-module/CMakeLists.txt
Normal file
@ -0,0 +1,15 @@
|
||||
cmake_minimum_required(VERSION 3.20)
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/../../Buildscripts/module.cmake")
|
||||
|
||||
file(GLOB_RECURSE SOURCE_FILES "source/*.c*")
|
||||
|
||||
list(APPEND REQUIRES_LIST
|
||||
TactilityKernel
|
||||
)
|
||||
|
||||
tactility_add_module(lodepng-module
|
||||
SRCS ${SOURCE_FILES}
|
||||
INCLUDE_DIRS include/
|
||||
REQUIRES ${REQUIRES_LIST}
|
||||
)
|
||||
195
Modules/lodepng-module/LICENSE-Apache-2.0.md
Normal file
@ -0,0 +1,195 @@
|
||||
Apache License
|
||||
==============
|
||||
|
||||
_Version 2.0, January 2004_
|
||||
_<<http://www.apache.org/licenses/>>_
|
||||
|
||||
### Terms and Conditions for use, reproduction, and distribution
|
||||
|
||||
#### 1. Definitions
|
||||
|
||||
“License” shall mean the terms and conditions for use, reproduction, and
|
||||
distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
“Licensor” shall mean the copyright owner or entity authorized by the copyright
|
||||
owner that is granting the License.
|
||||
|
||||
“Legal Entity” shall mean the union of the acting entity and all other entities
|
||||
that control, are controlled by, or are under common control with that entity.
|
||||
For the purposes of this definition, “control” means **(i)** the power, direct or
|
||||
indirect, to cause the direction or management of such entity, whether by
|
||||
contract or otherwise, or **(ii)** ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or **(iii)** beneficial ownership of such entity.
|
||||
|
||||
“You” (or “Your”) shall mean an individual or Legal Entity exercising
|
||||
permissions granted by this License.
|
||||
|
||||
“Source” form shall mean the preferred form for making modifications, including
|
||||
but not limited to software source code, documentation source, and configuration
|
||||
files.
|
||||
|
||||
“Object” form shall mean any form resulting from mechanical transformation or
|
||||
translation of a Source form, including but not limited to compiled object code,
|
||||
generated documentation, and conversions to other media types.
|
||||
|
||||
“Work” shall mean the work of authorship, whether in Source or Object form, made
|
||||
available under the License, as indicated by a copyright notice that is included
|
||||
in or attached to the work (an example is provided in the Appendix below).
|
||||
|
||||
“Derivative Works” shall mean any work, whether in Source or Object form, that
|
||||
is based on (or derived from) the Work and for which the editorial revisions,
|
||||
annotations, elaborations, or other modifications represent, as a whole, an
|
||||
original work of authorship. For the purposes of this License, Derivative Works
|
||||
shall not include works that remain separable from, or merely link (or bind by
|
||||
name) to the interfaces of, the Work and Derivative Works thereof.
|
||||
|
||||
“Contribution” shall mean any work of authorship, including the original version
|
||||
of the Work and any modifications or additions to that Work or Derivative Works
|
||||
thereof, that is intentionally submitted to Licensor for inclusion in the Work
|
||||
by the copyright owner or by an individual or Legal Entity authorized to submit
|
||||
on behalf of the copyright owner. For the purposes of this definition,
|
||||
“submitted” means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems, and
|
||||
issue tracking systems that are managed by, or on behalf of, the Licensor for
|
||||
the purpose of discussing and improving the Work, but excluding communication
|
||||
that is conspicuously marked or otherwise designated in writing by the copyright
|
||||
owner as “Not a Contribution.”
|
||||
|
||||
“Contributor” shall mean Licensor and any individual or Legal Entity on behalf
|
||||
of whom a Contribution has been received by Licensor and subsequently
|
||||
incorporated within the Work.
|
||||
|
||||
#### 2. Grant of Copyright License
|
||||
|
||||
Subject to the terms and conditions of this License, each Contributor hereby
|
||||
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
|
||||
irrevocable copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the Work and such
|
||||
Derivative Works in Source or Object form.
|
||||
|
||||
#### 3. Grant of Patent License
|
||||
|
||||
Subject to the terms and conditions of this License, each Contributor hereby
|
||||
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
|
||||
irrevocable (except as stated in this section) patent license to make, have
|
||||
made, use, offer to sell, sell, import, and otherwise transfer the Work, where
|
||||
such license applies only to those patent claims licensable by such Contributor
|
||||
that are necessarily infringed by their Contribution(s) alone or by combination
|
||||
of their Contribution(s) with the Work to which such Contribution(s) was
|
||||
submitted. If You institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work or a
|
||||
Contribution incorporated within the Work constitutes direct or contributory
|
||||
patent infringement, then any patent licenses granted to You under this License
|
||||
for that Work shall terminate as of the date such litigation is filed.
|
||||
|
||||
#### 4. Redistribution
|
||||
|
||||
You may reproduce and distribute copies of the Work or Derivative Works thereof
|
||||
in any medium, with or without modifications, and in Source or Object form,
|
||||
provided that You meet the following conditions:
|
||||
|
||||
* **(a)** You must give any other recipients of the Work or Derivative Works a copy of
|
||||
this License; and
|
||||
* **(b)** You must cause any modified files to carry prominent notices stating that You
|
||||
changed the files; and
|
||||
* **(c)** You must retain, in the Source form of any Derivative Works that You distribute,
|
||||
all copyright, patent, trademark, and attribution notices from the Source form
|
||||
of the Work, excluding those notices that do not pertain to any part of the
|
||||
Derivative Works; and
|
||||
* **(d)** If the Work includes a “NOTICE” text file as part of its distribution, then any
|
||||
Derivative Works that You distribute must include a readable copy of the
|
||||
attribution notices contained within such NOTICE file, excluding those notices
|
||||
that do not pertain to any part of the Derivative Works, in at least one of the
|
||||
following places: within a NOTICE text file distributed as part of the
|
||||
Derivative Works; within the Source form or documentation, if provided along
|
||||
with the Derivative Works; or, within a display generated by the Derivative
|
||||
Works, if and wherever such third-party notices normally appear. The contents of
|
||||
the NOTICE file are for informational purposes only and do not modify the
|
||||
License. You may add Your own attribution notices within Derivative Works that
|
||||
You distribute, alongside or as an addendum to the NOTICE text from the Work,
|
||||
provided that such additional attribution notices cannot be construed as
|
||||
modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and may provide
|
||||
additional or different license terms and conditions for use, reproduction, or
|
||||
distribution of Your modifications, or for any such Derivative Works as a whole,
|
||||
provided Your use, reproduction, and distribution of the Work otherwise complies
|
||||
with the conditions stated in this License.
|
||||
|
||||
#### 5. Submission of Contributions
|
||||
|
||||
Unless You explicitly state otherwise, any Contribution intentionally submitted
|
||||
for inclusion in the Work by You to the Licensor shall be under the terms and
|
||||
conditions of this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify the terms of
|
||||
any separate license agreement you may have executed with Licensor regarding
|
||||
such Contributions.
|
||||
|
||||
#### 6. Trademarks
|
||||
|
||||
This License does not grant permission to use the trade names, trademarks,
|
||||
service marks, or product names of the Licensor, except as required for
|
||||
reasonable and customary use in describing the origin of the Work and
|
||||
reproducing the content of the NOTICE file.
|
||||
|
||||
#### 7. Disclaimer of Warranty
|
||||
|
||||
Unless required by applicable law or agreed to in writing, Licensor provides the
|
||||
Work (and each Contributor provides its Contributions) on an “AS IS” BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
|
||||
including, without limitation, any warranties or conditions of TITLE,
|
||||
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
|
||||
solely responsible for determining the appropriateness of using or
|
||||
redistributing the Work and assume any risks associated with Your exercise of
|
||||
permissions under this License.
|
||||
|
||||
#### 8. Limitation of Liability
|
||||
|
||||
In no event and under no legal theory, whether in tort (including negligence),
|
||||
contract, or otherwise, unless required by applicable law (such as deliberate
|
||||
and grossly negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special, incidental,
|
||||
or consequential damages of any character arising as a result of this License or
|
||||
out of the use or inability to use the Work (including but not limited to
|
||||
damages for loss of goodwill, work stoppage, computer failure or malfunction, or
|
||||
any and all other commercial damages or losses), even if such Contributor has
|
||||
been advised of the possibility of such damages.
|
||||
|
||||
#### 9. Accepting Warranty or Additional Liability
|
||||
|
||||
While redistributing the Work or Derivative Works thereof, You may choose to
|
||||
offer, and charge a fee for, acceptance of support, warranty, indemnity, or
|
||||
other liability obligations and/or rights consistent with this License. However,
|
||||
in accepting such obligations, You may act only on Your own behalf and on Your
|
||||
sole responsibility, not on behalf of any other Contributor, and only if You
|
||||
agree to indemnify, defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason of your
|
||||
accepting any such warranty or additional liability.
|
||||
|
||||
_END OF TERMS AND CONDITIONS_
|
||||
|
||||
### APPENDIX: How to apply the Apache License to your work
|
||||
|
||||
To apply the Apache License to your work, attach the following boilerplate
|
||||
notice, with the fields enclosed by brackets `[]` replaced with your own
|
||||
identifying information. (Don't include the brackets!) The text should be
|
||||
enclosed in the appropriate comment syntax for the file format. We also
|
||||
recommend that a file or class name and description of purpose be included on
|
||||
the same “printed page” as the copyright notice for easier identification within
|
||||
third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
25
Modules/lodepng-module/LICENSE-lodepng.txt
Normal file
@ -0,0 +1,25 @@
|
||||
/*
|
||||
LodePNG version 20261001
|
||||
|
||||
Copyright (c) 2005-2026 Lode Vandevenne
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
10
Modules/lodepng-module/README.md
Normal file
@ -0,0 +1,10 @@
|
||||
# lodepng-module
|
||||
|
||||
PNG decoding and encoding with [LodePNG](https://github.com/lvandeve/lodepng), usable with and without LVGL.
|
||||
|
||||
Include `<lodepng/lodepng.h>` and release decoded or encoded data with `lodepng_free()`.
|
||||
|
||||
## License
|
||||
|
||||
This module is licensed under the [Apache v2.0](LICENSE-Apache-2.0.md) license.
|
||||
LodePNG is licensed under the [zlib](LICENSE-lodepng.txt) license.
|
||||
25
Modules/lodepng-module/include/lodepng/lodepng.h
Normal file
@ -0,0 +1,25 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
#pragma once
|
||||
|
||||
// The C++ wrapper is not compiled: callers use the C API from C and C++ alike
|
||||
#define LODEPNG_NO_COMPILE_CPP
|
||||
// Allocations go through the kernel's memory API (see lodepng_malloc() below)
|
||||
#define LODEPNG_NO_COMPILE_ALLOCATORS
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <lodepng/lodepng_upstream.h>
|
||||
|
||||
/** Allocates memory, preferring external memory (PSRAM) */
|
||||
void* lodepng_malloc(size_t size);
|
||||
|
||||
void* lodepng_realloc(void* ptr, size_t new_size);
|
||||
|
||||
/** Releases memory from lodepng_malloc(), including images returned by the decode and encode functions */
|
||||
void lodepng_free(void* ptr);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
2188
Modules/lodepng-module/include/lodepng/lodepng_upstream.h
Normal file
14
Modules/lodepng-module/include/lodepng/module.h
Normal file
@ -0,0 +1,14 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
#pragma once
|
||||
|
||||
#include <tactility/module.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern struct Module lodepng_module;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
22
Modules/lodepng-module/source/allocators.c
Normal file
@ -0,0 +1,22 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
#include <lodepng/lodepng.h>
|
||||
|
||||
#include <tactility/memory.h>
|
||||
|
||||
static const struct MemoryPolicy EXTERNAL_PREFERRED = {
|
||||
.required = 0,
|
||||
.desired = MEMORY_CAPABILITY_EXTERNAL,
|
||||
.alignment = 0,
|
||||
};
|
||||
|
||||
void* lodepng_malloc(size_t size) {
|
||||
return memory_alloc_with_policy(size, &EXTERNAL_PREFERRED);
|
||||
}
|
||||
|
||||
void* lodepng_realloc(void* ptr, size_t new_size) {
|
||||
return memory_realloc_with_policy(ptr, new_size, &EXTERNAL_PREFERRED);
|
||||
}
|
||||
|
||||
void lodepng_free(void* ptr) {
|
||||
memory_free(ptr);
|
||||
}
|
||||
7249
Modules/lodepng-module/source/lodepng.c
Normal file
37
Modules/lodepng-module/source/module.c
Normal file
@ -0,0 +1,37 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
#include <lodepng/lodepng.h>
|
||||
#include <lodepng/module.h>
|
||||
|
||||
static const struct ModuleSymbol SYMBOLS[] = {
|
||||
// decode
|
||||
DEFINE_MODULE_SYMBOL(lodepng_decode_memory),
|
||||
DEFINE_MODULE_SYMBOL(lodepng_decode32),
|
||||
DEFINE_MODULE_SYMBOL(lodepng_decode24),
|
||||
DEFINE_MODULE_SYMBOL(lodepng_decode_file),
|
||||
DEFINE_MODULE_SYMBOL(lodepng_decode32_file),
|
||||
DEFINE_MODULE_SYMBOL(lodepng_decode24_file),
|
||||
// encode
|
||||
DEFINE_MODULE_SYMBOL(lodepng_encode_memory),
|
||||
DEFINE_MODULE_SYMBOL(lodepng_encode32),
|
||||
DEFINE_MODULE_SYMBOL(lodepng_encode24),
|
||||
DEFINE_MODULE_SYMBOL(lodepng_encode_file),
|
||||
DEFINE_MODULE_SYMBOL(lodepng_encode32_file),
|
||||
DEFINE_MODULE_SYMBOL(lodepng_encode24_file),
|
||||
// utilities
|
||||
DEFINE_MODULE_SYMBOL(lodepng_error_text),
|
||||
DEFINE_MODULE_SYMBOL(lodepng_load_file),
|
||||
DEFINE_MODULE_SYMBOL(lodepng_save_file),
|
||||
DEFINE_MODULE_SYMBOL(lodepng_malloc),
|
||||
DEFINE_MODULE_SYMBOL(lodepng_realloc),
|
||||
DEFINE_MODULE_SYMBOL(lodepng_free),
|
||||
MODULE_SYMBOL_TERMINATOR,
|
||||
};
|
||||
|
||||
struct Module lodepng_module = {
|
||||
.name = "lodepng",
|
||||
.start = NULL,
|
||||
.stop = NULL,
|
||||
.drivers = NULL,
|
||||
.symbols = SYMBOLS,
|
||||
.internal = NULL,
|
||||
};
|
||||
20
Modules/lodepng-module/tests/CMakeLists.txt
Normal file
@ -0,0 +1,20 @@
|
||||
project(LodePngModuleTests)
|
||||
|
||||
enable_language(C CXX ASM)
|
||||
|
||||
file(GLOB_RECURSE TEST_SOURCES CONFIGURE_DEPENDS ${PROJECT_SOURCE_DIR}/source/*.cpp)
|
||||
add_executable(LodePngModuleTests EXCLUDE_FROM_ALL ${TEST_SOURCES})
|
||||
|
||||
target_include_directories(LodePngModuleTests PRIVATE ${DOCTESTINC})
|
||||
|
||||
target_compile_definitions(LodePngModuleTests PRIVATE
|
||||
"LODEPNG_TEST_LOGO=\"${CMAKE_SOURCE_DIR}/Data/system/app/Boot/assets/logo.png\""
|
||||
)
|
||||
|
||||
add_test(NAME LodePngModuleTests COMMAND LodePngModuleTests)
|
||||
|
||||
target_link_libraries(LodePngModuleTests PUBLIC
|
||||
lodepng-module
|
||||
TactilityKernel
|
||||
freertos_kernel
|
||||
)
|
||||
47
Modules/lodepng-module/tests/source/lodepng_test.cpp
Normal file
@ -0,0 +1,47 @@
|
||||
#include "doctest.h"
|
||||
|
||||
#include <lodepng/lodepng.h>
|
||||
|
||||
#include <cstring>
|
||||
|
||||
TEST_CASE("lodepng decodes a PNG file") {
|
||||
unsigned char* image = nullptr;
|
||||
unsigned width = 0;
|
||||
unsigned height = 0;
|
||||
REQUIRE_EQ(lodepng_decode32_file(&image, &width, &height, LODEPNG_TEST_LOGO), 0);
|
||||
CHECK_EQ(width, 80);
|
||||
CHECK_EQ(height, 103);
|
||||
lodepng_free(image);
|
||||
}
|
||||
|
||||
TEST_CASE("lodepng returns an error for a missing file") {
|
||||
unsigned char* image = nullptr;
|
||||
unsigned width = 0;
|
||||
unsigned height = 0;
|
||||
CHECK_NE(lodepng_decode32_file(&image, &width, &height, "missing.png"), 0);
|
||||
lodepng_free(image);
|
||||
}
|
||||
|
||||
TEST_CASE("lodepng encodes and decodes an image without changes") {
|
||||
constexpr unsigned width = 3;
|
||||
constexpr unsigned height = 2;
|
||||
const unsigned char pixels[width * height * 4] = {
|
||||
255, 0, 0, 255, 0, 255, 0, 255, 0, 0, 255, 255,
|
||||
0, 0, 0, 0, 255, 255, 255, 128, 10, 20, 30, 40,
|
||||
};
|
||||
|
||||
unsigned char* png = nullptr;
|
||||
size_t png_size = 0;
|
||||
REQUIRE_EQ(lodepng_encode32(&png, &png_size, pixels, width, height), 0);
|
||||
|
||||
unsigned char* decoded = nullptr;
|
||||
unsigned decoded_width = 0;
|
||||
unsigned decoded_height = 0;
|
||||
REQUIRE_EQ(lodepng_decode32(&decoded, &decoded_width, &decoded_height, png, png_size), 0);
|
||||
CHECK_EQ(decoded_width, width);
|
||||
CHECK_EQ(decoded_height, height);
|
||||
CHECK_EQ(memcmp(decoded, pixels, sizeof(pixels)), 0);
|
||||
|
||||
lodepng_free(png);
|
||||
lodepng_free(decoded);
|
||||
}
|
||||
64
Modules/lodepng-module/tests/source/main.cpp
Normal file
@ -0,0 +1,64 @@
|
||||
#define DOCTEST_CONFIG_IMPLEMENT
|
||||
#include "doctest.h"
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
|
||||
typedef struct {
|
||||
int argc;
|
||||
char** argv;
|
||||
int result;
|
||||
} TestTaskData;
|
||||
|
||||
void test_task(void* parameter) {
|
||||
auto* data = (TestTaskData*)parameter;
|
||||
|
||||
doctest::Context context;
|
||||
|
||||
context.applyCommandLine(data->argc, data->argv);
|
||||
|
||||
// overrides
|
||||
context.setOption("no-breaks", true); // don't break in the debugger when assertions fail
|
||||
|
||||
data->result = context.run();
|
||||
|
||||
vTaskEndScheduler();
|
||||
|
||||
vTaskDelete(nullptr);
|
||||
}
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
TestTaskData data = {
|
||||
.argc = argc,
|
||||
.argv = argv,
|
||||
.result = 0
|
||||
};
|
||||
|
||||
BaseType_t task_result = xTaskCreate(
|
||||
test_task,
|
||||
"test_task",
|
||||
8192,
|
||||
&data,
|
||||
1,
|
||||
nullptr
|
||||
);
|
||||
|
||||
if (task_result != pdPASS) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
vTaskStartScheduler();
|
||||
|
||||
return data.result;
|
||||
}
|
||||
|
||||
// NOTE: This is normally provided by the platform kernel module, but that's not loaded for lodepng-module
|
||||
extern "C" {
|
||||
// Required for FreeRTOS
|
||||
void vAssertCalled(unsigned long line, const char* const file) {
|
||||
std::fprintf(stderr, "assert failed at %s:%lu\n", file, line);
|
||||
std::abort();
|
||||
}
|
||||
}
|
||||
@ -70,14 +70,11 @@ endif ()
|
||||
|
||||
# Regular source files
|
||||
file(GLOB_RECURSE SOURCE_FILES "source/*.c*")
|
||||
# Font source files
|
||||
list(APPEND SOURCE_FILES "source-fonts/material_symbols_statusbar_${statusbar_symbol_size}.c")
|
||||
list(APPEND SOURCE_FILES "source-fonts/material_symbols_launcher_${launcher_symbol_size}.c")
|
||||
list(APPEND SOURCE_FILES "source-fonts/material_symbols_shared_${shared_symbol_size}.c")
|
||||
list(APPEND SOURCE_FILES "source-fonts/material_symbols_shared_${shared_symbol_2x_size}.c")
|
||||
|
||||
list(APPEND REQUIRES_LIST
|
||||
TactilityKernel
|
||||
binfont-module
|
||||
lodepng-module
|
||||
lvgl
|
||||
)
|
||||
|
||||
@ -118,13 +115,9 @@ target_compile_definitions(${MODULE_NAME} PUBLIC
|
||||
"-DTT_LVGL_TEXT_FONT_LARGE_SYMBOL=lv_font_montserrat_${font_size_large}"
|
||||
# Icon fonts
|
||||
"-DTT_LVGL_STATUSBAR_FONT_ICON_SIZE=${statusbar_symbol_size}"
|
||||
"-DTT_LVGL_STATUSBAR_FONT_ICON_SYMBOL=material_symbols_statusbar_${statusbar_symbol_size}"
|
||||
"-DTT_LVGL_LAUNCHER_FONT_ICON_SIZE=${launcher_symbol_size}"
|
||||
"-DTT_LVGL_LAUNCHER_FONT_ICON_SYMBOL=material_symbols_launcher_${launcher_symbol_size}"
|
||||
"-DTT_LVGL_SHARED_FONT_ICON_SIZE=${shared_symbol_size}"
|
||||
"-DTT_LVGL_SHARED_FONT_ICON_SYMBOL=material_symbols_shared_${shared_symbol_size}"
|
||||
"-DTT_LVGL_SHARED_FONT_ICON_2X_SIZE=${shared_symbol_2x_size}"
|
||||
"-DTT_LVGL_SHARED_FONT_ICON_2X_SYMBOL=material_symbols_shared_${shared_symbol_2x_size}"
|
||||
# UiDensity
|
||||
"-DTT_LVGL_UI_DENSITY=${ui_density_variable}"
|
||||
)
|
||||
|
||||
@ -35,7 +35,9 @@ Font sizes and symbols are configurable:
|
||||
- **On ESP32 (IDF)**: Sizes can be updated via `menuconfig` or by editing `sdkconfig`. Look for `CONFIG_TT_LVGL_FONT_SIZE_*` and `CONFIG_TT_LVGL_*_ICON_SIZE` parameters.
|
||||
- **On Simulator/POSIX**: Default sizes are defined in `Modules/lvgl-module/CMakeLists.txt`.
|
||||
|
||||
If you change an icon font size, ensure that a corresponding C file exists in `source-fonts/` (e.g., `material_symbols_shared_24.c`). These files are generated from TTF/OTF fonts using the LVGL font converter.
|
||||
Icon fonts are rasterized on device at startup from `Data/system/fonts/MaterialSymbolsRounded.ttf` (a subset with only the used icons) and cached as `.bin` files in the data path, so any icon size works.
|
||||
The icons per font are listed by name and resolved through `Data/system/fonts/MaterialSymbolsRounded.codepoints`.
|
||||
To add an icon, add its name to `generate-icons.py` and run it (requires `pip install fonttools`). This regenerates the TTF subset, the codepoints file and the name lists.
|
||||
|
||||
## Custom memory allocator
|
||||
|
||||
|
||||
@ -1,6 +1,22 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Generates the Material Symbols icon resources:
|
||||
- include/lvgl/icons/*.h: UTF-8 string defines per icon
|
||||
- include/lvgl/icons/names.h and source/icon_names.c: icon name lists per icon font
|
||||
- Data/system/fonts/MaterialSymbolsRounded.ttf: TTF subset with only the used icons
|
||||
- Data/system/fonts/MaterialSymbolsRounded.codepoints: name to codepoint map of the used icons
|
||||
|
||||
The icon fonts are rasterized from the TTF subset on device at startup.
|
||||
|
||||
Requires the fonttools package: pip install fonttools
|
||||
"""
|
||||
import os
|
||||
import urllib.request
|
||||
import zlib
|
||||
|
||||
from fontTools import subset
|
||||
from fontTools.ttLib import TTFont
|
||||
from fontTools.varLib import instancer
|
||||
|
||||
def download_file(url: str, filename: str):
|
||||
if not os.path.exists(filename):
|
||||
@ -9,15 +25,6 @@ def download_file(url: str, filename: str):
|
||||
else:
|
||||
print(f"{filename} already exists, skipping download.")
|
||||
|
||||
def generate(bpp, size, font_file: str, symbols: list, output: str):
|
||||
output_file_name = f"{output}_{size}.c"
|
||||
output_path = os.path.join("source-fonts", output_file_name)
|
||||
print(f"Generating {output_file_name}")
|
||||
cmd = "lv_font_conv --no-compress --no-prefilter --bpp {} --size {} --font {} -r {} --format lvgl -o {} --force-fast-kern-format".format(bpp, size, font_file, ",".join(symbols), output_path)
|
||||
ret = os.system(cmd)
|
||||
if ret != 0:
|
||||
raise RuntimeError(f"Font generation failed for {output_file_name} (exit code {ret})")
|
||||
|
||||
def read_code_points_map(file_path: str):
|
||||
codepoints = {}
|
||||
with open(file_path, 'r') as f:
|
||||
@ -40,9 +47,62 @@ def get_code_points(codepoints, names: list) -> list:
|
||||
result.append(f"0x{codepoints[safe_name].upper()}")
|
||||
return result
|
||||
|
||||
def generate_icon_fonts(font_file, font_sizes, symbols, output):
|
||||
for size in font_sizes:
|
||||
generate(2, size, font_file, symbols, output)
|
||||
def generate_subset_ttf(font_file: str, codepoints: list, output_path: str) -> bytes:
|
||||
print(f"Generating {output_path}")
|
||||
font = TTFont(font_file, recalcTimestamp=False)
|
||||
if "fvar" in font:
|
||||
# Pin all axes to their defaults, which are the outlines lv_font_conv used to render
|
||||
font = instancer.instantiateVariableFont(font, {axis.axisTag: None for axis in font["fvar"].axes})
|
||||
options = subset.Options()
|
||||
options.layout_features = []
|
||||
options.drop_tables += ["GSUB", "GPOS", "GDEF"]
|
||||
options.hinting = False
|
||||
options.notdef_outline = True
|
||||
subsetter = subset.Subsetter(options)
|
||||
subsetter.populate(unicodes=codepoints)
|
||||
subsetter.subset(font)
|
||||
os.makedirs(os.path.dirname(output_path), exist_ok=True)
|
||||
font.save(output_path)
|
||||
with open(output_path, "rb") as f:
|
||||
return f.read()
|
||||
|
||||
def generate_codepoints_file(codepoint_map: dict, names: list, output_path: str) -> bytes:
|
||||
print(f"Generating {output_path}")
|
||||
content = "".join(f"{name} {codepoint_map[name]}\n" for name in names)
|
||||
with open(output_path, "w") as f:
|
||||
f.write(content)
|
||||
return content.encode("utf-8")
|
||||
|
||||
def generate_icon_name_lists(icon_sets: list, version_input: bytes):
|
||||
version = zlib.crc32(version_input + repr(icon_sets).encode("utf-8")) & 0xFFFFFFFF
|
||||
|
||||
header_path = os.path.join("include", "lvgl", "icons", "names.h")
|
||||
print(f"Generating {header_path}")
|
||||
with open(header_path, "w") as f:
|
||||
f.write("// SPDX-License-Identifier: Apache-2.0\n\n")
|
||||
f.write("#pragma once\n\n")
|
||||
f.write("#include <stddef.h>\n\n")
|
||||
f.write("#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n")
|
||||
f.write("/** Changes whenever the icon TTF subset, its codepoints file or the icon name lists change */\n")
|
||||
f.write(f"#define LVGL_ICON_FONT_VERSION 0x{version:08X}u\n\n")
|
||||
f.write("// Icon names per icon font, resolved through the .codepoints file next to the TTF\n")
|
||||
for name, _ in icon_sets:
|
||||
f.write(f"extern const char* const lvgl_icon_{name}_names[];\n")
|
||||
f.write(f"extern const size_t lvgl_icon_{name}_name_count;\n\n")
|
||||
f.write("#ifdef __cplusplus\n}\n#endif\n")
|
||||
|
||||
source_path = os.path.join("source", "icon_names.c")
|
||||
print(f"Generating {source_path}")
|
||||
with open(source_path, "w") as f:
|
||||
f.write("// SPDX-License-Identifier: Apache-2.0\n")
|
||||
f.write("// Generated by generate-icons.py\n\n")
|
||||
f.write("#include <lvgl/icons/names.h>\n\n")
|
||||
for name, names in icon_sets:
|
||||
f.write(f"const char* const lvgl_icon_{name}_names[] = {{\n")
|
||||
for icon_name in names:
|
||||
f.write(f" \"{icon_name.lower()}\",\n")
|
||||
f.write("};\n\n")
|
||||
f.write(f"const size_t lvgl_icon_{name}_name_count = sizeof(lvgl_icon_{name}_names) / sizeof(lvgl_icon_{name}_names[0]);\n\n")
|
||||
|
||||
def generate_icon_names(codepoint_map: dict, codepoint_names: list, variable_name: str):
|
||||
filename = f"{variable_name}.h"
|
||||
@ -161,33 +221,6 @@ launcher_symbol_code_point_names = [
|
||||
"settings"
|
||||
]
|
||||
|
||||
shared_symbol_sizes = [
|
||||
12,
|
||||
16, # T-Deck reference, with montserrat 14 in lv_list as icon with text
|
||||
20,
|
||||
24,
|
||||
32,
|
||||
40,
|
||||
48,
|
||||
64
|
||||
]
|
||||
|
||||
statusbar_symbol_sizes = [
|
||||
12,
|
||||
16, # T-Deck reference
|
||||
20,
|
||||
30
|
||||
]
|
||||
|
||||
launcher_symbol_sizes = [
|
||||
30,
|
||||
36, # T-Deck reference
|
||||
42,
|
||||
48,
|
||||
64,
|
||||
72
|
||||
]
|
||||
|
||||
# Resolve file path relative to this script so it can be executed from any CWD
|
||||
base_dir = os.path.dirname(__file__)
|
||||
if base_dir:
|
||||
@ -198,6 +231,8 @@ ttf_url = "https://github.com/google/material-design-icons/raw/refs/heads/master
|
||||
|
||||
codepoints_filename = "MaterialSymbolsRounded.codepoints"
|
||||
ttf_filename = "MaterialSymbolsRounded.ttf"
|
||||
subset_ttf_path = os.path.join("..", "..", "Data", "system", "fonts", "MaterialSymbolsRounded.ttf")
|
||||
subset_codepoints_path = os.path.join("..", "..", "Data", "system", "fonts", "MaterialSymbolsRounded.codepoints")
|
||||
|
||||
download_file(codepoints_url, codepoints_filename)
|
||||
download_file(ttf_url, ttf_filename)
|
||||
@ -205,18 +240,17 @@ download_file(ttf_url, ttf_filename)
|
||||
codepoints_map_path = codepoints_filename
|
||||
codepoints_map = read_code_points_map(codepoints_map_path)
|
||||
|
||||
# Shared symbols
|
||||
shared_symbol_code_points = get_code_points(codepoints_map, shared_symbol_code_point_names)
|
||||
generate_icon_fonts(ttf_filename, shared_symbol_sizes, shared_symbol_code_points, "material_symbols_shared")
|
||||
generate_icon_names(codepoints_map, shared_symbol_code_point_names, "shared")
|
||||
icon_sets = [
|
||||
("shared", shared_symbol_code_point_names),
|
||||
("statusbar", statusbar_symbol_code_point_names),
|
||||
("launcher", launcher_symbol_code_point_names),
|
||||
]
|
||||
|
||||
# Statusbar symbols
|
||||
statusbar_symbol_code_points = get_code_points(codepoints_map, statusbar_symbol_code_point_names)
|
||||
generate_icon_fonts(ttf_filename, statusbar_symbol_sizes, statusbar_symbol_code_points, "material_symbols_statusbar")
|
||||
generate_icon_names(codepoints_map, statusbar_symbol_code_point_names, "statusbar")
|
||||
|
||||
# Launcher symbols
|
||||
launcher_symbol_code_points = get_code_points(codepoints_map, launcher_symbol_code_point_names)
|
||||
generate_icon_fonts(ttf_filename, launcher_symbol_sizes, launcher_symbol_code_points, "material_symbols_launcher")
|
||||
generate_icon_names(codepoints_map, launcher_symbol_code_point_names, "launcher")
|
||||
for variable_name, names in icon_sets:
|
||||
generate_icon_names(codepoints_map, names, variable_name)
|
||||
|
||||
all_names = sorted({name.lower() for _, names in icon_sets for name in names})
|
||||
all_codepoints = [int(cp, 16) for cp in get_code_points(codepoints_map, all_names)]
|
||||
subset_data = generate_subset_ttf(ttf_filename, all_codepoints, subset_ttf_path)
|
||||
codepoints_data = generate_codepoints_file(codepoints_map, all_names, subset_codepoints_path)
|
||||
generate_icon_name_lists(icon_sets, subset_data + codepoints_data)
|
||||
|
||||
24
Modules/lvgl-module/include/lvgl/binfont.h
Normal file
@ -0,0 +1,24 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
#pragma once
|
||||
|
||||
#include <lvgl.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct BinFont;
|
||||
|
||||
/**
|
||||
* @brief Creates an LVGL font that renders glyphs from a BinFont.
|
||||
* @param[in] font the source font, which must outlive the returned font
|
||||
* @return the LVGL font, or NULL when memory allocation failed
|
||||
*/
|
||||
lv_font_t* lvgl_binfont_create(struct BinFont* font);
|
||||
|
||||
/** Destroys a font from lvgl_binfont_create(). The BinFont is not closed. */
|
||||
void lvgl_binfont_destroy(lv_font_t* font);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
@ -14,6 +14,19 @@ enum LvglFontSize {
|
||||
FONT_SIZE_LARGE,
|
||||
};
|
||||
|
||||
enum LvglIconFont {
|
||||
LVGL_ICON_FONT_STATUSBAR,
|
||||
LVGL_ICON_FONT_LAUNCHER,
|
||||
LVGL_ICON_FONT_SHARED,
|
||||
LVGL_ICON_FONT_SHARED_2X,
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Sets the font that is returned by the getter of an icon font.
|
||||
* Until an icon font is set, its getter returns the default text font.
|
||||
*/
|
||||
void lvgl_set_icon_font(enum LvglIconFont icon_font, const lv_font_t* font);
|
||||
|
||||
const lv_font_t* lvgl_get_shared_icon_font(void);
|
||||
uint32_t lvgl_get_shared_icon_font_height(void);
|
||||
|
||||
|
||||
26
Modules/lvgl-module/include/lvgl/icons/names.h
Normal file
@ -0,0 +1,26 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** Changes whenever the icon TTF subset, its codepoints file or the icon name lists change */
|
||||
#define LVGL_ICON_FONT_VERSION 0x977A6A66u
|
||||
|
||||
// Icon names per icon font, resolved through the .codepoints file next to the TTF
|
||||
extern const char* const lvgl_icon_shared_names[];
|
||||
extern const size_t lvgl_icon_shared_name_count;
|
||||
|
||||
extern const char* const lvgl_icon_statusbar_names[];
|
||||
extern const size_t lvgl_icon_statusbar_name_count;
|
||||
|
||||
extern const char* const lvgl_icon_launcher_names[];
|
||||
extern const size_t lvgl_icon_launcher_name_count;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
5
Modules/lvgl-module/private/png_decoder.h
Normal file
@ -0,0 +1,5 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
#pragma once
|
||||
|
||||
/** Registers the PNG image decoder with LVGL. Must be called after lv_init(). */
|
||||
void lvgl_png_decoder_init(void);
|
||||
@ -1,176 +0,0 @@
|
||||
/*******************************************************************************
|
||||
* Size: 30 px
|
||||
* Bpp: 2
|
||||
* Opts: --no-compress --no-prefilter --bpp 2 --size 30 --font MaterialSymbolsRounded.ttf -r 0xE5C3,0xE2C7,0xE8B8 --format lvgl -o source-fonts/material_symbols_launcher_30.c --force-fast-kern-format
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#include "lvgl.h"
|
||||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
|
||||
#ifndef MATERIAL_SYMBOLS_LAUNCHER_30
|
||||
#define MATERIAL_SYMBOLS_LAUNCHER_30 1
|
||||
#endif
|
||||
|
||||
#if MATERIAL_SYMBOLS_LAUNCHER_30
|
||||
|
||||
/*-----------------
|
||||
* BITMAPS
|
||||
*----------------*/
|
||||
|
||||
/*Store the image of the glyphs*/
|
||||
static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
|
||||
/* U+E2C7 "" */
|
||||
0x1f, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x3, 0xff,
|
||||
0xff, 0xf0, 0x0, 0x0, 0x0, 0x7e, 0xaa, 0xaf,
|
||||
0xea, 0xaa, 0xa9, 0xb, 0xc0, 0x0, 0xbf, 0xff,
|
||||
0xff, 0xfc, 0xbc, 0x0, 0x2, 0xff, 0xff, 0xff,
|
||||
0xdb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x3e, 0xbc,
|
||||
0x0, 0x0, 0x0, 0x0, 0x3, 0xeb, 0xc0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x3e, 0xbc, 0x0, 0x0, 0x0,
|
||||
0x0, 0x3, 0xeb, 0xc0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x3e, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x3, 0xeb,
|
||||
0xc0, 0x0, 0x0, 0x0, 0x0, 0x3e, 0xbc, 0x0,
|
||||
0x0, 0x0, 0x0, 0x3, 0xeb, 0xc0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x3e, 0xbc, 0x0, 0x0, 0x0, 0x0,
|
||||
0x3, 0xeb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x3e,
|
||||
0xbc, 0x0, 0x0, 0x0, 0x0, 0x3, 0xe7, 0xea,
|
||||
0xaa, 0xaa, 0xaa, 0xaa, 0xbd, 0x3f, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xc1, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xf4,
|
||||
|
||||
/* U+E5C3 "" */
|
||||
0x2e, 0x0, 0xbd, 0x1, 0xf4, 0xbf, 0x81, 0xff,
|
||||
0x3, 0xfd, 0xff, 0xc2, 0xff, 0x7, 0xfe, 0xbf,
|
||||
0x81, 0xff, 0x3, 0xfd, 0x2e, 0x0, 0xbd, 0x1,
|
||||
0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x7f, 0x40, 0xfe, 0x2, 0xf8, 0xff, 0xc2, 0xff,
|
||||
0x7, 0xfd, 0xff, 0xc2, 0xff, 0x7, 0xfd, 0xbf,
|
||||
0x81, 0xff, 0x3, 0xfc, 0x19, 0x0, 0x68, 0x0,
|
||||
0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x2e, 0x0, 0xbd, 0x1, 0xf4,
|
||||
0xbf, 0x81, 0xff, 0x3, 0xfd, 0xff, 0xc2, 0xff,
|
||||
0x7, 0xfe, 0xbf, 0x81, 0xff, 0x3, 0xfd, 0x2e,
|
||||
0x0, 0xbd, 0x1, 0xf4,
|
||||
|
||||
/* U+E8B8 "" */
|
||||
0x0, 0x0, 0x1, 0xa4, 0x0, 0x0, 0x0, 0x0,
|
||||
0x1, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x2f,
|
||||
0xff, 0x80, 0x0, 0x0, 0x0, 0x3, 0xe0, 0xbc,
|
||||
0x0, 0x0, 0x0, 0x90, 0x3e, 0xb, 0xc0, 0x60,
|
||||
0x0, 0x3f, 0xff, 0xd0, 0x7f, 0xff, 0xc0, 0xb,
|
||||
0xff, 0xf8, 0x2, 0xff, 0xfe, 0x1, 0xf8, 0xbc,
|
||||
0x0, 0x3, 0xe2, 0xf4, 0x3f, 0x0, 0x0, 0x50,
|
||||
0x0, 0xf, 0xc3, 0xf4, 0x0, 0xbf, 0xe0, 0x1,
|
||||
0xfc, 0x1f, 0xe0, 0x2f, 0xff, 0x80, 0xbf, 0x40,
|
||||
0x7f, 0x43, 0xff, 0xfc, 0x1f, 0xd0, 0x1, 0xf0,
|
||||
0x7f, 0xff, 0xd0, 0xf4, 0x0, 0x1f, 0x7, 0xff,
|
||||
0xfd, 0xf, 0x40, 0x7, 0xf4, 0x3f, 0xff, 0xc1,
|
||||
0xfd, 0x1, 0xfe, 0x2, 0xff, 0xf8, 0xb, 0xf4,
|
||||
0x3f, 0x40, 0xb, 0xfe, 0x0, 0x1f, 0xc3, 0xf0,
|
||||
0x0, 0x5, 0x0, 0x0, 0xf8, 0x1f, 0x8b, 0xc0,
|
||||
0x0, 0x3e, 0x2f, 0x40, 0xbf, 0xff, 0x80, 0x2f,
|
||||
0xff, 0xe0, 0x3, 0xff, 0xfd, 0x7, 0xff, 0xfc,
|
||||
0x0, 0x9, 0x3, 0xe0, 0xbc, 0xa, 0x0, 0x0,
|
||||
0x0, 0x3e, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x2,
|
||||
0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff,
|
||||
0x40, 0x0, 0x0, 0x0, 0x0, 0x1a, 0x40, 0x0,
|
||||
0x0
|
||||
};
|
||||
|
||||
|
||||
/*---------------------
|
||||
* GLYPH DESCRIPTION
|
||||
*--------------------*/
|
||||
|
||||
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
|
||||
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
|
||||
{.bitmap_index = 0, .adv_w = 480, .box_w = 26, .box_h = 20, .ofs_x = 2, .ofs_y = 5},
|
||||
{.bitmap_index = 130, .adv_w = 480, .box_w = 20, .box_h = 20, .ofs_x = 5, .ofs_y = 5},
|
||||
{.bitmap_index = 230, .adv_w = 480, .box_w = 26, .box_h = 26, .ofs_x = 2, .ofs_y = 2}
|
||||
};
|
||||
|
||||
/*---------------------
|
||||
* CHARACTER MAPPING
|
||||
*--------------------*/
|
||||
|
||||
static const uint16_t unicode_list_0[] = {
|
||||
0x0, 0x2fc, 0x5f1
|
||||
};
|
||||
|
||||
/*Collect the unicode lists and glyph_id offsets*/
|
||||
static const lv_font_fmt_txt_cmap_t cmaps[] =
|
||||
{
|
||||
{
|
||||
.range_start = 58055, .range_length = 1522, .glyph_id_start = 1,
|
||||
.unicode_list = unicode_list_0, .glyph_id_ofs_list = NULL, .list_length = 3, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*--------------------
|
||||
* ALL CUSTOM DATA
|
||||
*--------------------*/
|
||||
|
||||
#if LVGL_VERSION_MAJOR == 8
|
||||
/*Store all the custom data of the font*/
|
||||
static lv_font_fmt_txt_glyph_cache_t cache;
|
||||
#endif
|
||||
|
||||
#if LVGL_VERSION_MAJOR >= 8
|
||||
static const lv_font_fmt_txt_dsc_t font_dsc = {
|
||||
#else
|
||||
static lv_font_fmt_txt_dsc_t font_dsc = {
|
||||
#endif
|
||||
.glyph_bitmap = glyph_bitmap,
|
||||
.glyph_dsc = glyph_dsc,
|
||||
.cmaps = cmaps,
|
||||
.kern_dsc = NULL,
|
||||
.kern_scale = 0,
|
||||
.cmap_num = 1,
|
||||
.bpp = 2,
|
||||
.kern_classes = 0,
|
||||
.bitmap_format = 0,
|
||||
#if LVGL_VERSION_MAJOR == 8
|
||||
.cache = &cache
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*-----------------
|
||||
* PUBLIC FONT
|
||||
*----------------*/
|
||||
|
||||
/*Initialize a public general font descriptor*/
|
||||
#if LVGL_VERSION_MAJOR >= 8
|
||||
const lv_font_t material_symbols_launcher_30 = {
|
||||
#else
|
||||
lv_font_t material_symbols_launcher_30 = {
|
||||
#endif
|
||||
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
|
||||
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
|
||||
.line_height = 26, /*The maximum line height required by the font*/
|
||||
.base_line = -2, /*Baseline measured from the bottom of the line*/
|
||||
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
|
||||
.subpx = LV_FONT_SUBPX_NONE,
|
||||
#endif
|
||||
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
|
||||
.underline_position = 0,
|
||||
.underline_thickness = 0,
|
||||
#endif
|
||||
.dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
|
||||
#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9
|
||||
.fallback = NULL,
|
||||
#endif
|
||||
.user_data = NULL,
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif /*#if MATERIAL_SYMBOLS_LAUNCHER_30*/
|
||||
|
||||
@ -1,194 +0,0 @@
|
||||
/*******************************************************************************
|
||||
* Size: 36 px
|
||||
* Bpp: 2
|
||||
* Opts: --no-compress --no-prefilter --bpp 2 --size 36 --font MaterialSymbolsRounded.ttf -r 0xE5C3,0xE2C7,0xE8B8 --format lvgl -o source-fonts/material_symbols_launcher_36.c --force-fast-kern-format
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#include "lvgl.h"
|
||||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
|
||||
#ifndef MATERIAL_SYMBOLS_LAUNCHER_36
|
||||
#define MATERIAL_SYMBOLS_LAUNCHER_36 1
|
||||
#endif
|
||||
|
||||
#if MATERIAL_SYMBOLS_LAUNCHER_36
|
||||
|
||||
/*-----------------
|
||||
* BITMAPS
|
||||
*----------------*/
|
||||
|
||||
/*Store the image of the glyphs*/
|
||||
static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
|
||||
/* U+E2C7 "" */
|
||||
0x2f, 0xff, 0xff, 0x40, 0x0, 0x0, 0x0, 0xb,
|
||||
0xff, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0xff,
|
||||
0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0xf, 0xc0,
|
||||
0x0, 0x2f, 0xff, 0xff, 0xff, 0xf8, 0xfc, 0x0,
|
||||
0x0, 0xbf, 0xff, 0xff, 0xff, 0xef, 0xc0, 0x0,
|
||||
0x2, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x3f, 0xfc, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x3f, 0xfc, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x3f, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x3, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x3f, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
|
||||
0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f,
|
||||
0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff,
|
||||
0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xfc,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xc0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xfc, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xe2, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xf8,
|
||||
|
||||
/* U+E5C3 "" */
|
||||
0x2f, 0x80, 0xb, 0xe0, 0x2, 0xf8, 0xbf, 0xe0,
|
||||
0x2f, 0xf8, 0xb, 0xfe, 0xff, 0xf0, 0x3f, 0xfc,
|
||||
0xf, 0xff, 0xff, 0xf0, 0x3f, 0xfc, 0xf, 0xff,
|
||||
0xbf, 0xe0, 0x2f, 0xf8, 0xb, 0xfe, 0x2f, 0x80,
|
||||
0xb, 0xe0, 0x2, 0xf8, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0x80,
|
||||
0xb, 0xe0, 0x2, 0xf8, 0xbf, 0xe0, 0x2f, 0xf8,
|
||||
0xb, 0xfe, 0xff, 0xf0, 0x3f, 0xfc, 0xf, 0xff,
|
||||
0xff, 0xf0, 0x3f, 0xfc, 0xf, 0xff, 0xbf, 0xe0,
|
||||
0x2f, 0xf8, 0xb, 0xfe, 0x2f, 0x80, 0xb, 0xe0,
|
||||
0x2, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x2f, 0x80, 0xb, 0xe0,
|
||||
0x2, 0xf8, 0xbf, 0xe0, 0x2f, 0xf8, 0xb, 0xfe,
|
||||
0xff, 0xf0, 0x3f, 0xfc, 0xf, 0xff, 0xff, 0xf0,
|
||||
0x3f, 0xfc, 0xf, 0xff, 0xbf, 0xe0, 0x2f, 0xf8,
|
||||
0xb, 0xfe, 0x2f, 0x80, 0xb, 0xe0, 0x2, 0xf8,
|
||||
|
||||
/* U+E8B8 "" */
|
||||
0x0, 0x0, 0x1, 0xff, 0xf4, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x3f, 0xff, 0xc0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x7, 0xff, 0xfd, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0xbd, 0x7, 0xe0, 0x0, 0x0, 0x0, 0x10,
|
||||
0xb, 0xd0, 0x7e, 0x0, 0x40, 0x0, 0x2f, 0xe7,
|
||||
0xfc, 0x3, 0xfd, 0xbf, 0x80, 0x7, 0xff, 0xff,
|
||||
0xc0, 0x3f, 0xff, 0xfd, 0x0, 0xff, 0xff, 0xe0,
|
||||
0x0, 0xbf, 0xff, 0xf0, 0x2f, 0xc2, 0xf0, 0x0,
|
||||
0x0, 0xf8, 0x3f, 0x83, 0xf4, 0x0, 0x0, 0x0,
|
||||
0x0, 0x1, 0xfc, 0x3f, 0x40, 0x0, 0xbf, 0xe0,
|
||||
0x0, 0xf, 0xc3, 0xfe, 0x0, 0x3f, 0xff, 0xc0,
|
||||
0x7, 0xfc, 0xf, 0xfc, 0xb, 0xff, 0xfe, 0x2,
|
||||
0xff, 0x0, 0x2f, 0xc0, 0xff, 0xff, 0xf0, 0x3f,
|
||||
0xc0, 0x0, 0xfc, 0xf, 0xff, 0xff, 0x43, 0xf4,
|
||||
0x0, 0xf, 0xc0, 0xff, 0xff, 0xf4, 0x3f, 0x0,
|
||||
0x2, 0xfc, 0xf, 0xff, 0xff, 0x3, 0xf8, 0x0,
|
||||
0xff, 0x80, 0xbf, 0xff, 0xe0, 0x2f, 0xf0, 0x3f,
|
||||
0xd0, 0x3, 0xff, 0xfc, 0x0, 0x7f, 0xc3, 0xf4,
|
||||
0x0, 0xb, 0xfe, 0x0, 0x0, 0xfc, 0x3f, 0x40,
|
||||
0x0, 0x0, 0x0, 0x0, 0x1f, 0xc2, 0xfc, 0x2f,
|
||||
0x0, 0x0, 0xf, 0x83, 0xf8, 0xf, 0xff, 0xfe,
|
||||
0x0, 0xb, 0xff, 0xff, 0x0, 0x7f, 0xff, 0xfc,
|
||||
0x3, 0xff, 0xff, 0xd0, 0x2, 0xfe, 0x7f, 0xc0,
|
||||
0x3f, 0xdb, 0xf8, 0x0, 0x5, 0x0, 0xbd, 0x7,
|
||||
0xe0, 0x4, 0x0, 0x0, 0x0, 0xb, 0xd0, 0x7e,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xd0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfc, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0x40, 0x0,
|
||||
0x0
|
||||
};
|
||||
|
||||
|
||||
/*---------------------
|
||||
* GLYPH DESCRIPTION
|
||||
*--------------------*/
|
||||
|
||||
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
|
||||
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
|
||||
{.bitmap_index = 0, .adv_w = 576, .box_w = 30, .box_h = 24, .ofs_x = 3, .ofs_y = 6},
|
||||
{.bitmap_index = 180, .adv_w = 576, .box_w = 24, .box_h = 24, .ofs_x = 6, .ofs_y = 6},
|
||||
{.bitmap_index = 324, .adv_w = 576, .box_w = 30, .box_h = 30, .ofs_x = 3, .ofs_y = 3}
|
||||
};
|
||||
|
||||
/*---------------------
|
||||
* CHARACTER MAPPING
|
||||
*--------------------*/
|
||||
|
||||
static const uint16_t unicode_list_0[] = {
|
||||
0x0, 0x2fc, 0x5f1
|
||||
};
|
||||
|
||||
/*Collect the unicode lists and glyph_id offsets*/
|
||||
static const lv_font_fmt_txt_cmap_t cmaps[] =
|
||||
{
|
||||
{
|
||||
.range_start = 58055, .range_length = 1522, .glyph_id_start = 1,
|
||||
.unicode_list = unicode_list_0, .glyph_id_ofs_list = NULL, .list_length = 3, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*--------------------
|
||||
* ALL CUSTOM DATA
|
||||
*--------------------*/
|
||||
|
||||
#if LVGL_VERSION_MAJOR == 8
|
||||
/*Store all the custom data of the font*/
|
||||
static lv_font_fmt_txt_glyph_cache_t cache;
|
||||
#endif
|
||||
|
||||
#if LVGL_VERSION_MAJOR >= 8
|
||||
static const lv_font_fmt_txt_dsc_t font_dsc = {
|
||||
#else
|
||||
static lv_font_fmt_txt_dsc_t font_dsc = {
|
||||
#endif
|
||||
.glyph_bitmap = glyph_bitmap,
|
||||
.glyph_dsc = glyph_dsc,
|
||||
.cmaps = cmaps,
|
||||
.kern_dsc = NULL,
|
||||
.kern_scale = 0,
|
||||
.cmap_num = 1,
|
||||
.bpp = 2,
|
||||
.kern_classes = 0,
|
||||
.bitmap_format = 0,
|
||||
#if LVGL_VERSION_MAJOR == 8
|
||||
.cache = &cache
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*-----------------
|
||||
* PUBLIC FONT
|
||||
*----------------*/
|
||||
|
||||
/*Initialize a public general font descriptor*/
|
||||
#if LVGL_VERSION_MAJOR >= 8
|
||||
const lv_font_t material_symbols_launcher_36 = {
|
||||
#else
|
||||
lv_font_t material_symbols_launcher_36 = {
|
||||
#endif
|
||||
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
|
||||
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
|
||||
.line_height = 30, /*The maximum line height required by the font*/
|
||||
.base_line = -3, /*Baseline measured from the bottom of the line*/
|
||||
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
|
||||
.subpx = LV_FONT_SUBPX_NONE,
|
||||
#endif
|
||||
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
|
||||
.underline_position = 0,
|
||||
.underline_thickness = 0,
|
||||
#endif
|
||||
.dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
|
||||
#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9
|
||||
.fallback = NULL,
|
||||
#endif
|
||||
.user_data = NULL,
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif /*#if MATERIAL_SYMBOLS_LAUNCHER_36*/
|
||||
|
||||
@ -1,220 +0,0 @@
|
||||
/*******************************************************************************
|
||||
* Size: 42 px
|
||||
* Bpp: 2
|
||||
* Opts: --no-compress --no-prefilter --bpp 2 --size 42 --font MaterialSymbolsRounded.ttf -r 0xE5C3,0xE2C7,0xE8B8 --format lvgl -o source-fonts/material_symbols_launcher_42.c --force-fast-kern-format
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#include "lvgl.h"
|
||||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
|
||||
#ifndef MATERIAL_SYMBOLS_LAUNCHER_42
|
||||
#define MATERIAL_SYMBOLS_LAUNCHER_42 1
|
||||
#endif
|
||||
|
||||
#if MATERIAL_SYMBOLS_LAUNCHER_42
|
||||
|
||||
/*-----------------
|
||||
* BITMAPS
|
||||
*----------------*/
|
||||
|
||||
/*Store the image of the glyphs*/
|
||||
static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
|
||||
/* U+E2C7 "" */
|
||||
0xb, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x3f, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xc0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x7f, 0xaa, 0xaa, 0xbf, 0xfa,
|
||||
0xaa, 0xaa, 0xaa, 0x40, 0xbf, 0x0, 0x0, 0xf,
|
||||
0xff, 0xff, 0xff, 0xff, 0xf4, 0xbf, 0x0, 0x0,
|
||||
0x3, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xbf, 0x0,
|
||||
0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xbf,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe,
|
||||
0xbf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0xfe, 0xbf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0xfe, 0xbf, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0xfe, 0xbf, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0xfe, 0xbf, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0xfe, 0xbf, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, 0xbf, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, 0xbf,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe,
|
||||
0xbf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0xfe, 0xbf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0xfe, 0xbf, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0xfe, 0xbf, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0xfe, 0xbf, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0xfe, 0xbf, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, 0xbf, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, 0xbf,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe,
|
||||
0x7f, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||
0xfd, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xfd, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xfc, 0xb, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xe0,
|
||||
|
||||
/* U+E5C3 "" */
|
||||
0x1f, 0xd0, 0x0, 0xbe, 0x0, 0xb, 0xe0, 0x7f,
|
||||
0xf4, 0x3, 0xff, 0x80, 0x3f, 0xfc, 0xff, 0xfc,
|
||||
0xb, 0xff, 0xc0, 0x7f, 0xfd, 0xff, 0xfc, 0xb,
|
||||
0xff, 0xd0, 0x7f, 0xfe, 0xff, 0xfc, 0xb, 0xff,
|
||||
0xc0, 0x7f, 0xfd, 0x7f, 0xf4, 0x3, 0xff, 0x80,
|
||||
0x3f, 0xfc, 0x1f, 0xd0, 0x0, 0xbe, 0x0, 0xb,
|
||||
0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xe0, 0x1,
|
||||
0xff, 0x0, 0xf, 0xf4, 0xbf, 0xf8, 0x3, 0xff,
|
||||
0xc0, 0x3f, 0xfc, 0xff, 0xfc, 0xb, 0xff, 0xc0,
|
||||
0x7f, 0xfd, 0xff, 0xfc, 0xb, 0xff, 0xc0, 0x7f,
|
||||
0xfe, 0xbf, 0xf8, 0x7, 0xff, 0xc0, 0x3f, 0xfd,
|
||||
0x3f, 0xf0, 0x3, 0xff, 0x40, 0x2f, 0xf8, 0xa,
|
||||
0x80, 0x0, 0x68, 0x0, 0x6, 0x90, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x1f, 0xd0, 0x0, 0xbe, 0x0,
|
||||
0xb, 0xe0, 0x7f, 0xf4, 0x3, 0xff, 0x80, 0x3f,
|
||||
0xfc, 0xff, 0xfc, 0xb, 0xff, 0xc0, 0x7f, 0xfd,
|
||||
0xff, 0xfc, 0xb, 0xff, 0xd0, 0x7f, 0xfe, 0xff,
|
||||
0xfc, 0xb, 0xff, 0xc0, 0x7f, 0xfd, 0x7f, 0xf4,
|
||||
0x3, 0xff, 0x80, 0x3f, 0xfc, 0x1f, 0xd0, 0x0,
|
||||
0xbe, 0x0, 0xb, 0xe0,
|
||||
|
||||
/* U+E8B8 "" */
|
||||
0x0, 0x0, 0x0, 0x6, 0xa9, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x7, 0xff, 0xfd, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xf0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x1, 0xfc, 0x3, 0xf4,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x3f,
|
||||
0x40, 0x0, 0x0, 0x1, 0xfe, 0x7, 0xfc, 0x3,
|
||||
0xfd, 0xb, 0xf4, 0x0, 0x3f, 0xff, 0xff, 0xc0,
|
||||
0x3f, 0xff, 0xff, 0xc0, 0xf, 0xff, 0xff, 0xf8,
|
||||
0x2, 0xff, 0xff, 0xff, 0x1, 0xff, 0xff, 0xf8,
|
||||
0x0, 0x2, 0xff, 0xff, 0xf4, 0x3f, 0xc1, 0xbc,
|
||||
0x0, 0x0, 0x3, 0xe4, 0x3f, 0xc7, 0xf8, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x2, 0xfd, 0xbf, 0x0,
|
||||
0x0, 0xb, 0xfe, 0x0, 0x0, 0x1f, 0xe7, 0xfd,
|
||||
0x0, 0x3, 0xff, 0xfd, 0x0, 0x7, 0xfd, 0x3f,
|
||||
0xf8, 0x0, 0xff, 0xff, 0xf0, 0x2, 0xff, 0xc0,
|
||||
0xbf, 0xe0, 0x1f, 0xff, 0xff, 0x80, 0xbf, 0xe0,
|
||||
0x2, 0xfd, 0x3, 0xff, 0xff, 0xfc, 0xb, 0xf8,
|
||||
0x0, 0xf, 0xd0, 0x3f, 0xff, 0xff, 0xc0, 0x7f,
|
||||
0x0, 0x0, 0xfd, 0x3, 0xff, 0xff, 0xfc, 0x7,
|
||||
0xf0, 0x0, 0x2f, 0xd0, 0x3f, 0xff, 0xff, 0xc0,
|
||||
0xbf, 0x40, 0xb, 0xfe, 0x1, 0xff, 0xff, 0xf8,
|
||||
0xb, 0xfe, 0x3, 0xff, 0x80, 0xf, 0xff, 0xff,
|
||||
0x0, 0x2f, 0xfc, 0x7f, 0xd0, 0x0, 0x3f, 0xff,
|
||||
0xd0, 0x0, 0x7f, 0xdb, 0xf0, 0x0, 0x0, 0xbf,
|
||||
0xe0, 0x0, 0x1, 0xfe, 0x7f, 0x80, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x2f, 0xd3, 0xfc, 0x1b, 0xc0,
|
||||
0x0, 0x0, 0x3e, 0x43, 0xfc, 0x1f, 0xff, 0xff,
|
||||
0x40, 0x0, 0x1f, 0xff, 0xff, 0x40, 0xff, 0xff,
|
||||
0xff, 0x80, 0x2f, 0xff, 0xff, 0xe0, 0x3, 0xff,
|
||||
0xff, 0xfc, 0x3, 0xff, 0xff, 0xfc, 0x0, 0x1f,
|
||||
0xe0, 0x7f, 0xc0, 0x3f, 0xd0, 0xbf, 0x0, 0x0,
|
||||
0x0, 0x1, 0xfc, 0x3, 0xf4, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x1f, 0xc0, 0x3f, 0x40, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0xff, 0xff, 0xf0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xd0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x6a, 0x90, 0x0,
|
||||
0x0, 0x0
|
||||
};
|
||||
|
||||
|
||||
/*---------------------
|
||||
* GLYPH DESCRIPTION
|
||||
*--------------------*/
|
||||
|
||||
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
|
||||
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
|
||||
{.bitmap_index = 0, .adv_w = 672, .box_w = 36, .box_h = 28, .ofs_x = 3, .ofs_y = 7},
|
||||
{.bitmap_index = 252, .adv_w = 672, .box_w = 28, .box_h = 28, .ofs_x = 7, .ofs_y = 7},
|
||||
{.bitmap_index = 448, .adv_w = 672, .box_w = 34, .box_h = 36, .ofs_x = 4, .ofs_y = 3}
|
||||
};
|
||||
|
||||
/*---------------------
|
||||
* CHARACTER MAPPING
|
||||
*--------------------*/
|
||||
|
||||
static const uint16_t unicode_list_0[] = {
|
||||
0x0, 0x2fc, 0x5f1
|
||||
};
|
||||
|
||||
/*Collect the unicode lists and glyph_id offsets*/
|
||||
static const lv_font_fmt_txt_cmap_t cmaps[] =
|
||||
{
|
||||
{
|
||||
.range_start = 58055, .range_length = 1522, .glyph_id_start = 1,
|
||||
.unicode_list = unicode_list_0, .glyph_id_ofs_list = NULL, .list_length = 3, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*--------------------
|
||||
* ALL CUSTOM DATA
|
||||
*--------------------*/
|
||||
|
||||
#if LVGL_VERSION_MAJOR == 8
|
||||
/*Store all the custom data of the font*/
|
||||
static lv_font_fmt_txt_glyph_cache_t cache;
|
||||
#endif
|
||||
|
||||
#if LVGL_VERSION_MAJOR >= 8
|
||||
static const lv_font_fmt_txt_dsc_t font_dsc = {
|
||||
#else
|
||||
static lv_font_fmt_txt_dsc_t font_dsc = {
|
||||
#endif
|
||||
.glyph_bitmap = glyph_bitmap,
|
||||
.glyph_dsc = glyph_dsc,
|
||||
.cmaps = cmaps,
|
||||
.kern_dsc = NULL,
|
||||
.kern_scale = 0,
|
||||
.cmap_num = 1,
|
||||
.bpp = 2,
|
||||
.kern_classes = 0,
|
||||
.bitmap_format = 0,
|
||||
#if LVGL_VERSION_MAJOR == 8
|
||||
.cache = &cache
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*-----------------
|
||||
* PUBLIC FONT
|
||||
*----------------*/
|
||||
|
||||
/*Initialize a public general font descriptor*/
|
||||
#if LVGL_VERSION_MAJOR >= 8
|
||||
const lv_font_t material_symbols_launcher_42 = {
|
||||
#else
|
||||
lv_font_t material_symbols_launcher_42 = {
|
||||
#endif
|
||||
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
|
||||
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
|
||||
.line_height = 36, /*The maximum line height required by the font*/
|
||||
.base_line = -3, /*Baseline measured from the bottom of the line*/
|
||||
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
|
||||
.subpx = LV_FONT_SUBPX_NONE,
|
||||
#endif
|
||||
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
|
||||
.underline_position = 0,
|
||||
.underline_thickness = 0,
|
||||
#endif
|
||||
.dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
|
||||
#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9
|
||||
.fallback = NULL,
|
||||
#endif
|
||||
.user_data = NULL,
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif /*#if MATERIAL_SYMBOLS_LAUNCHER_42*/
|
||||
|
||||
@ -1,246 +0,0 @@
|
||||
/*******************************************************************************
|
||||
* Size: 48 px
|
||||
* Bpp: 2
|
||||
* Opts: --no-compress --no-prefilter --bpp 2 --size 48 --font MaterialSymbolsRounded.ttf -r 0xE5C3,0xE2C7,0xE8B8 --format lvgl -o source-fonts/material_symbols_launcher_48.c --force-fast-kern-format
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#include "lvgl.h"
|
||||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
|
||||
#ifndef MATERIAL_SYMBOLS_LAUNCHER_48
|
||||
#define MATERIAL_SYMBOLS_LAUNCHER_48 1
|
||||
#endif
|
||||
|
||||
#if MATERIAL_SYMBOLS_LAUNCHER_48
|
||||
|
||||
/*-----------------
|
||||
* BITMAPS
|
||||
*----------------*/
|
||||
|
||||
/*Store the image of the glyphs*/
|
||||
static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
|
||||
/* U+E2C7 "" */
|
||||
0xb, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xd0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xff, 0xff,
|
||||
0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
|
||||
0xff, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0xff, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xe0, 0xff, 0x0, 0x0, 0x0, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xfc, 0xff, 0x0, 0x0, 0x0,
|
||||
0x3f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0x0,
|
||||
0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
|
||||
0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
|
||||
0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
|
||||
0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
|
||||
0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xfe, 0x3f, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xb, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0,
|
||||
|
||||
/* U+E5C3 "" */
|
||||
0xb, 0xe0, 0x0, 0xb, 0xe0, 0x0, 0xb, 0xe0,
|
||||
0x3f, 0xfc, 0x0, 0x3f, 0xfc, 0x0, 0x3f, 0xfc,
|
||||
0xbf, 0xfe, 0x0, 0xbf, 0xfe, 0x0, 0xbf, 0xfe,
|
||||
0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff,
|
||||
0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff,
|
||||
0xbf, 0xfe, 0x0, 0xbf, 0xfe, 0x0, 0xbf, 0xfe,
|
||||
0x3f, 0xfc, 0x0, 0x3f, 0xfc, 0x0, 0x3f, 0xfc,
|
||||
0xb, 0xe0, 0x0, 0xb, 0xe0, 0x0, 0xb, 0xe0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0xb, 0xe0, 0x0, 0xb, 0xe0, 0x0, 0xb, 0xe0,
|
||||
0x3f, 0xfc, 0x0, 0x3f, 0xfc, 0x0, 0x3f, 0xfc,
|
||||
0xbf, 0xfe, 0x0, 0xbf, 0xfe, 0x0, 0xbf, 0xfe,
|
||||
0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff,
|
||||
0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff,
|
||||
0xbf, 0xfe, 0x0, 0xbf, 0xfe, 0x0, 0xbf, 0xfe,
|
||||
0x3f, 0xfc, 0x0, 0x3f, 0xfc, 0x0, 0x3f, 0xfc,
|
||||
0xb, 0xe0, 0x0, 0xb, 0xe0, 0x0, 0xb, 0xe0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0xb, 0xe0, 0x0, 0xb, 0xe0, 0x0, 0xb, 0xe0,
|
||||
0x3f, 0xfc, 0x0, 0x3f, 0xfc, 0x0, 0x3f, 0xfc,
|
||||
0xbf, 0xfe, 0x0, 0xbf, 0xfe, 0x0, 0xbf, 0xfe,
|
||||
0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff,
|
||||
0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff,
|
||||
0xbf, 0xfe, 0x0, 0xbf, 0xfe, 0x0, 0xbf, 0xfe,
|
||||
0x3f, 0xfc, 0x0, 0x3f, 0xfc, 0x0, 0x3f, 0xfc,
|
||||
0xb, 0xe0, 0x0, 0xb, 0xe0, 0x0, 0xb, 0xe0,
|
||||
|
||||
/* U+E8B8 "" */
|
||||
0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff,
|
||||
0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb,
|
||||
0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0xf, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0xf, 0xf0, 0xf, 0xf0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0xf,
|
||||
0xf0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0x40, 0x2f,
|
||||
0xe0, 0xb, 0xf8, 0x1, 0xb4, 0x0, 0x0, 0xff,
|
||||
0xf9, 0xff, 0xe0, 0xb, 0xff, 0x6f, 0xff, 0x0,
|
||||
0x2, 0xff, 0xff, 0xff, 0xd0, 0x7, 0xff, 0xff,
|
||||
0xff, 0x80, 0x3, 0xff, 0xff, 0xff, 0x80, 0x2,
|
||||
0xff, 0xff, 0xff, 0xc0, 0xb, 0xfd, 0xff, 0xf4,
|
||||
0x0, 0x0, 0x1f, 0xff, 0x7f, 0xe0, 0xf, 0xf4,
|
||||
0x1b, 0xc0, 0x0, 0x0, 0x3, 0xe4, 0x1f, 0xf0,
|
||||
0x2f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0xf, 0xf8, 0x3f, 0xd0, 0x0, 0x0, 0x2f, 0xf8,
|
||||
0x0, 0x0, 0x7, 0xfc, 0x3f, 0xf4, 0x0, 0x1,
|
||||
0xff, 0xff, 0x40, 0x0, 0x1f, 0xfc, 0x2f, 0xfe,
|
||||
0x0, 0x7, 0xff, 0xff, 0xd0, 0x0, 0xbf, 0xf8,
|
||||
0xb, 0xff, 0xc0, 0xf, 0xff, 0xff, 0xf0, 0x3,
|
||||
0xff, 0xe0, 0x1, 0xff, 0xd0, 0x1f, 0xff, 0xff,
|
||||
0xf8, 0x7, 0xff, 0x40, 0x0, 0x7f, 0xc0, 0x2f,
|
||||
0xff, 0xff, 0xfc, 0x3, 0xfd, 0x0, 0x0, 0x3f,
|
||||
0xc0, 0x3f, 0xff, 0xff, 0xfc, 0x3, 0xfc, 0x0,
|
||||
0x0, 0x3f, 0xc0, 0x3f, 0xff, 0xff, 0xfc, 0x3,
|
||||
0xfc, 0x0, 0x0, 0x7f, 0xc0, 0x2f, 0xff, 0xff,
|
||||
0xfc, 0x3, 0xfc, 0x0, 0x1, 0xff, 0xd0, 0x1f,
|
||||
0xff, 0xff, 0xf8, 0x7, 0xff, 0x40, 0xb, 0xff,
|
||||
0xc0, 0xf, 0xff, 0xff, 0xf0, 0x3, 0xff, 0xe0,
|
||||
0x2f, 0xfe, 0x0, 0x7, 0xff, 0xff, 0xd0, 0x0,
|
||||
0xbf, 0xf4, 0x3f, 0xf4, 0x0, 0x1, 0xff, 0xff,
|
||||
0x40, 0x0, 0x1f, 0xfc, 0x3f, 0xd0, 0x0, 0x0,
|
||||
0x2f, 0xf8, 0x0, 0x0, 0x7, 0xfc, 0x2f, 0xf0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf8,
|
||||
0xf, 0xf4, 0x1b, 0xc0, 0x0, 0x0, 0x3, 0xe4,
|
||||
0x1f, 0xf0, 0xb, 0xfd, 0xff, 0xf4, 0x0, 0x0,
|
||||
0x1f, 0xff, 0x7f, 0xe0, 0x3, 0xff, 0xff, 0xff,
|
||||
0x80, 0x2, 0xff, 0xff, 0xff, 0xc0, 0x2, 0xff,
|
||||
0xff, 0xff, 0xd0, 0x7, 0xff, 0xff, 0xff, 0x40,
|
||||
0x0, 0xff, 0xf9, 0xff, 0xe0, 0xb, 0xff, 0x6f,
|
||||
0xfe, 0x0, 0x0, 0x2e, 0x40, 0x2f, 0xe0, 0xb,
|
||||
0xf8, 0x1, 0xf4, 0x0, 0x0, 0x0, 0x0, 0xf,
|
||||
0xf0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0xf, 0xf0, 0xf, 0xf0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xf0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xff,
|
||||
0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
|
||||
0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0
|
||||
};
|
||||
|
||||
|
||||
/*---------------------
|
||||
* GLYPH DESCRIPTION
|
||||
*--------------------*/
|
||||
|
||||
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
|
||||
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
|
||||
{.bitmap_index = 0, .adv_w = 768, .box_w = 40, .box_h = 32, .ofs_x = 4, .ofs_y = 8},
|
||||
{.bitmap_index = 320, .adv_w = 768, .box_w = 32, .box_h = 32, .ofs_x = 8, .ofs_y = 8},
|
||||
{.bitmap_index = 576, .adv_w = 768, .box_w = 40, .box_h = 40, .ofs_x = 4, .ofs_y = 4}
|
||||
};
|
||||
|
||||
/*---------------------
|
||||
* CHARACTER MAPPING
|
||||
*--------------------*/
|
||||
|
||||
static const uint16_t unicode_list_0[] = {
|
||||
0x0, 0x2fc, 0x5f1
|
||||
};
|
||||
|
||||
/*Collect the unicode lists and glyph_id offsets*/
|
||||
static const lv_font_fmt_txt_cmap_t cmaps[] =
|
||||
{
|
||||
{
|
||||
.range_start = 58055, .range_length = 1522, .glyph_id_start = 1,
|
||||
.unicode_list = unicode_list_0, .glyph_id_ofs_list = NULL, .list_length = 3, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*--------------------
|
||||
* ALL CUSTOM DATA
|
||||
*--------------------*/
|
||||
|
||||
#if LVGL_VERSION_MAJOR == 8
|
||||
/*Store all the custom data of the font*/
|
||||
static lv_font_fmt_txt_glyph_cache_t cache;
|
||||
#endif
|
||||
|
||||
#if LVGL_VERSION_MAJOR >= 8
|
||||
static const lv_font_fmt_txt_dsc_t font_dsc = {
|
||||
#else
|
||||
static lv_font_fmt_txt_dsc_t font_dsc = {
|
||||
#endif
|
||||
.glyph_bitmap = glyph_bitmap,
|
||||
.glyph_dsc = glyph_dsc,
|
||||
.cmaps = cmaps,
|
||||
.kern_dsc = NULL,
|
||||
.kern_scale = 0,
|
||||
.cmap_num = 1,
|
||||
.bpp = 2,
|
||||
.kern_classes = 0,
|
||||
.bitmap_format = 0,
|
||||
#if LVGL_VERSION_MAJOR == 8
|
||||
.cache = &cache
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*-----------------
|
||||
* PUBLIC FONT
|
||||
*----------------*/
|
||||
|
||||
/*Initialize a public general font descriptor*/
|
||||
#if LVGL_VERSION_MAJOR >= 8
|
||||
const lv_font_t material_symbols_launcher_48 = {
|
||||
#else
|
||||
lv_font_t material_symbols_launcher_48 = {
|
||||
#endif
|
||||
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
|
||||
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
|
||||
.line_height = 40, /*The maximum line height required by the font*/
|
||||
.base_line = -4, /*Baseline measured from the bottom of the line*/
|
||||
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
|
||||
.subpx = LV_FONT_SUBPX_NONE,
|
||||
#endif
|
||||
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
|
||||
.underline_position = 0,
|
||||
.underline_thickness = 0,
|
||||
#endif
|
||||
.dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
|
||||
#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9
|
||||
.fallback = NULL,
|
||||
#endif
|
||||
.user_data = NULL,
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif /*#if MATERIAL_SYMBOLS_LAUNCHER_48*/
|
||||
|
||||
@ -1,348 +0,0 @@
|
||||
/*******************************************************************************
|
||||
* Size: 64 px
|
||||
* Bpp: 2
|
||||
* Opts: --no-compress --no-prefilter --bpp 2 --size 64 --font MaterialSymbolsRounded.ttf -r 0xE5C3,0xE2C7,0xE8B8 --format lvgl -o source-fonts/material_symbols_launcher_64.c --force-fast-kern-format
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#include "lvgl.h"
|
||||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
|
||||
#ifndef MATERIAL_SYMBOLS_LAUNCHER_64
|
||||
#define MATERIAL_SYMBOLS_LAUNCHER_64 1
|
||||
#endif
|
||||
|
||||
#if MATERIAL_SYMBOLS_LAUNCHER_64
|
||||
|
||||
/*-----------------
|
||||
* BITMAPS
|
||||
*----------------*/
|
||||
|
||||
/*Store the image of the glyphs*/
|
||||
static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
|
||||
/* U+E2C7 "" */
|
||||
0x0, 0x15, 0x55, 0x55, 0x55, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff,
|
||||
0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x2f, 0xff, 0xff, 0xff, 0xff,
|
||||
0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xd0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0xff, 0xd0, 0x0, 0x0, 0x1, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xf, 0xfd,
|
||||
0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xe0, 0xff, 0xd0, 0x0, 0x0,
|
||||
0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0x8f, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x7f,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff,
|
||||
0xd0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xdf, 0xfd, 0x0, 0x0,
|
||||
0x0, 0x0, 0x1, 0x55, 0x55, 0x55, 0x55, 0x55,
|
||||
0x5f, 0xfd, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xdf,
|
||||
0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0xf, 0xfd, 0xff, 0xd0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0xff, 0xdf, 0xfd, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd,
|
||||
0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0xff, 0xdf, 0xfd, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0xf, 0xfd, 0xff, 0xd0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
|
||||
0xdf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0xf, 0xfd, 0xff, 0xd0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0xff, 0xdf, 0xfd, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf,
|
||||
0xfd, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xdf, 0xfd,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0xf, 0xfd, 0xff, 0xd0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0xff, 0xdf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd, 0xff,
|
||||
0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0xff, 0xdf, 0xfd, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0xf, 0xfd, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xdf,
|
||||
0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0xf, 0xfd, 0xff, 0xd0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0xff, 0xdf, 0xfd, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd,
|
||||
0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0xff, 0xdf, 0xfd, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0xf, 0xfd, 0xff, 0xd0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
|
||||
0xdf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0xf, 0xfd, 0xff, 0xd0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0xff, 0xdf, 0xfd, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf,
|
||||
0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xc2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x7,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xf8, 0x0, 0x1, 0x55, 0x55,
|
||||
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
|
||||
0x54, 0x0,
|
||||
|
||||
/* U+E5C3 "" */
|
||||
0x0, 0x55, 0x0, 0x0, 0x0, 0x55, 0x0, 0x0,
|
||||
0x0, 0x55, 0x0, 0x3, 0xff, 0xd0, 0x0, 0x3,
|
||||
0xff, 0xd0, 0x0, 0x3, 0xff, 0xd0, 0xf, 0xff,
|
||||
0xf4, 0x0, 0xf, 0xff, 0xf4, 0x0, 0xf, 0xff,
|
||||
0xf4, 0x2f, 0xff, 0xfc, 0x0, 0x2f, 0xff, 0xfc,
|
||||
0x0, 0x2f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x0,
|
||||
0x3f, 0xff, 0xfc, 0x0, 0x3f, 0xff, 0xfc, 0x3f,
|
||||
0xff, 0xfd, 0x0, 0x3f, 0xff, 0xfd, 0x0, 0x3f,
|
||||
0xff, 0xfd, 0x3f, 0xff, 0xfd, 0x0, 0x3f, 0xff,
|
||||
0xfd, 0x0, 0x3f, 0xff, 0xfd, 0x3f, 0xff, 0xfc,
|
||||
0x0, 0x3f, 0xff, 0xfc, 0x0, 0x3f, 0xff, 0xfc,
|
||||
0x1f, 0xff, 0xf8, 0x0, 0x1f, 0xff, 0xf8, 0x0,
|
||||
0x1f, 0xff, 0xf8, 0xb, 0xff, 0xf0, 0x0, 0xb,
|
||||
0xff, 0xf0, 0x0, 0xb, 0xff, 0xf0, 0x1, 0xff,
|
||||
0x80, 0x0, 0x1, 0xff, 0x80, 0x0, 0x1, 0xff,
|
||||
0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x55, 0x0, 0x0, 0x0, 0x55, 0x0, 0x0,
|
||||
0x0, 0x55, 0x0, 0x3, 0xff, 0xd0, 0x0, 0x3,
|
||||
0xff, 0xd0, 0x0, 0x3, 0xff, 0xd0, 0xf, 0xff,
|
||||
0xf4, 0x0, 0xf, 0xff, 0xf4, 0x0, 0xf, 0xff,
|
||||
0xf4, 0x2f, 0xff, 0xfc, 0x0, 0x2f, 0xff, 0xfc,
|
||||
0x0, 0x2f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x0,
|
||||
0x3f, 0xff, 0xfc, 0x0, 0x3f, 0xff, 0xfc, 0x3f,
|
||||
0xff, 0xfd, 0x0, 0x3f, 0xff, 0xfd, 0x0, 0x3f,
|
||||
0xff, 0xfd, 0x3f, 0xff, 0xfd, 0x0, 0x3f, 0xff,
|
||||
0xfd, 0x0, 0x3f, 0xff, 0xfd, 0x3f, 0xff, 0xfc,
|
||||
0x0, 0x3f, 0xff, 0xfc, 0x0, 0x3f, 0xff, 0xfc,
|
||||
0x1f, 0xff, 0xf8, 0x0, 0x1f, 0xff, 0xf8, 0x0,
|
||||
0x1f, 0xff, 0xf8, 0xb, 0xff, 0xf0, 0x0, 0xb,
|
||||
0xff, 0xf0, 0x0, 0xb, 0xff, 0xf0, 0x1, 0xff,
|
||||
0x80, 0x0, 0x1, 0xff, 0x80, 0x0, 0x1, 0xff,
|
||||
0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x55, 0x0, 0x0, 0x0, 0x55, 0x0, 0x0,
|
||||
0x0, 0x55, 0x0, 0x3, 0xff, 0xd0, 0x0, 0x3,
|
||||
0xff, 0xd0, 0x0, 0x3, 0xff, 0xd0, 0xf, 0xff,
|
||||
0xf4, 0x0, 0xf, 0xff, 0xf4, 0x0, 0xf, 0xff,
|
||||
0xf4, 0x2f, 0xff, 0xfc, 0x0, 0x2f, 0xff, 0xfc,
|
||||
0x0, 0x2f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x0,
|
||||
0x3f, 0xff, 0xfc, 0x0, 0x3f, 0xff, 0xfc, 0x3f,
|
||||
0xff, 0xfd, 0x0, 0x3f, 0xff, 0xfd, 0x0, 0x3f,
|
||||
0xff, 0xfd, 0x3f, 0xff, 0xfd, 0x0, 0x3f, 0xff,
|
||||
0xfd, 0x0, 0x3f, 0xff, 0xfd, 0x3f, 0xff, 0xfc,
|
||||
0x0, 0x3f, 0xff, 0xfc, 0x0, 0x3f, 0xff, 0xfc,
|
||||
0x1f, 0xff, 0xf8, 0x0, 0x1f, 0xff, 0xf8, 0x0,
|
||||
0x1f, 0xff, 0xf8, 0xb, 0xff, 0xf0, 0x0, 0xb,
|
||||
0xff, 0xf0, 0x0, 0xb, 0xff, 0xf0, 0x1, 0xff,
|
||||
0x80, 0x0, 0x1, 0xff, 0x80, 0x0, 0x1, 0xff,
|
||||
0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
|
||||
/* U+E8B8 "" */
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0x55, 0x50,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff,
|
||||
0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xd0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0xb, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff,
|
||||
0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0xf, 0xfd, 0x0, 0x7f, 0xf0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf,
|
||||
0xfc, 0x0, 0x3f, 0xf0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x1f, 0xfc, 0x0, 0x3f,
|
||||
0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xfd,
|
||||
0x0, 0x7f, 0xfc, 0x0, 0x3f, 0xfd, 0x0, 0x7f,
|
||||
0xe0, 0x0, 0x0, 0x3f, 0xff, 0xe3, 0xff, 0xfc,
|
||||
0x0, 0x3f, 0xff, 0xcb, 0xff, 0xfc, 0x0, 0x0,
|
||||
0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x2f, 0xff,
|
||||
0xff, 0xff, 0xff, 0x0, 0x1, 0xff, 0xff, 0xff,
|
||||
0xff, 0xf8, 0x0, 0x2f, 0xff, 0xff, 0xff, 0xff,
|
||||
0x40, 0x3, 0xff, 0xff, 0xff, 0xff, 0x90, 0x0,
|
||||
0x6, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xb, 0xff,
|
||||
0xaf, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x2f, 0xff,
|
||||
0xfa, 0xff, 0xe0, 0xf, 0xff, 0x1, 0xff, 0xd0,
|
||||
0x0, 0x0, 0x0, 0x7, 0xff, 0x40, 0xff, 0xf0,
|
||||
0x2f, 0xfe, 0x0, 0x1b, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0xe4, 0x0, 0xbf, 0xf8, 0x3f, 0xfc, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x3f, 0xfc, 0x7f, 0xf4, 0x0, 0x0, 0x0, 0x6,
|
||||
0xff, 0xd0, 0x0, 0x0, 0x0, 0x1f, 0xfd, 0x7f,
|
||||
0xfc, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xfd, 0x0,
|
||||
0x0, 0x0, 0x3f, 0xfd, 0x3f, 0xff, 0x40, 0x0,
|
||||
0x1, 0xff, 0xff, 0xff, 0x80, 0x0, 0x1, 0xff,
|
||||
0xfc, 0x2f, 0xff, 0xe0, 0x0, 0x3, 0xff, 0xff,
|
||||
0xff, 0xd0, 0x0, 0xb, 0xff, 0xf8, 0xb, 0xff,
|
||||
0xfc, 0x0, 0xf, 0xff, 0xff, 0xff, 0xf0, 0x0,
|
||||
0x3f, 0xff, 0xe0, 0x1, 0xff, 0xff, 0x0, 0x1f,
|
||||
0xff, 0xff, 0xff, 0xf8, 0x0, 0xff, 0xff, 0x40,
|
||||
0x0, 0x7f, 0xfe, 0x0, 0x3f, 0xff, 0xff, 0xff,
|
||||
0xfc, 0x0, 0xbf, 0xfd, 0x0, 0x0, 0xf, 0xfd,
|
||||
0x0, 0x3f, 0xff, 0xff, 0xff, 0xfd, 0x0, 0x7f,
|
||||
0xf0, 0x0, 0x0, 0xf, 0xfd, 0x0, 0x3f, 0xff,
|
||||
0xff, 0xff, 0xfd, 0x0, 0x7f, 0xf0, 0x0, 0x0,
|
||||
0xf, 0xfd, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xfd,
|
||||
0x0, 0x7f, 0xf0, 0x0, 0x0, 0xf, 0xfd, 0x0,
|
||||
0x3f, 0xff, 0xff, 0xff, 0xfd, 0x0, 0x7f, 0xf0,
|
||||
0x0, 0x0, 0x2f, 0xfe, 0x0, 0x3f, 0xff, 0xff,
|
||||
0xff, 0xfc, 0x0, 0xbf, 0xf8, 0x0, 0x0, 0xff,
|
||||
0xfe, 0x0, 0x2f, 0xff, 0xff, 0xff, 0xfc, 0x0,
|
||||
0xbf, 0xfe, 0x0, 0x7, 0xff, 0xfe, 0x0, 0xf,
|
||||
0xff, 0xff, 0xff, 0xf4, 0x0, 0xbf, 0xff, 0xc0,
|
||||
0xf, 0xff, 0xf4, 0x0, 0xb, 0xff, 0xff, 0xff,
|
||||
0xf0, 0x0, 0x1f, 0xff, 0xf0, 0x3f, 0xff, 0xc0,
|
||||
0x0, 0x2, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x3,
|
||||
0xff, 0xfc, 0x3f, 0xfe, 0x0, 0x0, 0x0, 0xbf,
|
||||
0xff, 0xff, 0x0, 0x0, 0x0, 0xbf, 0xfc, 0x7f,
|
||||
0xf4, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xf4, 0x0,
|
||||
0x0, 0x0, 0x1f, 0xfd, 0x7f, 0xf8, 0x0, 0x0,
|
||||
0x0, 0x0, 0x59, 0x0, 0x0, 0x0, 0x0, 0x2f,
|
||||
0xfc, 0x3f, 0xfd, 0x0, 0x5, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x40, 0x0, 0x7f, 0xfc, 0x1f, 0xff,
|
||||
0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x2, 0xfd,
|
||||
0x0, 0xff, 0xf4, 0xf, 0xff, 0x4b, 0xff, 0xf0,
|
||||
0x0, 0x0, 0x0, 0xf, 0xff, 0xe1, 0xff, 0xe0,
|
||||
0x3, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0,
|
||||
0xbf, 0xff, 0xff, 0xff, 0xc0, 0x2, 0xff, 0xff,
|
||||
0xff, 0xff, 0xf4, 0x0, 0x1f, 0xff, 0xff, 0xff,
|
||||
0xff, 0x80, 0x0, 0xff, 0xff, 0xff, 0xff, 0xf8,
|
||||
0x0, 0x2f, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0,
|
||||
0x7f, 0xff, 0xfb, 0xff, 0xf8, 0x0, 0x2f, 0xff,
|
||||
0xef, 0xff, 0xfd, 0x0, 0x0, 0x1f, 0xff, 0x40,
|
||||
0xff, 0xfc, 0x0, 0x3f, 0xff, 0x1, 0xff, 0xf4,
|
||||
0x0, 0x0, 0x2, 0xa0, 0x0, 0x2f, 0xfc, 0x0,
|
||||
0x3f, 0xf8, 0x0, 0x1a, 0x80, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x1f, 0xfc, 0x0, 0x3f, 0xf0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf,
|
||||
0xfc, 0x0, 0x7f, 0xf0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0xf, 0xfe, 0x55, 0xbf,
|
||||
0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0xf, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff,
|
||||
0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, 0xc0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x1, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff,
|
||||
0xf8, 0x0, 0x0, 0x0, 0x0, 0x0
|
||||
};
|
||||
|
||||
|
||||
/*---------------------
|
||||
* GLYPH DESCRIPTION
|
||||
*--------------------*/
|
||||
|
||||
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
|
||||
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
|
||||
{.bitmap_index = 0, .adv_w = 1024, .box_w = 54, .box_h = 44, .ofs_x = 5, .ofs_y = 10},
|
||||
{.bitmap_index = 594, .adv_w = 1024, .box_w = 44, .box_h = 44, .ofs_x = 10, .ofs_y = 10},
|
||||
{.bitmap_index = 1078, .adv_w = 1024, .box_w = 52, .box_h = 54, .ofs_x = 6, .ofs_y = 5}
|
||||
};
|
||||
|
||||
/*---------------------
|
||||
* CHARACTER MAPPING
|
||||
*--------------------*/
|
||||
|
||||
static const uint16_t unicode_list_0[] = {
|
||||
0x0, 0x2fc, 0x5f1
|
||||
};
|
||||
|
||||
/*Collect the unicode lists and glyph_id offsets*/
|
||||
static const lv_font_fmt_txt_cmap_t cmaps[] =
|
||||
{
|
||||
{
|
||||
.range_start = 58055, .range_length = 1522, .glyph_id_start = 1,
|
||||
.unicode_list = unicode_list_0, .glyph_id_ofs_list = NULL, .list_length = 3, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*--------------------
|
||||
* ALL CUSTOM DATA
|
||||
*--------------------*/
|
||||
|
||||
#if LVGL_VERSION_MAJOR == 8
|
||||
/*Store all the custom data of the font*/
|
||||
static lv_font_fmt_txt_glyph_cache_t cache;
|
||||
#endif
|
||||
|
||||
#if LVGL_VERSION_MAJOR >= 8
|
||||
static const lv_font_fmt_txt_dsc_t font_dsc = {
|
||||
#else
|
||||
static lv_font_fmt_txt_dsc_t font_dsc = {
|
||||
#endif
|
||||
.glyph_bitmap = glyph_bitmap,
|
||||
.glyph_dsc = glyph_dsc,
|
||||
.cmaps = cmaps,
|
||||
.kern_dsc = NULL,
|
||||
.kern_scale = 0,
|
||||
.cmap_num = 1,
|
||||
.bpp = 2,
|
||||
.kern_classes = 0,
|
||||
.bitmap_format = 0,
|
||||
#if LVGL_VERSION_MAJOR == 8
|
||||
.cache = &cache
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*-----------------
|
||||
* PUBLIC FONT
|
||||
*----------------*/
|
||||
|
||||
/*Initialize a public general font descriptor*/
|
||||
#if LVGL_VERSION_MAJOR >= 8
|
||||
const lv_font_t material_symbols_launcher_64 = {
|
||||
#else
|
||||
lv_font_t material_symbols_launcher_64 = {
|
||||
#endif
|
||||
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
|
||||
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
|
||||
.line_height = 54, /*The maximum line height required by the font*/
|
||||
.base_line = -5, /*Baseline measured from the bottom of the line*/
|
||||
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
|
||||
.subpx = LV_FONT_SUBPX_NONE,
|
||||
#endif
|
||||
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
|
||||
.underline_position = 0,
|
||||
.underline_thickness = 0,
|
||||
#endif
|
||||
.dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
|
||||
#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9
|
||||
.fallback = NULL,
|
||||
#endif
|
||||
.user_data = NULL,
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif /*#if MATERIAL_SYMBOLS_LAUNCHER_64*/
|
||||
|
||||
@ -1,397 +0,0 @@
|
||||
/*******************************************************************************
|
||||
* Size: 72 px
|
||||
* Bpp: 2
|
||||
* Opts: --no-compress --no-prefilter --bpp 2 --size 72 --font MaterialSymbolsRounded.ttf -r 0xE5C3,0xE2C7,0xE8B8 --format lvgl -o source-fonts/material_symbols_launcher_72.c --force-fast-kern-format
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#include "lvgl.h"
|
||||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
|
||||
#ifndef MATERIAL_SYMBOLS_LAUNCHER_72
|
||||
#define MATERIAL_SYMBOLS_LAUNCHER_72 1
|
||||
#endif
|
||||
|
||||
#if MATERIAL_SYMBOLS_LAUNCHER_72
|
||||
|
||||
/*-----------------
|
||||
* BITMAPS
|
||||
*----------------*/
|
||||
|
||||
/*Store the image of the glyphs*/
|
||||
static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
|
||||
/* U+E2C7 "" */
|
||||
0x1, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0xff, 0xf0, 0x0, 0x0, 0x0, 0xf,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0x40, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x3, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
|
||||
0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff,
|
||||
0xf0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xf0,
|
||||
0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0xf, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0xf, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf,
|
||||
0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff,
|
||||
0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff,
|
||||
0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xf0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xf0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0xf, 0xff, 0xff, 0xf0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0xf, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0xf, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf,
|
||||
0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff,
|
||||
0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff,
|
||||
0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xf0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xf0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0xf, 0xff, 0xff, 0xf0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0xf, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0xf, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf,
|
||||
0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff,
|
||||
0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff,
|
||||
0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xf0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xf0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0xf, 0xff, 0xff, 0xf0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0xf, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0xf, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf,
|
||||
0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff,
|
||||
0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff,
|
||||
0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xfd, 0x3f, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xfc, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xf0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x40,
|
||||
|
||||
/* U+E5C3 "" */
|
||||
0x1, 0xff, 0x40, 0x0, 0x0, 0x1f, 0xf4, 0x0,
|
||||
0x0, 0x1, 0xff, 0x40, 0xf, 0xff, 0xf0, 0x0,
|
||||
0x0, 0xff, 0xff, 0x0, 0x0, 0xf, 0xff, 0xf0,
|
||||
0x3f, 0xff, 0xfc, 0x0, 0x3, 0xff, 0xff, 0xc0,
|
||||
0x0, 0x3f, 0xff, 0xfc, 0x7f, 0xff, 0xfd, 0x0,
|
||||
0x7, 0xff, 0xff, 0xd0, 0x0, 0x7f, 0xff, 0xfd,
|
||||
0xff, 0xff, 0xff, 0x0, 0xf, 0xff, 0xff, 0xf0,
|
||||
0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
|
||||
0xf, 0xff, 0xff, 0xf0, 0x0, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0x0, 0xf, 0xff, 0xff, 0xf0,
|
||||
0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
|
||||
0xf, 0xff, 0xff, 0xf0, 0x0, 0xff, 0xff, 0xff,
|
||||
0x7f, 0xff, 0xfd, 0x0, 0x7, 0xff, 0xff, 0xd0,
|
||||
0x0, 0x7f, 0xff, 0xfd, 0x3f, 0xff, 0xfc, 0x0,
|
||||
0x3, 0xff, 0xff, 0xc0, 0x0, 0x3f, 0xff, 0xfc,
|
||||
0xf, 0xff, 0xf0, 0x0, 0x0, 0xff, 0xff, 0x0,
|
||||
0x0, 0xf, 0xff, 0xf0, 0x1, 0xff, 0x40, 0x0,
|
||||
0x0, 0x1f, 0xf4, 0x0, 0x0, 0x1, 0xff, 0x40,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x1, 0xff, 0x40, 0x0, 0x0, 0x1f, 0xf4, 0x0,
|
||||
0x0, 0x1, 0xff, 0x40, 0xf, 0xff, 0xf0, 0x0,
|
||||
0x0, 0xff, 0xff, 0x0, 0x0, 0xf, 0xff, 0xf0,
|
||||
0x3f, 0xff, 0xfc, 0x0, 0x3, 0xff, 0xff, 0xc0,
|
||||
0x0, 0x3f, 0xff, 0xfc, 0x7f, 0xff, 0xfd, 0x0,
|
||||
0x7, 0xff, 0xff, 0xd0, 0x0, 0x7f, 0xff, 0xfd,
|
||||
0xff, 0xff, 0xff, 0x0, 0xf, 0xff, 0xff, 0xf0,
|
||||
0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
|
||||
0xf, 0xff, 0xff, 0xf0, 0x0, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0x0, 0xf, 0xff, 0xff, 0xf0,
|
||||
0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
|
||||
0xf, 0xff, 0xff, 0xf0, 0x0, 0xff, 0xff, 0xff,
|
||||
0x7f, 0xff, 0xfd, 0x0, 0x7, 0xff, 0xff, 0xd0,
|
||||
0x0, 0x7f, 0xff, 0xfd, 0x3f, 0xff, 0xfc, 0x0,
|
||||
0x3, 0xff, 0xff, 0xc0, 0x0, 0x3f, 0xff, 0xfc,
|
||||
0xf, 0xff, 0xf0, 0x0, 0x0, 0xff, 0xff, 0x0,
|
||||
0x0, 0xf, 0xff, 0xf0, 0x1, 0xff, 0x40, 0x0,
|
||||
0x0, 0x1f, 0xf4, 0x0, 0x0, 0x1, 0xff, 0x40,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x1, 0xff, 0x40, 0x0, 0x0, 0x1f, 0xf4, 0x0,
|
||||
0x0, 0x1, 0xff, 0x40, 0xf, 0xff, 0xf0, 0x0,
|
||||
0x0, 0xff, 0xff, 0x0, 0x0, 0xf, 0xff, 0xf0,
|
||||
0x3f, 0xff, 0xfc, 0x0, 0x3, 0xff, 0xff, 0xc0,
|
||||
0x0, 0x3f, 0xff, 0xfc, 0x7f, 0xff, 0xfd, 0x0,
|
||||
0x7, 0xff, 0xff, 0xd0, 0x0, 0x7f, 0xff, 0xfd,
|
||||
0xff, 0xff, 0xff, 0x0, 0xf, 0xff, 0xff, 0xf0,
|
||||
0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
|
||||
0xf, 0xff, 0xff, 0xf0, 0x0, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0x0, 0xf, 0xff, 0xff, 0xf0,
|
||||
0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
|
||||
0xf, 0xff, 0xff, 0xf0, 0x0, 0xff, 0xff, 0xff,
|
||||
0x7f, 0xff, 0xfd, 0x0, 0x7, 0xff, 0xff, 0xd0,
|
||||
0x0, 0x7f, 0xff, 0xfd, 0x3f, 0xff, 0xfc, 0x0,
|
||||
0x3, 0xff, 0xff, 0xc0, 0x0, 0x3f, 0xff, 0xfc,
|
||||
0xf, 0xff, 0xf0, 0x0, 0x0, 0xff, 0xff, 0x0,
|
||||
0x0, 0xf, 0xff, 0xf0, 0x1, 0xff, 0x40, 0x0,
|
||||
0x0, 0x1f, 0xf4, 0x0, 0x0, 0x1, 0xff, 0x40,
|
||||
|
||||
/* U+E8B8 "" */
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff,
|
||||
0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xfe, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0xb, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x3f, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
|
||||
0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xc0,
|
||||
0x3, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x1f, 0xfe, 0x0, 0xf,
|
||||
0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0xbf, 0xf8, 0x0, 0x3f, 0xfc,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xa8,
|
||||
0x0, 0x3, 0xff, 0xd0, 0x0, 0xff, 0xf4, 0x0,
|
||||
0x6, 0xe4, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x40,
|
||||
0x7f, 0xff, 0x40, 0x2, 0xff, 0xfc, 0x2, 0xff,
|
||||
0xf8, 0x0, 0x0, 0x3, 0xff, 0xff, 0xef, 0xff,
|
||||
0xfc, 0x0, 0xb, 0xff, 0xfe, 0xbf, 0xff, 0xfc,
|
||||
0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf0,
|
||||
0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x0,
|
||||
0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0,
|
||||
0x7f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0xf,
|
||||
0xff, 0xff, 0xff, 0xff, 0xe4, 0x0, 0x0, 0x2f,
|
||||
0xff, 0xff, 0xff, 0xff, 0xe0, 0x0, 0xbf, 0xfe,
|
||||
0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x7, 0xff,
|
||||
0xff, 0xef, 0xff, 0xc0, 0x3, 0xff, 0xf0, 0x6f,
|
||||
0xff, 0x40, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf8,
|
||||
0x1f, 0xff, 0x80, 0x2f, 0xff, 0x40, 0xb, 0xf0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x1, 0xfd, 0x0, 0x2f,
|
||||
0xff, 0x41, 0xff, 0xf8, 0x0, 0x1, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x1, 0x40, 0x0, 0x3f, 0xff,
|
||||
0xb, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x15,
|
||||
0x40, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xfc, 0x3f,
|
||||
0xfe, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xf4,
|
||||
0x0, 0x0, 0x0, 0x0, 0xff, 0xf4, 0xbf, 0xfe,
|
||||
0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xfc, 0x0,
|
||||
0x0, 0x0, 0x1f, 0xff, 0xc1, 0xff, 0xff, 0x0,
|
||||
0x0, 0x0, 0x7f, 0xff, 0xff, 0xfd, 0x0, 0x0,
|
||||
0x2, 0xff, 0xff, 0x3, 0xff, 0xff, 0x40, 0x0,
|
||||
0x7, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x3f,
|
||||
0xff, 0xf4, 0x3, 0xff, 0xff, 0x80, 0x0, 0x3f,
|
||||
0xff, 0xff, 0xff, 0xfc, 0x0, 0x7, 0xff, 0xff,
|
||||
0x80, 0x3, 0xff, 0xff, 0xc0, 0x2, 0xff, 0xff,
|
||||
0xff, 0xff, 0xf4, 0x0, 0x3f, 0xff, 0xf4, 0x0,
|
||||
0x2, 0xff, 0xfe, 0x0, 0xf, 0xff, 0xff, 0xff,
|
||||
0xff, 0xf0, 0x0, 0xff, 0xff, 0x40, 0x0, 0x1,
|
||||
0xff, 0xf4, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff,
|
||||
0xc0, 0x3, 0xff, 0xe0, 0x0, 0x0, 0x2, 0xff,
|
||||
0xd0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0x40,
|
||||
0xf, 0xff, 0x0, 0x0, 0x0, 0xb, 0xff, 0x40,
|
||||
0xb, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x0, 0x3f,
|
||||
0xfd, 0x0, 0x0, 0x0, 0x2f, 0xfd, 0x0, 0x2f,
|
||||
0xff, 0xff, 0xff, 0xff, 0xf4, 0x0, 0xff, 0xf4,
|
||||
0x0, 0x0, 0x0, 0xbf, 0xf4, 0x0, 0x7f, 0xff,
|
||||
0xff, 0xff, 0xff, 0xd0, 0x3, 0xff, 0xc0, 0x0,
|
||||
0x0, 0x7, 0xff, 0xd0, 0x1, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0x0, 0xf, 0xff, 0x80, 0x0, 0x0,
|
||||
0xbf, 0xff, 0x80, 0x3, 0xff, 0xff, 0xff, 0xff,
|
||||
0xfc, 0x0, 0x3f, 0xff, 0xc0, 0x0, 0xf, 0xff,
|
||||
0xff, 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, 0xd0,
|
||||
0x0, 0xff, 0xff, 0xd0, 0x0, 0xff, 0xff, 0xe0,
|
||||
0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0x0, 0x1,
|
||||
0xff, 0xff, 0xe0, 0xf, 0xff, 0xfd, 0x0, 0x0,
|
||||
0x1f, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0xff,
|
||||
0xff, 0xd0, 0x7f, 0xff, 0xc0, 0x0, 0x0, 0x1f,
|
||||
0xff, 0xff, 0xff, 0x40, 0x0, 0x0, 0xbf, 0xff,
|
||||
0xc2, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x1f, 0xff,
|
||||
0xff, 0xf0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xf,
|
||||
0xff, 0x80, 0x0, 0x0, 0x0, 0xb, 0xff, 0xfd,
|
||||
0x0, 0x0, 0x0, 0x0, 0x3f, 0xfc, 0x2f, 0xff,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x55, 0x0, 0x0,
|
||||
0x0, 0x0, 0x2, 0xff, 0xf0, 0x7f, 0xfe, 0x0,
|
||||
0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40,
|
||||
0x0, 0xf, 0xff, 0x80, 0xbf, 0xfd, 0x0, 0x2f,
|
||||
0xc0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf4, 0x0,
|
||||
0xbf, 0xfc, 0x0, 0xff, 0xfc, 0x1b, 0xff, 0xd0,
|
||||
0x0, 0x0, 0x0, 0x0, 0xbf, 0xfe, 0x7, 0xff,
|
||||
0xe0, 0x2, 0xff, 0xfb, 0xff, 0xff, 0xe0, 0x0,
|
||||
0x0, 0x0, 0x1f, 0xff, 0xff, 0xbf, 0xff, 0x0,
|
||||
0x3, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0,
|
||||
0xb, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x0, 0x7,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x1, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xc0, 0x0, 0xf, 0xff,
|
||||
0xff, 0xff, 0xff, 0xfc, 0x0, 0x7, 0xff, 0xff,
|
||||
0xff, 0xff, 0xfd, 0x0, 0x0, 0xf, 0xff, 0xff,
|
||||
0xbf, 0xff, 0xf0, 0x0, 0x2f, 0xff, 0xfa, 0xff,
|
||||
0xff, 0xe0, 0x0, 0x0, 0x1f, 0xff, 0xd0, 0x1f,
|
||||
0xff, 0xc0, 0x0, 0xbf, 0xff, 0x0, 0xbf, 0xfe,
|
||||
0x0, 0x0, 0x0, 0x6, 0xa0, 0x0, 0xf, 0xff,
|
||||
0x40, 0x3, 0xff, 0xd0, 0x0, 0x1b, 0x90, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xfd, 0x0,
|
||||
0xf, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x7f, 0xf8, 0x0, 0x3f,
|
||||
0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x1, 0xff, 0xe0, 0x0, 0xff, 0xf0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x3, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0xf, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f,
|
||||
0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff,
|
||||
0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff,
|
||||
0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xff, 0x80,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0
|
||||
};
|
||||
|
||||
|
||||
/*---------------------
|
||||
* GLYPH DESCRIPTION
|
||||
*--------------------*/
|
||||
|
||||
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
|
||||
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
|
||||
{.bitmap_index = 0, .adv_w = 1152, .box_w = 60, .box_h = 48, .ofs_x = 6, .ofs_y = 12},
|
||||
{.bitmap_index = 720, .adv_w = 1152, .box_w = 48, .box_h = 48, .ofs_x = 12, .ofs_y = 12},
|
||||
{.bitmap_index = 1296, .adv_w = 1152, .box_w = 59, .box_h = 60, .ofs_x = 6, .ofs_y = 6}
|
||||
};
|
||||
|
||||
/*---------------------
|
||||
* CHARACTER MAPPING
|
||||
*--------------------*/
|
||||
|
||||
static const uint16_t unicode_list_0[] = {
|
||||
0x0, 0x2fc, 0x5f1
|
||||
};
|
||||
|
||||
/*Collect the unicode lists and glyph_id offsets*/
|
||||
static const lv_font_fmt_txt_cmap_t cmaps[] =
|
||||
{
|
||||
{
|
||||
.range_start = 58055, .range_length = 1522, .glyph_id_start = 1,
|
||||
.unicode_list = unicode_list_0, .glyph_id_ofs_list = NULL, .list_length = 3, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*--------------------
|
||||
* ALL CUSTOM DATA
|
||||
*--------------------*/
|
||||
|
||||
#if LVGL_VERSION_MAJOR == 8
|
||||
/*Store all the custom data of the font*/
|
||||
static lv_font_fmt_txt_glyph_cache_t cache;
|
||||
#endif
|
||||
|
||||
#if LVGL_VERSION_MAJOR >= 8
|
||||
static const lv_font_fmt_txt_dsc_t font_dsc = {
|
||||
#else
|
||||
static lv_font_fmt_txt_dsc_t font_dsc = {
|
||||
#endif
|
||||
.glyph_bitmap = glyph_bitmap,
|
||||
.glyph_dsc = glyph_dsc,
|
||||
.cmaps = cmaps,
|
||||
.kern_dsc = NULL,
|
||||
.kern_scale = 0,
|
||||
.cmap_num = 1,
|
||||
.bpp = 2,
|
||||
.kern_classes = 0,
|
||||
.bitmap_format = 0,
|
||||
#if LVGL_VERSION_MAJOR == 8
|
||||
.cache = &cache
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*-----------------
|
||||
* PUBLIC FONT
|
||||
*----------------*/
|
||||
|
||||
/*Initialize a public general font descriptor*/
|
||||
#if LVGL_VERSION_MAJOR >= 8
|
||||
const lv_font_t material_symbols_launcher_72 = {
|
||||
#else
|
||||
lv_font_t material_symbols_launcher_72 = {
|
||||
#endif
|
||||
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
|
||||
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
|
||||
.line_height = 60, /*The maximum line height required by the font*/
|
||||
.base_line = -6, /*Baseline measured from the bottom of the line*/
|
||||
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
|
||||
.subpx = LV_FONT_SUBPX_NONE,
|
||||
#endif
|
||||
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
|
||||
.underline_position = 0,
|
||||
.underline_thickness = 0,
|
||||
#endif
|
||||
.dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
|
||||
#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9
|
||||
.fallback = NULL,
|
||||
#endif
|
||||
.user_data = NULL,
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif /*#if MATERIAL_SYMBOLS_LAUNCHER_72*/
|
||||
|
||||
@ -1,415 +0,0 @@
|
||||
/*******************************************************************************
|
||||
* Size: 12 px
|
||||
* Bpp: 2
|
||||
* Opts: --no-compress --no-prefilter --bpp 2 --size 12 --font MaterialSymbolsRounded.ttf -r 0xE145,0xE5C3,0xE770,0xEF40,0xEBCC,0xEFE6,0xEF4A,0xE5CD,0xF15C,0xE668,0xE92E,0xE326,0xEB97,0xE745,0xEC1C,0xE2C7,0xF720,0xF090,0xE8AF,0xE30F,0xE8FD,0xE9F4,0xE3F4,0xE316,0xE90F,0xEA07,0xE9B9,0xE159,0xE5D2,0xE28D,0xE5D4,0xE405,0xE89C,0xF8C7,0xE5D5,0xEF7A,0xE8B8,0xE9F7,0xE55D,0xF028,0xE1E0,0xE63E,0xE1A7,0xEB8E,0xEAD6,0xE3AF,0xFFF75 --format lvgl -o source-fonts/material_symbols_shared_12.c --force-fast-kern-format
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#include "lvgl.h"
|
||||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
|
||||
#ifndef MATERIAL_SYMBOLS_SHARED_12
|
||||
#define MATERIAL_SYMBOLS_SHARED_12 1
|
||||
#endif
|
||||
|
||||
#if MATERIAL_SYMBOLS_SHARED_12
|
||||
|
||||
/*-----------------
|
||||
* BITMAPS
|
||||
*----------------*/
|
||||
|
||||
/*Store the image of the glyphs*/
|
||||
static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
|
||||
/* U+E145 "" */
|
||||
0x0, 0x0, 0x2, 0x40, 0x2, 0x40, 0x17, 0x54,
|
||||
0x6b, 0xe8, 0x2, 0x40, 0x2, 0x40, 0x1, 0x0,
|
||||
|
||||
/* U+E159 "" */
|
||||
0xff, 0xff, 0xfe, 0x0, 0xb, 0xdd, 0x7, 0x7c,
|
||||
0x2f, 0x83, 0xc0, 0x0, 0x3c, 0x0, 0x3, 0xc0,
|
||||
0x0, 0x3f, 0xff, 0xff,
|
||||
|
||||
/* U+E1A7 "" */
|
||||
0x1, 0x40, 0xb, 0x47, 0x2b, 0x7, 0xec, 0x7,
|
||||
0xc0, 0x1f, 0x1, 0xfb, 0x1c, 0x9d, 0x2, 0xd0,
|
||||
0x9, 0x0,
|
||||
|
||||
/* U+E1E0 "" */
|
||||
0x2, 0x0, 0x7, 0x80, 0x3, 0x0, 0x73, 0x3c,
|
||||
0xb3, 0x3c, 0x33, 0x18, 0x3f, 0xf4, 0x3, 0x0,
|
||||
0x3, 0x40, 0x3, 0x40,
|
||||
|
||||
/* U+E28D "" */
|
||||
0x0, 0x0, 0x0, 0x2, 0xf0, 0x0, 0xc, 0xc0,
|
||||
0x0, 0x33, 0x0, 0x0, 0xcc, 0x0, 0x1b, 0xba,
|
||||
0x42, 0xaa, 0xab, 0x9, 0x55, 0x5c, 0x3a, 0xaa,
|
||||
0xb4, 0xc4, 0x85, 0xa6, 0x67, 0x69, 0x8a, 0xaa,
|
||||
0xa9,
|
||||
|
||||
/* U+E2C7 "" */
|
||||
0xff, 0x40, 0xc, 0xf, 0xff, 0xc0, 0x0, 0x3c,
|
||||
0x0, 0x3, 0xc0, 0x0, 0x3c, 0x0, 0x3, 0xc0,
|
||||
0x0, 0x3f, 0xff, 0xff,
|
||||
|
||||
/* U+E30F "" */
|
||||
0x2, 0xf0, 0x0, 0x26, 0x40, 0x2, 0x74, 0x1,
|
||||
0xe, 0x4, 0xed, 0xb, 0xbd, 0xb0, 0xd7, 0xa8,
|
||||
0xe2, 0xa0, 0x2b, 0x0, 0x2, 0x64, 0x0, 0x2f,
|
||||
0x0,
|
||||
|
||||
/* U+E316 "" */
|
||||
0x5, 0x1, 0xf8, 0x70, 0xd4, 0x1,
|
||||
|
||||
/* U+E326 "" */
|
||||
0x7f, 0xff, 0xda, 0x0, 0x0, 0xa0, 0xf, 0xfa,
|
||||
0x0, 0xc3, 0xa0, 0xc, 0x37, 0xa4, 0xc3, 0x1a,
|
||||
0x4c, 0x3f, 0xfc, 0xff,
|
||||
|
||||
/* U+E3AF "" */
|
||||
0x6, 0xf9, 0x2, 0xd2, 0x78, 0x74, 0x50, 0xd9,
|
||||
0x8e, 0xaa, 0xc3, 0xf4, 0x3c, 0x1f, 0xc3, 0xaa,
|
||||
0xb2, 0x67, 0x5, 0x1d, 0x2d, 0x87, 0x80, 0x6f,
|
||||
0x90,
|
||||
|
||||
/* U+E3F4 "" */
|
||||
0x15, 0x55, 0xb, 0xaa, 0xac, 0x90, 0x0, 0xc9,
|
||||
0x0, 0xc, 0x90, 0x0, 0xc9, 0x1, 0xc, 0x97,
|
||||
0x3c, 0xc9, 0xaa, 0x8c, 0x95, 0x55, 0xc6, 0xaa,
|
||||
0xa8,
|
||||
|
||||
/* U+E405 "" */
|
||||
0x0, 0x40, 0x3f, 0x3, 0xa0, 0x30, 0x3, 0x0,
|
||||
0x30, 0xbf, 0xf, 0xf0, 0xff, 0x2, 0x80,
|
||||
|
||||
/* U+E55D "" */
|
||||
0x0, 0x0, 0x2, 0x80, 0x3, 0xc0, 0xa, 0xa0,
|
||||
0xc, 0x30, 0x18, 0x24, 0x30, 0xc, 0x77, 0xdd,
|
||||
0xf8, 0x2f, 0x40, 0x1,
|
||||
|
||||
/* U+E5C3 "" */
|
||||
0xf3, 0xcf, 0xf3, 0xcf, 0x0, 0x0, 0xf3, 0xcf,
|
||||
0xf3, 0xcf, 0x0, 0x0, 0xf3, 0xcf, 0xf3, 0xcf,
|
||||
|
||||
/* U+E5CD "" */
|
||||
0x10, 0x0, 0x34, 0x1c, 0xd, 0x70, 0x3, 0xc0,
|
||||
0x7, 0xd0, 0x1c, 0x34, 0x30, 0xc, 0x0, 0x0,
|
||||
|
||||
/* U+E5D2 "" */
|
||||
0xbf, 0xff, 0xc0, 0x0, 0x0, 0x15, 0x55, 0x46,
|
||||
0xaa, 0xa8, 0x0, 0x0, 0xb, 0xff, 0xfc,
|
||||
|
||||
/* U+E5D4 "" */
|
||||
0xff, 0xf, 0xf0, 0xff,
|
||||
|
||||
/* U+E5D5 "" */
|
||||
0xb, 0xe3, 0x34, 0x2f, 0x90, 0x1b, 0xc0, 0x6a,
|
||||
0xc0, 0x0, 0x90, 0x5, 0x34, 0x1c, 0xb, 0xe0,
|
||||
|
||||
/* U+E63E "" */
|
||||
0x6, 0xff, 0x80, 0x2f, 0xaa, 0xf8, 0xb4, 0x0,
|
||||
0x2d, 0x1, 0xfe, 0x40, 0xb, 0xeb, 0xd0, 0x0,
|
||||
0x0, 0x40, 0x0, 0x3c, 0x0, 0x0, 0x7c, 0x0,
|
||||
0x0, 0x14, 0x0,
|
||||
|
||||
/* U+E668 "" */
|
||||
0x0, 0x2, 0x0, 0xd, 0x0, 0x34, 0xa0, 0xd0,
|
||||
0x2b, 0x40, 0x9, 0x0,
|
||||
|
||||
/* U+E745 "" */
|
||||
0xff, 0xc0, 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0,
|
||||
0x4, 0xfd, 0xb, 0xc0, 0xa, 0xd0, 0x9, 0x90,
|
||||
0x2, 0xd0,
|
||||
|
||||
/* U+E770 "" */
|
||||
0x0, 0xa0, 0x0, 0x2a, 0xd0, 0x57, 0x6, 0xcb,
|
||||
0xd0, 0xc, 0x94, 0x90, 0xc9, 0x1f, 0x8c, 0xbb,
|
||||
0xff, 0xcb, 0xff, 0xfc, 0x0, 0x0, 0x0,
|
||||
|
||||
/* U+E89C "" */
|
||||
0xff, 0xd0, 0xc0, 0xb8, 0xc0, 0xbd, 0xc0, 0x2b,
|
||||
0xc1, 0x43, 0xc6, 0x93, 0xc6, 0x93, 0xc1, 0x43,
|
||||
0xc0, 0x3, 0xff, 0xff,
|
||||
|
||||
/* U+E8AF "" */
|
||||
0xff, 0xfc, 0xc, 0x0, 0x90, 0xc0, 0x9, 0x6c,
|
||||
0x0, 0x9b, 0xc5, 0x5d, 0xbf, 0xaa, 0x8b, 0x8a,
|
||||
0xaa, 0xf0, 0xff, 0xff, 0x0, 0x0, 0xb0, 0x0,
|
||||
0x0,
|
||||
|
||||
/* U+E8B8 "" */
|
||||
0x1, 0xf4, 0x1, 0x25, 0x84, 0x7e, 0xb, 0xda,
|
||||
0xa, 0xa, 0x36, 0xf9, 0xc3, 0x2f, 0x9c, 0xa0,
|
||||
0xa0, 0xa7, 0xe0, 0xbd, 0x12, 0x58, 0x40, 0x1f,
|
||||
0x40,
|
||||
|
||||
/* U+E8FD "" */
|
||||
0x6, 0xf9, 0x2, 0xd0, 0x78, 0x70, 0xf4, 0xd9,
|
||||
0x1, 0x86, 0xc0, 0x24, 0x3c, 0x6, 0x3, 0x90,
|
||||
0x0, 0x67, 0x9, 0xd, 0x2d, 0x7, 0x80, 0x6f,
|
||||
0x90,
|
||||
|
||||
/* U+E90F "" */
|
||||
0xb, 0xe0, 0x34, 0x1c, 0xa0, 0xa, 0x90, 0x6,
|
||||
0x90, 0x6, 0x70, 0xd, 0x1f, 0xf4, 0x6, 0x90,
|
||||
0x6, 0x90, 0x3, 0xc0,
|
||||
|
||||
/* U+E92E "" */
|
||||
0x2, 0x80, 0xff, 0xff, 0xa0, 0xa, 0xa5, 0x5a,
|
||||
0xa5, 0x5a, 0xa5, 0x5a, 0xa5, 0x5a, 0xa5, 0x5a,
|
||||
0x65, 0x59, 0x2a, 0xa8,
|
||||
|
||||
/* U+E9B9 "" */
|
||||
0xf3, 0xff, 0xff, 0x3f, 0xff, 0x0, 0x0, 0xf,
|
||||
0x3f, 0xff, 0xf3, 0xff, 0xf0, 0x0, 0x0, 0xf3,
|
||||
0xff, 0xff, 0x3f, 0xff,
|
||||
|
||||
/* U+E9F4 "" */
|
||||
0x0, 0x7c, 0x0, 0x0, 0x9c, 0x0, 0x0, 0x38,
|
||||
0x0, 0x74, 0x20, 0x1d, 0xdc, 0xbd, 0x37, 0xbb,
|
||||
0xc3, 0xae, 0x1, 0x83, 0x0, 0x0, 0xea, 0x0,
|
||||
0x1, 0xab, 0x40, 0x1f, 0x2, 0xf4, 0x1b, 0x2,
|
||||
0xa4, 0xa, 0x0, 0xa0,
|
||||
|
||||
/* U+E9F7 "" */
|
||||
0x15, 0x55, 0x7, 0xaa, 0xac, 0xa0, 0x0, 0x9b,
|
||||
0xff, 0xfd, 0xa0, 0x0, 0x9a, 0x0, 0x9, 0xa0,
|
||||
0x0, 0x9a, 0x0, 0x9, 0x65, 0x55, 0xd2, 0xaa,
|
||||
0xa8,
|
||||
|
||||
/* U+EA07 "" */
|
||||
0x6, 0xf9, 0x2, 0xea, 0xb8, 0x73, 0x1c, 0xdb,
|
||||
0xff, 0xfe, 0xc3, 0xc, 0x3c, 0x30, 0xc3, 0xbf,
|
||||
0xff, 0xe7, 0x31, 0xcd, 0x2e, 0xab, 0x80, 0x6f,
|
||||
0x90,
|
||||
|
||||
/* U+EAD6 "" */
|
||||
0x15, 0x55, 0x7, 0xaa, 0xac, 0xa0, 0x0, 0x9a,
|
||||
0x4, 0x9, 0xa6, 0x86, 0x9a, 0x68, 0xd9, 0xa9,
|
||||
0x94, 0x9a, 0x0, 0x9, 0x65, 0x55, 0xd2, 0xaa,
|
||||
0xa8,
|
||||
|
||||
/* U+EB8E "" */
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x3c,
|
||||
0xa0, 0x3, 0xc3, 0x40, 0x3c, 0xa1, 0x93, 0xc0,
|
||||
0x19, 0x3f, 0xff, 0xff,
|
||||
|
||||
/* U+EB97 "" */
|
||||
0x15, 0x55, 0x4e, 0xaa, 0xab, 0xc0, 0x0, 0x3c,
|
||||
0xaa, 0x63, 0xc1, 0x0, 0x3c, 0xdf, 0xf3, 0xc1,
|
||||
0x0, 0x3d, 0x55, 0x57, 0x6b, 0xfe, 0x90, 0x2a,
|
||||
0x80,
|
||||
|
||||
/* U+EBCC "" */
|
||||
0x8, 0x2, 0x7, 0xff, 0xfc, 0x90, 0x0, 0xcb,
|
||||
0xff, 0xfc, 0x90, 0x0, 0xc9, 0x88, 0x8c, 0x90,
|
||||
0x0, 0xc9, 0x88, 0x8c, 0x90, 0x0, 0xc7, 0xff,
|
||||
0xfc,
|
||||
|
||||
/* U+EC1C "" */
|
||||
0x0, 0x30, 0x0, 0xe0, 0x3, 0xc0, 0xf, 0xc0,
|
||||
0x36, 0xfe, 0xbf, 0x9c, 0x3, 0xf0, 0x3, 0xc0,
|
||||
0xb, 0x0, 0xc, 0x0,
|
||||
|
||||
/* U+EF40 "" */
|
||||
0xf3, 0xcf, 0x3c, 0xf3, 0xc0, 0x0, 0x3, 0xcf,
|
||||
0x4, 0xf3, 0xcb, 0xc0, 0xa, 0xef, 0x6, 0xa3,
|
||||
0xc1, 0xe0,
|
||||
|
||||
/* U+EF4A "" */
|
||||
0x6, 0xf9, 0x2, 0xd0, 0x78, 0x70, 0x0, 0xd9,
|
||||
0x0, 0x6, 0xc0, 0x0, 0x3c, 0x0, 0x3, 0x90,
|
||||
0x0, 0x67, 0x0, 0xd, 0x2d, 0x7, 0x80, 0x6f,
|
||||
0x90,
|
||||
|
||||
/* U+EF7A "" */
|
||||
0x0, 0x0, 0x2, 0xfe, 0x0, 0x70, 0x34, 0x9,
|
||||
0x1, 0x80, 0x90, 0x18, 0x3, 0x47, 0x40, 0x1f,
|
||||
0xec, 0x0, 0x0, 0x70, 0x0, 0x1, 0xc0, 0x0,
|
||||
0x0,
|
||||
|
||||
/* U+EFE6 "" */
|
||||
0x0, 0x1, 0x1, 0xf8, 0x78, 0x24, 0xcf, 0xc2,
|
||||
0x4c, 0xfc, 0x24, 0xc3, 0x2, 0x4c, 0x30, 0x7c,
|
||||
0xc3, 0xb, 0xdc, 0x30, 0x7c, 0xa7, 0x2, 0x42,
|
||||
0x80,
|
||||
|
||||
/* U+F028 "" */
|
||||
0x7f, 0xff, 0xfc, 0x90, 0x0, 0xc, 0x98, 0x88,
|
||||
0x8c, 0x90, 0x0, 0xc, 0x98, 0x88, 0x8c, 0x90,
|
||||
0x54, 0xc, 0x90, 0x54, 0xc, 0x7f, 0xff, 0xfc,
|
||||
|
||||
/* U+F090 "" */
|
||||
0x2, 0x0, 0x2, 0x40, 0x2, 0x40, 0x1a, 0x70,
|
||||
0xb, 0xd0, 0x42, 0x41, 0xc0, 0x3, 0xff, 0xff,
|
||||
|
||||
/* U+F15C "" */
|
||||
0x0, 0xbd, 0x0, 0x3, 0x43, 0x40, 0x9, 0x0,
|
||||
0xc0, 0x38, 0x0, 0xd0, 0xa0, 0x0, 0x68, 0x90,
|
||||
0x0, 0xc, 0x70, 0x0, 0xc, 0x1f, 0xff, 0xf4,
|
||||
|
||||
/* U+F720 "" */
|
||||
0x1, 0xe0, 0x7, 0x8b, 0x47, 0x40, 0x3a, 0xf0,
|
||||
0x2f, 0x97, 0xb4, 0xe4, 0x30, 0x39, 0xc, 0xd,
|
||||
0xd3, 0xe, 0x1e, 0xed, 0x0, 0xb8, 0x0,
|
||||
|
||||
/* U+F8C7 "" */
|
||||
0x0, 0x80, 0x0, 0x9, 0x0, 0x70, 0x91, 0xcd,
|
||||
0x9, 0xd, 0xc0, 0x90, 0xac, 0x4, 0x6, 0xd0,
|
||||
0x0, 0x97, 0x0, 0x1c, 0x2c, 0x7, 0x0, 0x7f,
|
||||
0x80,
|
||||
|
||||
/* U+FFF75 "" */
|
||||
0xff, 0xff, 0xec, 0x41, 0x13, 0xd5, 0x55, 0x7a,
|
||||
0xaf, 0xef, 0xb, 0xd1, 0x3b, 0x81, 0x2e, 0xd5,
|
||||
0x7f, 0x5e, 0xaa, 0xab, 0xc4, 0x11, 0x3b, 0xff,
|
||||
0xff
|
||||
};
|
||||
|
||||
|
||||
/*---------------------
|
||||
* GLYPH DESCRIPTION
|
||||
*--------------------*/
|
||||
|
||||
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
|
||||
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
|
||||
{.bitmap_index = 0, .adv_w = 192, .box_w = 8, .box_h = 8, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 16, .adv_w = 192, .box_w = 10, .box_h = 8, .ofs_x = 1, .ofs_y = 2},
|
||||
{.bitmap_index = 36, .adv_w = 192, .box_w = 7, .box_h = 10, .ofs_x = 2, .ofs_y = 1},
|
||||
{.bitmap_index = 54, .adv_w = 192, .box_w = 8, .box_h = 10, .ofs_x = 2, .ofs_y = 1},
|
||||
{.bitmap_index = 74, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
|
||||
{.bitmap_index = 107, .adv_w = 192, .box_w = 10, .box_h = 8, .ofs_x = 1, .ofs_y = 2},
|
||||
{.bitmap_index = 127, .adv_w = 192, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 152, .adv_w = 192, .box_w = 6, .box_h = 4, .ofs_x = 3, .ofs_y = 4},
|
||||
{.bitmap_index = 158, .adv_w = 192, .box_w = 10, .box_h = 8, .ofs_x = 1, .ofs_y = 2},
|
||||
{.bitmap_index = 178, .adv_w = 192, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 203, .adv_w = 192, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 228, .adv_w = 192, .box_w = 6, .box_h = 10, .ofs_x = 3, .ofs_y = 1},
|
||||
{.bitmap_index = 243, .adv_w = 192, .box_w = 8, .box_h = 10, .ofs_x = 2, .ofs_y = 1},
|
||||
{.bitmap_index = 263, .adv_w = 192, .box_w = 8, .box_h = 8, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 279, .adv_w = 192, .box_w = 8, .box_h = 8, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 295, .adv_w = 192, .box_w = 10, .box_h = 6, .ofs_x = 1, .ofs_y = 3},
|
||||
{.bitmap_index = 310, .adv_w = 192, .box_w = 2, .box_h = 8, .ofs_x = 5, .ofs_y = 2},
|
||||
{.bitmap_index = 314, .adv_w = 192, .box_w = 8, .box_h = 8, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 330, .adv_w = 192, .box_w = 12, .box_h = 9, .ofs_x = 0, .ofs_y = 1},
|
||||
{.bitmap_index = 357, .adv_w = 192, .box_w = 8, .box_h = 6, .ofs_x = 2, .ofs_y = 3},
|
||||
{.bitmap_index = 369, .adv_w = 192, .box_w = 9, .box_h = 8, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 387, .adv_w = 192, .box_w = 10, .box_h = 9, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 410, .adv_w = 192, .box_w = 8, .box_h = 10, .ofs_x = 2, .ofs_y = 1},
|
||||
{.bitmap_index = 430, .adv_w = 192, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 455, .adv_w = 192, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 480, .adv_w = 192, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 505, .adv_w = 192, .box_w = 8, .box_h = 10, .ofs_x = 2, .ofs_y = 1},
|
||||
{.bitmap_index = 525, .adv_w = 192, .box_w = 8, .box_h = 10, .ofs_x = 2, .ofs_y = 1},
|
||||
{.bitmap_index = 545, .adv_w = 192, .box_w = 10, .box_h = 8, .ofs_x = 1, .ofs_y = 2},
|
||||
{.bitmap_index = 565, .adv_w = 192, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
|
||||
{.bitmap_index = 601, .adv_w = 192, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 626, .adv_w = 192, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 651, .adv_w = 192, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 676, .adv_w = 192, .box_w = 10, .box_h = 8, .ofs_x = 1, .ofs_y = 2},
|
||||
{.bitmap_index = 696, .adv_w = 192, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 721, .adv_w = 192, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 746, .adv_w = 192, .box_w = 8, .box_h = 10, .ofs_x = 2, .ofs_y = 1},
|
||||
{.bitmap_index = 766, .adv_w = 192, .box_w = 9, .box_h = 8, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 784, .adv_w = 192, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 809, .adv_w = 192, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 834, .adv_w = 192, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 859, .adv_w = 192, .box_w = 12, .box_h = 8, .ofs_x = 0, .ofs_y = 2},
|
||||
{.bitmap_index = 883, .adv_w = 192, .box_w = 8, .box_h = 8, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 899, .adv_w = 192, .box_w = 12, .box_h = 8, .ofs_x = 0, .ofs_y = 2},
|
||||
{.bitmap_index = 923, .adv_w = 192, .box_w = 9, .box_h = 10, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 946, .adv_w = 192, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 971, .adv_w = 192, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 1}
|
||||
};
|
||||
|
||||
/*---------------------
|
||||
* CHARACTER MAPPING
|
||||
*--------------------*/
|
||||
|
||||
static const uint16_t unicode_list_0[] = {
|
||||
0x0, 0x14, 0x62, 0x9b, 0x148, 0x182, 0x1ca, 0x1d1,
|
||||
0x1e1, 0x26a, 0x2af, 0x2c0, 0x418, 0x47e, 0x488, 0x48d,
|
||||
0x48f, 0x490, 0x4f9, 0x523, 0x600, 0x62b, 0x757, 0x76a,
|
||||
0x773, 0x7b8, 0x7ca, 0x7e9, 0x874, 0x8af, 0x8b2, 0x8c2,
|
||||
0x991, 0xa49, 0xa52, 0xa87, 0xad7, 0xdfb, 0xe05, 0xe35,
|
||||
0xea1, 0xee3, 0xf4b, 0x1017, 0x15db, 0x1782
|
||||
};
|
||||
|
||||
/*Collect the unicode lists and glyph_id offsets*/
|
||||
static const lv_font_fmt_txt_cmap_t cmaps[] =
|
||||
{
|
||||
{
|
||||
.range_start = 57669, .range_length = 6019, .glyph_id_start = 1,
|
||||
.unicode_list = unicode_list_0, .glyph_id_ofs_list = NULL, .list_length = 46, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
|
||||
},
|
||||
{
|
||||
.range_start = 1048437, .range_length = 1, .glyph_id_start = 47,
|
||||
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*--------------------
|
||||
* ALL CUSTOM DATA
|
||||
*--------------------*/
|
||||
|
||||
#if LVGL_VERSION_MAJOR == 8
|
||||
/*Store all the custom data of the font*/
|
||||
static lv_font_fmt_txt_glyph_cache_t cache;
|
||||
#endif
|
||||
|
||||
#if LVGL_VERSION_MAJOR >= 8
|
||||
static const lv_font_fmt_txt_dsc_t font_dsc = {
|
||||
#else
|
||||
static lv_font_fmt_txt_dsc_t font_dsc = {
|
||||
#endif
|
||||
.glyph_bitmap = glyph_bitmap,
|
||||
.glyph_dsc = glyph_dsc,
|
||||
.cmaps = cmaps,
|
||||
.kern_dsc = NULL,
|
||||
.kern_scale = 0,
|
||||
.cmap_num = 2,
|
||||
.bpp = 2,
|
||||
.kern_classes = 0,
|
||||
.bitmap_format = 0,
|
||||
#if LVGL_VERSION_MAJOR == 8
|
||||
.cache = &cache
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*-----------------
|
||||
* PUBLIC FONT
|
||||
*----------------*/
|
||||
|
||||
/*Initialize a public general font descriptor*/
|
||||
#if LVGL_VERSION_MAJOR >= 8
|
||||
const lv_font_t material_symbols_shared_12 = {
|
||||
#else
|
||||
lv_font_t material_symbols_shared_12 = {
|
||||
#endif
|
||||
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
|
||||
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
|
||||
.line_height = 12, /*The maximum line height required by the font*/
|
||||
.base_line = 0, /*Baseline measured from the bottom of the line*/
|
||||
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
|
||||
.subpx = LV_FONT_SUBPX_NONE,
|
||||
#endif
|
||||
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
|
||||
.underline_position = 0,
|
||||
.underline_thickness = 0,
|
||||
#endif
|
||||
.dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
|
||||
#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9
|
||||
.fallback = NULL,
|
||||
#endif
|
||||
.user_data = NULL,
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif /*#if MATERIAL_SYMBOLS_SHARED_12*/
|
||||
|
||||
@ -1,521 +0,0 @@
|
||||
/*******************************************************************************
|
||||
* Size: 16 px
|
||||
* Bpp: 2
|
||||
* Opts: --no-compress --no-prefilter --bpp 2 --size 16 --font MaterialSymbolsRounded.ttf -r 0xE145,0xE5C3,0xE770,0xEF40,0xEBCC,0xEFE6,0xEF4A,0xE5CD,0xF15C,0xE668,0xE92E,0xE326,0xEB97,0xE745,0xEC1C,0xE2C7,0xF720,0xF090,0xE8AF,0xE30F,0xE8FD,0xE9F4,0xE3F4,0xE316,0xE90F,0xEA07,0xE9B9,0xE159,0xE5D2,0xE28D,0xE5D4,0xE405,0xE89C,0xF8C7,0xE5D5,0xEF7A,0xE8B8,0xE9F7,0xE55D,0xF028,0xE1E0,0xE63E,0xE1A7,0xEB8E,0xEAD6,0xE3AF,0xFFF75 --format lvgl -o source-fonts/material_symbols_shared_16.c --force-fast-kern-format
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#include "lvgl.h"
|
||||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
|
||||
#ifndef MATERIAL_SYMBOLS_SHARED_16
|
||||
#define MATERIAL_SYMBOLS_SHARED_16 1
|
||||
#endif
|
||||
|
||||
#if MATERIAL_SYMBOLS_SHARED_16
|
||||
|
||||
/*-----------------
|
||||
* BITMAPS
|
||||
*----------------*/
|
||||
|
||||
/*Store the image of the glyphs*/
|
||||
static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
|
||||
/* U+E145 "" */
|
||||
0x0, 0x0, 0x0, 0xe, 0x0, 0x0, 0xe0, 0x0,
|
||||
0xe, 0x0, 0x15, 0xf5, 0x4b, 0xff, 0xfd, 0x0,
|
||||
0xe0, 0x0, 0xe, 0x0, 0x0, 0xe0, 0x0, 0x9,
|
||||
0x0,
|
||||
|
||||
/* U+E159 "" */
|
||||
0x15, 0x55, 0x55, 0xb, 0xff, 0xff, 0xfd, 0xf4,
|
||||
0x0, 0x2, 0xde, 0xe0, 0x1, 0xed, 0xd2, 0xd0,
|
||||
0xf4, 0xdd, 0x7, 0xf8, 0xd, 0xd0, 0x4, 0x0,
|
||||
0xdd, 0x0, 0x0, 0xd, 0xd0, 0x0, 0x0, 0xdd,
|
||||
0x0, 0x0, 0xd, 0xbf, 0xff, 0xff, 0xd1, 0x55,
|
||||
0x55, 0x50,
|
||||
|
||||
/* U+E1A7 "" */
|
||||
0x0, 0x40, 0x0, 0x3c, 0x1, 0xf, 0xc1, 0xd3,
|
||||
0x6c, 0x1d, 0xef, 0x1, 0xff, 0x0, 0x1f, 0x0,
|
||||
0xf, 0xd0, 0xf, 0xfd, 0xf, 0x36, 0xcb, 0xe,
|
||||
0xe0, 0x3, 0xe0, 0x0, 0xe0, 0x0, 0x0, 0x0,
|
||||
|
||||
/* U+E1E0 "" */
|
||||
0x0, 0x0, 0x0, 0xe, 0x0, 0x2, 0xf0, 0x0,
|
||||
0xe, 0x0, 0x10, 0xd1, 0x5b, 0xcd, 0x3e, 0x78,
|
||||
0xd3, 0xe3, 0x4d, 0x1c, 0x39, 0xe6, 0xc2, 0xff,
|
||||
0xf4, 0x0, 0xd0, 0x0, 0xe, 0x0, 0x1, 0xf0,
|
||||
0x0, 0xe, 0x0,
|
||||
|
||||
/* U+E28D "" */
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xe0, 0x0,
|
||||
0x0, 0xd, 0x70, 0x0, 0x0, 0xd, 0x70, 0x0,
|
||||
0x0, 0xd, 0x70, 0x0, 0x0, 0xd, 0x70, 0x0,
|
||||
0x0, 0xd, 0x70, 0x0, 0x6, 0xaf, 0xfa, 0x90,
|
||||
0xf, 0xaa, 0xaa, 0xf0, 0xd, 0x0, 0x0, 0x70,
|
||||
0xf, 0xff, 0xff, 0xf0, 0x1d, 0x55, 0x55, 0x74,
|
||||
0x28, 0xc2, 0x83, 0x28, 0x34, 0xd2, 0x87, 0x1c,
|
||||
0x3f, 0xff, 0xff, 0xfc, 0x5, 0x55, 0x55, 0x50,
|
||||
|
||||
/* U+E2C7 "" */
|
||||
0x15, 0x40, 0x0, 0xb, 0xff, 0x40, 0x0, 0xd0,
|
||||
0x2f, 0xff, 0xcd, 0x0, 0x55, 0x5d, 0xd0, 0x0,
|
||||
0x0, 0xdd, 0x0, 0x0, 0xd, 0xd0, 0x0, 0x0,
|
||||
0xdd, 0x0, 0x0, 0xd, 0xd0, 0x0, 0x0, 0xdd,
|
||||
0x0, 0x0, 0xd, 0xbf, 0xff, 0xff, 0xd1, 0x55,
|
||||
0x55, 0x50,
|
||||
|
||||
/* U+E30F "" */
|
||||
0x0, 0x15, 0x40, 0x0, 0x3, 0xfc, 0x0, 0x0,
|
||||
0x31, 0xc0, 0x0, 0x3, 0x2c, 0x0, 0x0, 0x3f,
|
||||
0x80, 0xf, 0xf4, 0xe2, 0xfd, 0xe6, 0xd0, 0xb5,
|
||||
0xde, 0x6d, 0xb, 0x5d, 0xff, 0x44, 0x2f, 0xd0,
|
||||
0x2, 0xf0, 0x0, 0x0, 0x36, 0xc0, 0x0, 0x3,
|
||||
0x1c, 0x0, 0x0, 0x3a, 0xc0, 0x0, 0x3, 0xf8,
|
||||
0x0,
|
||||
|
||||
/* U+E316 "" */
|
||||
0x0, 0x0, 0x7, 0xc0, 0x1e, 0xb0, 0x78, 0x2c,
|
||||
0xa0, 0xa,
|
||||
|
||||
/* U+E326 "" */
|
||||
0x5, 0x55, 0x55, 0x3, 0xff, 0xff, 0xfc, 0x34,
|
||||
0x0, 0x0, 0x3, 0x40, 0x1, 0x54, 0x34, 0x0,
|
||||
0xff, 0xd3, 0x40, 0xd, 0x4d, 0x34, 0x0, 0xd0,
|
||||
0xd3, 0x40, 0xd, 0xd, 0x3f, 0xfc, 0xd0, 0xd0,
|
||||
0x55, 0xd, 0xd, 0xbf, 0xfc, 0xff, 0xd1, 0x55,
|
||||
0x1, 0x54,
|
||||
|
||||
/* U+E3AF "" */
|
||||
0x0, 0x15, 0x40, 0x0, 0x1f, 0xff, 0x40, 0xb,
|
||||
0x42, 0x2e, 0x2, 0xd0, 0x50, 0x34, 0x36, 0xc,
|
||||
0x1, 0xcb, 0x1a, 0xfe, 0xad, 0xa0, 0xbf, 0xc0,
|
||||
0xea, 0x3, 0xfd, 0xe, 0xba, 0xbf, 0x60, 0xd7,
|
||||
0x0, 0x30, 0x9c, 0x3c, 0x9, 0xb, 0x80, 0xf4,
|
||||
0x80, 0xf0, 0x3, 0xfa, 0xfc, 0x0, 0x6, 0xf9,
|
||||
0x0,
|
||||
|
||||
/* U+E3F4 "" */
|
||||
0xbf, 0xff, 0xfe, 0xe5, 0x55, 0x5b, 0xd0, 0x0,
|
||||
0x7, 0xd0, 0x0, 0x7, 0xd0, 0x0, 0x7, 0xd0,
|
||||
0x0, 0x7, 0xd0, 0x2, 0x7, 0xd2, 0x8b, 0x87,
|
||||
0xd7, 0xef, 0xd7, 0xd1, 0x55, 0x47, 0xe5, 0x55,
|
||||
0x5b, 0xbf, 0xff, 0xfe,
|
||||
|
||||
/* U+E405 "" */
|
||||
0x0, 0xff, 0x0, 0xff, 0x0, 0xfa, 0x0, 0xd0,
|
||||
0x0, 0xd0, 0x0, 0xd0, 0x4, 0xd0, 0x3f, 0xd0,
|
||||
0xff, 0xd0, 0xff, 0xd0, 0xbf, 0xc0, 0x2f, 0x0,
|
||||
|
||||
/* U+E55D "" */
|
||||
0x0, 0x14, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x7d,
|
||||
0x0, 0x0, 0xeb, 0x0, 0x1, 0xc3, 0x40, 0x2,
|
||||
0x82, 0x80, 0x3, 0x41, 0xc0, 0xb, 0x0, 0xe0,
|
||||
0xd, 0x14, 0x70, 0x2d, 0xff, 0x78, 0x3f, 0x82,
|
||||
0xfc, 0x34, 0x0, 0x1c,
|
||||
|
||||
/* U+E5C3 "" */
|
||||
0x14, 0x14, 0x14, 0x3d, 0x3d, 0x3d, 0x3c, 0x3c,
|
||||
0x3c, 0x0, 0x0, 0x0, 0x14, 0x14, 0x14, 0x3d,
|
||||
0x3d, 0x3d, 0x3c, 0x3c, 0x3c, 0x0, 0x0, 0x0,
|
||||
0x14, 0x14, 0x14, 0x3d, 0x3d, 0x3d, 0x3c, 0x3c,
|
||||
0x3c, 0x0, 0x0, 0x0,
|
||||
|
||||
/* U+E5CD "" */
|
||||
0x20, 0x0, 0x43, 0xc0, 0x1d, 0xf, 0x7, 0x40,
|
||||
0x3e, 0xd0, 0x0, 0xf4, 0x0, 0x1f, 0xc0, 0x7,
|
||||
0x4f, 0x1, 0xd0, 0x3c, 0x34, 0x0, 0xd0, 0x0,
|
||||
0x0,
|
||||
|
||||
/* U+E5D2 "" */
|
||||
0xff, 0xff, 0xff, 0x15, 0x55, 0x54, 0x0, 0x0,
|
||||
0x0, 0x55, 0x55, 0x55, 0xff, 0xff, 0xfe, 0x0,
|
||||
0x0, 0x0, 0x15, 0x55, 0x54, 0xff, 0xff, 0xff,
|
||||
|
||||
/* U+E5D4 "" */
|
||||
0x14, 0x3d, 0x3c, 0x0, 0x14, 0x3d, 0x3c, 0x0,
|
||||
0x14, 0x3d, 0x3c, 0x0,
|
||||
|
||||
/* U+E5D5 "" */
|
||||
0x0, 0x14, 0x0, 0x2, 0xff, 0x8d, 0xf, 0x41,
|
||||
0xfd, 0x2c, 0x0, 0x3d, 0x34, 0x3, 0xfd, 0x70,
|
||||
0x1, 0x54, 0x70, 0x0, 0x0, 0x34, 0x0, 0x4,
|
||||
0x2c, 0x0, 0x38, 0xf, 0x41, 0xf0, 0x2, 0xff,
|
||||
0x80, 0x0, 0x14, 0x0,
|
||||
|
||||
/* U+E63E "" */
|
||||
0x0, 0x0, 0x0, 0x0, 0x1, 0xbf, 0xfe, 0x0,
|
||||
0xf, 0xff, 0xff, 0xe0, 0x7f, 0x40, 0x6, 0xfc,
|
||||
0xb8, 0x0, 0x0, 0x3d, 0x0, 0x7f, 0xf8, 0x0,
|
||||
0x2, 0xff, 0xff, 0x40, 0x2, 0xd0, 0xb, 0x40,
|
||||
0x0, 0x1, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0,
|
||||
0x0, 0xf, 0xd0, 0x0, 0x0, 0x7, 0xc0, 0x0,
|
||||
|
||||
/* U+E668 "" */
|
||||
0x0, 0x0, 0x8, 0x0, 0x0, 0x3c, 0x0, 0x0,
|
||||
0xf0, 0x10, 0x3, 0xc0, 0x38, 0xf, 0x0, 0xe,
|
||||
0x3c, 0x0, 0x3, 0xf0, 0x0, 0x0, 0x80, 0x0,
|
||||
|
||||
/* U+E745 "" */
|
||||
0x15, 0x55, 0x0, 0xf, 0xff, 0xc0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x55, 0x54, 0x0, 0x3f, 0xff, 0x0,
|
||||
0x0, 0x0, 0x1, 0x43, 0xfd, 0x1, 0xf8, 0x55,
|
||||
0x1, 0xfe, 0x0, 0x1, 0xce, 0x0, 0x0, 0xce,
|
||||
0x0, 0x0, 0x3e, 0x0, 0x0, 0x0, 0x0,
|
||||
|
||||
/* U+E770 "" */
|
||||
0x0, 0x4, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xf3,
|
||||
0xd4, 0x82, 0xc0, 0xbf, 0xfb, 0x40, 0x7, 0xee,
|
||||
0x0, 0x7, 0xd0, 0x2c, 0x7, 0xd0, 0x7f, 0x47,
|
||||
0xf4, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0x55, 0x55, 0x55,
|
||||
|
||||
/* U+E89C "" */
|
||||
0x15, 0x54, 0x0, 0x3f, 0xff, 0x40, 0x70, 0x7,
|
||||
0xd0, 0x70, 0x7, 0xf4, 0x70, 0x7, 0xfc, 0x70,
|
||||
0x0, 0xd, 0x70, 0x28, 0xd, 0x70, 0x28, 0xd,
|
||||
0x72, 0xff, 0x8d, 0x70, 0x28, 0xd, 0x70, 0x28,
|
||||
0xd, 0x70, 0x0, 0xd, 0x75, 0x55, 0x5d, 0x2f,
|
||||
0xff, 0xf8,
|
||||
|
||||
/* U+E8AF "" */
|
||||
0x15, 0x55, 0x40, 0xf, 0xff, 0xff, 0x0, 0xd0,
|
||||
0x0, 0x30, 0xd, 0x0, 0x3, 0x28, 0xd0, 0x0,
|
||||
0x33, 0xcd, 0x0, 0x3, 0x3c, 0xd5, 0x55, 0xb3,
|
||||
0xcf, 0xff, 0xfe, 0x3c, 0xf0, 0x0, 0x3, 0xc0,
|
||||
0x7f, 0xff, 0xfc, 0x3, 0xff, 0xff, 0xc0, 0x0,
|
||||
0x0, 0x3c, 0x0, 0x0, 0x0, 0x80,
|
||||
|
||||
/* U+E8B8 "" */
|
||||
0x0, 0x5, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x4,
|
||||
0x35, 0xc1, 0x2, 0xff, 0xf, 0xf8, 0x35, 0x40,
|
||||
0x15, 0xc3, 0x81, 0xf4, 0x2c, 0x1d, 0x3f, 0xc7,
|
||||
0x40, 0xd3, 0xfd, 0x70, 0x3c, 0x3f, 0xc3, 0xc7,
|
||||
0x0, 0x50, 0xd, 0x3f, 0xd0, 0x7f, 0xc0, 0xeb,
|
||||
0xe, 0xb0, 0x0, 0x3a, 0xc0, 0x0, 0x2, 0xf8,
|
||||
0x0,
|
||||
|
||||
/* U+E8FD "" */
|
||||
0x0, 0x15, 0x40, 0x0, 0x2f, 0xff, 0x40, 0xb,
|
||||
0x40, 0x2e, 0x2, 0xc1, 0xa4, 0x74, 0x34, 0x20,
|
||||
0xc1, 0xcb, 0x0, 0x1c, 0xd, 0xa0, 0x3, 0x40,
|
||||
0xea, 0x0, 0xa0, 0xe, 0xa0, 0x0, 0x0, 0xd7,
|
||||
0x0, 0x90, 0x1c, 0x38, 0xe, 0x3, 0x80, 0xe0,
|
||||
0x0, 0xf0, 0x3, 0xea, 0xbc, 0x0, 0x6, 0xf9,
|
||||
0x0,
|
||||
|
||||
/* U+E90F "" */
|
||||
0x0, 0x50, 0x0, 0xff, 0xf0, 0x3c, 0x3, 0xcb,
|
||||
0x0, 0xe, 0xd0, 0x0, 0x7d, 0x0, 0x7, 0xd0,
|
||||
0x0, 0x7b, 0x0, 0xe, 0x39, 0x57, 0xc0, 0xff,
|
||||
0xf0, 0x1, 0x54, 0x0, 0xbf, 0xd0, 0x0, 0x50,
|
||||
0x0, 0xe, 0x0,
|
||||
|
||||
/* U+E92E "" */
|
||||
0x15, 0xff, 0x54, 0x3f, 0xff, 0xfd, 0x28, 0x0,
|
||||
0x28, 0x28, 0x82, 0x28, 0x28, 0xd7, 0x28, 0x28,
|
||||
0xd7, 0x28, 0x28, 0xd7, 0x28, 0x28, 0xd7, 0x28,
|
||||
0x28, 0xd7, 0x28, 0x28, 0x0, 0x28, 0x2d, 0x55,
|
||||
0x68, 0x1f, 0xff, 0xf4,
|
||||
|
||||
/* U+E9B9 "" */
|
||||
0x10, 0x1a, 0xaa, 0x4b, 0xcb, 0xff, 0xfd, 0x78,
|
||||
0x7f, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x10, 0x1a,
|
||||
0xaa, 0x4b, 0xcb, 0xff, 0xfd, 0x78, 0x7f, 0xff,
|
||||
0xd0, 0x0, 0x0, 0x0, 0x10, 0x1a, 0xaa, 0x4b,
|
||||
0xcb, 0xff, 0xfd, 0x78, 0x7f, 0xff, 0xd0, 0x0,
|
||||
0x0, 0x0,
|
||||
|
||||
/* U+E9F4 "" */
|
||||
0x0, 0x7, 0xd0, 0x0, 0x0, 0xe, 0xb0, 0x0,
|
||||
0x0, 0xe, 0xb0, 0x0, 0x0, 0x7, 0xd0, 0x0,
|
||||
0x28, 0x2, 0x80, 0x28, 0xff, 0x3, 0xc0, 0xff,
|
||||
0xd7, 0x5f, 0xf5, 0xd7, 0xbe, 0xb8, 0x2e, 0xbe,
|
||||
0x0, 0x34, 0x1c, 0x0, 0x0, 0x3c, 0x3c, 0x0,
|
||||
0x0, 0x1f, 0xf4, 0x0, 0x1, 0x75, 0x5d, 0x40,
|
||||
0xb, 0xf0, 0xf, 0xe0, 0xd, 0x70, 0xd, 0x70,
|
||||
0xb, 0xe0, 0xb, 0xe0, 0x0, 0x0, 0x0, 0x0,
|
||||
|
||||
/* U+E9F7 "" */
|
||||
0xbf, 0xff, 0xfe, 0xe5, 0x55, 0x5b, 0xd0, 0x0,
|
||||
0x7, 0xe5, 0x55, 0x5b, 0xff, 0xff, 0xff, 0xd0,
|
||||
0x0, 0x7, 0xd0, 0x0, 0x7, 0xd0, 0x0, 0x7,
|
||||
0xd0, 0x0, 0x7, 0xd0, 0x0, 0x7, 0xe5, 0x55,
|
||||
0x5b, 0xbf, 0xff, 0xfe,
|
||||
|
||||
/* U+EA07 "" */
|
||||
0x0, 0x15, 0x0, 0x0, 0x1f, 0xff, 0x40, 0xb,
|
||||
0xba, 0xee, 0x2, 0xc7, 0xc, 0x74, 0x39, 0xf5,
|
||||
0xe7, 0xcb, 0xff, 0xff, 0xfd, 0xa0, 0xd0, 0x70,
|
||||
0xea, 0xc, 0x7, 0xe, 0xb5, 0xe5, 0xb5, 0xd7,
|
||||
0xff, 0xff, 0xfc, 0x3c, 0xb0, 0xd3, 0x80, 0xe7,
|
||||
0x5c, 0xf0, 0x3, 0xff, 0xfc, 0x0, 0x6, 0xf9,
|
||||
0x0,
|
||||
|
||||
/* U+EAD6 "" */
|
||||
0xbf, 0xff, 0xfe, 0xe5, 0x55, 0x5b, 0xd0, 0x0,
|
||||
0x7, 0xd0, 0x0, 0x7, 0xdf, 0x7a, 0x27, 0xdc,
|
||||
0xa1, 0x77, 0xdc, 0xa0, 0xe7, 0xdf, 0x78, 0xc7,
|
||||
0xd0, 0x0, 0x7, 0xd0, 0x0, 0x7, 0xe5, 0x55,
|
||||
0x5b, 0xbf, 0xff, 0xfe,
|
||||
|
||||
/* U+EB8E "" */
|
||||
0x2a, 0xaa, 0xaa, 0x4f, 0xff, 0xff, 0xfd, 0xff,
|
||||
0xff, 0xff, 0xde, 0x0, 0x0, 0xd, 0xd2, 0x40,
|
||||
0x0, 0xdd, 0x1d, 0x0, 0xd, 0xd0, 0xb0, 0x0,
|
||||
0xdd, 0x1e, 0x0, 0xd, 0xd2, 0x83, 0xf8, 0xdd,
|
||||
0x0, 0x15, 0xd, 0xbf, 0xff, 0xff, 0xd1, 0x55,
|
||||
0x55, 0x50,
|
||||
|
||||
/* U+EB97 "" */
|
||||
0x7f, 0xff, 0xff, 0xce, 0x55, 0x55, 0x5d, 0xd0,
|
||||
0x0, 0x0, 0xdd, 0x15, 0x53, 0x4d, 0xd1, 0x55,
|
||||
0x30, 0xdd, 0x8, 0x0, 0xd, 0xd3, 0xdf, 0xf8,
|
||||
0xdd, 0x1c, 0x55, 0xd, 0xd0, 0x0, 0x0, 0xde,
|
||||
0x55, 0x55, 0x5d, 0x7f, 0xff, 0xff, 0xc0, 0xf,
|
||||
0xfd, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
|
||||
/* U+EBCC "" */
|
||||
0x8, 0x0, 0x20, 0x1e, 0x55, 0xb4, 0xff, 0xff,
|
||||
0xff, 0xd0, 0x0, 0x7, 0xe5, 0x55, 0x5b, 0xff,
|
||||
0xff, 0xff, 0xd0, 0x0, 0x7, 0xd3, 0x24, 0xc7,
|
||||
0xd0, 0x0, 0x7, 0xd0, 0x0, 0x7, 0xd3, 0x24,
|
||||
0xc7, 0xd0, 0x0, 0x7, 0xe5, 0x55, 0x5b, 0xbf,
|
||||
0xff, 0xfe,
|
||||
|
||||
/* U+EC1C "" */
|
||||
0x0, 0x0, 0x80, 0x0, 0x7, 0x80, 0x0, 0x1f,
|
||||
0x0, 0x0, 0x7e, 0x0, 0x1, 0xfc, 0x0, 0x7,
|
||||
0xbe, 0x50, 0x1e, 0x2b, 0xfc, 0x3f, 0xe8, 0x74,
|
||||
0x5, 0xbe, 0xd0, 0x0, 0x3f, 0x40, 0x0, 0xbd,
|
||||
0x0, 0x0, 0xf4, 0x0, 0x2, 0xd0, 0x0, 0x2,
|
||||
0x0, 0x0,
|
||||
|
||||
/* U+EF40 "" */
|
||||
0x14, 0x14, 0x14, 0xf, 0x4f, 0x4f, 0x43, 0xc3,
|
||||
0xc3, 0xc0, 0x0, 0x0, 0x0, 0x14, 0x14, 0x0,
|
||||
0xf, 0x4f, 0x42, 0x83, 0xc3, 0xc2, 0xf8, 0x0,
|
||||
0x2, 0xfd, 0x14, 0x2, 0x8d, 0xf, 0x40, 0xcd,
|
||||
0x3, 0xc0, 0x3d, 0x0, 0x0, 0x0, 0x0,
|
||||
|
||||
/* U+EF4A "" */
|
||||
0x0, 0x15, 0x40, 0x0, 0x2f, 0xff, 0x40, 0xb,
|
||||
0x40, 0x2e, 0x2, 0xc0, 0x0, 0x74, 0x34, 0x0,
|
||||
0x1, 0xcb, 0x0, 0x0, 0xd, 0xa0, 0x0, 0x0,
|
||||
0xea, 0x0, 0x0, 0xe, 0xa0, 0x0, 0x0, 0xd7,
|
||||
0x0, 0x0, 0x1c, 0x38, 0x0, 0x3, 0x80, 0xe0,
|
||||
0x0, 0xf0, 0x3, 0xea, 0xbc, 0x0, 0x6, 0xf9,
|
||||
0x0,
|
||||
|
||||
/* U+EF7A "" */
|
||||
0xb, 0xf4, 0x0, 0x3d, 0x6d, 0x0, 0xb0, 0x7,
|
||||
0x0, 0xe0, 0x3, 0x40, 0xd0, 0x3, 0x80, 0xe0,
|
||||
0x3, 0x40, 0xb0, 0xb, 0x0, 0x3e, 0xbf, 0x0,
|
||||
0x7, 0xe2, 0xc0, 0x0, 0x0, 0xb0, 0x0, 0x0,
|
||||
0x2c, 0x0, 0x0, 0x9,
|
||||
|
||||
/* U+EFE6 "" */
|
||||
0xb, 0xd0, 0x3c, 0x1d, 0xb0, 0xbe, 0x28, 0x34,
|
||||
0xff, 0x28, 0x34, 0xff, 0x28, 0x34, 0xbe, 0x28,
|
||||
0x34, 0x28, 0x28, 0x34, 0x28, 0xbe, 0x34, 0x28,
|
||||
0xff, 0x34, 0x28, 0xff, 0x38, 0x28, 0xbe, 0x2d,
|
||||
0xb4, 0x3c, 0xb, 0xd0,
|
||||
|
||||
/* U+F028 "" */
|
||||
0x5, 0x55, 0x55, 0x50, 0x3f, 0xff, 0xff, 0xfc,
|
||||
0x70, 0x0, 0x0, 0xd, 0x71, 0x48, 0x11, 0x4d,
|
||||
0x71, 0x48, 0x21, 0x4d, 0x70, 0x0, 0x0, 0xd,
|
||||
0x72, 0x8c, 0x72, 0x8d, 0x70, 0x0, 0x0, 0xd,
|
||||
0x70, 0x2f, 0xf8, 0xd, 0x70, 0x5, 0x50, 0xd,
|
||||
0x3f, 0xff, 0xff, 0xfc, 0x5, 0x55, 0x55, 0x50,
|
||||
|
||||
/* U+F090 "" */
|
||||
0x0, 0x0, 0x0, 0x0, 0x34, 0x0, 0x0, 0x34,
|
||||
0x0, 0x0, 0x34, 0x0, 0x0, 0x34, 0x0, 0x3,
|
||||
0xbb, 0x80, 0x1, 0xff, 0x0, 0x0, 0xbc, 0x0,
|
||||
0x30, 0x10, 0xc, 0x70, 0x0, 0xd, 0x3f, 0xff,
|
||||
0xfc, 0x5, 0x55, 0x50,
|
||||
|
||||
/* U+F15C "" */
|
||||
0x0, 0x1, 0x40, 0x0, 0x0, 0x2f, 0xf4, 0x0,
|
||||
0x0, 0xb4, 0x2d, 0x0, 0x1, 0xc0, 0xb, 0x0,
|
||||
0x7, 0xc0, 0x3, 0x40, 0x2e, 0x0, 0x3, 0xd0,
|
||||
0x34, 0x0, 0x2, 0xb8, 0x70, 0x0, 0x0, 0x1c,
|
||||
0x30, 0x0, 0x0, 0xd, 0x3c, 0x0, 0x0, 0x2c,
|
||||
0xf, 0xff, 0xff, 0xf4, 0x0, 0x55, 0x55, 0x40,
|
||||
|
||||
/* U+F720 "" */
|
||||
0x0, 0x10, 0x0, 0x1, 0xfe, 0x0, 0xb, 0x87,
|
||||
0xd0, 0x7c, 0x0, 0xbc, 0xf8, 0x0, 0x3e, 0xef,
|
||||
0x42, 0xee, 0xd2, 0xff, 0x4e, 0xd0, 0x38, 0xe,
|
||||
0xd0, 0x34, 0xe, 0xd0, 0x34, 0xe, 0xb4, 0x34,
|
||||
0x2d, 0x2f, 0x36, 0xf0, 0x2, 0xff, 0x40, 0x0,
|
||||
0x78, 0x0,
|
||||
|
||||
/* U+F8C7 "" */
|
||||
0x0, 0x4, 0x0, 0x0, 0x0, 0xd0, 0x0, 0x0,
|
||||
0xd, 0x0, 0x2, 0xc0, 0xd0, 0x70, 0x34, 0xd,
|
||||
0x3, 0x8b, 0x0, 0xd0, 0x1c, 0xa0, 0xd, 0x0,
|
||||
0xca, 0x0, 0x80, 0xc, 0xa0, 0x0, 0x0, 0xc7,
|
||||
0x0, 0x0, 0x2c, 0x38, 0x0, 0x3, 0x40, 0xe0,
|
||||
0x1, 0xe0, 0x3, 0xea, 0xf8, 0x0, 0x6, 0xf8,
|
||||
0x0,
|
||||
|
||||
/* U+FFF75 "" */
|
||||
0x55, 0x55, 0x55, 0xf, 0xff, 0xff, 0xfc, 0xd1,
|
||||
0x4, 0x4, 0xde, 0x55, 0x55, 0x5d, 0xff, 0xff,
|
||||
0xff, 0xd0, 0x7, 0xf4, 0xd, 0x1b, 0xe0, 0x21,
|
||||
0xd7, 0x90, 0x82, 0xf8, 0xe1, 0x7, 0xf8, 0xf,
|
||||
0xff, 0xff, 0xfd, 0xe5, 0x55, 0x55, 0xdd, 0x20,
|
||||
0x80, 0x8d, 0xb5, 0x55, 0x55, 0xd2, 0xff, 0xff,
|
||||
0xfd
|
||||
};
|
||||
|
||||
|
||||
/*---------------------
|
||||
* GLYPH DESCRIPTION
|
||||
*--------------------*/
|
||||
|
||||
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
|
||||
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
|
||||
{.bitmap_index = 0, .adv_w = 256, .box_w = 10, .box_h = 10, .ofs_x = 3, .ofs_y = 3},
|
||||
{.bitmap_index = 25, .adv_w = 256, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = 2},
|
||||
{.bitmap_index = 67, .adv_w = 256, .box_w = 9, .box_h = 14, .ofs_x = 3, .ofs_y = 1},
|
||||
{.bitmap_index = 99, .adv_w = 256, .box_w = 10, .box_h = 14, .ofs_x = 3, .ofs_y = 1},
|
||||
{.bitmap_index = 134, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
|
||||
{.bitmap_index = 198, .adv_w = 256, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = 2},
|
||||
{.bitmap_index = 240, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 289, .adv_w = 256, .box_w = 8, .box_h = 5, .ofs_x = 4, .ofs_y = 6},
|
||||
{.bitmap_index = 299, .adv_w = 256, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = 2},
|
||||
{.bitmap_index = 341, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 390, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 426, .adv_w = 256, .box_w = 8, .box_h = 12, .ofs_x = 4, .ofs_y = 2},
|
||||
{.bitmap_index = 450, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 486, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 522, .adv_w = 256, .box_w = 10, .box_h = 10, .ofs_x = 3, .ofs_y = 3},
|
||||
{.bitmap_index = 547, .adv_w = 256, .box_w = 12, .box_h = 8, .ofs_x = 2, .ofs_y = 4},
|
||||
{.bitmap_index = 571, .adv_w = 256, .box_w = 4, .box_h = 12, .ofs_x = 6, .ofs_y = 2},
|
||||
{.bitmap_index = 583, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 619, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 2},
|
||||
{.bitmap_index = 667, .adv_w = 256, .box_w = 12, .box_h = 8, .ofs_x = 2, .ofs_y = 4},
|
||||
{.bitmap_index = 691, .adv_w = 256, .box_w = 13, .box_h = 12, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 730, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 766, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 1},
|
||||
{.bitmap_index = 808, .adv_w = 256, .box_w = 14, .box_h = 13, .ofs_x = 1, .ofs_y = 2},
|
||||
{.bitmap_index = 854, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 903, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 952, .adv_w = 256, .box_w = 10, .box_h = 14, .ofs_x = 3, .ofs_y = 1},
|
||||
{.bitmap_index = 987, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 1023, .adv_w = 256, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = 2},
|
||||
{.bitmap_index = 1065, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
|
||||
{.bitmap_index = 1129, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 1165, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 1214, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 1250, .adv_w = 256, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = 2},
|
||||
{.bitmap_index = 1292, .adv_w = 256, .box_w = 14, .box_h = 13, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 1338, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 1},
|
||||
{.bitmap_index = 1380, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 1},
|
||||
{.bitmap_index = 1422, .adv_w = 256, .box_w = 13, .box_h = 12, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 1461, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 1510, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 1546, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 1582, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 2},
|
||||
{.bitmap_index = 1630, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 1666, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 2},
|
||||
{.bitmap_index = 1714, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 1},
|
||||
{.bitmap_index = 1756, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 1805, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = 1}
|
||||
};
|
||||
|
||||
/*---------------------
|
||||
* CHARACTER MAPPING
|
||||
*--------------------*/
|
||||
|
||||
static const uint16_t unicode_list_0[] = {
|
||||
0x0, 0x14, 0x62, 0x9b, 0x148, 0x182, 0x1ca, 0x1d1,
|
||||
0x1e1, 0x26a, 0x2af, 0x2c0, 0x418, 0x47e, 0x488, 0x48d,
|
||||
0x48f, 0x490, 0x4f9, 0x523, 0x600, 0x62b, 0x757, 0x76a,
|
||||
0x773, 0x7b8, 0x7ca, 0x7e9, 0x874, 0x8af, 0x8b2, 0x8c2,
|
||||
0x991, 0xa49, 0xa52, 0xa87, 0xad7, 0xdfb, 0xe05, 0xe35,
|
||||
0xea1, 0xee3, 0xf4b, 0x1017, 0x15db, 0x1782
|
||||
};
|
||||
|
||||
/*Collect the unicode lists and glyph_id offsets*/
|
||||
static const lv_font_fmt_txt_cmap_t cmaps[] =
|
||||
{
|
||||
{
|
||||
.range_start = 57669, .range_length = 6019, .glyph_id_start = 1,
|
||||
.unicode_list = unicode_list_0, .glyph_id_ofs_list = NULL, .list_length = 46, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
|
||||
},
|
||||
{
|
||||
.range_start = 1048437, .range_length = 1, .glyph_id_start = 47,
|
||||
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*--------------------
|
||||
* ALL CUSTOM DATA
|
||||
*--------------------*/
|
||||
|
||||
#if LVGL_VERSION_MAJOR == 8
|
||||
/*Store all the custom data of the font*/
|
||||
static lv_font_fmt_txt_glyph_cache_t cache;
|
||||
#endif
|
||||
|
||||
#if LVGL_VERSION_MAJOR >= 8
|
||||
static const lv_font_fmt_txt_dsc_t font_dsc = {
|
||||
#else
|
||||
static lv_font_fmt_txt_dsc_t font_dsc = {
|
||||
#endif
|
||||
.glyph_bitmap = glyph_bitmap,
|
||||
.glyph_dsc = glyph_dsc,
|
||||
.cmaps = cmaps,
|
||||
.kern_dsc = NULL,
|
||||
.kern_scale = 0,
|
||||
.cmap_num = 2,
|
||||
.bpp = 2,
|
||||
.kern_classes = 0,
|
||||
.bitmap_format = 0,
|
||||
#if LVGL_VERSION_MAJOR == 8
|
||||
.cache = &cache
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*-----------------
|
||||
* PUBLIC FONT
|
||||
*----------------*/
|
||||
|
||||
/*Initialize a public general font descriptor*/
|
||||
#if LVGL_VERSION_MAJOR >= 8
|
||||
const lv_font_t material_symbols_shared_16 = {
|
||||
#else
|
||||
lv_font_t material_symbols_shared_16 = {
|
||||
#endif
|
||||
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
|
||||
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
|
||||
.line_height = 16, /*The maximum line height required by the font*/
|
||||
.base_line = 0, /*Baseline measured from the bottom of the line*/
|
||||
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
|
||||
.subpx = LV_FONT_SUBPX_NONE,
|
||||
#endif
|
||||
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
|
||||
.underline_position = 0,
|
||||
.underline_thickness = 0,
|
||||
#endif
|
||||
.dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
|
||||
#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9
|
||||
.fallback = NULL,
|
||||
#endif
|
||||
.user_data = NULL,
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif /*#if MATERIAL_SYMBOLS_SHARED_16*/
|
||||
|
||||
@ -1,644 +0,0 @@
|
||||
/*******************************************************************************
|
||||
* Size: 20 px
|
||||
* Bpp: 2
|
||||
* Opts: --no-compress --no-prefilter --bpp 2 --size 20 --font MaterialSymbolsRounded.ttf -r 0xE145,0xE5C3,0xE770,0xEF40,0xEBCC,0xEFE6,0xEF4A,0xE5CD,0xF15C,0xE668,0xE92E,0xE326,0xEB97,0xE745,0xEC1C,0xE2C7,0xF720,0xF090,0xE8AF,0xE30F,0xE8FD,0xE9F4,0xE3F4,0xE316,0xE90F,0xEA07,0xE9B9,0xE159,0xE5D2,0xE28D,0xE5D4,0xE405,0xE89C,0xF8C7,0xE5D5,0xEF7A,0xE8B8,0xE9F7,0xE55D,0xF028,0xE1E0,0xE63E,0xE1A7,0xEB8E,0xEAD6,0xE3AF,0xFFF75 --format lvgl -o source-fonts/material_symbols_shared_20.c --force-fast-kern-format
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#include "lvgl.h"
|
||||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
|
||||
#ifndef MATERIAL_SYMBOLS_SHARED_20
|
||||
#define MATERIAL_SYMBOLS_SHARED_20 1
|
||||
#endif
|
||||
|
||||
#if MATERIAL_SYMBOLS_SHARED_20
|
||||
|
||||
/*-----------------
|
||||
* BITMAPS
|
||||
*----------------*/
|
||||
|
||||
/*Store the image of the glyphs*/
|
||||
static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
|
||||
/* U+E145 "" */
|
||||
0x0, 0x14, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x3c,
|
||||
0x0, 0x0, 0x3c, 0x0, 0x0, 0x3c, 0x0, 0x7f,
|
||||
0xff, 0xfd, 0xbf, 0xff, 0xfe, 0x0, 0x3c, 0x0,
|
||||
0x0, 0x3c, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x3c,
|
||||
0x0, 0x0, 0x28, 0x0,
|
||||
|
||||
/* U+E159 "" */
|
||||
0x1a, 0xaa, 0xaa, 0xaa, 0x83, 0xff, 0xff, 0xff,
|
||||
0xfd, 0x3d, 0x0, 0x0, 0x2, 0xe3, 0xfc, 0x0,
|
||||
0x1, 0xfe, 0x39, 0xf8, 0x0, 0xf8, 0xe3, 0x82,
|
||||
0xf4, 0xbc, 0xe, 0x38, 0x3, 0xfd, 0x0, 0xe3,
|
||||
0x80, 0x6, 0x0, 0xe, 0x38, 0x0, 0x0, 0x0,
|
||||
0xe3, 0x80, 0x0, 0x0, 0xe, 0x38, 0x0, 0x0,
|
||||
0x0, 0xe3, 0x80, 0x0, 0x0, 0xe, 0x3f, 0xff,
|
||||
0xff, 0xff, 0xd1, 0xaa, 0xaa, 0xaa, 0xa8,
|
||||
|
||||
/* U+E1A7 "" */
|
||||
0x0, 0x28, 0x0, 0x0, 0xf8, 0x1, 0x3, 0xf8,
|
||||
0x1e, 0xe, 0xb8, 0x2e, 0x38, 0xf0, 0x2e, 0xfb,
|
||||
0x80, 0x2f, 0xf8, 0x0, 0x2f, 0x80, 0x0, 0xbe,
|
||||
0x0, 0xb, 0xfe, 0x0, 0xbb, 0xee, 0xb, 0x8e,
|
||||
0x3c, 0x78, 0x3a, 0xe0, 0x40, 0xfe, 0x0, 0x3,
|
||||
0xe0, 0x0, 0xa, 0x0,
|
||||
|
||||
/* U+E1E0 "" */
|
||||
0x0, 0x0, 0x0, 0x0, 0x28, 0x0, 0x0, 0x7d,
|
||||
0x0, 0x0, 0xff, 0x0, 0x0, 0x38, 0x0, 0x10,
|
||||
0x38, 0x14, 0xbc, 0x38, 0x7f, 0xfd, 0x38, 0x7f,
|
||||
0x7c, 0x38, 0x7f, 0x38, 0x38, 0x2c, 0x3d, 0x7d,
|
||||
0x6c, 0x2f, 0xff, 0xfc, 0x5, 0x7d, 0x50, 0x0,
|
||||
0x38, 0x0, 0x0, 0x3c, 0x0, 0x0, 0xbe, 0x0,
|
||||
0x0, 0x7d, 0x0, 0x0, 0x0, 0x0,
|
||||
|
||||
/* U+E28D "" */
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xe0,
|
||||
0x0, 0x0, 0x0, 0x7f, 0xd0, 0x0, 0x0, 0x2,
|
||||
0xc3, 0x80, 0x0, 0x0, 0xb, 0xe, 0x0, 0x0,
|
||||
0x0, 0x2c, 0x38, 0x0, 0x0, 0x0, 0xb0, 0xe0,
|
||||
0x0, 0x0, 0x2, 0xc3, 0x80, 0x0, 0x0, 0xb,
|
||||
0xe, 0x0, 0x0, 0x2f, 0xff, 0xff, 0xf8, 0x2,
|
||||
0xff, 0xff, 0xff, 0xf8, 0xb, 0x0, 0x0, 0x0,
|
||||
0xe0, 0x2e, 0xaa, 0xaa, 0xab, 0x80, 0xff, 0xff,
|
||||
0xff, 0xff, 0x3, 0x80, 0x0, 0x0, 0x2c, 0x1d,
|
||||
0x34, 0x3c, 0x1c, 0x74, 0xb0, 0xe0, 0xf0, 0xb0,
|
||||
0xe2, 0xeb, 0xeb, 0xeb, 0xeb, 0xc7, 0xff, 0xff,
|
||||
0xff, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
|
||||
/* U+E2C7 "" */
|
||||
0x1a, 0xa9, 0x0, 0x0, 0x3, 0xff, 0xf8, 0x0,
|
||||
0x0, 0x38, 0x2, 0xff, 0xff, 0xc3, 0x80, 0xa,
|
||||
0xaa, 0xae, 0x38, 0x0, 0x0, 0x0, 0xe3, 0x80,
|
||||
0x0, 0x0, 0xe, 0x38, 0x0, 0x0, 0x0, 0xe3,
|
||||
0x80, 0x0, 0x0, 0xe, 0x38, 0x0, 0x0, 0x0,
|
||||
0xe3, 0x80, 0x0, 0x0, 0xe, 0x38, 0x0, 0x0,
|
||||
0x0, 0xe3, 0x80, 0x0, 0x0, 0xe, 0x3f, 0xff,
|
||||
0xff, 0xff, 0xd1, 0xaa, 0xaa, 0xaa, 0xa8,
|
||||
|
||||
/* U+E30F "" */
|
||||
0x0, 0x1, 0xa8, 0x0, 0x0, 0x0, 0x3f, 0xe0,
|
||||
0x0, 0x0, 0x3, 0x8e, 0x0, 0x0, 0x0, 0x38,
|
||||
0xe0, 0x0, 0x0, 0x3, 0xce, 0x0, 0x0, 0x0,
|
||||
0x2f, 0xd0, 0x0, 0x2a, 0xa0, 0xb4, 0x2a, 0x83,
|
||||
0xff, 0x80, 0xf, 0xfe, 0x38, 0x2d, 0x3, 0xd0,
|
||||
0xe3, 0x82, 0xd0, 0x3d, 0xe, 0x3f, 0xf8, 0x20,
|
||||
0xff, 0xe1, 0xa9, 0xf, 0x82, 0xa8, 0x0, 0x3,
|
||||
0xfe, 0x0, 0x0, 0x0, 0x38, 0xe0, 0x0, 0x0,
|
||||
0x3, 0x8e, 0x0, 0x0, 0x0, 0x3e, 0xe0, 0x0,
|
||||
0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0,
|
||||
|
||||
/* U+E316 "" */
|
||||
0x0, 0xe0, 0x0, 0x3f, 0x80, 0xf, 0x6e, 0x3,
|
||||
0xd0, 0xb8, 0xb4, 0x2, 0xd1, 0x0, 0x4,
|
||||
|
||||
/* U+E326 "" */
|
||||
0x6, 0xaa, 0xaa, 0xaa, 0x1, 0xff, 0xff, 0xff,
|
||||
0xf4, 0x2c, 0x0, 0x0, 0x0, 0x2, 0xc0, 0x0,
|
||||
0x1a, 0xa4, 0x2c, 0x0, 0x3, 0xff, 0xd2, 0xc0,
|
||||
0x0, 0x38, 0xe, 0x2c, 0x0, 0x3, 0x98, 0xe2,
|
||||
0xc0, 0x0, 0x38, 0xe, 0x2c, 0x0, 0x3, 0x80,
|
||||
0xe1, 0xea, 0xa4, 0x38, 0xe, 0xf, 0xff, 0xc3,
|
||||
0x80, 0xe0, 0x0, 0x0, 0x38, 0xe, 0x3f, 0xff,
|
||||
0xc3, 0xff, 0xe2, 0xaa, 0xa4, 0x1a, 0xa8,
|
||||
|
||||
/* U+E3AF "" */
|
||||
0x0, 0x1, 0x54, 0x0, 0x0, 0x2, 0xff, 0xfc,
|
||||
0x0, 0x1, 0xf9, 0x1e, 0xf4, 0x0, 0x7c, 0x2,
|
||||
0x3, 0xd0, 0xf, 0x80, 0x20, 0xf, 0x2, 0xd8,
|
||||
0x8, 0x0, 0x38, 0x3c, 0x21, 0xea, 0xab, 0xc3,
|
||||
0x82, 0x7f, 0xd0, 0x1d, 0x34, 0xf, 0xff, 0x1,
|
||||
0xd3, 0x40, 0xbf, 0xf4, 0x1d, 0x38, 0x7, 0xfc,
|
||||
0xc1, 0xc3, 0xea, 0xab, 0x46, 0x3c, 0x1d, 0x0,
|
||||
0x20, 0x3b, 0x80, 0xb0, 0x5, 0x1, 0xf0, 0x3,
|
||||
0xc0, 0x80, 0x7c, 0x0, 0xb, 0xaa, 0xbf, 0x0,
|
||||
0x0, 0x1b, 0xfe, 0x40, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0,
|
||||
|
||||
/* U+E3F4 "" */
|
||||
0x1a, 0xaa, 0xaa, 0xa4, 0x7f, 0xff, 0xff, 0xfd,
|
||||
0xb0, 0x0, 0x0, 0xe, 0xb0, 0x0, 0x0, 0xe,
|
||||
0xb0, 0x0, 0x0, 0xe, 0xb0, 0x0, 0x0, 0xe,
|
||||
0xb0, 0x0, 0x0, 0xe, 0xb0, 0x0, 0x0, 0xe,
|
||||
0xb0, 0x0, 0x24, 0xe, 0xb0, 0x30, 0x7c, 0xe,
|
||||
0xb0, 0xf8, 0xfe, 0xe, 0xb1, 0xff, 0xff, 0x4e,
|
||||
0xb0, 0x55, 0x55, 0xe, 0xb0, 0x0, 0x0, 0xe,
|
||||
0x7f, 0xff, 0xff, 0xfd, 0x1a, 0xaa, 0xaa, 0xa4,
|
||||
|
||||
/* U+E405 "" */
|
||||
0x0, 0x5, 0x40, 0x3, 0xff, 0x0, 0x3f, 0xf0,
|
||||
0x3, 0xff, 0x0, 0x38, 0x0, 0x3, 0x80, 0x0,
|
||||
0x38, 0x0, 0x3, 0x80, 0x0, 0x38, 0x2, 0xff,
|
||||
0x80, 0x7f, 0xf8, 0xf, 0xff, 0x80, 0xff, 0xf8,
|
||||
0xb, 0xff, 0x40, 0x3f, 0xe0, 0x0, 0x54, 0x0,
|
||||
|
||||
/* U+E55D "" */
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0xf0, 0x0, 0x0,
|
||||
0x1f, 0x40, 0x0, 0x2, 0xf8, 0x0, 0x0, 0x3a,
|
||||
0xc0, 0x0, 0xb, 0xe, 0x0, 0x0, 0xf0, 0xf0,
|
||||
0x0, 0x1d, 0x7, 0x40, 0x3, 0xc0, 0x3c, 0x0,
|
||||
0x74, 0x1, 0xd0, 0xf, 0x0, 0xf, 0x1, 0xe0,
|
||||
0xa0, 0xb4, 0x2d, 0xff, 0xf7, 0x83, 0xfe, 0xb,
|
||||
0xfc, 0x7d, 0x0, 0x7, 0xd1, 0x0, 0x0, 0x4,
|
||||
|
||||
/* U+E5C3 "" */
|
||||
0x14, 0x5, 0x1, 0x4b, 0xd2, 0xf4, 0xbd, 0xbe,
|
||||
0x2f, 0x8b, 0xe3, 0x80, 0xe0, 0x38, 0x0, 0x0,
|
||||
0x0, 0x1, 0x40, 0x50, 0x14, 0xbd, 0x2f, 0x4b,
|
||||
0xdb, 0xe2, 0xf8, 0xbe, 0x38, 0xe, 0x3, 0x80,
|
||||
0x0, 0x0, 0x0, 0x14, 0x5, 0x1, 0x4b, 0xd2,
|
||||
0xf4, 0xbd, 0xbe, 0x2f, 0x8b, 0xe3, 0x80, 0xe0,
|
||||
0x38,
|
||||
|
||||
/* U+E5CD "" */
|
||||
0x20, 0x0, 0x9, 0x3c, 0x0, 0x2e, 0x1f, 0x0,
|
||||
0xb8, 0x7, 0xc2, 0xe0, 0x1, 0xfb, 0x80, 0x0,
|
||||
0x7e, 0x0, 0x0, 0xbf, 0x0, 0x2, 0xe7, 0xc0,
|
||||
0xb, 0x81, 0xf0, 0x2e, 0x0, 0x7c, 0x38, 0x0,
|
||||
0x1e, 0x0, 0x0, 0x0,
|
||||
|
||||
/* U+E5D2 "" */
|
||||
0xbf, 0xff, 0xff, 0xfc, 0x6a, 0xaa, 0xaa, 0xa8,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x6a, 0xaa, 0xaa, 0xa8, 0x7f, 0xff, 0xff, 0xfc,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x6a, 0xaa, 0xaa, 0xa8, 0xbf, 0xff, 0xff, 0xfc,
|
||||
|
||||
/* U+E5D4 "" */
|
||||
0x14, 0xbd, 0xbe, 0x38, 0x0, 0x14, 0xbd, 0xbe,
|
||||
0x38, 0x0, 0x14, 0xbd, 0xbe, 0x38,
|
||||
|
||||
/* U+E5D5 "" */
|
||||
0x0, 0x1a, 0x40, 0x50, 0x2f, 0xff, 0x8e, 0xf,
|
||||
0x80, 0x6f, 0xe2, 0xd0, 0x0, 0x7e, 0x38, 0x0,
|
||||
0xab, 0xe7, 0x0, 0xf, 0xfe, 0xb0, 0x0, 0x0,
|
||||
0xb, 0x0, 0x0, 0x0, 0x70, 0x0, 0x0, 0x3,
|
||||
0x80, 0x0, 0x2c, 0x2d, 0x0, 0x7, 0x80, 0xf8,
|
||||
0x6, 0xf0, 0x2, 0xff, 0xf8, 0x0, 0x1, 0xa4,
|
||||
0x0,
|
||||
|
||||
/* U+E63E "" */
|
||||
0x0, 0x1, 0x6a, 0x40, 0x0, 0x0, 0x7f, 0xff,
|
||||
0xfe, 0x0, 0x7, 0xff, 0xff, 0xff, 0xe0, 0x2f,
|
||||
0xf4, 0x0, 0x1b, 0xfc, 0x3f, 0x40, 0x0, 0x0,
|
||||
0xbe, 0x28, 0x0, 0x6a, 0x40, 0x18, 0x0, 0x1f,
|
||||
0xff, 0xf8, 0x0, 0x0, 0xbf, 0xff, 0xff, 0x0,
|
||||
0x0, 0xbd, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x2d, 0x0, 0x0, 0x0,
|
||||
0x0, 0xbf, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0,
|
||||
0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x0,
|
||||
0x4, 0x0, 0x0,
|
||||
|
||||
/* U+E668 "" */
|
||||
0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x3d, 0x0,
|
||||
0x0, 0xf, 0x40, 0x0, 0x3, 0xd0, 0x10, 0x0,
|
||||
0xf4, 0x7, 0xc0, 0x3d, 0x0, 0x2f, 0xf, 0x40,
|
||||
0x0, 0xbf, 0xd0, 0x0, 0x2, 0xf4, 0x0, 0x0,
|
||||
0x5, 0x0, 0x0,
|
||||
|
||||
/* U+E745 "" */
|
||||
0x6a, 0xaa, 0x80, 0x0, 0x7f, 0xff, 0xd0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x2a, 0xaa, 0x80, 0x0,
|
||||
0xbf, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0xb4, 0x7f, 0xf0, 0x2, 0xfc,
|
||||
0x6a, 0xa0, 0xb, 0xfc, 0x0, 0x0, 0x2d, 0xf8,
|
||||
0x0, 0x0, 0x74, 0xe0, 0x0, 0x0, 0xd3, 0x80,
|
||||
0x0, 0x0, 0xde, 0x0, 0x0, 0x0, 0xf8, 0x0,
|
||||
|
||||
/* U+E770 "" */
|
||||
0x0, 0x1, 0x80, 0x0, 0x0, 0x7, 0xf4, 0x0,
|
||||
0x0, 0xf, 0x7e, 0x0, 0x0, 0x3d, 0xb, 0xfc,
|
||||
0xb4, 0xb8, 0x1, 0xae, 0xbf, 0xf0, 0x0, 0xe,
|
||||
0xbb, 0xc0, 0x0, 0xe, 0xb1, 0x42, 0xc0, 0xe,
|
||||
0xb0, 0x7, 0xf4, 0xe, 0xb4, 0xf, 0xfe, 0xe,
|
||||
0xbe, 0x3f, 0xff, 0xce, 0xbf, 0xff, 0xff, 0xfe,
|
||||
0xbf, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xfd,
|
||||
|
||||
/* U+E89C "" */
|
||||
0x1a, 0xaa, 0x40, 0xb, 0xff, 0xfe, 0x0, 0xb0,
|
||||
0x1, 0xf8, 0xb, 0x0, 0xf, 0xe0, 0xb0, 0x0,
|
||||
0xff, 0x8b, 0x0, 0xf, 0xfd, 0xb0, 0x0, 0x15,
|
||||
0xeb, 0x0, 0xa0, 0xe, 0xb0, 0xf, 0x0, 0xeb,
|
||||
0x5, 0xf5, 0xe, 0xb0, 0xff, 0xf0, 0xeb, 0x1,
|
||||
0xf4, 0xe, 0xb0, 0xf, 0x0, 0xeb, 0x0, 0x50,
|
||||
0xe, 0xb0, 0x0, 0x0, 0xeb, 0xaa, 0xaa, 0xae,
|
||||
0x7f, 0xff, 0xff, 0xd0, 0x0, 0x0, 0x0,
|
||||
|
||||
/* U+E8AF "" */
|
||||
0xa, 0xaa, 0xaa, 0x40, 0x3, 0xff, 0xff, 0xfd,
|
||||
0x0, 0x38, 0x0, 0x0, 0xe0, 0x3, 0x80, 0x0,
|
||||
0xe, 0x0, 0x38, 0x0, 0x0, 0xe3, 0xc3, 0x80,
|
||||
0x0, 0xe, 0x3e, 0x38, 0x0, 0x0, 0xe3, 0xe3,
|
||||
0x80, 0x0, 0xe, 0x3e, 0x3a, 0xaa, 0xaa, 0xe3,
|
||||
0xe3, 0xff, 0xff, 0xfc, 0x3e, 0x3e, 0x0, 0x0,
|
||||
0x3, 0xe3, 0x86, 0xaa, 0xaa, 0xfe, 0x0, 0xbf,
|
||||
0xff, 0xff, 0xe0, 0x7, 0xff, 0xff, 0xfe, 0x0,
|
||||
0x0, 0x0, 0x3, 0xe0, 0x0, 0x0, 0x0, 0x1d,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
|
||||
/* U+E8B8 "" */
|
||||
0x0, 0x6, 0x90, 0x0, 0x0, 0x7, 0xfd, 0x0,
|
||||
0x0, 0x2, 0xc3, 0x80, 0x0, 0x79, 0xf0, 0xf6,
|
||||
0xd0, 0x3f, 0xf4, 0x1f, 0xfc, 0x2c, 0x10, 0x0,
|
||||
0x43, 0x8f, 0x40, 0xbe, 0x1, 0xf0, 0xf4, 0xbf,
|
||||
0xe1, 0xf0, 0x1d, 0x3f, 0xfc, 0x74, 0xb, 0x8b,
|
||||
0xff, 0x2d, 0xb, 0xc1, 0xff, 0x43, 0xe3, 0xc0,
|
||||
0xa, 0x40, 0x3c, 0x7a, 0xd0, 0x7, 0xad, 0xf,
|
||||
0xff, 0xf, 0xff, 0x0, 0x92, 0xc3, 0x86, 0x0,
|
||||
0x0, 0x7a, 0xd0, 0x0, 0x0, 0xf, 0xf0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
|
||||
/* U+E8FD "" */
|
||||
0x0, 0x1, 0x54, 0x0, 0x0, 0x2, 0xff, 0xfc,
|
||||
0x0, 0x1, 0xf9, 0x6, 0xf4, 0x0, 0x7c, 0x0,
|
||||
0x3, 0xd0, 0xf, 0x2, 0xfc, 0xf, 0x2, 0xd0,
|
||||
0x7a, 0xf0, 0x38, 0x3c, 0x1, 0xb, 0x2, 0xc3,
|
||||
0x80, 0x0, 0xe0, 0x1d, 0x34, 0x0, 0x3c, 0x1,
|
||||
0xd3, 0x40, 0xb, 0x0, 0x1d, 0x38, 0x0, 0x60,
|
||||
0x1, 0xc3, 0xc0, 0x0, 0x0, 0x3c, 0x1e, 0x0,
|
||||
0xf0, 0x7, 0x80, 0xf4, 0xa, 0x0, 0xf0, 0x3,
|
||||
0xe0, 0x0, 0x7c, 0x0, 0xb, 0xea, 0xbf, 0x0,
|
||||
0x0, 0x1b, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0,
|
||||
|
||||
/* U+E90F "" */
|
||||
0x0, 0x15, 0x40, 0x0, 0x1f, 0xff, 0x40, 0xb,
|
||||
0xd0, 0x7e, 0x1, 0xe0, 0x0, 0xb4, 0x3c, 0x0,
|
||||
0x3, 0xc3, 0x80, 0x0, 0x2c, 0x34, 0x0, 0x1,
|
||||
0xc3, 0x80, 0x0, 0x2c, 0x3c, 0x0, 0x3, 0xc2,
|
||||
0xd0, 0x0, 0x78, 0xf, 0xaa, 0xaf, 0x0, 0x2f,
|
||||
0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff,
|
||||
0x40, 0x0, 0xaa, 0xa0, 0x0, 0x1, 0xa4, 0x0,
|
||||
0x0, 0xf, 0x40, 0x0, 0x0, 0x0, 0x0,
|
||||
|
||||
/* U+E92E "" */
|
||||
0x0, 0x1a, 0x40, 0x6, 0xaf, 0xff, 0xa8, 0xbf,
|
||||
0xff, 0xff, 0xd3, 0xc0, 0x0, 0x3c, 0x3c, 0x0,
|
||||
0x3, 0xc3, 0xc7, 0xd, 0x3c, 0x3c, 0x70, 0xd3,
|
||||
0xc3, 0xc7, 0xd, 0x3c, 0x3c, 0x70, 0xd3, 0xc3,
|
||||
0xc7, 0xd, 0x3c, 0x3c, 0x70, 0xd3, 0xc3, 0xc7,
|
||||
0xd, 0x3c, 0x3c, 0x0, 0x3, 0xc3, 0xc0, 0x0,
|
||||
0x3c, 0x2f, 0xff, 0xff, 0x80, 0xaa, 0xaa, 0xa0,
|
||||
|
||||
/* U+E9B9 "" */
|
||||
0x4, 0x1, 0x55, 0x55, 0x43, 0xf0, 0xff, 0xff,
|
||||
0xfc, 0x7f, 0xf, 0xff, 0xff, 0xd2, 0xd0, 0xbf,
|
||||
0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40,
|
||||
0x15, 0x55, 0x54, 0x3f, 0xf, 0xff, 0xff, 0xc7,
|
||||
0xf0, 0xff, 0xff, 0xfd, 0x2d, 0xb, 0xff, 0xff,
|
||||
0x80, 0x0, 0x0, 0x0, 0x0, 0x4, 0x1, 0x55,
|
||||
0x55, 0x43, 0xf0, 0xff, 0xff, 0xfc, 0x7f, 0xf,
|
||||
0xff, 0xff, 0xd2, 0xd0, 0xbf, 0xff, 0xf8,
|
||||
|
||||
/* U+E9F4 "" */
|
||||
0x0, 0x0, 0x7d, 0x0, 0x0, 0x0, 0x0, 0xff,
|
||||
0x0, 0x0, 0x0, 0x1, 0xd7, 0x40, 0x0, 0x0,
|
||||
0x1, 0xff, 0x40, 0x0, 0x0, 0x0, 0x7d, 0x0,
|
||||
0x0, 0x15, 0x0, 0x28, 0x0, 0x54, 0x7f, 0x40,
|
||||
0x28, 0x1, 0xfd, 0xf7, 0xc1, 0xff, 0x3, 0xdf,
|
||||
0xf3, 0xe7, 0xeb, 0xdb, 0xcf, 0x7f, 0xaf, 0x0,
|
||||
0xfa, 0xfd, 0x15, 0xb, 0x0, 0xe0, 0x54, 0x0,
|
||||
0xb, 0x0, 0xe0, 0x0, 0x0, 0x3, 0xeb, 0xc0,
|
||||
0x0, 0x0, 0x3, 0xff, 0xc0, 0x0, 0x1, 0xae,
|
||||
0x0, 0xba, 0x40, 0x3, 0xfc, 0x0, 0x3f, 0xc0,
|
||||
0x7, 0x5d, 0x0, 0x75, 0xd0, 0x7, 0xfd, 0x0,
|
||||
0x7f, 0xd0, 0x2, 0xf8, 0x0, 0x2f, 0x80, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
|
||||
/* U+E9F7 "" */
|
||||
0x1a, 0xaa, 0xaa, 0xa4, 0x7f, 0xff, 0xff, 0xfd,
|
||||
0x70, 0x0, 0x0, 0xe, 0xb0, 0x0, 0x0, 0xe,
|
||||
0xba, 0xaa, 0xaa, 0xae, 0xbf, 0xff, 0xff, 0xfe,
|
||||
0xb4, 0x0, 0x0, 0xe, 0xb0, 0x0, 0x0, 0xe,
|
||||
0xb0, 0x0, 0x0, 0xe, 0xb0, 0x0, 0x0, 0xe,
|
||||
0xb0, 0x0, 0x0, 0xe, 0xb0, 0x0, 0x0, 0xe,
|
||||
0xb0, 0x0, 0x0, 0xe, 0x70, 0x0, 0x0, 0xe,
|
||||
0x7f, 0xff, 0xff, 0xfd, 0x1a, 0xaa, 0xaa, 0xa4,
|
||||
|
||||
/* U+EA07 "" */
|
||||
0x0, 0x1, 0x64, 0x0, 0x0, 0x2, 0xff, 0xfc,
|
||||
0x0, 0x1, 0xff, 0xef, 0xf4, 0x0, 0x7c, 0xb4,
|
||||
0xe3, 0xd0, 0xf, 0xf, 0xb, 0xf, 0x2, 0xfa,
|
||||
0xfa, 0xba, 0xb8, 0x3f, 0xff, 0xff, 0xff, 0xc3,
|
||||
0x82, 0xc0, 0x3c, 0x1d, 0x34, 0x2c, 0x3, 0xc1,
|
||||
0xd3, 0x42, 0xc0, 0x3c, 0x1d, 0x3e, 0xbe, 0xab,
|
||||
0xea, 0xc2, 0xff, 0xff, 0xff, 0xfc, 0x1e, 0xe,
|
||||
0xb, 0x4b, 0x80, 0xb4, 0xf0, 0xf1, 0xf0, 0x3,
|
||||
0xe7, 0x9e, 0xbc, 0x0, 0xb, 0xff, 0xff, 0x0,
|
||||
0x0, 0x1b, 0xfe, 0x40, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0,
|
||||
|
||||
/* U+EAD6 "" */
|
||||
0x1a, 0xaa, 0xaa, 0xa4, 0x7f, 0xff, 0xff, 0xfd,
|
||||
0x70, 0x0, 0x0, 0xe, 0xb0, 0x0, 0x0, 0xe,
|
||||
0xb0, 0x0, 0x0, 0xe, 0xb2, 0x92, 0x84, 0x4e,
|
||||
0xb3, 0xbb, 0x8c, 0xce, 0xb3, 0x3a, 0xc, 0xce,
|
||||
0xb3, 0x3b, 0x4a, 0x8e, 0xb3, 0x3a, 0x7, 0x4e,
|
||||
0xb2, 0x92, 0x82, 0xe, 0xb0, 0x0, 0x0, 0xe,
|
||||
0xb0, 0x0, 0x0, 0xe, 0x70, 0x0, 0x0, 0xe,
|
||||
0x7f, 0xff, 0xff, 0xfd, 0x1a, 0xaa, 0xaa, 0xa4,
|
||||
|
||||
/* U+EB8E "" */
|
||||
0x5, 0x55, 0x55, 0x55, 0x43, 0xff, 0xff, 0xff,
|
||||
0xfd, 0x3f, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff,
|
||||
0xff, 0xfe, 0x38, 0x0, 0x0, 0x0, 0xe3, 0x87,
|
||||
0x40, 0x0, 0xe, 0x38, 0x3d, 0x0, 0x0, 0xe3,
|
||||
0x80, 0xf4, 0x0, 0xe, 0x38, 0xf, 0x0, 0x0,
|
||||
0xe3, 0x83, 0xc0, 0x69, 0xe, 0x38, 0x20, 0x2f,
|
||||
0xf0, 0xe3, 0x80, 0x0, 0x0, 0xe, 0x3f, 0xff,
|
||||
0xff, 0xff, 0xd1, 0xaa, 0xaa, 0xaa, 0xa8,
|
||||
|
||||
/* U+EB97 "" */
|
||||
0xa, 0xaa, 0xaa, 0xaa, 0x43, 0xff, 0xff, 0xff,
|
||||
0xfd, 0x38, 0x0, 0x0, 0x0, 0xe3, 0x80, 0x0,
|
||||
0x0, 0xe, 0x38, 0x0, 0x1, 0xc0, 0xe3, 0x8b,
|
||||
0xff, 0xdf, 0xe, 0x38, 0x0, 0x0, 0xc0, 0xe3,
|
||||
0x81, 0x40, 0x0, 0xe, 0x38, 0xb8, 0xff, 0xf0,
|
||||
0xe3, 0x87, 0x8a, 0xaa, 0xe, 0x38, 0x4, 0x0,
|
||||
0x0, 0xe3, 0x80, 0x0, 0x0, 0xe, 0x3e, 0xaa,
|
||||
0xaa, 0xaa, 0xe1, 0xff, 0xff, 0xff, 0xfc, 0x0,
|
||||
0xf, 0xff, 0x80, 0x0, 0x0, 0xaa, 0xa0, 0x0,
|
||||
|
||||
/* U+EBCC "" */
|
||||
0x0, 0x0, 0x0, 0x0, 0x3, 0x80, 0x2, 0xc0,
|
||||
0x2b, 0xea, 0xab, 0xe8, 0x7f, 0xff, 0xff, 0xfd,
|
||||
0xb0, 0x0, 0x0, 0xe, 0xba, 0xaa, 0xaa, 0xae,
|
||||
0xbf, 0xff, 0xff, 0xfe, 0xb0, 0x0, 0x0, 0xe,
|
||||
0xb0, 0x0, 0x0, 0xe, 0xb0, 0xd2, 0x87, 0xe,
|
||||
0xb0, 0x81, 0x42, 0xe, 0xb0, 0x0, 0x0, 0xe,
|
||||
0xb0, 0x81, 0x42, 0xe, 0xb0, 0xd2, 0x87, 0xe,
|
||||
0xb0, 0x0, 0x0, 0xe, 0xba, 0xaa, 0xaa, 0xae,
|
||||
0x3f, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0,
|
||||
|
||||
/* U+EC1C "" */
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0x80, 0x0,
|
||||
0x1, 0xf0, 0x0, 0x0, 0x7e, 0x0, 0x0, 0x1f,
|
||||
0xc0, 0x0, 0xb, 0xf8, 0x0, 0x2, 0xff, 0x0,
|
||||
0x0, 0xb9, 0xff, 0xa4, 0x2e, 0x6, 0xbf, 0xd7,
|
||||
0xfe, 0x90, 0xb8, 0x1a, 0xff, 0x6e, 0x0, 0x0,
|
||||
0xff, 0x80, 0x0, 0x2f, 0xe0, 0x0, 0x3, 0xf4,
|
||||
0x0, 0x0, 0xbd, 0x0, 0x0, 0xf, 0x40, 0x0,
|
||||
0x2, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
|
||||
/* U+EF40 "" */
|
||||
0x14, 0x5, 0x1, 0x40, 0xbd, 0x2f, 0x4b, 0xd0,
|
||||
0xbe, 0x2f, 0x8b, 0xe0, 0x38, 0xe, 0x3, 0x80,
|
||||
0x0, 0x0, 0x0, 0x0, 0x14, 0x5, 0x0, 0x0,
|
||||
0xbd, 0x2f, 0x40, 0x60, 0xbe, 0x2f, 0x81, 0xfc,
|
||||
0x38, 0xe, 0x7, 0xfc, 0x0, 0x0, 0x1e, 0xf8,
|
||||
0x14, 0x0, 0x74, 0xe0, 0xbd, 0x0, 0xd3, 0x80,
|
||||
0xbe, 0x1, 0xde, 0x0, 0x38, 0x0, 0xf8, 0x0,
|
||||
|
||||
/* U+EF4A "" */
|
||||
0x0, 0x1, 0x54, 0x0, 0x0, 0x2, 0xff, 0xfc,
|
||||
0x0, 0x1, 0xf9, 0x6, 0xf4, 0x0, 0x7c, 0x0,
|
||||
0x3, 0xd0, 0xf, 0x0, 0x0, 0xf, 0x2, 0xd0,
|
||||
0x0, 0x0, 0x38, 0x3c, 0x0, 0x0, 0x2, 0xc3,
|
||||
0x80, 0x0, 0x0, 0x1d, 0x34, 0x0, 0x0, 0x1,
|
||||
0xd3, 0x40, 0x0, 0x0, 0x1d, 0x38, 0x0, 0x0,
|
||||
0x1, 0xc3, 0xc0, 0x0, 0x0, 0x3c, 0x1e, 0x0,
|
||||
0x0, 0x7, 0x80, 0xf4, 0x0, 0x0, 0xf0, 0x3,
|
||||
0xe0, 0x0, 0x7c, 0x0, 0xb, 0xea, 0xbf, 0x0,
|
||||
0x0, 0x1b, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0,
|
||||
|
||||
/* U+EF7A "" */
|
||||
0x0, 0x55, 0x0, 0x0, 0x7, 0xff, 0xd0, 0x0,
|
||||
0x1f, 0x41, 0xf4, 0x0, 0x3c, 0x0, 0x3c, 0x0,
|
||||
0x74, 0x0, 0x2c, 0x0, 0x70, 0x0, 0x1d, 0x0,
|
||||
0x74, 0x0, 0x1d, 0x0, 0x38, 0x0, 0x2c, 0x0,
|
||||
0x3d, 0x0, 0x78, 0x0, 0xf, 0xeb, 0xfc, 0x0,
|
||||
0x2, 0xff, 0x5f, 0x0, 0x0, 0x0, 0x7, 0xc0,
|
||||
0x0, 0x0, 0x1, 0xf0, 0x0, 0x0, 0x0, 0x7c,
|
||||
0x0, 0x0, 0x0, 0x1c,
|
||||
|
||||
/* U+EFE6 "" */
|
||||
0x0, 0x54, 0x1, 0x90, 0x3, 0xfe, 0x3, 0xf0,
|
||||
0xb, 0x8b, 0x4b, 0xf8, 0xf, 0x3, 0x8f, 0xfc,
|
||||
0xf, 0x3, 0x8f, 0xfc, 0xf, 0x3, 0x8f, 0xfc,
|
||||
0xf, 0x3, 0x81, 0xe0, 0xf, 0x3, 0x81, 0xd0,
|
||||
0xf, 0x3, 0x81, 0xd0, 0x1f, 0x43, 0x81, 0xd0,
|
||||
0xbf, 0xc3, 0x81, 0xd0, 0xbf, 0xd3, 0x81, 0xd0,
|
||||
0xbf, 0xd3, 0x81, 0xd0, 0x7f, 0xc2, 0xd3, 0xc0,
|
||||
0x2f, 0x80, 0xff, 0x40, 0xa, 0x0, 0x14, 0x0,
|
||||
|
||||
/* U+F028 "" */
|
||||
0xa, 0xaa, 0xaa, 0xaa, 0xa0, 0x3f, 0xff, 0xff,
|
||||
0xff, 0xfc, 0x38, 0x0, 0x0, 0x0, 0x2c, 0x38,
|
||||
0x0, 0x0, 0x0, 0x2c, 0x38, 0xb1, 0xc3, 0x4a,
|
||||
0x2c, 0x38, 0x0, 0x0, 0x0, 0x2c, 0x38, 0x50,
|
||||
0x81, 0x5, 0x2c, 0x38, 0xb1, 0xc3, 0x4a, 0x2c,
|
||||
0x38, 0x0, 0x0, 0x0, 0x2c, 0x38, 0x2, 0xaa,
|
||||
0x80, 0x2c, 0x38, 0x3, 0xff, 0xc0, 0x2c, 0x38,
|
||||
0x0, 0x0, 0x0, 0x2c, 0x3f, 0xff, 0xff, 0xff,
|
||||
0xfc, 0xa, 0xaa, 0xaa, 0xaa, 0xa0,
|
||||
|
||||
/* U+F090 "" */
|
||||
0x0, 0x5, 0x0, 0x0, 0x0, 0xe0, 0x0, 0x0,
|
||||
0xe, 0x0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0xe,
|
||||
0x0, 0x0, 0x14, 0xe2, 0x40, 0x3, 0xde, 0xb8,
|
||||
0x0, 0xf, 0xfe, 0x0, 0x0, 0x3f, 0x80, 0x1,
|
||||
0x0, 0xe0, 0x4, 0xb0, 0x0, 0x0, 0xeb, 0x0,
|
||||
0x0, 0xe, 0xbf, 0xff, 0xff, 0xe2, 0xaa, 0xaa,
|
||||
0xa8,
|
||||
|
||||
/* U+F15C "" */
|
||||
0x0, 0x0, 0x69, 0x0, 0x0, 0x0, 0xb, 0xff,
|
||||
0xd0, 0x0, 0x0, 0x2f, 0x41, 0xf4, 0x0, 0x0,
|
||||
0x3c, 0x0, 0x3c, 0x0, 0x0, 0xb0, 0x0, 0x1d,
|
||||
0x0, 0x7, 0xf0, 0x0, 0xe, 0x0, 0x1f, 0x40,
|
||||
0x0, 0xf, 0x80, 0x3c, 0x0, 0x0, 0xf, 0xf0,
|
||||
0x38, 0x0, 0x0, 0x0, 0x3c, 0x38, 0x0, 0x0,
|
||||
0x0, 0x2c, 0x3c, 0x0, 0x0, 0x0, 0x2c, 0x1e,
|
||||
0x0, 0x0, 0x0, 0x7c, 0xb, 0xff, 0xff, 0xff,
|
||||
0xf0, 0x0, 0xaa, 0xaa, 0xaa, 0x80,
|
||||
|
||||
/* U+F720 "" */
|
||||
0x0, 0x1, 0x40, 0x0, 0x0, 0x1f, 0xf4, 0x0,
|
||||
0x0, 0xfd, 0xbe, 0x0, 0xb, 0xe0, 0xb, 0xe0,
|
||||
0x3e, 0x0, 0x0, 0xfc, 0xbe, 0x0, 0x0, 0xfd,
|
||||
0xbb, 0xe0, 0xb, 0xed, 0xb0, 0xfd, 0x7e, 0x1d,
|
||||
0xb0, 0x1f, 0xf4, 0x1d, 0xb0, 0x3, 0xc0, 0x1d,
|
||||
0xb0, 0x3, 0x80, 0x1d, 0xb0, 0x3, 0x80, 0x1d,
|
||||
0x78, 0x3, 0x80, 0x3d, 0x2f, 0x43, 0x82, 0xf8,
|
||||
0x7, 0xf7, 0xdf, 0xc0, 0x0, 0x7f, 0xfd, 0x0,
|
||||
0x0, 0xb, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
|
||||
/* U+F8C7 "" */
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0x0,
|
||||
0x0, 0x0, 0x0, 0xb0, 0x0, 0x0, 0x10, 0xb,
|
||||
0x0, 0x50, 0xf, 0x0, 0xb0, 0xf, 0x1, 0xd0,
|
||||
0xb, 0x0, 0x78, 0x3c, 0x0, 0xb0, 0x2, 0xc3,
|
||||
0x80, 0xb, 0x0, 0x1d, 0x34, 0x0, 0xb0, 0x1,
|
||||
0xd3, 0x40, 0x6, 0x0, 0x1d, 0x38, 0x0, 0x0,
|
||||
0x1, 0xc3, 0xc0, 0x0, 0x0, 0x3c, 0x1d, 0x0,
|
||||
0x0, 0x7, 0x80, 0xf4, 0x0, 0x0, 0xf0, 0x3,
|
||||
0xe0, 0x0, 0x7c, 0x0, 0xb, 0xea, 0xbf, 0x0,
|
||||
0x0, 0x1b, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0,
|
||||
|
||||
/* U+FFF75 "" */
|
||||
0x2a, 0xaa, 0xaa, 0xa9, 0x3, 0xff, 0xff, 0xff,
|
||||
0xfc, 0x38, 0x0, 0x0, 0x1, 0xd3, 0x89, 0x7,
|
||||
0x3, 0xe, 0x38, 0x0, 0x0, 0x0, 0xe3, 0xff,
|
||||
0xff, 0xff, 0xfe, 0x2a, 0xab, 0xff, 0xab, 0xe0,
|
||||
0x1, 0xff, 0x44, 0xe, 0x6, 0xfe, 0x0, 0x82,
|
||||
0xd2, 0xf9, 0x2, 0x6, 0xf8, 0x38, 0x30, 0x1b,
|
||||
0xf8, 0x3, 0xea, 0xaf, 0xfe, 0xa9, 0x3f, 0xff,
|
||||
0xff, 0xff, 0xe3, 0x80, 0x0, 0x1, 0xe, 0x38,
|
||||
0x90, 0x20, 0x20, 0xe3, 0xea, 0xaa, 0xaa, 0xae,
|
||||
0x1f, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0,
|
||||
0x0
|
||||
};
|
||||
|
||||
|
||||
/*---------------------
|
||||
* GLYPH DESCRIPTION
|
||||
*--------------------*/
|
||||
|
||||
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
|
||||
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
|
||||
{.bitmap_index = 0, .adv_w = 320, .box_w = 12, .box_h = 12, .ofs_x = 4, .ofs_y = 4},
|
||||
{.bitmap_index = 36, .adv_w = 320, .box_w = 18, .box_h = 14, .ofs_x = 1, .ofs_y = 3},
|
||||
{.bitmap_index = 99, .adv_w = 320, .box_w = 11, .box_h = 16, .ofs_x = 4, .ofs_y = 2},
|
||||
{.bitmap_index = 143, .adv_w = 320, .box_w = 12, .box_h = 18, .ofs_x = 4, .ofs_y = 1},
|
||||
{.bitmap_index = 197, .adv_w = 320, .box_w = 19, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
|
||||
{.bitmap_index = 292, .adv_w = 320, .box_w = 18, .box_h = 14, .ofs_x = 1, .ofs_y = 3},
|
||||
{.bitmap_index = 355, .adv_w = 320, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 436, .adv_w = 320, .box_w = 10, .box_h = 6, .ofs_x = 5, .ofs_y = 7},
|
||||
{.bitmap_index = 451, .adv_w = 320, .box_w = 18, .box_h = 14, .ofs_x = 1, .ofs_y = 3},
|
||||
{.bitmap_index = 514, .adv_w = 320, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 595, .adv_w = 320, .box_w = 16, .box_h = 16, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 659, .adv_w = 320, .box_w = 10, .box_h = 16, .ofs_x = 5, .ofs_y = 2},
|
||||
{.bitmap_index = 699, .adv_w = 320, .box_w = 14, .box_h = 16, .ofs_x = 3, .ofs_y = 2},
|
||||
{.bitmap_index = 755, .adv_w = 320, .box_w = 14, .box_h = 14, .ofs_x = 3, .ofs_y = 3},
|
||||
{.bitmap_index = 804, .adv_w = 320, .box_w = 12, .box_h = 12, .ofs_x = 4, .ofs_y = 4},
|
||||
{.bitmap_index = 840, .adv_w = 320, .box_w = 16, .box_h = 10, .ofs_x = 2, .ofs_y = 5},
|
||||
{.bitmap_index = 880, .adv_w = 320, .box_w = 4, .box_h = 14, .ofs_x = 8, .ofs_y = 3},
|
||||
{.bitmap_index = 894, .adv_w = 320, .box_w = 14, .box_h = 14, .ofs_x = 3, .ofs_y = 3},
|
||||
{.bitmap_index = 943, .adv_w = 320, .box_w = 20, .box_h = 15, .ofs_x = 0, .ofs_y = 2},
|
||||
{.bitmap_index = 1018, .adv_w = 320, .box_w = 14, .box_h = 10, .ofs_x = 3, .ofs_y = 5},
|
||||
{.bitmap_index = 1053, .adv_w = 320, .box_w = 16, .box_h = 14, .ofs_x = 3, .ofs_y = 3},
|
||||
{.bitmap_index = 1109, .adv_w = 320, .box_w = 16, .box_h = 14, .ofs_x = 2, .ofs_y = 3},
|
||||
{.bitmap_index = 1165, .adv_w = 320, .box_w = 14, .box_h = 18, .ofs_x = 3, .ofs_y = 1},
|
||||
{.bitmap_index = 1228, .adv_w = 320, .box_w = 18, .box_h = 17, .ofs_x = 1, .ofs_y = 2},
|
||||
{.bitmap_index = 1305, .adv_w = 320, .box_w = 17, .box_h = 18, .ofs_x = 2, .ofs_y = 1},
|
||||
{.bitmap_index = 1382, .adv_w = 320, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 1463, .adv_w = 320, .box_w = 14, .box_h = 18, .ofs_x = 3, .ofs_y = 1},
|
||||
{.bitmap_index = 1526, .adv_w = 320, .box_w = 14, .box_h = 16, .ofs_x = 3, .ofs_y = 2},
|
||||
{.bitmap_index = 1582, .adv_w = 320, .box_w = 18, .box_h = 14, .ofs_x = 1, .ofs_y = 3},
|
||||
{.bitmap_index = 1645, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
|
||||
{.bitmap_index = 1745, .adv_w = 320, .box_w = 16, .box_h = 16, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 1809, .adv_w = 320, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 1890, .adv_w = 320, .box_w = 16, .box_h = 16, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 1954, .adv_w = 320, .box_w = 18, .box_h = 14, .ofs_x = 1, .ofs_y = 3},
|
||||
{.bitmap_index = 2017, .adv_w = 320, .box_w = 18, .box_h = 16, .ofs_x = 1, .ofs_y = 2},
|
||||
{.bitmap_index = 2089, .adv_w = 320, .box_w = 16, .box_h = 18, .ofs_x = 2, .ofs_y = 1},
|
||||
{.bitmap_index = 2161, .adv_w = 320, .box_w = 14, .box_h = 18, .ofs_x = 3, .ofs_y = 1},
|
||||
{.bitmap_index = 2224, .adv_w = 320, .box_w = 16, .box_h = 14, .ofs_x = 3, .ofs_y = 3},
|
||||
{.bitmap_index = 2280, .adv_w = 320, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 2361, .adv_w = 320, .box_w = 16, .box_h = 15, .ofs_x = 2, .ofs_y = 3},
|
||||
{.bitmap_index = 2421, .adv_w = 320, .box_w = 16, .box_h = 16, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 2485, .adv_w = 320, .box_w = 20, .box_h = 14, .ofs_x = 0, .ofs_y = 3},
|
||||
{.bitmap_index = 2555, .adv_w = 320, .box_w = 14, .box_h = 14, .ofs_x = 3, .ofs_y = 3},
|
||||
{.bitmap_index = 2604, .adv_w = 320, .box_w = 20, .box_h = 14, .ofs_x = 0, .ofs_y = 3},
|
||||
{.bitmap_index = 2674, .adv_w = 320, .box_w = 16, .box_h = 18, .ofs_x = 2, .ofs_y = 1},
|
||||
{.bitmap_index = 2746, .adv_w = 320, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 2827, .adv_w = 320, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = 1}
|
||||
};
|
||||
|
||||
/*---------------------
|
||||
* CHARACTER MAPPING
|
||||
*--------------------*/
|
||||
|
||||
static const uint16_t unicode_list_0[] = {
|
||||
0x0, 0x14, 0x62, 0x9b, 0x148, 0x182, 0x1ca, 0x1d1,
|
||||
0x1e1, 0x26a, 0x2af, 0x2c0, 0x418, 0x47e, 0x488, 0x48d,
|
||||
0x48f, 0x490, 0x4f9, 0x523, 0x600, 0x62b, 0x757, 0x76a,
|
||||
0x773, 0x7b8, 0x7ca, 0x7e9, 0x874, 0x8af, 0x8b2, 0x8c2,
|
||||
0x991, 0xa49, 0xa52, 0xa87, 0xad7, 0xdfb, 0xe05, 0xe35,
|
||||
0xea1, 0xee3, 0xf4b, 0x1017, 0x15db, 0x1782
|
||||
};
|
||||
|
||||
/*Collect the unicode lists and glyph_id offsets*/
|
||||
static const lv_font_fmt_txt_cmap_t cmaps[] =
|
||||
{
|
||||
{
|
||||
.range_start = 57669, .range_length = 6019, .glyph_id_start = 1,
|
||||
.unicode_list = unicode_list_0, .glyph_id_ofs_list = NULL, .list_length = 46, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
|
||||
},
|
||||
{
|
||||
.range_start = 1048437, .range_length = 1, .glyph_id_start = 47,
|
||||
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*--------------------
|
||||
* ALL CUSTOM DATA
|
||||
*--------------------*/
|
||||
|
||||
#if LVGL_VERSION_MAJOR == 8
|
||||
/*Store all the custom data of the font*/
|
||||
static lv_font_fmt_txt_glyph_cache_t cache;
|
||||
#endif
|
||||
|
||||
#if LVGL_VERSION_MAJOR >= 8
|
||||
static const lv_font_fmt_txt_dsc_t font_dsc = {
|
||||
#else
|
||||
static lv_font_fmt_txt_dsc_t font_dsc = {
|
||||
#endif
|
||||
.glyph_bitmap = glyph_bitmap,
|
||||
.glyph_dsc = glyph_dsc,
|
||||
.cmaps = cmaps,
|
||||
.kern_dsc = NULL,
|
||||
.kern_scale = 0,
|
||||
.cmap_num = 2,
|
||||
.bpp = 2,
|
||||
.kern_classes = 0,
|
||||
.bitmap_format = 0,
|
||||
#if LVGL_VERSION_MAJOR == 8
|
||||
.cache = &cache
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*-----------------
|
||||
* PUBLIC FONT
|
||||
*----------------*/
|
||||
|
||||
/*Initialize a public general font descriptor*/
|
||||
#if LVGL_VERSION_MAJOR >= 8
|
||||
const lv_font_t material_symbols_shared_20 = {
|
||||
#else
|
||||
lv_font_t material_symbols_shared_20 = {
|
||||
#endif
|
||||
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
|
||||
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
|
||||
.line_height = 20, /*The maximum line height required by the font*/
|
||||
.base_line = 0, /*Baseline measured from the bottom of the line*/
|
||||
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
|
||||
.subpx = LV_FONT_SUBPX_NONE,
|
||||
#endif
|
||||
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
|
||||
.underline_position = 0,
|
||||
.underline_thickness = 0,
|
||||
#endif
|
||||
.dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
|
||||
#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9
|
||||
.fallback = NULL,
|
||||
#endif
|
||||
.user_data = NULL,
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif /*#if MATERIAL_SYMBOLS_SHARED_20*/
|
||||
|
||||
@ -1,748 +0,0 @@
|
||||
/*******************************************************************************
|
||||
* Size: 24 px
|
||||
* Bpp: 2
|
||||
* Opts: --no-compress --no-prefilter --bpp 2 --size 24 --font MaterialSymbolsRounded.ttf -r 0xE145,0xE5C3,0xE770,0xEF40,0xEBCC,0xEFE6,0xEF4A,0xE5CD,0xF15C,0xE668,0xE92E,0xE326,0xEB97,0xE745,0xEC1C,0xE2C7,0xF720,0xF090,0xE8AF,0xE30F,0xE8FD,0xE9F4,0xE3F4,0xE316,0xE90F,0xEA07,0xE9B9,0xE159,0xE5D2,0xE28D,0xE5D4,0xE405,0xE89C,0xF8C7,0xE5D5,0xEF7A,0xE8B8,0xE9F7,0xE55D,0xF028,0xE1E0,0xE63E,0xE1A7,0xEB8E,0xEAD6,0xE3AF,0xFFF75 --format lvgl -o source-fonts/material_symbols_shared_24.c --force-fast-kern-format
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#include "lvgl.h"
|
||||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
|
||||
#ifndef MATERIAL_SYMBOLS_SHARED_24
|
||||
#define MATERIAL_SYMBOLS_SHARED_24 1
|
||||
#endif
|
||||
|
||||
#if MATERIAL_SYMBOLS_SHARED_24
|
||||
|
||||
/*-----------------
|
||||
* BITMAPS
|
||||
*----------------*/
|
||||
|
||||
/*Store the image of the glyphs*/
|
||||
static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
|
||||
/* U+E145 "" */
|
||||
0x0, 0xf, 0x0, 0x0, 0x0, 0xf0, 0x0, 0x0,
|
||||
0xf, 0x0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf,
|
||||
0x0, 0x0, 0x0, 0xf0, 0x0, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0x0, 0xf, 0x0, 0x0,
|
||||
0x0, 0xf0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0,
|
||||
0xf0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0xf0,
|
||||
0x0,
|
||||
|
||||
/* U+E159 "" */
|
||||
0x7f, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x2f, 0xff,
|
||||
0x40, 0x0, 0x1, 0xff, 0xf7, 0xf0, 0x0, 0xf,
|
||||
0xdf, 0xf0, 0xbe, 0x0, 0xbe, 0xf, 0xf0, 0xf,
|
||||
0xd7, 0xf0, 0xf, 0xf0, 0x1, 0xff, 0x40, 0xf,
|
||||
0xf0, 0x0, 0x28, 0x0, 0xf, 0xf0, 0x0, 0x0,
|
||||
0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0xf, 0xf0,
|
||||
0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0,
|
||||
0xf, 0xf0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xfd,
|
||||
|
||||
/* U+E1A7 "" */
|
||||
0x0, 0x0, 0x0, 0x0, 0x3, 0xd0, 0x0, 0x0,
|
||||
0xfd, 0x0, 0x40, 0x3f, 0xd0, 0xb8, 0xf, 0xbd,
|
||||
0xf, 0x83, 0xcb, 0xc0, 0xf8, 0xf2, 0xf0, 0xf,
|
||||
0xbe, 0xf0, 0x0, 0xff, 0xf0, 0x0, 0xf, 0xf0,
|
||||
0x0, 0x2, 0xf8, 0x0, 0x2, 0xff, 0x80, 0x2,
|
||||
0xff, 0xf8, 0x2, 0xf3, 0xcf, 0x82, 0xf0, 0xf1,
|
||||
0xf1, 0xf0, 0x3c, 0xf8, 0x60, 0xf, 0xf8, 0x0,
|
||||
0x3, 0xf8, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x28,
|
||||
0x0,
|
||||
|
||||
/* U+E1E0 "" */
|
||||
0x0, 0x5, 0x0, 0x0, 0x0, 0xf0, 0x0, 0x0,
|
||||
0x3f, 0xc0, 0x0, 0x7, 0xfd, 0x0, 0x0, 0xf,
|
||||
0x0, 0x0, 0x0, 0xf0, 0x0, 0x7d, 0xf, 0xf,
|
||||
0xff, 0xf0, 0xf0, 0xff, 0xff, 0xf, 0xf, 0xf7,
|
||||
0xd0, 0xf0, 0xff, 0x3c, 0xf, 0x3, 0xc3, 0xc0,
|
||||
0xf0, 0x3c, 0x3f, 0xff, 0xff, 0xc1, 0xff, 0xff,
|
||||
0xf4, 0x0, 0xf, 0x0, 0x0, 0x0, 0xf0, 0x0,
|
||||
0x0, 0xf, 0x40, 0x0, 0x3, 0xfc, 0x0, 0x0,
|
||||
0x3f, 0xc0, 0x0, 0x1, 0xf4, 0x0,
|
||||
|
||||
/* U+E28D "" */
|
||||
0x0, 0x0, 0x2f, 0x80, 0x0, 0x0, 0x0, 0xb,
|
||||
0xfe, 0x0, 0x0, 0x0, 0x0, 0xf0, 0xf0, 0x0,
|
||||
0x0, 0x0, 0xf, 0xf, 0x0, 0x0, 0x0, 0x0,
|
||||
0xf0, 0xf0, 0x0, 0x0, 0x0, 0xf, 0xf, 0x0,
|
||||
0x0, 0x0, 0x0, 0xf0, 0xf0, 0x0, 0x0, 0x0,
|
||||
0xf, 0xf, 0x0, 0x0, 0x0, 0x0, 0xf0, 0xf0,
|
||||
0x0, 0x0, 0x0, 0xf, 0xf, 0x0, 0x0, 0x7,
|
||||
0xff, 0xff, 0xff, 0xfd, 0x0, 0xff, 0xff, 0xff,
|
||||
0xff, 0xf0, 0xf, 0x0, 0x0, 0x0, 0xf, 0x0,
|
||||
0xf0, 0x0, 0x0, 0x0, 0xf0, 0xf, 0xff, 0xff,
|
||||
0xff, 0xff, 0x1, 0xff, 0xff, 0xff, 0xff, 0xf4,
|
||||
0x2d, 0x0, 0x0, 0x0, 0x7, 0x83, 0xc3, 0xc0,
|
||||
0xf0, 0x3c, 0x3c, 0x3c, 0x3c, 0xf, 0x3, 0xc3,
|
||||
0xc7, 0x83, 0xc0, 0xf0, 0x3c, 0x2d, 0x7f, 0xff,
|
||||
0xff, 0xff, 0xff, 0xd2, 0xff, 0xff, 0xff, 0xff,
|
||||
0xf8,
|
||||
|
||||
/* U+E2C7 "" */
|
||||
0x7f, 0xff, 0x40, 0x0, 0x0, 0xff, 0xff, 0xe0,
|
||||
0x0, 0x0, 0xf0, 0x1, 0xff, 0xff, 0xfd, 0xf0,
|
||||
0x0, 0x7f, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0,
|
||||
0xf, 0xf0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0,
|
||||
0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0xf,
|
||||
0xf0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0,
|
||||
0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0xf, 0xf0,
|
||||
0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0,
|
||||
0xf, 0xf0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xfd,
|
||||
|
||||
/* U+E30F "" */
|
||||
0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, 0x3, 0xff,
|
||||
0xc0, 0x0, 0x0, 0x3, 0xc3, 0xc0, 0x0, 0x0,
|
||||
0x3, 0xc3, 0xc0, 0x0, 0x0, 0x3, 0xc3, 0xc0,
|
||||
0x0, 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, 0x0,
|
||||
0xff, 0x0, 0x0, 0xff, 0xf0, 0x3c, 0xf, 0xff,
|
||||
0xff, 0xfc, 0x0, 0x3f, 0xff, 0xf0, 0x3f, 0x0,
|
||||
0xfc, 0xf, 0xf0, 0x3f, 0x0, 0xfc, 0xf, 0xff,
|
||||
0xfc, 0x0, 0x3f, 0xff, 0xff, 0xf0, 0x3c, 0xf,
|
||||
0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x3,
|
||||
0xff, 0xc0, 0x0, 0x0, 0x3, 0xc3, 0xc0, 0x0,
|
||||
0x0, 0x3, 0xc3, 0xc0, 0x0, 0x0, 0x3, 0xc3,
|
||||
0xc0, 0x0, 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0,
|
||||
0x3, 0xff, 0xc0, 0x0,
|
||||
|
||||
/* U+E316 "" */
|
||||
0x0, 0x14, 0x0, 0x0, 0xbd, 0x0, 0x2, 0xff,
|
||||
0x40, 0xb, 0xc7, 0xd0, 0x2f, 0x1, 0xf4, 0xbc,
|
||||
0x0, 0x7c, 0xb0, 0x0, 0x1c,
|
||||
|
||||
/* U+E326 "" */
|
||||
0x1f, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff,
|
||||
0xff, 0xfc, 0x3c, 0x0, 0x0, 0x0, 0x0, 0x3c,
|
||||
0x0, 0x0, 0x0, 0x0, 0x3c, 0x0, 0x0, 0xbf,
|
||||
0xfe, 0x3c, 0x0, 0x0, 0xff, 0xff, 0x3c, 0x0,
|
||||
0x0, 0xf0, 0xf, 0x3c, 0x0, 0x0, 0xf2, 0x8f,
|
||||
0x3c, 0x0, 0x0, 0xf0, 0xf, 0x3c, 0x0, 0x0,
|
||||
0xf0, 0xf, 0x3c, 0x0, 0x0, 0xf0, 0xf, 0x3f,
|
||||
0xff, 0xf0, 0xf0, 0xf, 0x1f, 0xff, 0xf0, 0xf0,
|
||||
0xf, 0x0, 0x0, 0x0, 0xf0, 0xf, 0xff, 0xff,
|
||||
0xf0, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xbf, 0xfe,
|
||||
|
||||
/* U+E3AF "" */
|
||||
0x0, 0x6, 0xff, 0x90, 0x0, 0x0, 0x7f, 0xff,
|
||||
0xfd, 0x0, 0x2, 0xfd, 0x3, 0x7f, 0x80, 0xb,
|
||||
0xd0, 0x9, 0x7, 0xe0, 0x1f, 0x80, 0x1c, 0x1,
|
||||
0xf4, 0x3e, 0xc0, 0x34, 0x0, 0x7c, 0x7c, 0x60,
|
||||
0x70, 0x0, 0x3d, 0xb4, 0x30, 0xff, 0xff, 0xfe,
|
||||
0xf0, 0x1f, 0xff, 0xc0, 0xf, 0xf0, 0xb, 0xff,
|
||||
0xc0, 0xf, 0xf0, 0x3, 0xff, 0xe0, 0xf, 0xf0,
|
||||
0x3, 0xff, 0xf4, 0xf, 0xbf, 0xff, 0xff, 0xc,
|
||||
0x1e, 0x7c, 0x0, 0xd, 0x9, 0x3d, 0x3d, 0x0,
|
||||
0x1c, 0x3, 0xbc, 0x1f, 0x40, 0x34, 0x2, 0xf4,
|
||||
0xb, 0xd0, 0x60, 0x7, 0xe0, 0x2, 0xfd, 0xc0,
|
||||
0x7f, 0x80, 0x0, 0x7f, 0xff, 0xfd, 0x0, 0x0,
|
||||
0x6, 0xff, 0x90, 0x0,
|
||||
|
||||
/* U+E3F4 "" */
|
||||
0x7f, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
|
||||
0xff, 0xf0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0,
|
||||
0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0xff, 0x0,
|
||||
0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0xff,
|
||||
0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0,
|
||||
0xff, 0x0, 0x0, 0x10, 0xf, 0xf0, 0x14, 0xf,
|
||||
0x40, 0xff, 0x3, 0xc2, 0xfc, 0xf, 0xf0, 0xff,
|
||||
0x7f, 0xf0, 0xff, 0x1f, 0xff, 0xff, 0x4f, 0xf0,
|
||||
0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xf,
|
||||
0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff,
|
||||
0xfd,
|
||||
|
||||
/* U+E405 "" */
|
||||
0x0, 0xf, 0xff, 0x0, 0xf, 0xff, 0x0, 0xf,
|
||||
0xff, 0x0, 0xf, 0xff, 0x0, 0xf, 0x0, 0x0,
|
||||
0xf, 0x0, 0x0, 0xf, 0x0, 0x0, 0xf, 0x0,
|
||||
0x0, 0xf, 0x0, 0x0, 0xf, 0x0, 0xb, 0xef,
|
||||
0x0, 0x3f, 0xff, 0x0, 0xbf, 0xff, 0x0, 0xff,
|
||||
0xff, 0x0, 0xff, 0xff, 0x0, 0xbf, 0xfe, 0x0,
|
||||
0x3f, 0xfc, 0x0, 0xb, 0xe0, 0x0,
|
||||
|
||||
/* U+E55D "" */
|
||||
0x0, 0x1, 0x40, 0x0, 0x0, 0x3, 0xc0, 0x0,
|
||||
0x0, 0xb, 0xe0, 0x0, 0x0, 0xf, 0xf0, 0x0,
|
||||
0x0, 0x1e, 0xb4, 0x0, 0x0, 0x3d, 0x7c, 0x0,
|
||||
0x0, 0x7c, 0x3d, 0x0, 0x0, 0xf4, 0x1f, 0x0,
|
||||
0x0, 0xf0, 0xf, 0x0, 0x2, 0xe0, 0xb, 0x80,
|
||||
0x3, 0xc0, 0x3, 0xc0, 0xb, 0x80, 0x2, 0xe0,
|
||||
0xf, 0x0, 0x0, 0xf0, 0x1e, 0xb, 0xe0, 0xb4,
|
||||
0x3e, 0xbf, 0xfe, 0xbc, 0x7f, 0xf8, 0x2f, 0xfd,
|
||||
0xbf, 0x40, 0x1, 0xfe, 0x64, 0x0, 0x0, 0x19,
|
||||
|
||||
/* U+E5C3 "" */
|
||||
0x7d, 0x7, 0xd0, 0x7d, 0xff, 0xf, 0xf0, 0xff,
|
||||
0xff, 0xf, 0xf0, 0xff, 0x7d, 0x7, 0xd0, 0x7d,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x7d, 0x7, 0xd0, 0x7d, 0xff, 0xf, 0xf0, 0xff,
|
||||
0xff, 0xf, 0xf0, 0xff, 0x7d, 0x7, 0xd0, 0x7d,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x7d, 0x7, 0xd0, 0x7d, 0xff, 0xf, 0xf0, 0xff,
|
||||
0xff, 0xf, 0xf0, 0xff, 0x7d, 0x7, 0xd0, 0x7d,
|
||||
|
||||
/* U+E5CD "" */
|
||||
0x10, 0x0, 0x0, 0x4b, 0x40, 0x0, 0x3d, 0x7d,
|
||||
0x0, 0xf, 0xc1, 0xf4, 0x3, 0xf0, 0x7, 0xd0,
|
||||
0xfc, 0x0, 0x1f, 0xbf, 0x0, 0x0, 0x7f, 0xc0,
|
||||
0x0, 0x3, 0xf8, 0x0, 0x0, 0xff, 0xd0, 0x0,
|
||||
0x3f, 0x1f, 0x40, 0xf, 0xc0, 0x7d, 0x3, 0xf0,
|
||||
0x1, 0xf4, 0xbc, 0x0, 0x7, 0xd6, 0x0, 0x0,
|
||||
0x18,
|
||||
|
||||
/* U+E5D2 "" */
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
|
||||
/* U+E5D4 "" */
|
||||
0x7d, 0xff, 0xff, 0x7d, 0x0, 0x0, 0x7d, 0xff,
|
||||
0xff, 0x7d, 0x0, 0x0, 0x7d, 0xff, 0xff, 0x7d,
|
||||
|
||||
/* U+E5D5 "" */
|
||||
0x0, 0x2f, 0xf8, 0xf, 0x2, 0xff, 0xff, 0x8f,
|
||||
0xf, 0xe0, 0xb, 0xef, 0x2f, 0x0, 0x0, 0xff,
|
||||
0x3c, 0x0, 0x0, 0x3f, 0xb8, 0x0, 0x3f, 0xff,
|
||||
0xf0, 0x0, 0x3f, 0xff, 0xf0, 0x0, 0x0, 0x0,
|
||||
0xf0, 0x0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0x0,
|
||||
0xb8, 0x0, 0x0, 0x18, 0x3c, 0x0, 0x0, 0x3c,
|
||||
0x2f, 0x0, 0x0, 0xf8, 0xf, 0xe0, 0xb, 0xe0,
|
||||
0x2, 0xff, 0xff, 0x80, 0x0, 0x2f, 0xf8, 0x0,
|
||||
|
||||
/* U+E63E "" */
|
||||
0x0, 0x1, 0xbf, 0xfe, 0x40, 0x0, 0x0, 0x2f,
|
||||
0xff, 0xff, 0xf9, 0x0, 0x2, 0xff, 0xff, 0xff,
|
||||
0xff, 0xc0, 0xf, 0xff, 0x90, 0x1, 0xbf, 0xf4,
|
||||
0x3f, 0xe0, 0x0, 0x0, 0xb, 0xfd, 0x3f, 0x40,
|
||||
0x0, 0x0, 0x0, 0xfd, 0x4, 0x0, 0x6f, 0xf9,
|
||||
0x0, 0x14, 0x0, 0x7, 0xff, 0xff, 0xe0, 0x0,
|
||||
0x0, 0x2f, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x3f,
|
||||
0xd0, 0x7, 0xfc, 0x0, 0x0, 0x19, 0x0, 0x0,
|
||||
0x64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x7, 0xe0, 0x0, 0x0, 0x0, 0x0,
|
||||
0xf, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf8,
|
||||
0x0, 0x0, 0x0, 0x0, 0xf, 0xf4, 0x0, 0x0,
|
||||
0x0, 0x0, 0x7, 0xe0, 0x0, 0x0,
|
||||
|
||||
/* U+E668 "" */
|
||||
0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x3e,
|
||||
0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x3, 0xf0,
|
||||
0x0, 0x0, 0xf, 0xc0, 0x60, 0x0, 0x3f, 0x0,
|
||||
0xbc, 0x0, 0xfc, 0x0, 0x3f, 0x3, 0xf0, 0x0,
|
||||
0xf, 0xcf, 0xc0, 0x0, 0x3, 0xff, 0x0, 0x0,
|
||||
0x0, 0xfc, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0,
|
||||
|
||||
/* U+E745 "" */
|
||||
0xff, 0xff, 0xfc, 0x0, 0xf, 0xff, 0xff, 0xc0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0xff, 0xff, 0xfc, 0x0, 0xf, 0xff,
|
||||
0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0xb8, 0xff, 0xfc, 0x0, 0x2f,
|
||||
0xef, 0xff, 0xc0, 0xb, 0xff, 0x0, 0x0, 0x2,
|
||||
0xff, 0xe0, 0x0, 0x0, 0xb8, 0xf8, 0x0, 0x0,
|
||||
0x2e, 0x2e, 0x0, 0x0, 0x3, 0x8b, 0x80, 0x0,
|
||||
0x0, 0x3e, 0xe0, 0x0, 0x0, 0x3, 0xf8, 0x0,
|
||||
|
||||
/* U+E770 "" */
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x80,
|
||||
0x0, 0x0, 0x3, 0xff, 0x0, 0x0, 0x0, 0x7c,
|
||||
0xbd, 0x0, 0x0, 0xf, 0x42, 0xff, 0xdf, 0x3,
|
||||
0xe0, 0x7, 0xff, 0xfd, 0xbc, 0x0, 0x0, 0xff,
|
||||
0xff, 0x0, 0x0, 0xf, 0xf7, 0xd0, 0x0, 0x0,
|
||||
0xff, 0x8, 0xb, 0x40, 0xf, 0xf0, 0x1, 0xfe,
|
||||
0x0, 0xff, 0x0, 0x3f, 0xfc, 0xf, 0xfc, 0xf,
|
||||
0xff, 0xf0, 0xff, 0xf6, 0xff, 0xff, 0xdf, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xf0,
|
||||
|
||||
/* U+E89C "" */
|
||||
0x7f, 0xff, 0xf4, 0x0, 0xff, 0xff, 0xfe, 0x0,
|
||||
0xf0, 0x0, 0x3f, 0x80, 0xf0, 0x0, 0x3f, 0xe0,
|
||||
0xf0, 0x0, 0x3f, 0xf8, 0xf0, 0x0, 0x3f, 0xfd,
|
||||
0xf0, 0x0, 0x3f, 0xff, 0xf0, 0x0, 0x0, 0xf,
|
||||
0xf0, 0x3, 0xc0, 0xf, 0xf0, 0x3, 0xc0, 0xf,
|
||||
0xf0, 0x3, 0xc0, 0xf, 0xf0, 0xff, 0xff, 0xf,
|
||||
0xf0, 0xff, 0xff, 0xf, 0xf0, 0x3, 0xc0, 0xf,
|
||||
0xf0, 0x3, 0xc0, 0xf, 0xf0, 0x3, 0xc0, 0xf,
|
||||
0xf0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0xf,
|
||||
0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfd,
|
||||
|
||||
/* U+E8AF "" */
|
||||
0x7f, 0xff, 0xff, 0xf4, 0x0, 0xff, 0xff, 0xff,
|
||||
0xfc, 0x0, 0xf0, 0x0, 0x0, 0x3c, 0x0, 0xf0,
|
||||
0x0, 0x0, 0x3c, 0x0, 0xf0, 0x0, 0x0, 0x3c,
|
||||
0x3d, 0xf0, 0x0, 0x0, 0x3c, 0x3f, 0xf0, 0x0,
|
||||
0x0, 0x3c, 0x3f, 0xf0, 0x0, 0x0, 0x3c, 0x3f,
|
||||
0xf0, 0x0, 0x0, 0x3c, 0x3f, 0xf7, 0xff, 0xff,
|
||||
0xfc, 0x3f, 0xff, 0xff, 0xff, 0xf4, 0x3f, 0xfd,
|
||||
0x0, 0x0, 0x0, 0x3f, 0xf4, 0x0, 0x0, 0x0,
|
||||
0xbf, 0x50, 0xff, 0xff, 0xff, 0xff, 0x0, 0xff,
|
||||
0xff, 0xff, 0xff, 0x0, 0x7f, 0xff, 0xff, 0xff,
|
||||
0x0, 0x0, 0x0, 0x0, 0xbf, 0x0, 0x0, 0x0,
|
||||
0x0, 0x2f, 0x0, 0x0, 0x0, 0x0, 0x5,
|
||||
|
||||
/* U+E8B8 "" */
|
||||
0x0, 0x2, 0xff, 0x0, 0x0, 0x0, 0x3, 0xff,
|
||||
0x80, 0x0, 0x0, 0x7, 0x83, 0xc0, 0x0, 0xb,
|
||||
0x9f, 0x83, 0xd6, 0xd0, 0x2f, 0xff, 0x43, 0xff,
|
||||
0xf0, 0x3d, 0xb8, 0x0, 0x7d, 0xb8, 0xb8, 0x0,
|
||||
0x14, 0x0, 0x3c, 0xbd, 0x2, 0xff, 0x40, 0xbc,
|
||||
0x2f, 0x47, 0xff, 0xc3, 0xf4, 0xf, 0x4b, 0xff,
|
||||
0xd3, 0xd0, 0xf, 0x4b, 0xff, 0xd3, 0xd0, 0x2f,
|
||||
0x47, 0xff, 0xc3, 0xf4, 0xbd, 0x2, 0xff, 0x40,
|
||||
0xbc, 0xb8, 0x0, 0x14, 0x0, 0x3c, 0x3d, 0xb8,
|
||||
0x0, 0x7d, 0xb8, 0x2f, 0xff, 0x43, 0xff, 0xf0,
|
||||
0xb, 0x9f, 0x83, 0xd6, 0xd0, 0x0, 0x7, 0x83,
|
||||
0xc0, 0x0, 0x0, 0x3, 0xff, 0x80, 0x0, 0x0,
|
||||
0x2, 0xff, 0x0, 0x0,
|
||||
|
||||
/* U+E8FD "" */
|
||||
0x0, 0x6, 0xff, 0x90, 0x0, 0x0, 0x7f, 0xff,
|
||||
0xfd, 0x0, 0x2, 0xfd, 0x0, 0x7f, 0x80, 0xb,
|
||||
0xd0, 0x0, 0x7, 0xe0, 0x1f, 0x0, 0xbe, 0x0,
|
||||
0xf4, 0x3d, 0x3, 0xff, 0xc0, 0x7c, 0x7c, 0x3,
|
||||
0x42, 0xd0, 0x3d, 0xb4, 0x0, 0x1, 0xd0, 0x1e,
|
||||
0xf0, 0x0, 0x3, 0xc0, 0xf, 0xf0, 0x0, 0xf,
|
||||
0x0, 0xf, 0xf0, 0x0, 0x2d, 0x0, 0xf, 0xf0,
|
||||
0x0, 0x3c, 0x0, 0xf, 0xb4, 0x0, 0x0, 0x0,
|
||||
0x1e, 0x7c, 0x0, 0x14, 0x0, 0x3d, 0x3d, 0x0,
|
||||
0x3c, 0x0, 0x7c, 0x1f, 0x0, 0x3c, 0x0, 0xf4,
|
||||
0xb, 0xd0, 0x0, 0x7, 0xe0, 0x2, 0xfd, 0x0,
|
||||
0x7f, 0x80, 0x0, 0x7f, 0xff, 0xfd, 0x0, 0x0,
|
||||
0x6, 0xff, 0x90, 0x0,
|
||||
|
||||
/* U+E90F "" */
|
||||
0x0, 0x6f, 0xf4, 0x0, 0x2, 0xff, 0xff, 0x40,
|
||||
0xf, 0xd0, 0x1b, 0xd0, 0x2f, 0x0, 0x2, 0xf0,
|
||||
0x3c, 0x0, 0x0, 0xb8, 0x78, 0x0, 0x0, 0x3c,
|
||||
0xb4, 0x0, 0x0, 0x3c, 0xb4, 0x0, 0x0, 0x3c,
|
||||
0xb4, 0x0, 0x0, 0x3c, 0x78, 0x0, 0x0, 0x3c,
|
||||
0x3c, 0x0, 0x0, 0xb8, 0x2f, 0x0, 0x2, 0xf0,
|
||||
0xb, 0xff, 0xff, 0xd0, 0x2, 0xff, 0xff, 0x40,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, 0x0,
|
||||
0x0, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0xf, 0xe0, 0x0, 0x0, 0x7, 0xc0, 0x0,
|
||||
|
||||
/* U+E92E "" */
|
||||
0x0, 0x3f, 0xfc, 0x0, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0x3c, 0x0, 0x0, 0x3c,
|
||||
0x3c, 0x0, 0x0, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c,
|
||||
0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c,
|
||||
0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c,
|
||||
0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c,
|
||||
0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c,
|
||||
0x3c, 0x0, 0x0, 0x3c, 0x3c, 0x0, 0x0, 0x3c,
|
||||
0x3f, 0xff, 0xff, 0xfc, 0x1f, 0xff, 0xff, 0xf4,
|
||||
|
||||
/* U+E9B9 "" */
|
||||
0x7d, 0x7, 0xff, 0xff, 0xfd, 0xff, 0xf, 0xff,
|
||||
0xff, 0xff, 0xff, 0xf, 0xff, 0xff, 0xff, 0x7d,
|
||||
0x7, 0xff, 0xff, 0xfd, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7d, 0x7,
|
||||
0xff, 0xff, 0xfd, 0xff, 0xf, 0xff, 0xff, 0xff,
|
||||
0xff, 0xf, 0xff, 0xff, 0xff, 0x7d, 0x7, 0xff,
|
||||
0xff, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x7d, 0x7, 0xff, 0xff,
|
||||
0xfd, 0xff, 0xf, 0xff, 0xff, 0xff, 0xff, 0xf,
|
||||
0xff, 0xff, 0xff, 0x7d, 0x7, 0xff, 0xff, 0xfd,
|
||||
|
||||
/* U+E9F4 "" */
|
||||
0x0, 0x0, 0xb, 0xe0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x2f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x7c,
|
||||
0x0, 0x0, 0x0, 0x0, 0x3c, 0x7c, 0x0, 0x0,
|
||||
0x0, 0x0, 0x2f, 0xf8, 0x0, 0x0, 0x0, 0x0,
|
||||
0xb, 0xe0, 0x0, 0x0, 0x5, 0x0, 0x3, 0x80,
|
||||
0x0, 0x50, 0x3f, 0xc0, 0x3, 0x80, 0x3, 0xfc,
|
||||
0xbf, 0xe0, 0xb, 0xd0, 0xb, 0xfe, 0xf0, 0xf0,
|
||||
0x3f, 0xfc, 0xf, 0xf, 0xfa, 0xfe, 0xf9, 0x7f,
|
||||
0xbf, 0xaf, 0x7f, 0xeb, 0xf0, 0xf, 0xeb, 0xfd,
|
||||
0x1a, 0x41, 0xe0, 0xb, 0x41, 0xa4, 0x0, 0x1,
|
||||
0xe0, 0xb, 0x40, 0x0, 0x0, 0x0, 0xf4, 0x1f,
|
||||
0x0, 0x0, 0x0, 0x0, 0xbf, 0xfe, 0x0, 0x0,
|
||||
0x0, 0x0, 0xfb, 0xef, 0x0, 0x0, 0x0, 0xbf,
|
||||
0xc0, 0x3, 0xfe, 0x0, 0x2, 0xff, 0x80, 0x2,
|
||||
0xff, 0x80, 0x3, 0xc3, 0xc0, 0x3, 0xc3, 0xc0,
|
||||
0x3, 0xc3, 0xc0, 0x3, 0xc3, 0xc0, 0x2, 0xff,
|
||||
0x80, 0x2, 0xff, 0x80, 0x0, 0xbe, 0x0, 0x0,
|
||||
0xbe, 0x0,
|
||||
|
||||
/* U+E9F7 "" */
|
||||
0x7f, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
|
||||
0xff, 0xf0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0,
|
||||
0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0,
|
||||
0xff, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0,
|
||||
0x0, 0xff, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0,
|
||||
0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xf, 0xf0,
|
||||
0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xf,
|
||||
0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff,
|
||||
0xfd,
|
||||
|
||||
/* U+EA07 "" */
|
||||
0x0, 0x6, 0xff, 0x90, 0x0, 0x0, 0x7f, 0xff,
|
||||
0xfd, 0x0, 0x2, 0xff, 0xef, 0xff, 0x80, 0xb,
|
||||
0xd7, 0xc7, 0xcb, 0xe0, 0x1f, 0xb, 0x43, 0xd1,
|
||||
0xf4, 0x3d, 0xf, 0x2, 0xe0, 0xbc, 0x7f, 0xff,
|
||||
0xff, 0xff, 0xfd, 0xbf, 0xff, 0xff, 0xff, 0xfe,
|
||||
0xf0, 0x2d, 0x0, 0xf0, 0xf, 0xf0, 0x2d, 0x0,
|
||||
0xb4, 0xf, 0xf0, 0x2d, 0x0, 0xb4, 0xf, 0xf0,
|
||||
0x2d, 0x0, 0xf0, 0xf, 0xbf, 0xff, 0xff, 0xff,
|
||||
0xfe, 0x7f, 0xff, 0xff, 0xff, 0xfd, 0x3d, 0xf,
|
||||
0x2, 0xe0, 0xbc, 0x1f, 0xb, 0x43, 0xd1, 0xf4,
|
||||
0xb, 0xd7, 0xc7, 0xcb, 0xe0, 0x2, 0xff, 0xef,
|
||||
0xff, 0x80, 0x0, 0x7f, 0xff, 0xfd, 0x0, 0x0,
|
||||
0x6, 0xff, 0x90, 0x0,
|
||||
|
||||
/* U+EAD6 "" */
|
||||
0x7f, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
|
||||
0xff, 0xf0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0,
|
||||
0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0xff, 0x0,
|
||||
0x0, 0x0, 0xf, 0xf3, 0xf3, 0xf3, 0xc, 0xff,
|
||||
0x32, 0x74, 0x35, 0xcf, 0xf3, 0x27, 0x82, 0xa8,
|
||||
0xff, 0x32, 0x78, 0x1f, 0x4f, 0xf3, 0x27, 0x40,
|
||||
0xf0, 0xff, 0x3f, 0x3f, 0xa, 0xf, 0xf0, 0x0,
|
||||
0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xf, 0xf0,
|
||||
0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xf,
|
||||
0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff,
|
||||
0xfd,
|
||||
|
||||
/* U+EB8E "" */
|
||||
0x7f, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0,
|
||||
0xf, 0xf0, 0x20, 0x0, 0x0, 0xf, 0xf0, 0x7c,
|
||||
0x0, 0x0, 0xf, 0xf0, 0x3f, 0x0, 0x0, 0xf,
|
||||
0xf0, 0xf, 0xc0, 0x0, 0xf, 0xf0, 0xf, 0xc0,
|
||||
0x0, 0xf, 0xf0, 0x3f, 0x0, 0x0, 0xf, 0xf0,
|
||||
0x7c, 0xf, 0xff, 0xf, 0xf0, 0x20, 0xf, 0xff,
|
||||
0xf, 0xf0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xfd,
|
||||
|
||||
/* U+EB97 "" */
|
||||
0x7f, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0xf, 0xf0,
|
||||
0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x34,
|
||||
0xf, 0xf0, 0xaa, 0xaa, 0x3e, 0xf, 0xf0, 0xaa,
|
||||
0xaa, 0x3e, 0xf, 0xf0, 0x0, 0x0, 0x34, 0xf,
|
||||
0xf0, 0x1c, 0x0, 0x0, 0xf, 0xf0, 0xbc, 0xaa,
|
||||
0xaa, 0xf, 0xf0, 0xbc, 0xaa, 0xaa, 0xf, 0xf0,
|
||||
0x1c, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0,
|
||||
0xf, 0xf0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xfd,
|
||||
0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, 0xf, 0xff,
|
||||
0xf0, 0x0,
|
||||
|
||||
/* U+EBCC "" */
|
||||
0x3, 0xc0, 0x0, 0x3c, 0x0, 0x3c, 0x0, 0x3,
|
||||
0xc0, 0x7f, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff,
|
||||
0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0xff, 0x0,
|
||||
0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0,
|
||||
0xff, 0x0, 0x0, 0x0, 0xf, 0xf0, 0xf0, 0xf0,
|
||||
0xf0, 0xff, 0xf, 0xf, 0xf, 0xf, 0xf0, 0x0,
|
||||
0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xf, 0xf0,
|
||||
0xf0, 0xf0, 0xf0, 0xff, 0xf, 0xf, 0xf, 0xf,
|
||||
0xf0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0,
|
||||
0xf, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff,
|
||||
0xff, 0xfd,
|
||||
|
||||
/* U+EC1C "" */
|
||||
0x0, 0x0, 0x7, 0x0, 0x0, 0x0, 0x2f, 0x0,
|
||||
0x0, 0x0, 0xbe, 0x0, 0x0, 0x2, 0xfc, 0x0,
|
||||
0x0, 0xb, 0xf8, 0x0, 0x0, 0x2f, 0xf0, 0x0,
|
||||
0x0, 0xbf, 0xe0, 0x0, 0x3, 0xf7, 0xe4, 0x0,
|
||||
0xf, 0xcf, 0xff, 0xfd, 0x3f, 0x1, 0x6b, 0xfe,
|
||||
0xbf, 0xe9, 0x40, 0xfc, 0x7f, 0xff, 0xf3, 0xf0,
|
||||
0x0, 0x1b, 0xdf, 0xc0, 0x0, 0xb, 0xfe, 0x0,
|
||||
0x0, 0xf, 0xf8, 0x0, 0x0, 0x2f, 0xe0, 0x0,
|
||||
0x0, 0x3f, 0x80, 0x0, 0x0, 0xbe, 0x0, 0x0,
|
||||
0x0, 0xf8, 0x0, 0x0, 0x1, 0xe0, 0x0, 0x0,
|
||||
|
||||
/* U+EF40 "" */
|
||||
0x7d, 0x7, 0xd0, 0x7d, 0xf, 0xf0, 0xff, 0xf,
|
||||
0xf0, 0xff, 0xf, 0xf0, 0xff, 0x7, 0xd0, 0x7d,
|
||||
0x7, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x7d, 0x7, 0xd0, 0x0, 0xf,
|
||||
0xf0, 0xff, 0x0, 0xb8, 0xff, 0xf, 0xf0, 0x2f,
|
||||
0xe7, 0xd0, 0x7d, 0xb, 0xff, 0x0, 0x0, 0x2,
|
||||
0xff, 0xe0, 0x0, 0x0, 0xb8, 0xf8, 0x7d, 0x0,
|
||||
0x2e, 0x2e, 0xf, 0xf0, 0x3, 0x8b, 0x80, 0xff,
|
||||
0x0, 0x3e, 0xe0, 0x7, 0xd0, 0x3, 0xf8, 0x0,
|
||||
|
||||
/* U+EF4A "" */
|
||||
0x0, 0x6, 0xff, 0x90, 0x0, 0x0, 0x7f, 0xff,
|
||||
0xfd, 0x0, 0x2, 0xfd, 0x0, 0x7f, 0x80, 0xb,
|
||||
0xd0, 0x0, 0x7, 0xe0, 0x1f, 0x0, 0x0, 0x0,
|
||||
0xf4, 0x3d, 0x0, 0x0, 0x0, 0x7c, 0x7c, 0x0,
|
||||
0x0, 0x0, 0x3d, 0xb4, 0x0, 0x0, 0x0, 0x1e,
|
||||
0xf0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0,
|
||||
0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0xf, 0xf0,
|
||||
0x0, 0x0, 0x0, 0xf, 0xb4, 0x0, 0x0, 0x0,
|
||||
0x1e, 0x7c, 0x0, 0x0, 0x0, 0x3d, 0x3d, 0x0,
|
||||
0x0, 0x0, 0x7c, 0x1f, 0x0, 0x0, 0x0, 0xf4,
|
||||
0xb, 0xd0, 0x0, 0x7, 0xe0, 0x2, 0xfd, 0x0,
|
||||
0x7f, 0x80, 0x0, 0x7f, 0xff, 0xfd, 0x0, 0x0,
|
||||
0x6, 0xff, 0x90, 0x0,
|
||||
|
||||
/* U+EF7A "" */
|
||||
0x1, 0xbf, 0x90, 0x0, 0x0, 0xbf, 0xff, 0x80,
|
||||
0x0, 0x2f, 0x40, 0x7e, 0x0, 0x7, 0xc0, 0x0,
|
||||
0xf4, 0x0, 0xb4, 0x0, 0x7, 0x80, 0xf, 0x0,
|
||||
0x0, 0x3c, 0x0, 0xf0, 0x0, 0x3, 0xc0, 0xf,
|
||||
0x0, 0x0, 0x3c, 0x0, 0xb4, 0x0, 0x7, 0x80,
|
||||
0x7, 0xc0, 0x0, 0xf0, 0x0, 0x2f, 0x40, 0x7f,
|
||||
0x0, 0x0, 0xbf, 0xff, 0xfc, 0x0, 0x1, 0xbf,
|
||||
0x83, 0xf0, 0x0, 0x0, 0x0, 0xf, 0xc0, 0x0,
|
||||
0x0, 0x0, 0x3f, 0x0, 0x0, 0x0, 0x0, 0xfc,
|
||||
0x0, 0x0, 0x0, 0x3, 0xe0, 0x0, 0x0, 0x0,
|
||||
0x8,
|
||||
|
||||
/* U+EFE6 "" */
|
||||
0x0, 0xbe, 0x0, 0x3f, 0xc0, 0x3f, 0xfc, 0x3,
|
||||
0xfc, 0xb, 0x82, 0xe0, 0xbf, 0xe0, 0xf0, 0xf,
|
||||
0xf, 0xff, 0xf, 0x0, 0xf0, 0xff, 0xf0, 0xf0,
|
||||
0xf, 0xf, 0xff, 0xf, 0x0, 0xf0, 0xff, 0xf0,
|
||||
0xf0, 0xf, 0x0, 0xf0, 0xf, 0x0, 0xf0, 0xf,
|
||||
0x0, 0xf0, 0xf, 0x0, 0xf0, 0xf, 0x0, 0xf0,
|
||||
0xf, 0xf, 0xff, 0xf, 0x0, 0xf0, 0xff, 0xf0,
|
||||
0xf0, 0xf, 0xf, 0xff, 0xf, 0x0, 0xf0, 0xff,
|
||||
0xf0, 0xf0, 0xf, 0xb, 0xfe, 0xb, 0x82, 0xe0,
|
||||
0x3f, 0xc0, 0x3f, 0xfc, 0x3, 0xfc, 0x0, 0xbe,
|
||||
0x0,
|
||||
|
||||
/* U+F028 "" */
|
||||
0x7f, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0,
|
||||
0xff, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0xf0,
|
||||
0xf0, 0xf0, 0xf0, 0xff, 0xf, 0xf, 0xf, 0xf,
|
||||
0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x5,
|
||||
0x5, 0x5, 0x5, 0xf, 0xf0, 0xf0, 0xf0, 0xf0,
|
||||
0xf0, 0xff, 0x5, 0x5, 0x5, 0x5, 0xf, 0xf0,
|
||||
0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x3f, 0xff,
|
||||
0xc0, 0xf, 0xf0, 0x3, 0xff, 0xfc, 0x0, 0xff,
|
||||
0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xfd,
|
||||
|
||||
/* U+F090 "" */
|
||||
0x0, 0x3, 0xc0, 0x0, 0x0, 0x3, 0xc0, 0x0,
|
||||
0x0, 0x3, 0xc0, 0x0, 0x0, 0x3, 0xc0, 0x0,
|
||||
0x0, 0x3, 0xc0, 0x0, 0x0, 0x3, 0xc0, 0x0,
|
||||
0x1, 0xd3, 0xc7, 0x40, 0x1, 0xf7, 0xdf, 0x40,
|
||||
0x0, 0xbf, 0xfd, 0x0, 0x0, 0x2f, 0xf4, 0x0,
|
||||
0x0, 0xb, 0xd0, 0x0, 0xf0, 0x1, 0x40, 0xf,
|
||||
0xf0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0xf,
|
||||
0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfd,
|
||||
|
||||
/* U+F15C "" */
|
||||
0x0, 0x0, 0xbf, 0xe0, 0x0, 0x0, 0x0, 0x7f,
|
||||
0xff, 0xd0, 0x0, 0x0, 0x1f, 0x80, 0x2f, 0x40,
|
||||
0x0, 0x3, 0xd0, 0x0, 0x7c, 0x0, 0x0, 0xb8,
|
||||
0x0, 0x2, 0xe0, 0x0, 0x2f, 0x0, 0x0, 0xf,
|
||||
0x0, 0x1f, 0xf0, 0x0, 0x0, 0xf0, 0x3, 0xe0,
|
||||
0x0, 0x0, 0xf, 0xe0, 0xb8, 0x0, 0x0, 0x0,
|
||||
0xff, 0xcf, 0x0, 0x0, 0x0, 0x0, 0x7e, 0xf0,
|
||||
0x0, 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, 0x0,
|
||||
0x0, 0xf, 0xb8, 0x0, 0x0, 0x0, 0x1, 0xf3,
|
||||
0xe0, 0x0, 0x0, 0x0, 0x7e, 0x1f, 0xff, 0xff,
|
||||
0xff, 0xff, 0xc0, 0x2f, 0xff, 0xff, 0xff, 0xe0,
|
||||
|
||||
/* U+F720 "" */
|
||||
0x0, 0x1, 0xf4, 0x0, 0x0, 0x1, 0xff, 0xf4,
|
||||
0x0, 0x0, 0xbf, 0x5f, 0xe0, 0x0, 0xbf, 0x40,
|
||||
0x1f, 0xe0, 0x3f, 0x80, 0x0, 0x2f, 0xcf, 0xe0,
|
||||
0x0, 0x0, 0xbf, 0xff, 0xc0, 0x0, 0x3f, 0xff,
|
||||
0x7f, 0x80, 0x2f, 0xdf, 0xf0, 0xbf, 0x5f, 0xe0,
|
||||
0xff, 0x0, 0xbf, 0xe0, 0xf, 0xf0, 0x1, 0xf4,
|
||||
0x0, 0xff, 0x0, 0xf, 0x0, 0xf, 0xf0, 0x0,
|
||||
0xf0, 0x0, 0xff, 0x0, 0xf, 0x0, 0xf, 0xfc,
|
||||
0x0, 0xf0, 0x3, 0xf7, 0xf8, 0xf, 0x2, 0xfd,
|
||||
0xb, 0xf4, 0xf1, 0xfe, 0x0, 0xb, 0xff, 0xfe,
|
||||
0x0, 0x0, 0x1f, 0xff, 0x40, 0x0, 0x0, 0x1f,
|
||||
0x40, 0x0,
|
||||
|
||||
/* U+F8C7 "" */
|
||||
0x0, 0x0, 0x3c, 0x0, 0x0, 0x0, 0x0, 0x3c,
|
||||
0x0, 0x0, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x5,
|
||||
0x0, 0x3c, 0x0, 0x50, 0x1f, 0x0, 0x3c, 0x0,
|
||||
0xf4, 0x3d, 0x0, 0x3c, 0x0, 0x7c, 0x7c, 0x0,
|
||||
0x3c, 0x0, 0x3d, 0xb4, 0x0, 0x3c, 0x0, 0x1e,
|
||||
0xf0, 0x0, 0x3c, 0x0, 0xf, 0xf0, 0x0, 0x3c,
|
||||
0x0, 0xf, 0xf0, 0x0, 0x3c, 0x0, 0xf, 0xf0,
|
||||
0x0, 0x0, 0x0, 0xf, 0xb4, 0x0, 0x0, 0x0,
|
||||
0x1e, 0x7c, 0x0, 0x0, 0x0, 0x3d, 0x3d, 0x0,
|
||||
0x0, 0x0, 0x7c, 0x1f, 0x0, 0x0, 0x0, 0xf4,
|
||||
0xb, 0xd0, 0x0, 0x7, 0xe0, 0x2, 0xfd, 0x0,
|
||||
0x7f, 0x80, 0x0, 0x7f, 0xff, 0xfd, 0x0, 0x0,
|
||||
0x6, 0xff, 0x90, 0x0,
|
||||
|
||||
/* U+FFF75 "" */
|
||||
0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff,
|
||||
0xff, 0xfe, 0xf0, 0x0, 0x0, 0x0, 0xf, 0xf0,
|
||||
0xd0, 0x28, 0x7, 0xf, 0xf0, 0x0, 0x0, 0x0,
|
||||
0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0x0, 0x2, 0xff, 0x80, 0xf,
|
||||
0x0, 0x7f, 0xf4, 0x28, 0xf, 0xb, 0xfe, 0x0,
|
||||
0x0, 0x2f, 0x7f, 0x90, 0x28, 0x7, 0xfd, 0xf8,
|
||||
0x34, 0x1, 0xbf, 0xe0, 0xf0, 0x10, 0x6f, 0xf9,
|
||||
0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0xf,
|
||||
0xf0, 0xd0, 0x28, 0x7, 0xf, 0xf0, 0x0, 0x0,
|
||||
0x0, 0xf, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x2f,
|
||||
0xff, 0xff, 0xff, 0xff
|
||||
};
|
||||
|
||||
|
||||
/*---------------------
|
||||
* GLYPH DESCRIPTION
|
||||
*--------------------*/
|
||||
|
||||
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
|
||||
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
|
||||
{.bitmap_index = 0, .adv_w = 384, .box_w = 14, .box_h = 14, .ofs_x = 5, .ofs_y = 5},
|
||||
{.bitmap_index = 49, .adv_w = 384, .box_w = 20, .box_h = 16, .ofs_x = 2, .ofs_y = 4},
|
||||
{.bitmap_index = 129, .adv_w = 384, .box_w = 13, .box_h = 20, .ofs_x = 5, .ofs_y = 2},
|
||||
{.bitmap_index = 194, .adv_w = 384, .box_w = 14, .box_h = 20, .ofs_x = 5, .ofs_y = 2},
|
||||
{.bitmap_index = 264, .adv_w = 384, .box_w = 22, .box_h = 22, .ofs_x = 1, .ofs_y = 1},
|
||||
{.bitmap_index = 385, .adv_w = 384, .box_w = 20, .box_h = 16, .ofs_x = 2, .ofs_y = 4},
|
||||
{.bitmap_index = 465, .adv_w = 384, .box_w = 20, .box_h = 20, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 565, .adv_w = 384, .box_w = 12, .box_h = 7, .ofs_x = 6, .ofs_y = 9},
|
||||
{.bitmap_index = 586, .adv_w = 384, .box_w = 20, .box_h = 16, .ofs_x = 2, .ofs_y = 4},
|
||||
{.bitmap_index = 666, .adv_w = 384, .box_w = 20, .box_h = 20, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 766, .adv_w = 384, .box_w = 18, .box_h = 18, .ofs_x = 3, .ofs_y = 3},
|
||||
{.bitmap_index = 847, .adv_w = 384, .box_w = 12, .box_h = 18, .ofs_x = 6, .ofs_y = 3},
|
||||
{.bitmap_index = 901, .adv_w = 384, .box_w = 16, .box_h = 18, .ofs_x = 4, .ofs_y = 3},
|
||||
{.bitmap_index = 973, .adv_w = 384, .box_w = 16, .box_h = 16, .ofs_x = 4, .ofs_y = 4},
|
||||
{.bitmap_index = 1037, .adv_w = 384, .box_w = 14, .box_h = 14, .ofs_x = 5, .ofs_y = 5},
|
||||
{.bitmap_index = 1086, .adv_w = 384, .box_w = 18, .box_h = 12, .ofs_x = 3, .ofs_y = 6},
|
||||
{.bitmap_index = 1140, .adv_w = 384, .box_w = 4, .box_h = 16, .ofs_x = 10, .ofs_y = 4},
|
||||
{.bitmap_index = 1156, .adv_w = 384, .box_w = 16, .box_h = 16, .ofs_x = 4, .ofs_y = 4},
|
||||
{.bitmap_index = 1220, .adv_w = 384, .box_w = 24, .box_h = 17, .ofs_x = 0, .ofs_y = 3},
|
||||
{.bitmap_index = 1322, .adv_w = 384, .box_w = 16, .box_h = 12, .ofs_x = 4, .ofs_y = 6},
|
||||
{.bitmap_index = 1370, .adv_w = 384, .box_w = 18, .box_h = 16, .ofs_x = 4, .ofs_y = 4},
|
||||
{.bitmap_index = 1442, .adv_w = 384, .box_w = 18, .box_h = 17, .ofs_x = 3, .ofs_y = 4},
|
||||
{.bitmap_index = 1519, .adv_w = 384, .box_w = 16, .box_h = 20, .ofs_x = 4, .ofs_y = 2},
|
||||
{.bitmap_index = 1599, .adv_w = 384, .box_w = 20, .box_h = 19, .ofs_x = 2, .ofs_y = 3},
|
||||
{.bitmap_index = 1694, .adv_w = 384, .box_w = 20, .box_h = 20, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 1794, .adv_w = 384, .box_w = 20, .box_h = 20, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 1894, .adv_w = 384, .box_w = 16, .box_h = 20, .ofs_x = 4, .ofs_y = 2},
|
||||
{.bitmap_index = 1974, .adv_w = 384, .box_w = 16, .box_h = 18, .ofs_x = 4, .ofs_y = 3},
|
||||
{.bitmap_index = 2046, .adv_w = 384, .box_w = 20, .box_h = 16, .ofs_x = 2, .ofs_y = 4},
|
||||
{.bitmap_index = 2126, .adv_w = 384, .box_w = 24, .box_h = 23, .ofs_x = 0, .ofs_y = 1},
|
||||
{.bitmap_index = 2264, .adv_w = 384, .box_w = 18, .box_h = 18, .ofs_x = 3, .ofs_y = 3},
|
||||
{.bitmap_index = 2345, .adv_w = 384, .box_w = 20, .box_h = 20, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 2445, .adv_w = 384, .box_w = 18, .box_h = 18, .ofs_x = 3, .ofs_y = 3},
|
||||
{.bitmap_index = 2526, .adv_w = 384, .box_w = 20, .box_h = 16, .ofs_x = 2, .ofs_y = 4},
|
||||
{.bitmap_index = 2606, .adv_w = 384, .box_w = 20, .box_h = 18, .ofs_x = 2, .ofs_y = 3},
|
||||
{.bitmap_index = 2696, .adv_w = 384, .box_w = 18, .box_h = 20, .ofs_x = 3, .ofs_y = 2},
|
||||
{.bitmap_index = 2786, .adv_w = 384, .box_w = 16, .box_h = 20, .ofs_x = 4, .ofs_y = 2},
|
||||
{.bitmap_index = 2866, .adv_w = 384, .box_w = 18, .box_h = 16, .ofs_x = 4, .ofs_y = 4},
|
||||
{.bitmap_index = 2938, .adv_w = 384, .box_w = 20, .box_h = 20, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 3038, .adv_w = 384, .box_w = 18, .box_h = 18, .ofs_x = 3, .ofs_y = 3},
|
||||
{.bitmap_index = 3119, .adv_w = 384, .box_w = 18, .box_h = 18, .ofs_x = 3, .ofs_y = 3},
|
||||
{.bitmap_index = 3200, .adv_w = 384, .box_w = 22, .box_h = 16, .ofs_x = 1, .ofs_y = 4},
|
||||
{.bitmap_index = 3288, .adv_w = 384, .box_w = 16, .box_h = 16, .ofs_x = 4, .ofs_y = 4},
|
||||
{.bitmap_index = 3352, .adv_w = 384, .box_w = 22, .box_h = 16, .ofs_x = 1, .ofs_y = 4},
|
||||
{.bitmap_index = 3440, .adv_w = 384, .box_w = 18, .box_h = 20, .ofs_x = 3, .ofs_y = 2},
|
||||
{.bitmap_index = 3530, .adv_w = 384, .box_w = 20, .box_h = 20, .ofs_x = 2, .ofs_y = 2},
|
||||
{.bitmap_index = 3630, .adv_w = 384, .box_w = 20, .box_h = 20, .ofs_x = 2, .ofs_y = 2}
|
||||
};
|
||||
|
||||
/*---------------------
|
||||
* CHARACTER MAPPING
|
||||
*--------------------*/
|
||||
|
||||
static const uint16_t unicode_list_0[] = {
|
||||
0x0, 0x14, 0x62, 0x9b, 0x148, 0x182, 0x1ca, 0x1d1,
|
||||
0x1e1, 0x26a, 0x2af, 0x2c0, 0x418, 0x47e, 0x488, 0x48d,
|
||||
0x48f, 0x490, 0x4f9, 0x523, 0x600, 0x62b, 0x757, 0x76a,
|
||||
0x773, 0x7b8, 0x7ca, 0x7e9, 0x874, 0x8af, 0x8b2, 0x8c2,
|
||||
0x991, 0xa49, 0xa52, 0xa87, 0xad7, 0xdfb, 0xe05, 0xe35,
|
||||
0xea1, 0xee3, 0xf4b, 0x1017, 0x15db, 0x1782
|
||||
};
|
||||
|
||||
/*Collect the unicode lists and glyph_id offsets*/
|
||||
static const lv_font_fmt_txt_cmap_t cmaps[] =
|
||||
{
|
||||
{
|
||||
.range_start = 57669, .range_length = 6019, .glyph_id_start = 1,
|
||||
.unicode_list = unicode_list_0, .glyph_id_ofs_list = NULL, .list_length = 46, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
|
||||
},
|
||||
{
|
||||
.range_start = 1048437, .range_length = 1, .glyph_id_start = 47,
|
||||
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*--------------------
|
||||
* ALL CUSTOM DATA
|
||||
*--------------------*/
|
||||
|
||||
#if LVGL_VERSION_MAJOR == 8
|
||||
/*Store all the custom data of the font*/
|
||||
static lv_font_fmt_txt_glyph_cache_t cache;
|
||||
#endif
|
||||
|
||||
#if LVGL_VERSION_MAJOR >= 8
|
||||
static const lv_font_fmt_txt_dsc_t font_dsc = {
|
||||
#else
|
||||
static lv_font_fmt_txt_dsc_t font_dsc = {
|
||||
#endif
|
||||
.glyph_bitmap = glyph_bitmap,
|
||||
.glyph_dsc = glyph_dsc,
|
||||
.cmaps = cmaps,
|
||||
.kern_dsc = NULL,
|
||||
.kern_scale = 0,
|
||||
.cmap_num = 2,
|
||||
.bpp = 2,
|
||||
.kern_classes = 0,
|
||||
.bitmap_format = 0,
|
||||
#if LVGL_VERSION_MAJOR == 8
|
||||
.cache = &cache
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*-----------------
|
||||
* PUBLIC FONT
|
||||
*----------------*/
|
||||
|
||||
/*Initialize a public general font descriptor*/
|
||||
#if LVGL_VERSION_MAJOR >= 8
|
||||
const lv_font_t material_symbols_shared_24 = {
|
||||
#else
|
||||
lv_font_t material_symbols_shared_24 = {
|
||||
#endif
|
||||
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
|
||||
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
|
||||
.line_height = 23, /*The maximum line height required by the font*/
|
||||
.base_line = -1, /*Baseline measured from the bottom of the line*/
|
||||
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
|
||||
.subpx = LV_FONT_SUBPX_NONE,
|
||||
#endif
|
||||
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
|
||||
.underline_position = 0,
|
||||
.underline_thickness = 0,
|
||||
#endif
|
||||
.dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
|
||||
#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9
|
||||
.fallback = NULL,
|
||||
#endif
|
||||
.user_data = NULL,
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif /*#if MATERIAL_SYMBOLS_SHARED_24*/
|
||||
|
||||