From 8a10b6fde954f0bde4cca2744b7cbd009acbda05 Mon Sep 17 00:00:00 2001 From: kkayam Date: Wed, 22 Jan 2025 11:52:03 +0000 Subject: [PATCH] added themes app --- apps/themes/app-icon.js | 1 + apps/themes/app.js | 185 ++++++++++++++++++++++++++++++++++++++ apps/themes/metadata.json | 25 ++++++ apps/themes/themes.png | Bin 0 -> 1130 bytes 4 files changed, 211 insertions(+) create mode 100644 apps/themes/app-icon.js create mode 100644 apps/themes/app.js create mode 100644 apps/themes/metadata.json create mode 100644 apps/themes/themes.png diff --git a/apps/themes/app-icon.js b/apps/themes/app-icon.js new file mode 100644 index 000000000..280cdacb9 --- /dev/null +++ b/apps/themes/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("nUywIKHg//AAmDAwvxAwv+v4HFz4iEgfnwAHEvPgAwkevA4FzwMEgIcEj/gDgkP/gcEgf/DgkB//hDgl//AcEj/+DghwBw45E//BDgk/+AcCjgVB/AcCh/AgF4HIUD+A7CDgMB/xzF/4VBOYZFBOYk//8A4AcCj//8APBDgJMB/l/DgRwBAAILBzxwBAAP8DgS6DwAcBYgfwDgIxBaAQcBh4VDOYOHAwaQB8bfEj15AwnnzwGE/vneov5Awv+H4YACz4GFDkf4Awv8ToIjEcwYAD")); \ No newline at end of file diff --git a/apps/themes/app.js b/apps/themes/app.js new file mode 100644 index 000000000..f9f18aa46 --- /dev/null +++ b/apps/themes/app.js @@ -0,0 +1,185 @@ +{// List of available themes + let cl = (x) => { return g.setColor(x).getColor(); }; + const THEMES = { + "Light": { + fg: cl("#000"), // black + bg: cl("#FFF"), // white + fg2: cl("#555"), // gray + bg2: cl("#AAA"), // light gray + fgH: cl("#FFF"), // white + bgH: cl("#000"), // black + dark: false + }, + "Dark": { + fg: cl("#FFF"), // white + bg: cl("#000"), // black + fg2: cl("#AAA"), // light gray + bg2: cl("#222"), // dark gray + fgH: cl("#000"), // black + bgH: cl("#FFF"), // white + dark: true + }, + "Ruby": { + fg: cl("#000"), // black + bg: cl("#F00"), // red + fg2: cl("#800"), // dark red + bg2: cl("#F88"), // light red + fgH: cl("#FFF"), // white + bgH: cl("#800"), // dark red + dark: false + }, + "Ocean": { + fg: cl("#FFF"), // white + bg: cl("#00F"), // blue + fg2: cl("#99F"), // light blue + bg2: cl("#008"), // dark blue + fgH: cl("#FFF"), // white + bgH: cl("#44F"), // medium blue + dark: true + }, + "Forest": { + fg: cl("#000"), // black + bg: cl("#0F0"), // green + fg2: cl("#080"), // dark green + bg2: cl("#8F8"), // light green + fgH: cl("#FFF"), // white + bgH: cl("#080"), // dark green + dark: false + }, + "Royal": { + fg: cl("#FFF"), // white + bg: cl("#808"), // purple + fg2: cl("#F8F"), // light purple + bg2: cl("#404"), // dark purple + fgH: cl("#FFF"), // white + bgH: cl("#C0C"), // bright purple + dark: true + }, + "Sunset": { + fg: cl("#000"), // black + bg: cl("#F80"), // orange + fg2: cl("#840"), // dark orange + bg2: cl("#FC8"), // light orange + fgH: cl("#FFF"), // white + bgH: cl("#F60"), // bright orange + dark: false + }, + "Bubblegum": { + fg: cl("#000"), // black + bg: cl("#F8C"), // pink + fg2: cl("#C48"), // dark pink + bg2: cl("#FAE"), // light pink + fgH: cl("#FFF"), // white + bgH: cl("#F68"), // bright pink + dark: false + }, + "Arctic": { + fg: cl("#000"), // black + bg: cl("#0FF"), // cyan + fg2: cl("#088"), // dark cyan + bg2: cl("#8FF"), // light cyan + fgH: cl("#FFF"), // white + bgH: cl("#0CC"), // bright cyan + dark: false + }, + "Sunflower": { + fg: cl("#000"), // black + bg: cl("#FF0"), // yellow + fg2: cl("#880"), // dark yellow + bg2: cl("#FF8"), // light yellow + fgH: cl("#000"), // black + bgH: cl("#CC0"), // bright yellow + dark: false + }, + "Smoke": { + fg: cl("#000"), // black + bg: cl("#888"), // medium gray + fg2: cl("#444"), // dark gray + bg2: cl("#CCC"), // light gray + fgH: cl("#FFF"), // white + bgH: cl("#666"), // gray + dark: false + }, + "Espresso": { + fg: cl("#FFF"), // white + bg: cl("#842"), // brown + fg2: cl("#CA8"), // light brown + bg2: cl("#421"), // dark brown + fgH: cl("#FFF"), // white + bgH: cl("#963"), // medium brown + dark: true + }, + "Matrix": { + fg: cl("#0F0"), // bright green + bg: cl("#000"), // black + fg2: cl("#0A0"), // medium green + bg2: cl("#010"), // very dark green + fgH: cl("#FFF"), // white + bgH: cl("#0F0"), // bright green + dark: true + }, + "Peach": { + fg: cl("#000"), // black + bg: cl("#E6A08F"), // darker soft peach + fg2: cl("#B85F47"), // darker peachy coral + bg2: cl("#E6B3A3"), // darker creamy peach + fgH: cl("#FFF"), // white + bgH: cl("#E67F66"), // darker coral peach + dark: false + } + }; + + // Function to apply the selected theme + let setTheme = (themeNameOrObject) => { + const theme = typeof themeNameOrObject === 'string' ? THEMES[themeNameOrObject] : themeNameOrObject; + if (!theme) return; + + g.theme = theme; + let settings = require("Storage").readJSON("setting.json", 1) || {}; + settings.theme = theme; + require("Storage").write("setting.json", settings); + + // Force screen redraw + g.clear(); + Bangle.drawWidgets(); + }; + + // Function to generate random color + let randomColor = () => { + return cl('#' + Math.floor(Math.random() * 16777215).toString(16).padStart(6, '0')); + }; + + // Function to create a random theme + let createRandomTheme = () => { + let bgColor = randomColor(); + return { + fg: cl("#000"), // black for readability + bg: bgColor, + fg2: cl("#666"), // gray for contrast + bg2: randomColor(), + fgH: cl("#FFF"), // white for highlights + bgH: randomColor(), + dark: false + }; + }; + + // Create menu with theme options + const menu = { + '': { 'title': 'Themes' }, + }; + + // Add themes to menu + Object.keys(THEMES).forEach(themeName => { + menu[themeName] = () => { + setTheme(themeName); + E.showMenu(menu); + }; + }); + menu['Randomize'] = () => { + setTheme(createRandomTheme()); + E.showMenu(menu); + }; + + // Show the menu + E.showMenu(menu); +} \ No newline at end of file diff --git a/apps/themes/metadata.json b/apps/themes/metadata.json new file mode 100644 index 000000000..ce7ee247d --- /dev/null +++ b/apps/themes/metadata.json @@ -0,0 +1,25 @@ +{ + "id": "themes", + "name": "Themes", + "shortName": "Themes", + "version": "0.01", + "description": "Color palettes at your disposal", + "type": "app", + "tags": "tool", + "supports": [ + "BANGLEJS2" + ], + "allow_emulator": true, + "icon": "themes.png", + "storage": [ + { + "name": "themes.app.js", + "url": "app.js" + }, + { + "name": "themes.img", + "url": "app-icon.js", + "evaluate": true + } + ] +} \ No newline at end of file diff --git a/apps/themes/themes.png b/apps/themes/themes.png new file mode 100644 index 0000000000000000000000000000000000000000..73cd937db47fe53467e5eef41e395776d06ee2ff GIT binary patch literal 1130 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;g=CK)Uj~LMH3o);76yi2K%s^g z3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&_}|`tWUDpM5g1`DVf~hP;0Q0bD1ROfB=8q>#`#eNUqEyH37of|I^P zE^~fVtuX()=VEbz8EW<2H#X@WaD4e~yKmh?;}d_)xIEbpbT&T?V0`v=?{}k9+v$$W5)MBQ`XEfFr@0q&Wt|Q~M1Lt;&&iUmw$*!fxZ1y@d z&)}}JyKuVcTGK_&6HDj&={TrH@;nZlYkE2~*{jg1c1^cxS+AXu>GN5I4-U0DZ#&8U zQz%>0?DDBz0Wa(AA3wxA{vvW%+z35(hNX9WM#S$=YH+w}_9+x&VH#r87@=lKk;p=XZ-rF~AV3B1d@T4IqBQub&pmk(F2og5>w;wfkQ;_nSp_13w>`IQ77PoAo@O#6U~arp-I7CE0ej}%ic za#);WaOGTdKPfY9g40&TR4J}0#zz*iTw-2QII;8>=ZV7sdI}DVcOM3+tKHbq<6dbp znft^ewRB;D-&rRX%y# z9*V88$L)*XR2_X&Eq(!**;GqhBT7;dOH!?pi&B9UgOP!esjh*cu90Dgp|O>Tft9I= zwt<0_fx$6>BZVj$a`RI%(<*Um*zQ|%7N|i3ZbM0CZfbE!Vr~I$Jr5#cg@Ae(JYD@< J);T3K0RR_v!