From d05526d013494132d6ac26b140b0a47b6627f7f6 Mon Sep 17 00:00:00 2001 From: clach04 Date: Sat, 18 Jan 2025 22:21:51 -0800 Subject: [PATCH 1/4] Implement initial theme editor support for any screen resolution via config #648 Adds OPTIONAL new environment variable; SIM_RESOLUTION which if set should be AAAxBBB where AAA is horizontal resolution and BBB is vertical resolution. Windows example: set SIM_RESOLUTION=320x240 Linux shell example: export SIM_RESOLUTION=320x240 Includes a sample clock that expects 320x240 resolution. --- library/display.py | 5 +++ res/themes/BigClock_320x240/background.png | Bin 0 -> 399 bytes res/themes/BigClock_320x240/preview.png | Bin 0 -> 13703 bytes res/themes/BigClock_320x240/theme.yaml | 46 +++++++++++++++++++++ theme-editor.py | 10 +++-- 5 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 res/themes/BigClock_320x240/background.png create mode 100644 res/themes/BigClock_320x240/preview.png create mode 100644 res/themes/BigClock_320x240/theme.yaml diff --git a/library/display.py b/library/display.py index 6aaacfff..c5e1c1b0 100644 --- a/library/display.py +++ b/library/display.py @@ -67,6 +67,11 @@ def __init__(self): elif config.CONFIG_DATA["display"]["REVISION"] == "D": self.lcd = LcdCommRevD(com_port=config.CONFIG_DATA['config']['COM_PORT'], update_queue=config.update_queue) + elif config.CONFIG_DATA["display"]["REVISION"].startswith("SIMU_"): + res_str = config.CONFIG_DATA["display"]["REVISION"][len("SIMU_"):] + display_width, display_height = map(int, res_str.split('x')) + self.lcd = LcdSimulated(display_width=display_height, # NOTE these seem to be reversed + display_height=display_width) elif config.CONFIG_DATA["display"]["REVISION"] == "SIMU": self.lcd = LcdSimulated(display_width=320, display_height=480) diff --git a/res/themes/BigClock_320x240/background.png b/res/themes/BigClock_320x240/background.png new file mode 100644 index 0000000000000000000000000000000000000000..8b8e62f443fb64ad4ae2c1adaace29e4098e6566 GIT binary patch literal 399 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoKX9-C$wJ+|*+7c3z$3Dlfk96hgc&QA+Lr-U zIeNM{hE&XXd(e;(sN~Rsul~8b{0o50Q9w)xG?X)M)L~$3Yb@h&0j-(%sVC-Q6wH-6h@K-Cc6%M!J!1xbwfC@BQ$8de1t` z#o}=G-ZS$&znU>bPDT_79v2=83JOVFOh^F=>dklX^FO$^;NKTnDsCt!78!9N{vWRC zCm9}^;ft?bSt+T-2b@|zB;co{^V008<27rrnrZBjTG!{u7gwu}TQtIqQ0*scbYeB` zTO@->6cmKAl`yml3ZzoqcW?DO*1c0W_EHK{#N(dZbRL7fCO9VZ-FPSO(>Ga{Fq&(;k!!CKH!ABnK?d=^OA0HSPfIt*9G}6Y6=VxaA-9L?tj0{E*?QL)8 z6&7M+VNvn>^6>BshJV`H+3DA>Hgv{~lm*65%4Z@bL^3rT_toe1*(F;}tZ1yZsI(Lo7FITsJ7q#>A%1LZEP+~u#KeH= zO(utfv90a5xM8yG{JOfU!YuERp`qwU#8>>fy1Jg;UeRzI;@ZMcxPQKH-X+rO$e7^9 zh>)RKE!9zylmC?23qk+-^XE@SoN?9D5OG;qohn^^D=XUUx05-Ag^hMwB459L<)GvL zC}d@2B_t$dZeG%7S7s|BBs7-7B#L_Q1+Hgd!F4o|w%y}ad7JDN`uOAog@{*5)Lkji z?;UJ~Mx#szn|4_loobctP&6^42QnV3C72j{F?#-wbaZs3%H^>fH|X35!M%$eUacz- z$&Y~r1-q4%AUtZcdibt)RKM zS~01WDemk{zTt#n(K0eJ=Il>b8w?WpJjutDULDQbY!AhhztHeKUn$O4XklXKvsldS z@9#77{AxOz$l#jHOQ)@hK?hc);Ri@MF-R1kHNfA`_-Q67?n>DxBL;U1k zX>su<9Gr#4MWj!Reap*f0utb{Jsz&i4hQcF^~}xP|84NoB}q;NPwo{K6s)zn(1R%` zD+?donw_6VFBjF--2jznSI%a=ve4<{1N!$)c-y|YHy9<0$AeXd9}_;v+uM7{sHC>` z5{y44S1gv>abM2T^7v@J@`Jx_?IP%vb??XWkdO~GujgBXY?cdu)F;s}F=ul{QMRK& zy%-Ee_74oO;uZk}0qt%wnHk|heRz2I6Y&$o6;u2T=x<(!T|^n=X$T~dPAim&hKqxv zT&s0%VF71RT~6+sUJtb4G#|Q?({)i11w4Wez>~kd!CRY~KL#r&3>iV4o0*%3TCO(Q z==}H*e`V+4@tDEoVs2{sSu`j(c)iI^@Zs)owloGkNsKJ?*DoY=H{XK3^#o1DllZAwZQ&LihVPEdHq9UT` zDT}PFt=SJ~DJbAjPzr4kjEsx`9{xqV1@L9xl*?=I_T4+mm(SSr+UeYG7ofa;h`RUJ zlAK0#x?PfAM0|zY1ke9?dsfI^c*Tz#JPjt^@b&J_)$HI4uW2^5a@lv}soB}<^K-KV zlk9(zCkxf@DBGd=+q|DaG0!¬~aXye7sgh34O6`Mgj%TwiYw$2B#vYg&N%EDnBk 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 Fe*ji4t<3-c literal 0 HcmV?d00001 diff --git a/res/themes/BigClock_320x240/theme.yaml b/res/themes/BigClock_320x240/theme.yaml new file mode 100644 index 00000000..f3c590c4 --- /dev/null +++ b/res/themes/BigClock_320x240/theme.yaml @@ -0,0 +1,46 @@ +--- +author: "@ChrisClark" + +display: + DISPLAY_ORIENTATION: landscape + DISPLAY_RGB_LED: 255, 0, 0 + +static_images: + BACKGROUND: + PATH: background.png + X: 0 + Y: 0 + WIDTH: 320 + HEIGHT: 240 + +STATS: + DATE: + INTERVAL: 1 + DAY: + TEXT: + # Centered + SHOW: True + X: 1 + Y: 10 + FONT: roboto/Roboto-Bold.ttf + FONT_SIZE: 60 + FONT_COLOR: 200, 200, 200 + BACKGROUND_COLOR: 0, 0, 0 + WIDTH: 320 + ANCHOR: mm + HOUR: + TEXT: + # Centered + SHOW: True + # https://babel.pocoo.org/en/latest/api/dates.html full, long, medium, or short, or a custom date/time pattern + #FORMAT: medium + #FORMAT: short + FORMAT: HH:mm + X: 1 + Y: 130 + FONT: roboto/Roboto-BoldItalic.ttf + FONT_SIZE: 60 + FONT_COLOR: 200, 200, 200 + BACKGROUND_COLOR: 50, 0, 0 + WIDTH: 320 + ANCHOR: mm diff --git a/theme-editor.py b/theme-editor.py index ba4548a0..2fd876c9 100755 --- a/theme-editor.py +++ b/theme-editor.py @@ -76,10 +76,14 @@ config.load_theme() # For theme editor, always use simulated LCD -if config.THEME_DATA["display"].get("DISPLAY_SIZE", '3.5"') == '5"': - config.CONFIG_DATA["display"]["REVISION"] = "SIMU5" +SIM_RESOLUTION = os.environ.get('SIM_RESOLUTION') +if SIM_RESOLUTION: + config.CONFIG_DATA["display"]["REVISION"] = "SIMU_" + SIM_RESOLUTION else: - config.CONFIG_DATA["display"]["REVISION"] = "SIMU" + if config.THEME_DATA["display"].get("DISPLAY_SIZE", '3.5"') == '5"': + config.CONFIG_DATA["display"]["REVISION"] = "SIMU5" + else: + config.CONFIG_DATA["display"]["REVISION"] = "SIMU" from library.display import display # Only import display after hardcoded config is set From 483b39b9a1acb0d393d1f38437ff66452975b717 Mon Sep 17 00:00:00 2001 From: clach04 Date: Wed, 22 Jan 2025 20:34:06 -0800 Subject: [PATCH 2/4] Alignment notes for theme editor sample --- res/themes/BigClock_320x240/theme.yaml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/res/themes/BigClock_320x240/theme.yaml b/res/themes/BigClock_320x240/theme.yaml index f3c590c4..6c01a63b 100644 --- a/res/themes/BigClock_320x240/theme.yaml +++ b/res/themes/BigClock_320x240/theme.yaml @@ -24,13 +24,21 @@ STATS: Y: 10 FONT: roboto/Roboto-Bold.ttf FONT_SIZE: 60 + #FONT_SIZE: 20 FONT_COLOR: 200, 200, 200 BACKGROUND_COLOR: 0, 0, 0 WIDTH: 320 ANCHOR: mm HOUR: TEXT: - # Centered + # In theme emulator, ALIGN appears to be ignored? ANCHOR seems to control this in Pillow + #ALIGN: left # left / center / right + #ALIGN: center + #ANCHOR: lt # does not work + #ANCHOR: lt # Check https://pillow.readthedocs.io/en/stable/handbook/text-anchors.html + ANCHOR: mm # works great as centered + #ANCHOR: la # left + #ANCHOR: ra # right SHOW: True # https://babel.pocoo.org/en/latest/api/dates.html full, long, medium, or short, or a custom date/time pattern #FORMAT: medium @@ -43,4 +51,3 @@ STATS: FONT_COLOR: 200, 200, 200 BACKGROUND_COLOR: 50, 0, 0 WIDTH: 320 - ANCHOR: mm From 18b9df34485a3377540ee538ec69d9894253233a Mon Sep 17 00:00:00 2001 From: clach04 Date: Tue, 28 Jan 2025 15:31:33 -0800 Subject: [PATCH 3/4] Added static_text example to BigClock_320x240 --- res/themes/BigClock_320x240/theme.yaml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/res/themes/BigClock_320x240/theme.yaml b/res/themes/BigClock_320x240/theme.yaml index 6c01a63b..6cbb47db 100644 --- a/res/themes/BigClock_320x240/theme.yaml +++ b/res/themes/BigClock_320x240/theme.yaml @@ -2,6 +2,9 @@ author: "@ChrisClark" display: + DISPLAY_SIZE: 2.8" + # DISPLAY_RESOLUTION - custom addition? + DISPLAY_RESOLUTION: 320, 240 DISPLAY_ORIENTATION: landscape DISPLAY_RGB_LED: 255, 0, 0 @@ -10,9 +13,27 @@ static_images: PATH: background.png X: 0 Y: 0 + # unclear what WIDTH, HEIGHT are used for. Crop, stretch, repeat, etc. - there are no other directives for this config type. If ommited, defaults to 0 (zero) WIDTH: 320 HEIGHT: 240 +static_text: + TEXT: + TEXT: Hello World! + SHOW: True + #ANCHOR: mm # works great as centered + #ANCHOR: la # left + ANCHOR: ra # right # does not seem to work, unless this is right of text box? once Width is set this sort of works + #X: 32 + #Y: 93 + X: 0 + Y: 93 + WIDTH: 320 + FONT: roboto/Roboto-BoldItalic.ttf + FONT_SIZE: 20 + FONT_COLOR: 0, 200, 200 + BACKGROUND_COLOR: 0, 128, 0 + STATS: DATE: INTERVAL: 1 From ac954c2a83fc10e425e4e54392e15870bb69332b Mon Sep 17 00:00:00 2001 From: clach04 Date: Tue, 28 Jan 2025 16:31:49 -0800 Subject: [PATCH 4/4] More doc notes --- res/themes/BigClock_320x240/theme.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/res/themes/BigClock_320x240/theme.yaml b/res/themes/BigClock_320x240/theme.yaml index 6cbb47db..a9bdcb9c 100644 --- a/res/themes/BigClock_320x240/theme.yaml +++ b/res/themes/BigClock_320x240/theme.yaml @@ -1,5 +1,6 @@ --- author: "@ChrisClark" +# Also see theme_example.yaml display: DISPLAY_SIZE: 2.8" @@ -29,6 +30,7 @@ static_text: X: 0 Y: 93 WIDTH: 320 + # Adding a width forces the size of the text box, rather than sizing to width of text string FONT: roboto/Roboto-BoldItalic.ttf FONT_SIZE: 20 FONT_COLOR: 0, 200, 200 @@ -62,6 +64,7 @@ STATS: #ANCHOR: ra # right SHOW: True # https://babel.pocoo.org/en/latest/api/dates.html full, long, medium, or short, or a custom date/time pattern + # short (6:48 PM) / medium (6:48:53 PM) / long (6:48:53 PM UTC) / full (6:48:53 PM Coordinated Universal Time) / custom pattern e.g. "HH:mm:ss zzz" (6:48:53 EDT) #FORMAT: medium #FORMAT: short FORMAT: HH:mm