From a1097a3eea26442cbcbc1bf2ce20a46bec7bb746 Mon Sep 17 00:00:00 2001
From: lauzonhomeschool <85599144+lauzonhomeschool@users.noreply.github.com>
Date: Sun, 8 Jan 2023 23:04:13 -0500
Subject: [PATCH 01/89] [sched, alarm] allow dated Event repeat
---
apps/alarm/ChangeLog | 1 +
apps/alarm/README.md | 1 +
apps/alarm/app.js | 101 +++++++++++++++++++++++++--------------
apps/alarm/metadata.json | 2 +-
apps/sched/ChangeLog | 1 +
apps/sched/README.md | 4 +-
apps/sched/metadata.json | 2 +-
apps/sched/sched.js | 28 ++++++++++-
8 files changed, 100 insertions(+), 40 deletions(-)
diff --git a/apps/alarm/ChangeLog b/apps/alarm/ChangeLog
index bb8a292a0..89fb08a6f 100644
--- a/apps/alarm/ChangeLog
+++ b/apps/alarm/ChangeLog
@@ -38,3 +38,4 @@
0.35: Add automatic translation of more strings
0.36: alarm widget moved out of app
0.37: add message input and dated Events
+0.38: Dated event repeat option
diff --git a/apps/alarm/README.md b/apps/alarm/README.md
index 0298e0836..9da142dab 100644
--- a/apps/alarm/README.md
+++ b/apps/alarm/README.md
@@ -13,6 +13,7 @@ It uses the [`sched` library](https://github.com/espruino/BangleApps/blob/master
- `Repeat` → Select when the alarm will fire. You can select a predefined option (_Once_, _Every Day_, _Workdays_ or _Weekends_ or you can configure the days freely)
- `New Timer` → Configure a new timer (triggered based on amount of time elapsed in hours/minutes/seconds)
- `New Event` → Configure a new event (triggered based on time and date)
+ - `Repeat` → Alarm can be be fired only once or repeated (every X number of _days_, _weeks_, _months_ or _years_)
- `Advanced`
- `Scheduler settings` → Open the [Scheduler](https://github.com/espruino/BangleApps/tree/master/apps/sched) settings page, see its [README](https://github.com/espruino/BangleApps/blob/master/apps/sched/README.md) for details
- `Enable All` → Enable _all_ disabled alarms & timers
diff --git a/apps/alarm/app.js b/apps/alarm/app.js
index 74007d04b..972080872 100644
--- a/apps/alarm/app.js
+++ b/apps/alarm/app.js
@@ -6,6 +6,8 @@ const firstDayOfWeek = (require("Storage").readJSON("setting.json", true) || {})
const WORKDAYS = 62
const WEEKEND = firstDayOfWeek ? 192 : 65;
const EVERY_DAY = firstDayOfWeek ? 254 : 127;
+const INTERVALS = ["day", "week", "month", "year"];
+const INTERVAL_LABELS = [/*LANG*/"Day", /*LANG*/"Week", /*LANG*/"Month", /*LANG*/"Year"];
const iconAlarmOn = "\0" + atob("GBiBAAAAAAAAAAYAYA4AcBx+ODn/nAP/wAf/4A/n8A/n8B/n+B/n+B/n+B/n+B/h+B/4+A/+8A//8Af/4AP/wAH/gAB+AAAAAAAAAA==");
const iconAlarmOff = "\0" + (g.theme.dark
@@ -50,8 +52,9 @@ function showMainMenu() {
alarms.forEach((e, index) => {
var label = (e.timer
? require("time_utils").formatDuration(e.timer)
- : (e.date ? `${e.date.substring(5,10)} ${require("time_utils").formatTime(e.t)}` : require("time_utils").formatTime(e.t) + (e.rp ? ` ${decodeDOW(e)}` : ""))
- ) + (e.msg ? " " + e.msg : "");
+ : (e.date ? `${e.date.substring(5,10)}${e.rp?"*":""} ${require("time_utils").formatTime(e.t)}` : require("time_utils").formatTime(e.t) + (e.rp ? ` ${decodeRepeat(e)}` : ""))
+ ) + (e.msg ? ` ${e.msg}` : "");
+
menu[label] = {
value: e.on ? (e.timer ? iconTimerOn : iconAlarmOn) : (e.timer ? iconTimerOff : iconAlarmOff),
onchange: () => setTimeout(e.timer ? showEditTimerMenu : showEditAlarmMenu, 10, e, index)
@@ -148,8 +151,8 @@ function showEditAlarmMenu(selectedAlarm, alarmIndex, withDate) {
onchange: v => alarm.on = v
},
/*LANG*/"Repeat": {
- value: decodeDOW(alarm),
- onchange: () => setTimeout(showEditRepeatMenu, 100, alarm.rp, alarm.dow, (repeat, dow) => {
+ value: decodeRepeat(alarm),
+ onchange: () => setTimeout(showEditRepeatMenu, 100, alarm.rp, date || alarm.dow, (repeat, dow) => {
alarm.rp = repeat;
alarm.dow = dow;
prepareAlarmForSave(alarm, alarmIndex, time, date, true);
@@ -174,9 +177,7 @@ function showEditAlarmMenu(selectedAlarm, alarmIndex, withDate) {
};
if (!keyboard) delete menu[/*LANG*/"Message"];
- if (alarm.date || withDate) {
- delete menu[/*LANG*/"Repeat"];
- } else {
+ if (!alarm.date) {
delete menu[/*LANG*/"Day"];
delete menu[/*LANG*/"Month"];
delete menu[/*LANG*/"Year"];
@@ -225,49 +226,77 @@ function saveAndReload() {
alarms.filter(e => e.timer === undefined).forEach(a => a.dow = handleFirstDayOfWeek(a.dow));
}
-function decodeDOW(alarm) {
+function decodeRepeat(alarm) {
return alarm.rp
- ? require("date_utils")
- .dows(firstDayOfWeek, 2)
- .map((day, index) => alarm.dow & (1 << (index + firstDayOfWeek)) ? day : "_")
- .join("")
- .toLowerCase()
+ ? (alarm.date
+ ? `${alarm.rp.num}*${INTERVAL_LABELS[INTERVALS.indexOf(alarm.rp.interval)]}`
+ : require("date_utils")
+ .dows(firstDayOfWeek, 2)
+ .map((day, index) => alarm.dow & (1 << (index + firstDayOfWeek)) ? day : "_")
+ .join("")
+ .toLowerCase())
: /*LANG*/"Once"
}
-function showEditRepeatMenu(repeat, dow, dowChangeCallback) {
+function showEditRepeatMenu(repeat, day, dowChangeCallback) {
var originalRepeat = repeat;
- var originalDow = dow;
- var isCustom = repeat && dow != WORKDAYS && dow != WEEKEND && dow != EVERY_DAY;
+ var dow;
const menu = {
"": { "title": /*LANG*/"Repeat Alarm" },
"< Back": () => dowChangeCallback(repeat, dow),
- /*LANG*/"Once": {
+ /*LANG*/"Only Once": () => dowChangeCallback(false, EVERY_DAY)
// The alarm will fire once. Internally it will be saved
// as "fire every days" BUT the repeat flag is false so
// we avoid messing up with the scheduler.
- value: !repeat,
- onchange: () => dowChangeCallback(false, EVERY_DAY)
- },
- /*LANG*/"Workdays": {
- value: repeat && dow == WORKDAYS,
- onchange: () => dowChangeCallback(true, WORKDAYS)
- },
- /*LANG*/"Weekends": {
- value: repeat && dow == WEEKEND,
- onchange: () => dowChangeCallback(true, WEEKEND)
- },
- /*LANG*/"Every Day": {
- value: repeat && dow == EVERY_DAY,
- onchange: () => dowChangeCallback(true, EVERY_DAY)
- },
- /*LANG*/"Custom": {
- value: isCustom ? decodeDOW({ rp: true, dow: dow }) : false,
- onchange: () => setTimeout(showCustomDaysMenu, 10, isCustom ? dow : EVERY_DAY, dowChangeCallback, originalRepeat, originalDow)
- }
};
+ let restOfMenu;
+ if (typeof day === "number") {
+ dow = day;
+ var originalDow = dow;
+ var isCustom = repeat && dow != WORKDAYS && dow != WEEKEND && dow != EVERY_DAY;
+
+ restOfMenu = {
+ /*LANG*/"Workdays": {
+ value: repeat && dow == WORKDAYS,
+ onchange: () => dowChangeCallback(true, WORKDAYS)
+ },
+ /*LANG*/"Weekends": {
+ value: repeat && dow == WEEKEND,
+ onchange: () => dowChangeCallback(true, WEEKEND)
+ },
+ /*LANG*/"Every Day": {
+ value: repeat && dow == EVERY_DAY,
+ onchange: () => dowChangeCallback(true, EVERY_DAY)
+ },
+ /*LANG*/"Custom": {
+ value: isCustom ? decodeRepeat({ rp: true, dow: dow }) : false,
+ onchange: () => setTimeout(showCustomDaysMenu, 10, isCustom ? dow : EVERY_DAY, dowChangeCallback, originalRepeat, originalDow)
+ }
+ };
+ } else {
+ var date = day; // eventually: detect day of date and configure a repeat e.g. 3rd Monday of Month
+ dow = EVERY_DAY;
+ repeat = repeat || {interval: "month", num: 1};
+
+ restOfMenu = {
+ /*LANG*/"Every": {
+ value: repeat.num,
+ min: 1,
+ onchange: v => repeat.num = v
+ },
+ /*LANG*/"Interval": {
+ value: INTERVALS.indexOf(repeat.interval),
+ format: v => INTERVAL_LABELS[v],
+ min: 0,
+ max: INTERVALS.length - 1,
+ onchange: v => repeat.interval = INTERVALS[v]
+ }
+ };
+ }
+
+ Object.assign(menu, restOfMenu);
E.showMenu(menu);
}
diff --git a/apps/alarm/metadata.json b/apps/alarm/metadata.json
index 29e71b3d9..28d48daab 100644
--- a/apps/alarm/metadata.json
+++ b/apps/alarm/metadata.json
@@ -2,7 +2,7 @@
"id": "alarm",
"name": "Alarms & Timers",
"shortName": "Alarms",
- "version": "0.37",
+ "version": "0.38",
"description": "Set alarms and timers on your Bangle",
"icon": "app.png",
"tags": "tool,alarm",
diff --git a/apps/sched/ChangeLog b/apps/sched/ChangeLog
index 634250d48..92b04fb32 100644
--- a/apps/sched/ChangeLog
+++ b/apps/sched/ChangeLog
@@ -22,3 +22,4 @@
0.19: Update clock_info to refresh periodically on active alarms/timers
0.20: Alarm dismiss and snooze events
0.21: Fix crash in clock_info
+0.22: Dated event repeat option
diff --git a/apps/sched/README.md b/apps/sched/README.md
index c874b5577..2fb201cee 100644
--- a/apps/sched/README.md
+++ b/apps/sched/README.md
@@ -45,7 +45,9 @@ Alarms are stored in an array in `sched.json`, and take the form:
// eg (new Date()).toISOString().substr(0,10)
msg : "Eat food", // message to display.
last : 0, // last day of the month we alarmed on - so we don't alarm twice in one day! (No change from 0 on timers)
- rp : true, // repeat the alarm every day?
+ rp : true, // repeat the alarm every day? If date is given, pass an object instead of a boolean,
+ // e.g. repeat every 2 months: { interval: "month", num: 2 }.
+ // Supported intervals: day, week, month, year
vibrate : "...", // OPTIONAL pattern of '.', '-' and ' ' to use for when buzzing out this alarm (defaults to '..' if not set)
hidden : false, // OPTIONAL if false, the widget should not show an icon for this alarm
as : false, // auto snooze
diff --git a/apps/sched/metadata.json b/apps/sched/metadata.json
index 2a1b0f8ca..98602318d 100644
--- a/apps/sched/metadata.json
+++ b/apps/sched/metadata.json
@@ -1,7 +1,7 @@
{
"id": "sched",
"name": "Scheduler",
- "version": "0.21",
+ "version": "0.22",
"description": "Scheduling library for alarms and timers",
"icon": "app.png",
"type": "scheduler",
diff --git a/apps/sched/sched.js b/apps/sched/sched.js
index f2f2644f9..57876ff69 100644
--- a/apps/sched/sched.js
+++ b/apps/sched/sched.js
@@ -42,7 +42,9 @@ function showAlarm(alarm) {
if (del) {
alarms.splice(alarmIndex, 1);
} else {
- if (!alarm.timer) {
+ if (alarm.date && alarm.rp) {
+ setNextRepeatDate(alarm);
+ } else if (!alarm.timer) {
alarm.last = new Date().getDate();
}
if (alarm.ot !== undefined) {
@@ -78,6 +80,30 @@ function showAlarm(alarm) {
});
}
+ function setNextRepeatDate(alarm) {
+ let date = new Date(alarm.date);
+ let rp = alarm.rp;
+ switch(rp.interval) {
+ case "day":
+ date.setDate(date.getDate() + rp.num);
+ break;
+ case "week":
+ date.setDate(date.getDate() + (rp.num * 7));
+ break;
+ case "month":
+ if (!alarm.od) alarm.od = date.getDate();
+ date = new Date(date.getFullYear(), date.getMonth() + rp.num, alarm.od);
+ if (date.getDate() != alarm.od) date.setDate(0);
+ break;
+ case "year":
+ if (!alarm.od) alarm.od = date.getDate();
+ date = new Date(date.getFullYear() + rp.num, date.getMonth(), alarm.od);
+ if (date.getDate() != alarm.od) date.setDate(0);
+ break;
+ }
+ alarm.date = date.toLocalISOString().slice(0,10);
+ }
+
if ((require("Storage").readJSON("setting.json", 1) || {}).quiet > 1)
return;
From 6cd3c02253a2916d6388c9ea95a883af8c8a2b71 Mon Sep 17 00:00:00 2001
From: thyttan <6uuxstm66@mozmail.comā©>
Date: Sat, 25 Feb 2023 18:43:59 +0100
Subject: [PATCH 02/89] fork bwclklite from bwclk
---
apps/bwclklite/ChangeLog | 33 +++
apps/bwclklite/README.md | 27 +++
apps/bwclklite/app-icon.js | 1 +
apps/bwclklite/app.js | 376 ++++++++++++++++++++++++++++++++
apps/bwclklite/app.png | Bin 0 -> 2116 bytes
apps/bwclklite/metadata.json | 19 ++
apps/bwclklite/screenshot.png | Bin 0 -> 2841 bytes
apps/bwclklite/screenshot_2.png | Bin 0 -> 3038 bytes
apps/bwclklite/screenshot_3.png | Bin 0 -> 3031 bytes
apps/bwclklite/settings.js | 50 +++++
10 files changed, 506 insertions(+)
create mode 100644 apps/bwclklite/ChangeLog
create mode 100644 apps/bwclklite/README.md
create mode 100644 apps/bwclklite/app-icon.js
create mode 100644 apps/bwclklite/app.js
create mode 100644 apps/bwclklite/app.png
create mode 100644 apps/bwclklite/metadata.json
create mode 100644 apps/bwclklite/screenshot.png
create mode 100644 apps/bwclklite/screenshot_2.png
create mode 100644 apps/bwclklite/screenshot_3.png
create mode 100644 apps/bwclklite/settings.js
diff --git a/apps/bwclklite/ChangeLog b/apps/bwclklite/ChangeLog
new file mode 100644
index 000000000..06f94854e
--- /dev/null
+++ b/apps/bwclklite/ChangeLog
@@ -0,0 +1,33 @@
+0.01: New App.
+0.02: Use build in function for steps and other improvements.
+0.03: Adapt colors based on the theme of the user.
+0.04: Steps can be hidden now such that the time is even larger.
+0.05: Included icons for information.
+0.06: Design and usability improvements.
+0.07: Improved positioning.
+0.08: Select the color of widgets correctly. Additional settings to hide colon.
+0.09: Larger font size if colon is hidden to improve readability further.
+0.10: HomeAssistant integration if HomeAssistant is installed.
+0.11: Performance improvements.
+0.12: Implements a 2D menu.
+0.13: Clicks < 24px are for widgets, if fullscreen mode is disabled.
+0.14: Adds humidity to weather data.
+0.15: Added option for a dynamic mode to show widgets only if unlocked.
+0.16: You can now show your agenda if your calendar is synced with Gadgetbridge.
+0.17: Fix - Step count was no more shown in the menu.
+0.18: Set timer for an agenda entry by simply clicking in the middle of the screen. Only one timer can be set.
+0.19: Fix - Compatibility with "Digital clock widget"
+0.20: Better handling of async data such as getPressure.
+0.21: On the default menu the week of year can be shown.
+0.22: Use the new clkinfo module for the menu.
+0.23: Feedback of apps after run is now optional and decided by the corresponding clkinfo.
+0.24: Update clock_info to avoid a redraw
+0.25: Use Bangle.setUI({remove:...}) to allow loading the launcher without a full reset on fw2v16.
+ ClockInfo Fix: Use .get instead of .show as .show is not implemented for weather etc.
+0.26: Use clkinfo.addInteractive instead of a custom implementation
+0.27: Clean out some leftovers in the remove function after switching to
+clkinfo.addInteractive that would cause ReferenceError.
+0.28: Option to show (1) time only and (2) week of year.
+0.29: use setItem of clockInfoMenu to change the active item
+0.30: Use widget_utils
+0.31: Use clock_info module as an app
diff --git a/apps/bwclklite/README.md b/apps/bwclklite/README.md
new file mode 100644
index 000000000..882d525f6
--- /dev/null
+++ b/apps/bwclklite/README.md
@@ -0,0 +1,27 @@
+# BW Clock
+A very minimalistic clock.
+
+
+
+## Features
+The BW clock implements features that are exposed by other apps through the `clkinfo` module.
+For example, if you install the HomeAssistant app, this menu item will be shown if you first
+touch the bottom of the screen and then swipe left/right to the home assistant menu. To select
+sub-items simply swipe up/down. To run an action (e.g. trigger home assistant), simply select the clkinfo (border) and touch on the item again. See also the screenshot below:
+
+
+
+Note: Check out the settings to change different themes.
+
+## Settings
+- Screen: Normal (widgets shown), Dynamic (widgets shown if unlocked) or Full (widgets are hidden).
+- Enable/disable lock icon in the settings. Useful if fullscreen mode is on.
+- The colon (e.g. 7:35 = 735) can be hidden in the settings for an even larger time font to improve readability further.
+- Your bangle uses the sys color settings so you can change the color too.
+
+## Thanks to
+- Thanks to Gordon Williams not only for the great BangleJs, but specifically also for the implementation of `clkinfo` which simplified the BWClock a lot and moved complexety to the apps where it should be located.
+- Icons created by Flaticon
+
+## Creator
+[David Peer](https://github.com/peerdavid)
diff --git a/apps/bwclklite/app-icon.js b/apps/bwclklite/app-icon.js
new file mode 100644
index 000000000..1df0fa6a5
--- /dev/null
+++ b/apps/bwclklite/app-icon.js
@@ -0,0 +1 @@
+require("heatshrink").decompress(atob("mEwgIcah0EgEB/H8iFsAoOY4kMBYMDhmGgXkAoUGiWkAoQQBoAFCjgnCAoM4hgFDuEI+wpC8EKyg1C/0eAoMAsEAiQvBAAeAApQAB/4Ao+P4v/wn0P8Pgn/wnkH4Pjv/j/nn9PH//n/nj/IFF4F88AXBAoM88EcAoPHj//jlDAoOf/+Y+YFHjnnjAjBEIIjD+BHDO9IALA=="))
diff --git a/apps/bwclklite/app.js b/apps/bwclklite/app.js
new file mode 100644
index 000000000..770c053c2
--- /dev/null
+++ b/apps/bwclklite/app.js
@@ -0,0 +1,376 @@
+{ // must be inside our own scope here so that when we are unloaded everything disappears
+
+/************************************************
+ * Includes
+ */
+const locale = require('locale');
+const storage = require('Storage');
+const clock_info = require("clock_info");
+const widget_utils = require("widget_utils");
+
+/************************************************
+ * Globals
+ */
+const SETTINGS_FILE = "bwclk.setting.json";
+const W = g.getWidth();
+const H = g.getHeight();
+
+/************************************************
+ * Settings
+ */
+let settings = {
+ screen: "Normal",
+ showLock: true,
+ hideColon: false,
+ menuPosX: 0,
+ menuPosY: 0,
+};
+
+let saved_settings = storage.readJSON(SETTINGS_FILE, 1) || settings;
+for (const key in saved_settings) {
+ settings[key] = saved_settings[key];
+}
+
+let isFullscreen = function() {
+ var s = settings.screen.toLowerCase();
+ if(s == "dynamic"){
+ return Bangle.isLocked();
+ } else {
+ return s == "full";
+ }
+};
+
+let getLineY = function(){
+ return H/5*2 + (isFullscreen() ? 0 : 8);
+}
+
+/************************************************
+ * Assets
+ */
+// Manrope font
+Graphics.prototype.setLargeFont = function(scale) {
+ // Actual height 47 (48 - 2)
+ this.setFontCustom(
+ atob('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAD/AAAAAAAAA/wAAAAAAAAP8AAAAAAAAD/AAAAAAAAA/wAAAAAAAAP8AAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAD/AAAAAAAAP/wAAAAAAAf/8AAAAAAB///AAAAAAH///wAAAAAf///8AAAAB/////AAAAH////8AAAAP////wAAAA/////AAAAB////+AAAAA////4AAAAAP///gAAAAAD//+AAAAAAA//4AAAAAAAP/gAAAAAAAD/AAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///+AAAAAB////8AAAAB/////wAAAA/////+AAAA//////wAAAf/////+AAAH//////wAAD//////+AAB/+AAAf/gAAf+AAAA/8AAH/AAAAH/AAD/gAAAA/4AA/wAAAAH+AAP8AAAAB/gAD+AAAAAf4AA/gAAAAH+AAP4AAAAA/gAD+AAAAAf4AA/wAAAAH+AAP8AAAAB/gAD/AAAAA/4AA/4AAAAP+AAH/AAAAH/AAB/4AAAH/wAAP/wAAP/4AAD//////+AAAf//////AAAD//////gAAAf/////wAAAD/////4AAAAf////4AAAAB////4AAAAAB///gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAH/AAAAAAAAD/gAAAAAAAA/4AAAAAAAAf8AAAAAAAAH+AAAAAAAAD/gAAAAAAAB/wAAAAAAAAf8AAAAAAAAP///////AAD///////wAA///////8AAP///////AAD///////wAA///////8AAP///////AAD///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAB/AAAA/gAAA/wAAA/4AAAf8AAAf+AAAP/AAAP/gAAH/wAAH/4AAD/8AAD/+AAB//AAA//gAA//wAAf/AAAP/8AAH/AAAH//AAD/gAAD//wAA/wAAB//8AAP8AAA///AAD/AAAf+fwAA/gAAP/n8AAP4AAH/x/AAD+AAD/4fwAA/gAB/8H8AAP8AAf+B/AAD/AAP/AfwAA/4AH/gH8AAH/AH/wB/AAB/8H/4AfwAAP///8AH8AAD////AB/AAAf///gAfwAAD///wAH8AAAf//4AB/AAAD//4AAfwAAAP/8AAH8AAAAf4AAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAADgAAAfwAAAB+AAAH8AAAAfwAAB/AAAAH+AAAfwAAAB/wAAH8AAAA/+AAB/AAAAP/gAAfwA4AA/8AAH8AfgAH/AAB/AP8AA/4AAfwD/gAH+AAH8B/4AB/gAB/A/8AAf4AAfwf/AAD+AAH8P/wAA/gAB/H/8AAf4AAfz//gAH+AAH8//4AB/gAB/f//AA/4AAf/+/4Af8AAH//P/AP/AAB//j////gAAf/wf///4AAH/4H///8AAB/8A///+AAAf+AH///AAAH/AA///gAAB/gAD//wAAAfwAAP/wAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAH/wAAAAAAAH/8AAAAAAAH//AAAAAAAH//wAAAAAAH//8AAAAAAH///AAAAAAH///wAAAAAH///8AAAAAP//9/AAAAAP//8fwAAAAP//4H8AAAAP//4B/AAAAP//4AfwAAAP//4AH8AAAD//4AB/AAAA//4AAfwAAAP/4AAH8AAAD/wAAB/AAAA/wAAAfwAAAPwAH////AADwAB////wAAwAAf///8AAAAAH////AAAAAB////wAAAAAf///8AAAAAH////AAAAAA////wAAAAAAAfwAAAAAAAAH8AAAAAAAAB/AAAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAGAHwAAAB///gB+AAAH///8AfwAAB////AP+AAAf///wD/wAAH///+A/+AAB////gP/gAAf///4A/8AAH/8P8AH/AAB/AD+AA/4AAfwA/gAH+AAH8AfwAB/gAB/AH8AAf4AAfwB/AAH+AAH8AfwAB/gAB/AH8AAf4AAfwB/gAH+AAH8Af4AB/gAB/AH/AA/wAAfwB/4Af8AAH8AP/AP/AAB/AD////gAAfwAf///wAAH8AD///8AAB/AA///+AAAfwAH///AAAAAAA///gAAAAAAD//gAAAAAAAP/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///4AAAAAH////wAAAAH/////AAAAD/////4AAAB//////AAAA//////4AAAf//////AAAP//////4AAD/8D/w/+AAB/4B/wD/wAAf8A/wAf8AAP+AP4AD/gAD/AD+AAf4AA/wB/AAH+AAP4AfwAB/gAD+AH8AAf4AA/gB/AAH+AAP4AfwAB/gAD+AH+AAf4AA/wB/gAH+AAP8Af8AD/gAD/gH/gB/wAAf8A/8A/8AAH/AP///+AAB/gB////gAAPwAP///wAAB4AD///4AAAMAAf//8AAAAAAD//+AAAAAAAP/+AAAAAAAA/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAAAH8AAAAAAAAB/AAAAAAAAAfwAAAAAAAAH8AAAAAAAAB/AAAAABwAAfwAAAAB8AAH8AAAAD/AAB/AAAAD/wAAfwAAAH/8AAH8AAAH//AAB/AAAP//wAAfwAAP//8AAH8AAf//+AAB/AAf//8AAAfwA///8AAAH8A///4AAAB/A///4AAAAfx///wAAAAH9///wAAAAB////gAAAAAf///gAAAAAH///AAAAAAB///AAAAAAAf/+AAAAAAAH/+AAAAAAAB/8AAAAAAAAf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAf/AAAAAP+Af/8AAAAP/4P//wAAAP//P//+AAAH//////wAAB//////8AAA///////gAAf//////8AAH////gP/AAD/wf/wA/wAA/4D/4AP+AAP8Af8AB/gAD/AH/AAf4AA/gA/wAH+AAP4AP4AA/gAD+AD/AAP4AA/gA/wAH+AAP8Af8AB/gAD/AH/AAf4AA/4D/4AP+AAP/B//AH/AAB////4D/wAAf//////8AAD//////+AAAf//////AAAH//////wAAA//8///4AAAD/+D//8AAAAP+Af/8AAAAAAAB/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/gAAAAAAAB//AAAAAAAB//8AAAAAAB///gAAgAAA///8AAcAAAf///gAPAAAH///8AH4AAD////AD/AAB/+H/4B/wAAf+Af+Af8AAP+AB/wD/gAD/gAf8Af4AA/wAD/AH+AAP8AA/wB/gAD+AAH8AP4AA/gAB/AD+AAP4AAfwB/gAD+AAH8Af4AA/wAD/AH+AAP8AA/gD/gAD/gAf4A/wAAf8AP8A/8AAH/gH/Af/AAA///////gAAP//////wAAB//////8AAAP/////+AAAB//////AAAAP/////AAAAA/////gAAAAD////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wA/wAAAAAP8AP8AAAAAD/AD/AAAAAA/wA/wAAAAAP8AP8AAAAAD/AD/AAAAAA/wA/wAAAAAP8AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='),
+ 46,
+ atob("ExspGyUkJiQnISYnFQ=="),
+ 62+(scale<<8)+(1<<16)
+ );
+ return this;
+};
+
+Graphics.prototype.setMediumFont = function(scale) {
+ // Actual height 41 (42 - 2)
+ this.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAA/AAAAAAAA/AAAAAAAA/AAAAAAAA/AAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAB/AAAAAAAP/AAAAAAD//AAAAAA///AAAAAP///AAAAB///8AAAAf///AAAAH///wAAAB///+AAAAH///gAAAAH//4AAAAAH/+AAAAAAH/wAAAAAAH8AAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///8AAAAH////AAAAP////wAAAf////4AAA/////8AAB/////+AAD/gAAH+AAD+AAAD/AAH8AAAB/AAH4AAAA/gAH4AAAAfgAH4AAAAfgAPwAAAAfgAPwAAAAfgAPwAAAAfgAHwAAAAfgAH4AAAAfgAH4AAAA/gAH8AAAA/AAD+AAAD/AAD/gAAH/AAB/////+AAB/////8AAA/////4AAAf////wAAAH////gAAAB///+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAfwAAAAAAA/gAAAAAAA/AAAAAAAB/AAAAAAAD+AAAAAAAD8AAAAAAAH8AAAAAAAH//////AAH//////AAH//////AAH//////AAH//////AAH//////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAA/AAAP4AAB/AAAf4AAD/AAA/4AAD/AAB/4AAH/AAD/4AAP/AAH/AAAf/AAH8AAA//AAH4AAB//AAP4AAD//AAPwAAH+/AAPwAAP8/AAPwAAf4/AAPwAA/4/AAPwAA/w/AAPwAB/g/AAPwAD/A/AAP4AH+A/AAH8AP8A/AAH/A/4A/AAD///wA/AAD///gA/AAB///AA/AAA//+AA/AAAP/8AA/AAAD/wAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAH4AAAHwAAH4AAAH4AAH4AAAH8AAH4AAAP+AAH4AAAH+AAH4A4AB/AAH4A+AA/AAH4B/AA/gAH4D/AAfgAH4H+AAfgAH4P+AAfgAH4f+AAfgAH4/+AAfgAH5/+AAfgAH5//AAfgAH7+/AA/gAH/8/gB/AAH/4f4H/AAH/wf//+AAH/gP//8AAH/AH//8AAH+AD//wAAH8AB//gAAD4AAf+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAD/AAAAAAAP/AAAAAAB//AAAAAAH//AAAAAAf//AAAAAB///AAAAAH///AAAAAf/8/AAAAB//w/AAAAH/+A/AAAA//4A/AAAD//gA/AAAH/+AA/AAAH/4AA/AAAH/gAA/AAAH+AAA/AAAHwAAA/AAAHAAf///AAEAAf///AAAAAf///AAAAAf///AAAAAf///AAAAAf///AAAAAAA/AAAAAAAA/AAAAAAAA/AAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAP/AHgAAH///AP4AAH///gP8AAH///gP8AAH///gP+AAH///gD/AAH/A/AB/AAH4A/AA/gAH4A+AAfgAH4B+AAfgAH4B+AAfgAH4B8AAfgAH4B8AAfgAH4B+AAfgAH4B+AAfgAH4B+AA/gAH4B/AA/AAH4A/gD/AAH4A/4H+AAH4Af//+AAH4AP//8AAH4AP//4AAHwAD//wAAAAAB//AAAAAAAf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///8AAAAD////AAAAP////wAAAf////4AAA/////8AAB/////+AAD/gP4H+AAD/AfgD/AAH8A/AB/AAH8A/AA/gAH4B+AAfgAH4B+AAfgAPwB8AAfgAPwB8AAfgAPwB+AAfgAPwB+AAfgAH4B+AAfgAH4B/AA/gAH8B/AB/AAH+A/wD/AAD+A/8P+AAB8Af//+AAB4AP//8AAAwAH//4AAAAAD//gAAAAAA//AAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAPwAAAAAAAPwAAAAAAAPwAAAAAAAPwAAAAHAAPwAAAA/AAPwAAAD/AAPwAAAf/AAPwAAB//AAPwAAP//AAPwAA//8AAPwAH//wAAPwAf/+AAAPwB//4AAAPwP//AAAAPw//8AAAAP3//gAAAAP//+AAAAAP//wAAAAAP//AAAAAAP/4AAAAAAP/gAAAAAAP+AAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AAAAH+A//gAAAf/h//4AAA//z//8AAB/////+AAD/////+AAD///+H/AAH+H/4B/AAH8B/wA/gAH4A/gAfgAH4A/gAfgAPwA/AAfgAPwA/AAfgAPwA/AAfgAPwA/AAfgAH4A/gAfgAH4A/gAfgAH8B/wA/gAH/H/4B/AAD///+H/AAD/////+AAB/////+AAA//z//8AAAf/h//4AAAH+A//gAAAAAAH+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAD/8AAAAAAP/+AAAAAAf//AAcAAA///gA8AAB///wB+AAD/x/4B/AAD+AP4B/AAH8AH8A/gAH4AH8A/gAH4AD8AfgAP4AD8AfgAPwAB8AfgAPwAB8AfgAPwAB8AfgAPwAB8AfgAH4AD8AfgAH4AD4A/gAH8AH4B/AAD+APwD/AAD/g/wP+AAB/////+AAA/////8AAAf////4AAAP////wAAAH////AAAAA///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8APwAAAAD8APwAAAAD8APwAAAAD8APwAAAAD8APwAAAAD8APwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="), 46, atob("DxcjFyAfISAiHCAiEg=="), 54+(scale<<8)+(1<<16));
+ return this;
+};
+
+Graphics.prototype.setSmallFont = function(scale) {
+ // Actual height 28 (27 - 0)
+ this.setFontCustom(
+ atob('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/+cB//5wH//nAAAAAAAAAAAAAAAAAAAB8AAAHwAAAfAAAAAAAAAAAAAfAAAB8AAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAQcAADhwAAOHBAA4c8ADh/wAP/+AB/+AA//wAH+HAAe4cMBDh/wAOP/AA//wAP/wAH/3AAf4cABzhwAAOHAAA4cAADgAAAOAAAAAAAAAAAAAAAAAAAAwAH8HwA/4PgD/geAePA8BwcBw/BwH78DgfvwOB+HA4HAeBwcA8HDgB4f+ADg/wAGB+AAAAAAAAAAAAAAAH4AAA/wBwHngPAcOB4Bw4PAHDh4AcOPAA/x4AD/PAADx4AAAPAAAB5wAAPPwAB5/gAPOPAB4wcAPDBwB4MHAPA4cA4B/gBAH8AAAHAAAAAAAAAAAAAPAAHD/AB/f+AP/x4B4+DwHB4HAcDwcBwHhwHAPHAcAccB4A5wDgB+AGA/4AAH/AAAf+AAAA8AAABgAAAAAfAAAB8AAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/8AD//+A/+/+H4AD98AAB3gAADIAAAAAAAAAAAAAIAAABwAAAXwAAHPwAB8P8D/gP//4AH/8AAAAAAAAAAAAAAAAAAAAAAAAHAAAAcwAAA/gAAb8AAB/gAAH+AAAD+AAAOwAABxAAADAAAAAAAAAAAAAADAAAAMAAAAwAAADAAAAMAAAAwAAB//AAH/8AAAwAAADAAAAMAAAAwAAADAAAAMAAAAAAAAAAAAAABwAAAHIAAAfgAAB8AAAAAAAAAAAAAAAAAAAAAwAAADAAAAMAAAAwAAADAAAAMAAAAwAAADAAAAMAAAAAAAAAAAAAAAAAAAAAAABwAAAHAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAA/wAA//AA//AA//AAH/AAAfAAABAAAAAAAAAAAAAAAAAAAf/wAH//wA///gDgAOAcAAcBwABwHAAHAcAAcBwABwHgAPAPAB4Af//AA//4AA/+AAAAAAAAAAAAAAAAMAAABwAAAOAAAB4AAAH///Af//8B///wAAAAAAAAAAAAAAAAAAAAwAcAPADwB8AfAPAB8B4APwHAB/AcAPcBwB5wHAPHAcB4cA8PBwD/4HAH/AcAHwBwAAAAAAAAAAAAGAHAAcAcAB4BwYDwHDwHAceAcBz4BwHfgHAf3AcB+eDwHw/+AeB/wBwD+AAAAAAAAAAAAAAAAABwAAAfAAAP8AAD/wAA/nAAP4cAD+BwAfgHAB4AcAEA//AAD/8AAP/wAABwAAAHAAAAMAAAAAAAAAAAAAEAH/w4Af/D4B/8HgHDgPAcOAcBw4BwHDgHAcOAcBw8DwHB4eAcH/wBgP+AAAPwAAAAAAAAAAAAAAAB//AAf//AD//+AOHB4Bw4BwHDgHAcOAcBw4BwHDgHAcPA8A4eHgDh/8AEB/gAAD4AAAAAAAAAABwAAAHAAAAcAAMBwADwHAB/AcA/4BwP8AHH/AAd/gAB/wAAH8AAAeAAAAAAAAAAAAAAAEAAPD+AB/f8AP//4B4+DwHDwHAcHAcBwcBwHBwHAcPAcB/+DgD//+AH5/wACB8AAAAAAAAAAAAAAAAEAAAD+AAAf+DAD74OAODw8BwHBwHAOHAcA4cBwDBwHAcHAeBw8A+ePgB//8AD//gAB/wAAAAAAAAAAAAAAAAAAAAAHBwAAcHAABwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AcgDgB+AOAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAeAAAD8AAAf4AADzwAAeHgADwPAAGAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADGAAAMYAAAxgAADGAAAMYAAAxgAADGAAAMYAAAxgAADGAAAMYAAAxgAADGAAAMYAAAxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABACAAOAcAA8DgAB4cAABzgAAD8AAAHgAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAHgAAA+AAAHgAAAcAAABwD5wHAfnAcD8cBweAAHzwAAP+AAAfwAAAcAAAAAAAAAAAAAAAAAAB/AAA//AAH/+AA8A8AHAA4A4ABwDg+HAcH8OBw444GDBhgYMGGBgwYYHDjjgcP8OBw/44DgDhAOAGAAeAYAA+HgAB/8AAB/gAAAAAAAAAAAAABAAAA8AAAfwAAP/AAH/gAD/4AB/zgAf4OAB8A4AHwDgAf4OAA/84AAP/gAAH/AAAD/gAAB/AAAA8AAAAQAAAAAAAAAB///wH///Af//8BwOBwHA4HAcDgcBwOBwHA4HAcDgcBweBwHj4HAP/58Afz/gAcH8AAAPAAAAAAAH/AAB//AAf//AB4A8APAB4B4ADwHAAHAcAAcBwABwHAAHAcAAcBwABwHAAHAOAA4A8AHgB8B8ADwHgADAYAAAAAAAAAAAAAAAH///Af//8B///wHAAHAcAAcBwABwHAAHAcAAcBwABwHAAHAeAA8A8AHgB8B+AD//gAH/8AAD/AAAAAAAAAAAAAAAAf//8B///wH///AcDgcBwOBwHA4HAcDgcBwOBwHA4HAcDgcBwOBwHAAHAcAAcAAAAAAAAAAAAAAB///wH///Af//8BwOAAHA4AAcDgABwOAAHA4AAcDgABwOAAHAAAAcAAAAAAAAAP/AAB//AAf//AB4A8APAB4B4ADwHAAHAcAAcBwABwHAAHAcAAcBwGBwHgYPAOBg4A+GPgB4f8ADh/gAAH4AAAAAAAAAAAAAAAH///Af//8B///wAA4AAADgAAAOAAAA4AAADgAAAOAAAA4AAADgAAAOAAAA4AAf//8B///wH///AAAAAAAAAAAAAAAAAAAB///wH///Af//8AAAAAAAAAAAABgAAAHgAAAeAAAA8AAABwAAAHAAAAcAAABwH///Af//4B///AAAAAAAAAAAAAAAAAAAAf//8B///wH///AAHgAAA/AAAH+AAA88AAHh8AA8D4AHgDwA8AHgHgAPAYAAcBAAAwAAABAAAAAAAAAAH///Af//8B///wAAAHAAAAcAAABwAAAHAAAAcAAABwAAAHAAAAcAAABwAAAAAAAAAAAAAAH///Af//8B///wB/AAAB/AAAA/AAAA/gAAA/gAAA/gAAA/AAAD8AAA/AAAfwAAH8AAB/AAAfgAAP4AAB///wH///Af//8AAAAAAAAAAAAAAAAAAAH///Af//8B///wD8AAAD4AAAH4AAAHwAAAPwAAAPgAAAPgAAAfAAAAfAAAA/Af//8B///wH///AAAAAAAAAAAH/AAB//AAf//AB4A8APAB4B4ADwHAAHAcAAcBwABwHAAHAcAAcBwABwHAAHAOAA4A8AHgB+D8AD//gAH/8AAD+AAAAAAAAAAAH///Af//8B///wHAOAAcA4ABwDgAHAOAAcA4ABwDgAHAeAAeBwAA+fAAD/4AAD/AAADgAAAAAAAAf8AAH/8AB//8AHgDwA8AHgHgAPAcAAcBwABwHAAHAcAAcBwABwHAAnAcAHcA4AfgDwA+AH4P4AP//wAf/3AAP4AAAAAAAAAAAf//8B///wH///AcA4ABwDgAHAOAAcA4ABwDgAHAOAAcB+AB4H+AD59/AP/h8AP8BwAOABAAAAAAAAAAAAAwAD4HwA/4fAD/geAePA8BwcBwHBwHAcDgcBwOBwHA4HAcDgcA4HDwD4eeAHw/4AOD/AAIDwAAAAABwAAAHAAAAcAAABwAAAHAAAAcAAABwAAAH///Af//8B///wHAAAAcAAABwAAAHAAAAcAAABwAAAGAAAAAAAAAAAAAH//wAf//gB///AAAAeAAAA8AAABwAAAHAAAAcAAABwAAAHAAAAcAAADgAAAeAf//wB//+AH//gAAAAAAAAAAGAAAAfAAAB/gAAB/wAAA/4AAAf8AAAP/AAAH8AAADwAAA/AAAf8AAP+AAP/AAH/gAB/wAAH4AAAcAAABAAAAHwAAAf4AAA/+AAAP/gAAH/wAAB/wAAA/AAAf8AAf/AAP/gAP/gAB/gAAH4AAAf+AAAf/AAAH/wAAB/8AAAfwAAB/AAB/8AA/+AA/+AAf+AAB/AAAHAAAAAAAAAAAAQGAADAeAA8B8AHwD8B+AD4PgAH74AAH/AAAPwAAA/gAAP/gAD8fAAfA/AH4A+AeAA8BwABwEAABAQAAABwAAAHwAAAPwAAAfwAAAfgAAAfgAAAf/wAB//AAf/8AH8AAA/AAAPwAAB8AAAHAAAAQAAAAAAAAAAABAcAAcBwADwHAA/AcAP8BwD/wHAfnAcH4cBx+BwHPwHAf8AcB/ABwH4AHAeAAcBgABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/////////gAAAOAAAA4AAADAAAAAAAAAAAAAAAAAAAAAAAeAAAB/gAAH/4AAB/+AAAf/gAAH/AAAB8AAAAQAAAAAAAAAAAAAAOAAAA4AAADgAAAP/////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADgAAAcAAADgAAAcAAADgAAAcAAAB4AAADwAAADgAAAHAAAAOAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAYAAABgAAAGAAAAYAAABgAAAGAAAAYAAABgAAAGAAAAYAAABgAAAGAAAAYAAABgAAAGAAAAYAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAADj+AAef8AD5xwAOGHAA44MADjgwAOOHAA44YADjDgAH/8AAf/8AAf/wAAAAAAAAAAAAAAAAAAAf//8B///wH//+AAcA4ADgBwAOAHAA4AcADgBwAOAHAA8A8AB8PgAD/8AAH/gAAH4AAAAAAAAAAAAH4AAB/4AAP/wAB4HgAPAPAA4AcADgBwAOAHAA4AcADgBwAPAPAAeB4AA4HAABgYAAAAAAAAAAAAfgAAH/gAB//gAHgeAA8A8ADgBwAOAHAA4AcADgBwAOAHAAcA4B///wH///Af//8AAAAAAAAAAAAAAAAH4AAB/4AAP/wAB7HgAPMPAA4wcADjBwAOMHAA4wcADjBwAPMPAAfx4AA/HAAB8YAAAwAAAAAAAAAAAAwAAADAAAB///AP//8B///wHMAAAYwAABjAAAGMAAAAAAAAAPwAAD/wMA//w4DwPHgeAePBwA4cHADhwcAOHBwA4cHADhwOAcPB///4H///Af//wAAAAAAAAAAAAAAAAAAB///wH///AAf/8ABwAAAOAAAA4AAADgAAAOAAAA4AAADwAAAH//AAP/8AAf/wAAAAAAAAAAAAAAAAAAAc//8Bz//wHP//AAAAAAAAAAAAAAHAAAAcAAAH+f///5///7H//8AAAAAAAAAAAAAAH///Af//8B///wAAPAAAB+AAAP8AAB54AAfDwAD4HgAOAPAAwAcACAAwAAAAAAAAAB///wH///Af//8AAAAAAAAAAAAAAAAAAAAP//AA//8AB//wAHAAAA4AAADgAAAOAAAA4AAAD4AAAH//AAP/8AB//wAHAAAA4AAADgAAAOAAAA4AAADwAAAH//AAP/8AAf/wAAAAAAAAAAAAAAAP//AA//8AB//wAHAAAA4AAADgAAAOAAAA4AAADgAAAPAAAAf/8AA//wAB//AAAAAAAAAAAAAAAAB+AAAf+AAD/8AAeB4ADwDwAOAHAA4AcADgBwAOAHAA4AcADwDwAHw+AAP/wAAf+AAAfgAAAAAAAAAAAAAAAB///8H///wP///A4BwAHADgAcAOABwA4AHADgAcAOAB4B4AD4fAAH/4AAP/AAAPwAAAAAAAAAAAAPwAAD/wAA//wADwPAAeAeABwA4AHADgAcAOABwA4AHADgAOAcAB///8H///wf///AAAAAAAAAAAAAAAAAAAD//wAP//AAf/8ABwAAAOAAAA4AAADgAAAOAAAAAAAAAYGAAD4cAAfx4AD3DwAOOHAA44cADjhwAOGHAA4ccADxzwAHj+AAOP4AAYOAAAAAAAwAAADAAAAMAAAP//wA///gD///AAwAcADABwAMAHAAwAcADAAwAAAAAAAAAAD/gAAP/4AA//4AAA/gAAAPAAAAcAAABwAAAHAAAAcAAABwAAAOAA//8AD//wAP//AAAAAAAAAAAIAAAA4AAAD8AAAH+AAAH/AAAD/gAAB/AAAB8AAA/wAAf8AAP+AAD/AAAPgAAAwAAAAAAAAIAAAA8AAAD/AAAH/gAAD/wAAA/wAAA/AAAf8AAP+AAP+AAA/AAAD+AAAH/AAAD/gAAA/wAAA/AAAf8AAP/AAP/AAA/gAADgAAAAAAAAAAEADAAwAOAHAA+B8AB8PgAB74AAD/AAAH4AAA/wAAHvgAB8PgAPgfAA4AcADAAwAAABABAAAAHAAAAfgAAA/wAAA/wAwAf4fAAP/8AAP/AAB/gAA/wAAf4AAP+AAB/AAAHgAAAQAAAAAAEADAAwAOAPAA4B8ADgPwAOD/AA4ecADnxwAO8HAA/gcAD8BwAPAHAA4AcACAAwAAAAAAAAAAAAAAAAAAAAAAAAAA8AB////f//////n/+AAAA4AAADgAAAAAAAAAAAAAAAAAH///Af//8B///wAAAAAAAAAAAAAAAAAAA4AAADgAAAOAAAA//5/9////z////AAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAB8AAAHwAAAcAAABwAAAHgAAAOAAAA8AAABwAAAHAAAB8AAAHwAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAYAAABgAAAGAAAAYAAABgAAAGAAAAYAAABgAAAGAAAAGAAABwAAAOAAABwAAAHAAAAcAAAA4AAABwAAABgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAOAB4B4ADwPAAHh4AAPPAAAf4AAA/AAAB4AAAPwAAB/gAAPPAAB4eAAPA8AB4B4AHADgAIAEAAAAAAADAAAAMAAAAwAAADAAAAMAAAAwAAHDDgA8MPADww8AGDBgAAMAAAAwAAADAAAAMAAAAwAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADn//gOf/+A5//4AAAAAAAAAAAAAAAAAAAD/AAA//AAH/+AA+B8ADgBwAOAHAHwAPgfAA+B8AD4A4AcADwDwAHgeAAOBwAAQCAAAAAAAAAAAADgcAAOBwAA4HAD//8A///wD///AeDgcBwOBwHA4HAcDgcB4GBwD4AHAHgAcAOAAAAAAAAAAAAAMAGAB7+8AD//gAHx8AAcBwADgDgAOAOAA4A4ADgDgAOAOAA4A4ABwHAAHg8AA//4AH//wAMOGAAAAAAQAAABwAAAHwMYAPwxgAfjGAAfsYAAf7gAAf/wAB//AAf/8AH7GAA/MYAPwxgB8DGAHAAAAQAAAAAAAAAAAAAf/D/5/8P/n/w/+AAAAAAAAAAAAAAAAAAAABwAAffhwD//Hgf+cfBzwwcGHDhwYcOHBxw4cHDhxwfOPvA8//4Bx//AADwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAP/wAB//gAPAPAB4AOAPDw8A4/xwHH/jgc4HOBzgc4HMAzgcwDOBzgc4HPDjgOcOeA4whwBwAOAHwD4APw/AAf/4AAf+AAAPAAAAAAAATgAAD/AAANsAAA2wAADTAAAP8AAAfwAAAAAAAAAAAAAAAAAAgAAAPAAAB+AAAOeAADw8AAOIwAADxAAAfgAADngAA8PAADgMAAEAQAAAAAAAAAAABgAAAGAAAAYAAABgAAAGAAAAYAAABgAAAGAAAAYAAABgAAAGAAAAYAAAB+AAAH4AAAAAAAAAAAAAAAAAAAAD8AAA/8AAHh4AAYDgAD/3AAN/MAA0QwADRjAAN/MAA7hwABwOAADhwAAH+AAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAD/AAAeeAABw4AAGDgAAYOAABw4AAH/AAAP8AAAfAAAAAAAAAAAAAAAAAAAwYAADBgAAMGAAAwYAADBgAAMGAAP+YAA/5gAD/mAAAwYAADBgAAMGAAAwYAADBgAAAAAAAAAAAAAAAMDAABwcAAPDwAAwPAADB8AAMOwAA5zAAB+MAADwwAAAAAAAAAAAIBAAAwGAADMcAANwwAA/DAAD8MAAO/wAAx+AAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf///B///8H//AAAAeAAAA4AAADgAAAOAAAA4AAADgAAAcAB//gAH//gAf/+AAAAAAAAAAAAAAAAAAAAP4AAB/4AAP/gAB//AAH/8AAf/wAB//AAH///8f///x////AAAAAAAAAB////H///8f///wAAAAAAAAAAAAAAABAAAAOAAAB4AAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAzAAAPMAAA/wAAAeAAAAAAAAAAAAAAAAAAAIAAABgAAAMAAAA//AAD/8AAAAAAAAAAAAAAAAAAAAAA8AAAP4AAAwwAADDAAAMMAAA5wAAB+AAADwAAAAAAAAAAAAAAAAAMAwAA8HAAB44AAD/AAAD4AADGMAAOBwAAeOAAA/wAAA+AAABgAAAAAAAAAAAAAAABAAAAMAAABwAAAH/8CAf/wcAAAHgAAA8AAAHgAAB4AAAPAAAB4AAAeAAADwAAA+AAAHgCAA8A8APAfwB4H7AHB+MAAHAwAAQ/wAAD/AAAAwAAADAAAAAAAAAAAAAAAAAAAAEAAAAwAAAHAAAAf/wIB//BwAAAeAAADwAAAeAAAHgAAA8AAAHgAAB4AAAPAAAD4AAAeAAADwAAA8GAwHg4HAcHA8AAYHwABg7AAGHMAAf4wAA/DAAA4MAAAAAAAAAAYBgABgHAAGMOAAZwYABvBgAH8OCAe/wcBx+HgABg8AAAHgAAB4AAAPAAAB4AAAeAAADwAAA+AAAHgHAA8B8APAfwB4HzADB8MAAHAwAAQ/wAAD/AAAAwAAAAAAAAAAAAAAAAAA4AAAP4AAB/wAAPHgABwOA4/A4Dn4DgOfAOAAAA4AAAHgAAB8AAAHgAAAYAAAAAAAAEAAADwAAB/AAA/8AAf+AAP/gAH/OAB/g4AHwDgAfAOAB/g4AD/zgAA/+AAAf8AAAP+AAAH8AAADwAAABAAAAEAAADwAAB/AAA/8AAf+AAP/gAH/OAB/g4AHwDgAfAOAB/g4AD/zgAA/+AAAf8AAAP+AAAH8AAADwAAABAAAAEAAADwAAB/AAA/8AAf+AAP/gAH/OAB/g4AHwDgAfAOAB/g4AD/zgAA/+AAAf8AAAP+AAAH8AAADwAAABAAAAEAAADwAAB/AAA/8AAf+AAP/gAH/OAB/g4AHwDgAfAOAB/g4AD/zgAA/+AAAf8AAAP+AAAH8AAADwAAABAAAAEAAADwAAB/AAA/8AAf+AAP/gAH/OAB/g4AHwDgAfAOAB/g4AD/zgAA/+AAAf8AAAP+AAAH8AAADwAAABAAAAAAAAABwAAA/AAAf8AAP/AAH/wfD/nD+/wcMb4BwxvgHD+/wcHx/5wEAf/AAAP+AAAH/AAAD8AAABwAAAAAAAEAAADwAAB/AAA/8AAf+AAP/gAH/OAB/g4AHwDgAcAOABwA4AHADgAf//8B///wHA4HAcDgcBwOBwHA4HAcDgcBwOBwHA4HAcDgcBwOBwHAAHAYAAMAAAAAAAAAAA/4AAP/4AD//4APAHgB4APAPAAeA4AA4DgADg+AAPz4AA//gAD/+AAOe4AA4BwAHAHgA8APgPgAeA8AAYDAAAAAAAAAAAAAAAAf//8B///wH///AcDgcBwOBwHA4HAcDgcBwOBwHA4HAcDgcBwOBwHAAHAcAAcAAAAAAAAAAAAAAB///wH///Af//8BwOBwHA4HAcDgcBwOBwHA4HAcDgcBwOBwHA4HAcAAcBwABwAAAAAAAAAAAAAAH///Af//8B///wHA4HAcDgcBwOBwHA4HAcDgcBwOBwHA4HAcDgcBwABwHAAHAAAAAAAAAAAAAAAf//8B///wH///AcDgcBwOBwHA4HAcDgcBwOBwHA4HAcDgcBwOBwHAAHAcAAcAAAAAAAAAAAAAAB///wH///Af//8AAAAAAAAAAAAAAAAAAAH///Af//8B///wAAAAAAAAAAAAAAAAAAAf//8B///wH///AAAAAAAAAAAAAAAAAAAB///wH///Af//8AAAAAAAAAAABgAAAGAAH///Af//8B///wHAYHAcBgcBwGBwHAYHAcBgcBwABwHAAHAeAA8A8AHgB+D8AD//gAH/8AAD+AAAAAAAAAAAAAAAAf//8B///wH///APwAAAPgAAAfgAAAfAAAA/AAAA+AAAA+AAAB8AAAB8AAAD8B///wH///Af//8AAAAAAAAAAAf8AAH/8AB//8AHgDwA8AHgHgAPAcAAcBwABwHAAHAcAAcBwABwHAAHAcAAcA4ADgDwAeAH4PwAP/+AAf/wAAP4AAAAAAAH/AAB//AAf//AB4A8APAB4B4ADwHAAHAcAAcBwABwHAAHAcAAcBwABwHAAHAOAA4A8AHgB+D8AD//gAH/8AAD+AAAAAAAB/wAAf/wAH//wAeAPADwAeAeAA8BwABwHAAHAcAAcBwABwHAAHAcAAcBwABwDgAOAPAB4Afg/AA//4AB//AAA/gAAAAAAAf8AAH/8AB//8AHgDwA8AHgHgAPAcAAcBwABwHAAHAcAAcBwABwHAAHAcAAcA4ADgDwAeAH4PwAP/+AAf/wAAP4AAAAAAAH/AAB//AAf//AB4A8APAB4B4ADwHAAHAcAAcBwABwHAAHAcAAcBwABwHAAHAOAA4A8AHgB+D8AD//gAH/8AAD+AAAAAAAAAAAAGDgAA8eAAB7wAAD+AAAHwAAAfAAAD+AAAe8AADw4AAGBAAAAAAAAAAAAAAAAAf8MAH//4B///AHgD4A8AfgHgD/AcAecBwDxwHAeHAcDwcBw+BwHHgHAc8AcA/gDgD8AeAH4PwA//+AH//wAMP4AAAAAAAAAAAf//AB//+AH//8AAAB4AAADwAAAHAAAAcAAABwAAAHAAAAcAAABwAAAOAAAB4B///AH//4Af/+AAAAAAAAAAAAAAAAAAAAH//wAf//gB///AAAAeAAAA8AAABwAAAHAAAAcAAABwAAAHAAAAcAAADgAAAeAf//wB//+AH//gAAAAAAAAAAAAAAAAAAAB//8AH//4Af//wAAAHgAAAPAAAAcAAABwAAAHAAAAcAAABwAAAHAAAA4AAAHgH//8Af//gB//4AAAAAAAAAAAAAAAAAAAAf//AB//+AH//8AAAB4AAADwAAAHAAAAcAAABwAAAHAAAAcAAABwAAAOAAAB4B///AH//4Af/+AAAAAAAAAAAQAAABwAAAHwAAAPwAAAfwAAAfgAAAfgAAAf/wAB//AAf/8AH8AAA/AAAPwAAB8AAAHAAAAQAAAAAAAAAAAAAf//8B///wH///ABwHAAHAcAAcBwABwHAAHAcAAcBwABwHAAHg8AAP/gAAf8AAA/gAAAAAAAAAAAAAAAA///AP//8A///wHgAAAcAAcBwABwHBwHAcHAcB4+BwD/4PAH954APn/gAAP8AAAOAAAAAAAAAAAAAD4AAcfwADz/gAfOOCBww4PHHBg+ccGAZxw4AHHDAAcYcAA//gAD//gAD/+AAAAAAAAAAAAAAAAAPgABx/AAPP+AB844AHDDgAccGAZxwYPnHDg8ccMDBxhwAD/+AAP/+AAP/4AAAAAAAAAAAAAAAAA+AAHH8AA8/4BnzjgOcMOBxxwYOHHBg4ccOBxxwwDnGHAGP/4AA//4AA//gAAAAAAAAAAAAAAAAHwAA4/gAHn/A8+ccDzhhwMOODA444MBjjhwHOOGAM4w4Dx//AOH//AAH/8AAAAAAAAAAAAAAAAAfAADj+AAef8Bz5xwHOGHAc44MADjgwAOOHAY44YBzjDgHH/8AAf/8AAf/wAAAAAAAAAAAAAAAAAfAADj+AAef8AD5xweOGHD844MMzjgwzOOHD844YHjjDgAH/8AAf/8AAf/wAAAAAAAAAAAAAAAAHwAAx/gAHn/AAc4cADjhwAOMDAA4wcADjBwAOMHAA4w4AB//AAH/4AAP/wAB/fgAPMPAA4wcADjBwAOMHAA4wcADjBwAPMPAAfx4AA/HAAB8YAAAAAAAAAAAA/AAAP/AAB/+AAPA8AB4B4AHADgwcAPzBwA/8HADngcAOMB4B4ADwPAAHA4AAMDAAAAAAAAAAAAA/AAAP/AAB/+AAPY8AB5h4OHGDg+cYOB5xg4AnGDgAcYOAB5h4AD+PAAH44AAPjAAAGAAAAAAAAAAAAAPwAAD/wAAf/gAD2PAAeYeABxg4AHGDgOcYOD5xg4OHGDggeYeAA/jwAB+OAAD4wAABgAAAAAAAAAAAAD8AAA/8AAH/4AY9jwDnmHgecYODhxg4OHGDg8cYOB5xg4BnmHgCP48AAfjgAA+MAAAYAAAAAAAAAAAAB+AAAf+AAD/8Acex4BzzDwHOMHAA4wcADjBwAOMHAc4wcBzzDwGH8eAAPxwAAfGAAAMAAAAAAAAAAAOAAAA+f/+A5//4An//gAAAAAAAAAAAAAAAAAAAJ//4Dn//g+f/+DgAAAAAAAAMAAABwAAAOP//Aw//8Dj//wHAAAAMAAABwAAAHAAAAA//8AD//wAP//AcAAABwAAAAAAAAAA/gAAP/AAB//AAPA8AA4A4DDgDgPMAOA/wA4D7ADgPOAOB+8B4C/+/AA//4AB//AAAHAAAAAAAAAAAAP//AA//8Bx//wPHAAAw4AADjgAAGOAAAc4AAAzgAAPPAAA4f/8AA//wAB//AAAAAAAAAAAAAAAAA/AAAP/AAB/+AAPA8CB4B4OHADg+cAOA5wA4AHADgAcAOAB4B4AD4fAAH/4AAP/AAAPwAAAAAAAAAAAAPwAAD/wAAf/gADwPAAeAeABwA4AnADgecAOD5wA4OHADgAeAeAA+HwAB/+AAD/wAAD8AAAAAAAAAAAAD8AAA/8AAH/4AY8DwDngHgecAODhwA4OHADg8cAOB5wA4BngHgCPh8AAf/gAA/8AAA/AAAAAAAAAAAAB+AAAf+AAD/8AceB4DzwDwMOAHA44AcBjgBwHOAHAM4AcDzwDwOHw+AAP/wAAf+AAAfgAAAAAAAAAAAAfgAAH/gAA//AHHgeAc8A8BzgBwAOAHAA4AcADgBwHOAHAc8A8Bh8PgAD/8AAH/gAAH4AAAAAAAAAAAAMAAAAwAAADAAAAMAAAAwAAADAAADtwAAO3AAA7cAAAMAAAAwAAADAAAAMAAAAAAAAAAAAAH5gAB//AAP/4AB4PgAPB/AA4PcADh5wAOPHAA54cADvBwAP4PAAfD4AB//AAP/4AAZ+AAAAAAAAAAAAf8AAB//AAH//AAAH8AAAB4OAADg+AAOB4AA4AgADgAAAOAAABwAH//gAf/+AB//4AAAAAAAAAAAAAAAH/AAAf/wAB//wAAB/AAAAeAAAA4BgADgeAAOD4AA4MAADgAAAcAB//4AH//gAf/+AAAAAAAAAAAAAAAB/wAAH/8AAf/8AYAfwDgAHgcAAODgAA4OAADg8AAOB4AA4BgAHACf/+AB//4AH//gAAAAAAAAAAAAAAA/4AAD/+AAP/+AcAP4BwADwHAAHAAAAcAAABwAAAHAcAAcBwADgGP//AA//8AD//wAAAAAAAAAABAAAAHAAAAfgAAA/wAAA/wAAAf4cAAP/zgAP/+AB/jgA/wAAf4AAP+AAB/AAAHgAAAQAAAAAAAAAAAA//////////////A4BwAHADgAcAOABwA4AHADgAcAOAB4B4AD4fAAH/4AAP/AAAPwAAAAAABAAAAHAAAAfgAAw/wADg/wA+Af4fAAP/8AAP/AAB/g4A/wDgf4AOP+AAB/AAAHgAAAQAAA=='),
+ 32,
+ atob("BgkMGhEZEgYMDAwQCAwICxILEBAREBEOEREJCREVEQ8ZEhEUExAOFBQHDREPGBMUERQSEhEUERsREBIMCwwTEg4QERAREQoREQcHDgcYEREREQoPDBEPFg8PDwwIDBMcCgoAAAAAAAAAAAAAACERESEAAAAAAAAAAAAAAAAhIQAGCRAQEhAIDw8XCQ8RABIODRELCw4REwcLCQoPHBscDxISEhISEhoUEBAQEAcHBwcTExQUFBQUDhQUFBQUEBEREBAQEBAQGhARERERBwcHBxAREREREREPEREREREPEQ8="),
+ 28+(scale<<8)+(1<<16)
+ );
+ return this;
+};
+
+Graphics.prototype.setMiniFont = function(scale) {
+ // Actual height 16 (15 - 0)
+ this.setFontCustom(
+ atob('AAAAAAAAAAAAAP+w/5AAAAAA4ADgAOAA4AAAAAAAAAABgBmAGbAb8D+A+YDZ8B/wf4D5gJmAGQAQAAAAAAAeOD8cMwzxj/GPMYwc/Az4AAAAAHAA+DDIYMjA+YBzAAYADeA7MHMw4zDD4ADAAAAz4H/wzjDHMMMwwbBj4APgADAAAAAA4ADgAAAAAAAAAAfwH/54B+ABAAAAAOABeAcf/gfwAAAAACAAaAD4APgAOABgAAAAAAACAAIAAgA/wAMAAgACAAAAAAAAPAA4AAAAAAIAAgACAAIAAgAAAAAAADAAMAAAAAAAcAfwf4D4AIAAAAA/wH/gwDDAMMAwwDB/4D/AAAAAAGAAwAD/8P/wAAAAAHAw8HDA8MHww7DnMH4wGBAAAMBgyHDcMPww/DDv4MfAAAAAAAHgD+A+YPhgwGAH8AfwAEAAAAAA/GD8cMwwzDDMMM5wx+ABgAAAP8B/4MwwzDDMMMwwx+ADwAAAgADAAMBwwfDPgP4A8ADAAAAAe+D/8M4wxjDGMP5wf+ABwAAAfAB+cMYwwjDCMMYwf+A/wAAAAAAAAAxgBCAAAAAAAAAYPBA4AAAAAAAAAgAHAA+AHMAYYAAAAAAAAAAAAAAJAAkACQAJAAkACQAJAAkAAAAAAAAAAAAAABhgHMAPgAcAAgAAAAAAAABgAOAAwbDDsMYA/AA4AAAAAAAD4A/wGBgxzDPsMyQjJDPkM+wYIBxgD+AAAAAAABAA8A/gf8DwwODA/sAfwAHwADAAAP/w//DGMMYwxjDOMP9we+ABwA8AP8Bw4MAwwDDAMMAwwDDgcHDgMMAAAAAA//D/8MAwwDDAMMAw4HB/4D/AAAAAAP/w//DGMMYwxjDGMMQwgBAAAP/w//DDAMMAwwDDAMAADwA/wHDgwDDAMMAwwDDCMOJwc+ADwAAA//D/8AMAAwADAAMAAwD/8P/wAAAAAP/w//AAAABgAHAAMAAwAHD/4P+AAAAAAP/w//AOAB+AOcBw4MBwgDAAEAAA//D/8AAwADAAMAAwADAAAP/w//A8AA8AA+AA8AHwB8AeAHgA//D/8AAAAAD/8P/wcAAcAA8AA4AB4P/w//AAAA8AP8Bw4MAwwDDAMMAwwDDgcH/gP8AAAAAA//D/8MMAwwDDAMYA7gB8ABgADwA/wHDgwDDAMMAwwDDA8ODwf/A/8AAAAAD/8P/wwwDDAMMAx4Dv4HxwEBAAAHjg/HDMMMYwxjDGMONwc+ABwMAAwADAAMAA//D/8MAAwADAAIAAAAD/wP/gAHAAMAAwADAAMAHg/8AAAMAA+AA/AAfgAPAA8AfgPwD4AMAAwAD4AD+AA/AA8A/g/gDwAP4AH8AB8APwH8D8AMAAgBDAMPDgO8APAB8AOcDw8MAwgBCAAOAAeAAeAAfwH/B4AOAAwAAAAMAwwPDB8Mew3jD4MPAwwDAAAAAAAAB//3//QABAAAAAAADgAP4AH+AB8AAQAABAAEAAf/9//wAAAAAAAAAAGAAwAGAAwABgADAAGAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAQA3wHbAZMBswGzAf4A/wAAAAAP/w//AYMBgwGDAYMA/gB8AAAAEAD+Ae8BgwGDAYMBgwDGAAAAMAD+Ae8BgwGDAYMBhw//D/8AAAAYAP4B/wGTAZMBkwGTAP4AcAEAAYAP/w//CQAJAAAwAP4hz3GDMQMxAzGHcf/h/8AAAAAP/w//AYABgAGAAYAA/wB/AAAAAA3/Df8AAAAAOf/9//AAAAAP/w//ADgAfADGAYMBAQAAD/8P/wAAAAAB/wH/AYABgAGAAf8A/wGAAYABgAH/AP8AAAAAAf8B/wGAAYABgAGAAP8AfwAAADAA/gHvAYMBgwGDAYMA/gB8AAAAAAH/8f/xgwGDAYMBgwD+AHwAAAAwAP4B7wGDAYMBgwGHAf/x//AAAAAB/wH/AYABgAEAAAAA5gHzAbMBkwGbAd8AzgEAAYAP/wf/AQMBAwAAAAAB/gH/AAMAAwADAAcB/wH/AAABAAHgAPwAHwAPAH4B8AGAAQAB8AB+AA8APwHwAeAA/AAPAD8B+AHAAQEBgwHOAHwAOAD+AccBAwAAAQAB4AD4EB/wB8A/APgBwAAAAAEBgwGPAZ8B8wHjAcMBAQAAAAAABgf/9/n2AAAAAAAP/w//AAAEAAYAB/nz//AGAAAAAAAAAAAAcABgAGAAcAAwAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'),
+ 32,
+ atob("AwUHDwoOCwQHBwcJBAcEBgoGCQkKCQoICQoFBQoMCgkPCgoMCwkICwsECAoIDgsMCgwKCgoLCg8KCQoHBgcLCwgJCgkKCQYKCgQECAQOCgoKCgYIBwoIDAkJCAcEBwsQ"),
+ 16+(scale<<8)+(1<<16)
+ );
+ return this;
+};
+
+let imgLock = function() {
+ return {
+ width : 16, height : 16, bpp : 1,
+ transparent : 0,
+ buffer : E.toArrayBuffer(atob("A8AH4A5wDDAYGBgYP/w//D/8Pnw+fD58Pnw//D/8P/w="))
+ };
+};
+
+
+/************************************************
+ * Clock Info
+ */
+let clockInfoItems = clock_info.load();
+
+// Add some custom clock-infos
+let weekOfYear = function() {
+ var date = new Date();
+ date.setHours(0, 0, 0, 0);
+ // Thursday in current week decides the year.
+ date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7);
+ // January 4 is always in week 1.
+ var week1 = new Date(date.getFullYear(), 0, 4);
+ // Adjust to Thursday in week 1 and count number of weeks from date to week1.
+ return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000
+ - 3 + (week1.getDay() + 6) % 7) / 7);
+}
+
+clockInfoItems[0].items.unshift({ name : "weekofyear",
+ get : function() { return { text : "Week " + weekOfYear(),
+ img : null}},
+ show : function() {},
+ hide : function() {},
+})
+
+// Empty for large time
+clockInfoItems[0].items.unshift({ name : "nop",
+ get : function() { return { text : null,
+ img : null}},
+ show : function() {},
+ hide : function() {},
+})
+
+
+
+let clockInfoMenu = clock_info.addInteractive(clockInfoItems, {
+ app: "bwclk",
+ x : 0,
+ y: 135,
+ w: W,
+ h: H-135,
+ draw : (itm, info, options) => {
+ var hideClkInfo = info.text == null;
+
+ g.setColor(g.theme.fg);
+ g.fillRect(options.x, options.y, options.x+options.w, options.y+options.h);
+
+ g.setFontAlign(0,0);
+ g.setColor(g.theme.bg);
+
+ if (options.focus){
+ var y = hideClkInfo ? options.y+20 : options.y+2;
+ var h = hideClkInfo ? options.h-20 : options.h-2;
+ g.drawRect(options.x, y, options.x+options.w-2, y+h-1); // show if focused
+ g.drawRect(options.x+1, y+1, options.x+options.w-3, y+h-2); // show if focused
+ }
+
+ // In case we hide the clkinfo, we show the time again as the time should
+ // be drawn larger.
+ if(hideClkInfo){
+ drawTime();
+ return;
+ }
+
+ // Set text and font
+ var image = info.img;
+ var text = String(info.text);
+ if(text.split('\n').length > 1){
+ g.setMiniFont();
+ } else {
+ g.setSmallFont();
+ }
+
+ // Compute sizes
+ var strWidth = g.stringWidth(text);
+ var imgWidth = image == null ? 0 : 24;
+ var midx = options.x+options.w/2;
+
+ // Draw
+ if (image) {
+ var scale = imgWidth / image.width;
+ g.drawImage(image, midx-parseInt(imgWidth*1.3/2)-parseInt(strWidth/2), options.y+6, {scale: scale});
+ }
+ g.drawString(text, midx+parseInt(imgWidth*1.3/2), options.y+20);
+
+ // In case we are in focus and the focus box changes (fullscreen yes/no)
+ // we draw the time again. Otherwise it could happen that a while line is
+ // not cleared correctly.
+ if(options.focus) drawTime();
+ }
+});
+
+
+/************************************************
+ * Draw
+ */
+let draw = function() {
+ // Queue draw again
+ queueDraw();
+
+ // Draw clock
+ drawDate();
+ drawTime();
+ drawLock();
+ drawWidgets();
+};
+
+
+let drawDate = function() {
+ // Draw background
+ var y = getLineY()
+ g.reset().clearRect(0,0,W,y);
+
+ // Draw date
+ y = parseInt(y/2)+4;
+ y += isFullscreen() ? 0 : 8;
+ var date = new Date();
+ var dateStr = date.getDate();
+ dateStr = ("0" + dateStr).substr(-2);
+ g.setMediumFont(); // Needed to compute the width correctly
+ var dateW = g.stringWidth(dateStr);
+
+ g.setSmallFont();
+ var dayStr = locale.dow(date, true);
+ var monthStr = locale.month(date, 1);
+ var dayW = Math.max(g.stringWidth(dayStr), g.stringWidth(monthStr));
+ var fullDateW = dateW + 10 + dayW;
+
+ g.setFontAlign(-1,0);
+ g.drawString(dayStr, W/2 - fullDateW/2 + 10 + dateW, y-12);
+ g.drawString(monthStr, W/2 - fullDateW/2 + 10 + dateW, y+11);
+
+ g.setMediumFont();
+ g.setColor(g.theme.fg);
+ g.drawString(dateStr, W/2 - fullDateW / 2, y+2);
+};
+
+
+let drawTime = function() {
+ var hideClkInfo = clockInfoMenu.menuA == 0 && clockInfoMenu.menuB == 0;
+
+ // Draw background
+ var y1 = getLineY();
+ var y = y1;
+ var date = new Date();
+
+ var hours = String(date.getHours());
+ var minutes = date.getMinutes();
+ minutes = minutes < 10 ? String("0") + minutes : minutes;
+ var colon = settings.hideColon ? "" : ":";
+ var timeStr = hours + colon + minutes;
+
+ // Set y coordinates correctly
+ y += parseInt((H - y)/2) + 5;
+
+ if (hideClkInfo){
+ g.setLargeFont();
+ } else {
+ y -= 15;
+ g.setMediumFont();
+ }
+
+ // Clear region and draw time
+ g.setColor(g.theme.fg);
+ g.fillRect(0,y1,W,y+20 + (hideClkInfo ? 1 : 0) + (isFullscreen() ? 3 : 0));
+
+ g.setColor(g.theme.bg);
+ g.setFontAlign(0,0);
+ g.drawString(timeStr, W/2, y);
+};
+
+
+let drawLock = function() {
+ if(settings.showLock && Bangle.isLocked()){
+ g.setColor(g.theme.fg);
+ g.drawImage(imgLock(), W-16, 2);
+ }
+};
+
+
+let drawWidgets = function() {
+ if(isFullscreen()){
+ widget_utils.hide();
+ } else {
+ Bangle.drawWidgets();
+ }
+};
+
+
+/************************************************
+ * Listener
+ */
+// timeout used to update every minute
+let drawTimeout;
+
+// schedule a draw for the next minute
+let queueDraw = function() {
+ if (drawTimeout) clearTimeout(drawTimeout);
+ drawTimeout = setTimeout(function() {
+ drawTimeout = undefined;
+ draw();
+ }, 60000 - (Date.now() % 60000));
+};
+
+
+// Stop updates when LCD is off, restart when on
+let lcdListenerBw = function(on) {
+ if (on) {
+ draw(); // draw immediately, queue redraw
+ } else { // stop draw timer
+ if (drawTimeout) clearTimeout(drawTimeout);
+ drawTimeout = undefined;
+ }
+};
+Bangle.on('lcdPower', lcdListenerBw);
+
+let lockListenerBw = function(isLocked) {
+ if (drawTimeout) clearTimeout(drawTimeout);
+ drawTimeout = undefined;
+
+ if(!isLocked && settings.screen.toLowerCase() == "dynamic"){
+ // If we have to show the widgets again, we load it from our
+ // cache and not through Bangle.loadWidgets as its much faster!
+ widget_utils.show();
+ }
+
+ draw();
+};
+Bangle.on('lock', lockListenerBw);
+
+let charging = function(charging){
+ // Jump to battery
+ clockInfoMenu.setItem(0, 2);
+ drawTime();
+}
+Bangle.on('charging', charging);
+
+let kill = function(){
+ clockInfoMenu.remove();
+ delete clockInfoMenu;
+};
+E.on("kill", kill);
+
+/************************************************
+ * Startup Clock
+ */
+
+// The upper part is inverse i.e. light if dark and dark if light theme
+// is enabled. In order to draw the widgets correctly, we invert the
+// dark/light theme as well as the colors.
+let themeBackup = g.theme;
+g.setTheme({bg:g.theme.fg,fg:g.theme.bg, dark:!g.theme.dark}).clear();
+
+// Show launcher when middle button pressed
+Bangle.setUI({
+ mode : "clock",
+ remove : function() {
+ // Called to unload all of the clock app
+ Bangle.removeListener('lcdPower', lcdListenerBw);
+ Bangle.removeListener('lock', lockListenerBw);
+ Bangle.removeListener('charging', charging);
+ if (drawTimeout) clearTimeout(drawTimeout);
+ drawTimeout = undefined;
+ // save settings
+ kill();
+ E.removeListener("kill", kill);
+ g.setTheme(themeBackup);
+ widget_utils.show();
+ }
+});
+
+// Load widgets and draw clock the first time
+Bangle.loadWidgets();
+
+// Draw first time
+draw();
+
+} // End of app scope
diff --git a/apps/bwclklite/app.png b/apps/bwclklite/app.png
new file mode 100644
index 0000000000000000000000000000000000000000..5073f0ed0ee9f9c74536e8120360af8caf25aa46
GIT binary patch
literal 2116
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
bu7T|roXdI-%T9jpy1+p%KhG+6@|Ax8FvV5G
literal 0
HcmV?d00001
diff --git a/apps/bwclklite/screenshot_2.png b/apps/bwclklite/screenshot_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..8d2f1717f7bbebcac6557e2d6e475741f708ab67
GIT binary patch
literal 3038
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
literal 0
HcmV?d00001
diff --git a/apps/bwclklite/screenshot_3.png b/apps/bwclklite/screenshot_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..d52057569b0c80df6656e22333f4347e7552411a
GIT binary patch
literal 3031
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
literal 0
HcmV?d00001
diff --git a/apps/bwclklite/settings.js b/apps/bwclklite/settings.js
new file mode 100644
index 000000000..116253fda
--- /dev/null
+++ b/apps/bwclklite/settings.js
@@ -0,0 +1,50 @@
+(function(back) {
+ const SETTINGS_FILE = "bwclk.setting.json";
+
+ // initialize with default settings...
+ const storage = require('Storage')
+ let settings = {
+ screen: "Normal",
+ showLock: true,
+ hideColon: false,
+ };
+ let saved_settings = storage.readJSON(SETTINGS_FILE, 1) || settings;
+ for (const key in saved_settings) {
+ settings[key] = saved_settings[key]
+ }
+
+ function save() {
+ storage.write(SETTINGS_FILE, settings)
+ }
+
+ var screenOptions = ["Normal", "Dynamic", "Full"];
+ E.showMenu({
+ '': { 'title': 'BW Clock' },
+ '< Back': back,
+ 'Screen': {
+ value: 0 | screenOptions.indexOf(settings.screen),
+ min: 0, max: 2,
+ format: v => screenOptions[v],
+ onchange: v => {
+ settings.screen = screenOptions[v];
+ save();
+ },
+ },
+ 'Show Lock': {
+ value: settings.showLock,
+ format: () => (settings.showLock ? 'Yes' : 'No'),
+ onchange: () => {
+ settings.showLock = !settings.showLock;
+ save();
+ },
+ },
+ 'Hide Colon': {
+ value: settings.hideColon,
+ format: () => (settings.hideColon ? 'Yes' : 'No'),
+ onchange: () => {
+ settings.hideColon = !settings.hideColon;
+ save();
+ },
+ }
+ });
+ })
From 09eeac356b8adbcf17ca146ea26b2d96a3616744 Mon Sep 17 00:00:00 2001
From: thyttan <6uuxstm66@mozmail.comā©>
Date: Sat, 25 Feb 2023 18:52:29 +0100
Subject: [PATCH 03/89] Add changes to bwclklite after forking from bwclk.
Change custom font to a standard bitmap one. Don't invert theme as this
doesn't work very well with fastloading. Do an initial fillRect on the clock
info area since it would wait for clock info before drawing out the previous
app. Change all occurences of var to let.
---
apps/bwclklite/ChangeLog | 4 ++
apps/bwclklite/app.js | 133 ++++++++++++-----------------------
apps/bwclklite/metadata.json | 38 ++++++++--
3 files changed, 79 insertions(+), 96 deletions(-)
diff --git a/apps/bwclklite/ChangeLog b/apps/bwclklite/ChangeLog
index 06f94854e..8b79a4c4e 100644
--- a/apps/bwclklite/ChangeLog
+++ b/apps/bwclklite/ChangeLog
@@ -31,3 +31,7 @@ clkinfo.addInteractive that would cause ReferenceError.
0.29: use setItem of clockInfoMenu to change the active item
0.30: Use widget_utils
0.31: Use clock_info module as an app
+0.32: Diverge from BW Clock. Change out the custom font for a standard bitmap
+ one to speed up loading times. Remove invertion of theme as this doesn't
+ work very well with fastloading. Do an quick inital fillRect on the
+ clock info area.
diff --git a/apps/bwclklite/app.js b/apps/bwclklite/app.js
index 770c053c2..61a3feae1 100644
--- a/apps/bwclklite/app.js
+++ b/apps/bwclklite/app.js
@@ -32,7 +32,7 @@ for (const key in saved_settings) {
}
let isFullscreen = function() {
- var s = settings.screen.toLowerCase();
+ let s = settings.screen.toLowerCase();
if(s == "dynamic"){
return Bangle.isLocked();
} else {
@@ -42,51 +42,11 @@ let isFullscreen = function() {
let getLineY = function(){
return H/5*2 + (isFullscreen() ? 0 : 8);
-}
+};
/************************************************
* Assets
*/
-// Manrope font
-Graphics.prototype.setLargeFont = function(scale) {
- // Actual height 47 (48 - 2)
- this.setFontCustom(
- atob('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAD/AAAAAAAAA/wAAAAAAAAP8AAAAAAAAD/AAAAAAAAA/wAAAAAAAAP8AAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAD/AAAAAAAAP/wAAAAAAAf/8AAAAAAB///AAAAAAH///wAAAAAf///8AAAAB/////AAAAH////8AAAAP////wAAAA/////AAAAB////+AAAAA////4AAAAAP///gAAAAAD//+AAAAAAA//4AAAAAAAP/gAAAAAAAD/AAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///+AAAAAB////8AAAAB/////wAAAA/////+AAAA//////wAAAf/////+AAAH//////wAAD//////+AAB/+AAAf/gAAf+AAAA/8AAH/AAAAH/AAD/gAAAA/4AA/wAAAAH+AAP8AAAAB/gAD+AAAAAf4AA/gAAAAH+AAP4AAAAA/gAD+AAAAAf4AA/wAAAAH+AAP8AAAAB/gAD/AAAAA/4AA/4AAAAP+AAH/AAAAH/AAB/4AAAH/wAAP/wAAP/4AAD//////+AAAf//////AAAD//////gAAAf/////wAAAD/////4AAAAf////4AAAAB////4AAAAAB///gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAH/AAAAAAAAD/gAAAAAAAA/4AAAAAAAAf8AAAAAAAAH+AAAAAAAAD/gAAAAAAAB/wAAAAAAAAf8AAAAAAAAP///////AAD///////wAA///////8AAP///////AAD///////wAA///////8AAP///////AAD///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAB/AAAA/gAAA/wAAA/4AAAf8AAAf+AAAP/AAAP/gAAH/wAAH/4AAD/8AAD/+AAB//AAA//gAA//wAAf/AAAP/8AAH/AAAH//AAD/gAAD//wAA/wAAB//8AAP8AAA///AAD/AAAf+fwAA/gAAP/n8AAP4AAH/x/AAD+AAD/4fwAA/gAB/8H8AAP8AAf+B/AAD/AAP/AfwAA/4AH/gH8AAH/AH/wB/AAB/8H/4AfwAAP///8AH8AAD////AB/AAAf///gAfwAAD///wAH8AAAf//4AB/AAAD//4AAfwAAAP/8AAH8AAAAf4AAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAADgAAAfwAAAB+AAAH8AAAAfwAAB/AAAAH+AAAfwAAAB/wAAH8AAAA/+AAB/AAAAP/gAAfwA4AA/8AAH8AfgAH/AAB/AP8AA/4AAfwD/gAH+AAH8B/4AB/gAB/A/8AAf4AAfwf/AAD+AAH8P/wAA/gAB/H/8AAf4AAfz//gAH+AAH8//4AB/gAB/f//AA/4AAf/+/4Af8AAH//P/AP/AAB//j////gAAf/wf///4AAH/4H///8AAB/8A///+AAAf+AH///AAAH/AA///gAAB/gAD//wAAAfwAAP/wAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAH/wAAAAAAAH/8AAAAAAAH//AAAAAAAH//wAAAAAAH//8AAAAAAH///AAAAAAH///wAAAAAH///8AAAAAP//9/AAAAAP//8fwAAAAP//4H8AAAAP//4B/AAAAP//4AfwAAAP//4AH8AAAD//4AB/AAAA//4AAfwAAAP/4AAH8AAAD/wAAB/AAAA/wAAAfwAAAPwAH////AADwAB////wAAwAAf///8AAAAAH////AAAAAB////wAAAAAf///8AAAAAH////AAAAAA////wAAAAAAAfwAAAAAAAAH8AAAAAAAAB/AAAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAGAHwAAAB///gB+AAAH///8AfwAAB////AP+AAAf///wD/wAAH///+A/+AAB////gP/gAAf///4A/8AAH/8P8AH/AAB/AD+AA/4AAfwA/gAH+AAH8AfwAB/gAB/AH8AAf4AAfwB/AAH+AAH8AfwAB/gAB/AH8AAf4AAfwB/gAH+AAH8Af4AB/gAB/AH/AA/wAAfwB/4Af8AAH8AP/AP/AAB/AD////gAAfwAf///wAAH8AD///8AAB/AA///+AAAfwAH///AAAAAAA///gAAAAAAD//gAAAAAAAP/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///4AAAAAH////wAAAAH/////AAAAD/////4AAAB//////AAAA//////4AAAf//////AAAP//////4AAD/8D/w/+AAB/4B/wD/wAAf8A/wAf8AAP+AP4AD/gAD/AD+AAf4AA/wB/AAH+AAP4AfwAB/gAD+AH8AAf4AA/gB/AAH+AAP4AfwAB/gAD+AH+AAf4AA/wB/gAH+AAP8Af8AD/gAD/gH/gB/wAAf8A/8A/8AAH/AP///+AAB/gB////gAAPwAP///wAAB4AD///4AAAMAAf//8AAAAAAD//+AAAAAAAP/+AAAAAAAA/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAAAH8AAAAAAAAB/AAAAAAAAAfwAAAAAAAAH8AAAAAAAAB/AAAAABwAAfwAAAAB8AAH8AAAAD/AAB/AAAAD/wAAfwAAAH/8AAH8AAAH//AAB/AAAP//wAAfwAAP//8AAH8AAf//+AAB/AAf//8AAAfwA///8AAAH8A///4AAAB/A///4AAAAfx///wAAAAH9///wAAAAB////gAAAAAf///gAAAAAH///AAAAAAB///AAAAAAAf/+AAAAAAAH/+AAAAAAAB/8AAAAAAAAf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAf/AAAAAP+Af/8AAAAP/4P//wAAAP//P//+AAAH//////wAAB//////8AAA///////gAAf//////8AAH////gP/AAD/wf/wA/wAA/4D/4AP+AAP8Af8AB/gAD/AH/AAf4AA/gA/wAH+AAP4AP4AA/gAD+AD/AAP4AA/gA/wAH+AAP8Af8AB/gAD/AH/AAf4AA/4D/4AP+AAP/B//AH/AAB////4D/wAAf//////8AAD//////+AAAf//////AAAH//////wAAA//8///4AAAD/+D//8AAAAP+Af/8AAAAAAAB/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/gAAAAAAAB//AAAAAAAB//8AAAAAAB///gAAgAAA///8AAcAAAf///gAPAAAH///8AH4AAD////AD/AAB/+H/4B/wAAf+Af+Af8AAP+AB/wD/gAD/gAf8Af4AA/wAD/AH+AAP8AA/wB/gAD+AAH8AP4AA/gAB/AD+AAP4AAfwB/gAD+AAH8Af4AA/wAD/AH+AAP8AA/gD/gAD/gAf4A/wAAf8AP8A/8AAH/gH/Af/AAA///////gAAP//////wAAB//////8AAAP/////+AAAB//////AAAAP/////AAAAA/////gAAAAD////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wA/wAAAAAP8AP8AAAAAD/AD/AAAAAA/wA/wAAAAAP8AP8AAAAAD/AD/AAAAAA/wA/wAAAAAP8AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='),
- 46,
- atob("ExspGyUkJiQnISYnFQ=="),
- 62+(scale<<8)+(1<<16)
- );
- return this;
-};
-
-Graphics.prototype.setMediumFont = function(scale) {
- // Actual height 41 (42 - 2)
- this.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAA/AAAAAAAA/AAAAAAAA/AAAAAAAA/AAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAB/AAAAAAAP/AAAAAAD//AAAAAA///AAAAAP///AAAAB///8AAAAf///AAAAH///wAAAB///+AAAAH///gAAAAH//4AAAAAH/+AAAAAAH/wAAAAAAH8AAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///8AAAAH////AAAAP////wAAAf////4AAA/////8AAB/////+AAD/gAAH+AAD+AAAD/AAH8AAAB/AAH4AAAA/gAH4AAAAfgAH4AAAAfgAPwAAAAfgAPwAAAAfgAPwAAAAfgAHwAAAAfgAH4AAAAfgAH4AAAA/gAH8AAAA/AAD+AAAD/AAD/gAAH/AAB/////+AAB/////8AAA/////4AAAf////wAAAH////gAAAB///+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAfwAAAAAAA/gAAAAAAA/AAAAAAAB/AAAAAAAD+AAAAAAAD8AAAAAAAH8AAAAAAAH//////AAH//////AAH//////AAH//////AAH//////AAH//////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAA/AAAP4AAB/AAAf4AAD/AAA/4AAD/AAB/4AAH/AAD/4AAP/AAH/AAAf/AAH8AAA//AAH4AAB//AAP4AAD//AAPwAAH+/AAPwAAP8/AAPwAAf4/AAPwAA/4/AAPwAA/w/AAPwAB/g/AAPwAD/A/AAP4AH+A/AAH8AP8A/AAH/A/4A/AAD///wA/AAD///gA/AAB///AA/AAA//+AA/AAAP/8AA/AAAD/wAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAH4AAAHwAAH4AAAH4AAH4AAAH8AAH4AAAP+AAH4AAAH+AAH4A4AB/AAH4A+AA/AAH4B/AA/gAH4D/AAfgAH4H+AAfgAH4P+AAfgAH4f+AAfgAH4/+AAfgAH5/+AAfgAH5//AAfgAH7+/AA/gAH/8/gB/AAH/4f4H/AAH/wf//+AAH/gP//8AAH/AH//8AAH+AD//wAAH8AB//gAAD4AAf+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAD/AAAAAAAP/AAAAAAB//AAAAAAH//AAAAAAf//AAAAAB///AAAAAH///AAAAAf/8/AAAAB//w/AAAAH/+A/AAAA//4A/AAAD//gA/AAAH/+AA/AAAH/4AA/AAAH/gAA/AAAH+AAA/AAAHwAAA/AAAHAAf///AAEAAf///AAAAAf///AAAAAf///AAAAAf///AAAAAf///AAAAAAA/AAAAAAAA/AAAAAAAA/AAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAP/AHgAAH///AP4AAH///gP8AAH///gP8AAH///gP+AAH///gD/AAH/A/AB/AAH4A/AA/gAH4A+AAfgAH4B+AAfgAH4B+AAfgAH4B8AAfgAH4B8AAfgAH4B+AAfgAH4B+AAfgAH4B+AA/gAH4B/AA/AAH4A/gD/AAH4A/4H+AAH4Af//+AAH4AP//8AAH4AP//4AAHwAD//wAAAAAB//AAAAAAAf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///8AAAAD////AAAAP////wAAAf////4AAA/////8AAB/////+AAD/gP4H+AAD/AfgD/AAH8A/AB/AAH8A/AA/gAH4B+AAfgAH4B+AAfgAPwB8AAfgAPwB8AAfgAPwB+AAfgAPwB+AAfgAH4B+AAfgAH4B/AA/gAH8B/AB/AAH+A/wD/AAD+A/8P+AAB8Af//+AAB4AP//8AAAwAH//4AAAAAD//gAAAAAA//AAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAPwAAAAAAAPwAAAAAAAPwAAAAAAAPwAAAAHAAPwAAAA/AAPwAAAD/AAPwAAAf/AAPwAAB//AAPwAAP//AAPwAA//8AAPwAH//wAAPwAf/+AAAPwB//4AAAPwP//AAAAPw//8AAAAP3//gAAAAP//+AAAAAP//wAAAAAP//AAAAAAP/4AAAAAAP/gAAAAAAP+AAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AAAAH+A//gAAAf/h//4AAA//z//8AAB/////+AAD/////+AAD///+H/AAH+H/4B/AAH8B/wA/gAH4A/gAfgAH4A/gAfgAPwA/AAfgAPwA/AAfgAPwA/AAfgAPwA/AAfgAH4A/gAfgAH4A/gAfgAH8B/wA/gAH/H/4B/AAD///+H/AAD/////+AAB/////+AAA//z//8AAAf/h//4AAAH+A//gAAAAAAH+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAD/8AAAAAAP/+AAAAAAf//AAcAAA///gA8AAB///wB+AAD/x/4B/AAD+AP4B/AAH8AH8A/gAH4AH8A/gAH4AD8AfgAP4AD8AfgAPwAB8AfgAPwAB8AfgAPwAB8AfgAPwAB8AfgAH4AD8AfgAH4AD4A/gAH8AH4B/AAD+APwD/AAD/g/wP+AAB/////+AAA/////8AAAf////4AAAP////wAAAH////AAAAA///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8APwAAAAD8APwAAAAD8APwAAAAD8APwAAAAD8APwAAAAD8APwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="), 46, atob("DxcjFyAfISAiHCAiEg=="), 54+(scale<<8)+(1<<16));
- return this;
-};
-
-Graphics.prototype.setSmallFont = function(scale) {
- // Actual height 28 (27 - 0)
- this.setFontCustom(
- atob('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/+cB//5wH//nAAAAAAAAAAAAAAAAAAAB8AAAHwAAAfAAAAAAAAAAAAAfAAAB8AAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAQcAADhwAAOHBAA4c8ADh/wAP/+AB/+AA//wAH+HAAe4cMBDh/wAOP/AA//wAP/wAH/3AAf4cABzhwAAOHAAA4cAADgAAAOAAAAAAAAAAAAAAAAAAAAwAH8HwA/4PgD/geAePA8BwcBw/BwH78DgfvwOB+HA4HAeBwcA8HDgB4f+ADg/wAGB+AAAAAAAAAAAAAAAH4AAA/wBwHngPAcOB4Bw4PAHDh4AcOPAA/x4AD/PAADx4AAAPAAAB5wAAPPwAB5/gAPOPAB4wcAPDBwB4MHAPA4cA4B/gBAH8AAAHAAAAAAAAAAAAAPAAHD/AB/f+AP/x4B4+DwHB4HAcDwcBwHhwHAPHAcAccB4A5wDgB+AGA/4AAH/AAAf+AAAA8AAABgAAAAAfAAAB8AAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/8AD//+A/+/+H4AD98AAB3gAADIAAAAAAAAAAAAAIAAABwAAAXwAAHPwAB8P8D/gP//4AH/8AAAAAAAAAAAAAAAAAAAAAAAAHAAAAcwAAA/gAAb8AAB/gAAH+AAAD+AAAOwAABxAAADAAAAAAAAAAAAAADAAAAMAAAAwAAADAAAAMAAAAwAAB//AAH/8AAAwAAADAAAAMAAAAwAAADAAAAMAAAAAAAAAAAAAABwAAAHIAAAfgAAB8AAAAAAAAAAAAAAAAAAAAAwAAADAAAAMAAAAwAAADAAAAMAAAAwAAADAAAAMAAAAAAAAAAAAAAAAAAAAAAABwAAAHAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAA/wAA//AA//AA//AAH/AAAfAAABAAAAAAAAAAAAAAAAAAAf/wAH//wA///gDgAOAcAAcBwABwHAAHAcAAcBwABwHgAPAPAB4Af//AA//4AA/+AAAAAAAAAAAAAAAAMAAABwAAAOAAAB4AAAH///Af//8B///wAAAAAAAAAAAAAAAAAAAAwAcAPADwB8AfAPAB8B4APwHAB/AcAPcBwB5wHAPHAcB4cA8PBwD/4HAH/AcAHwBwAAAAAAAAAAAAGAHAAcAcAB4BwYDwHDwHAceAcBz4BwHfgHAf3AcB+eDwHw/+AeB/wBwD+AAAAAAAAAAAAAAAAABwAAAfAAAP8AAD/wAA/nAAP4cAD+BwAfgHAB4AcAEA//AAD/8AAP/wAABwAAAHAAAAMAAAAAAAAAAAAAEAH/w4Af/D4B/8HgHDgPAcOAcBw4BwHDgHAcOAcBw8DwHB4eAcH/wBgP+AAAPwAAAAAAAAAAAAAAAB//AAf//AD//+AOHB4Bw4BwHDgHAcOAcBw4BwHDgHAcPA8A4eHgDh/8AEB/gAAD4AAAAAAAAAABwAAAHAAAAcAAMBwADwHAB/AcA/4BwP8AHH/AAd/gAB/wAAH8AAAeAAAAAAAAAAAAAAAEAAPD+AB/f8AP//4B4+DwHDwHAcHAcBwcBwHBwHAcPAcB/+DgD//+AH5/wACB8AAAAAAAAAAAAAAAAEAAAD+AAAf+DAD74OAODw8BwHBwHAOHAcA4cBwDBwHAcHAeBw8A+ePgB//8AD//gAB/wAAAAAAAAAAAAAAAAAAAAAHBwAAcHAABwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AcgDgB+AOAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAeAAAD8AAAf4AADzwAAeHgADwPAAGAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADGAAAMYAAAxgAADGAAAMYAAAxgAADGAAAMYAAAxgAADGAAAMYAAAxgAADGAAAMYAAAxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABACAAOAcAA8DgAB4cAABzgAAD8AAAHgAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAHgAAA+AAAHgAAAcAAABwD5wHAfnAcD8cBweAAHzwAAP+AAAfwAAAcAAAAAAAAAAAAAAAAAAB/AAA//AAH/+AA8A8AHAA4A4ABwDg+HAcH8OBw444GDBhgYMGGBgwYYHDjjgcP8OBw/44DgDhAOAGAAeAYAA+HgAB/8AAB/gAAAAAAAAAAAAABAAAA8AAAfwAAP/AAH/gAD/4AB/zgAf4OAB8A4AHwDgAf4OAA/84AAP/gAAH/AAAD/gAAB/AAAA8AAAAQAAAAAAAAAB///wH///Af//8BwOBwHA4HAcDgcBwOBwHA4HAcDgcBweBwHj4HAP/58Afz/gAcH8AAAPAAAAAAAH/AAB//AAf//AB4A8APAB4B4ADwHAAHAcAAcBwABwHAAHAcAAcBwABwHAAHAOAA4A8AHgB8B8ADwHgADAYAAAAAAAAAAAAAAAH///Af//8B///wHAAHAcAAcBwABwHAAHAcAAcBwABwHAAHAeAA8A8AHgB8B+AD//gAH/8AAD/AAAAAAAAAAAAAAAAf//8B///wH///AcDgcBwOBwHA4HAcDgcBwOBwHA4HAcDgcBwOBwHAAHAcAAcAAAAAAAAAAAAAAB///wH///Af//8BwOAAHA4AAcDgABwOAAHA4AAcDgABwOAAHAAAAcAAAAAAAAAP/AAB//AAf//AB4A8APAB4B4ADwHAAHAcAAcBwABwHAAHAcAAcBwGBwHgYPAOBg4A+GPgB4f8ADh/gAAH4AAAAAAAAAAAAAAAH///Af//8B///wAA4AAADgAAAOAAAA4AAADgAAAOAAAA4AAADgAAAOAAAA4AAf//8B///wH///AAAAAAAAAAAAAAAAAAAB///wH///Af//8AAAAAAAAAAAABgAAAHgAAAeAAAA8AAABwAAAHAAAAcAAABwH///Af//4B///AAAAAAAAAAAAAAAAAAAAf//8B///wH///AAHgAAA/AAAH+AAA88AAHh8AA8D4AHgDwA8AHgHgAPAYAAcBAAAwAAABAAAAAAAAAAH///Af//8B///wAAAHAAAAcAAABwAAAHAAAAcAAABwAAAHAAAAcAAABwAAAAAAAAAAAAAAH///Af//8B///wB/AAAB/AAAA/AAAA/gAAA/gAAA/gAAA/AAAD8AAA/AAAfwAAH8AAB/AAAfgAAP4AAB///wH///Af//8AAAAAAAAAAAAAAAAAAAH///Af//8B///wD8AAAD4AAAH4AAAHwAAAPwAAAPgAAAPgAAAfAAAAfAAAA/Af//8B///wH///AAAAAAAAAAAH/AAB//AAf//AB4A8APAB4B4ADwHAAHAcAAcBwABwHAAHAcAAcBwABwHAAHAOAA4A8AHgB+D8AD//gAH/8AAD+AAAAAAAAAAAH///Af//8B///wHAOAAcA4ABwDgAHAOAAcA4ABwDgAHAeAAeBwAA+fAAD/4AAD/AAADgAAAAAAAAf8AAH/8AB//8AHgDwA8AHgHgAPAcAAcBwABwHAAHAcAAcBwABwHAAnAcAHcA4AfgDwA+AH4P4AP//wAf/3AAP4AAAAAAAAAAAf//8B///wH///AcA4ABwDgAHAOAAcA4ABwDgAHAOAAcB+AB4H+AD59/AP/h8AP8BwAOABAAAAAAAAAAAAAwAD4HwA/4fAD/geAePA8BwcBwHBwHAcDgcBwOBwHA4HAcDgcA4HDwD4eeAHw/4AOD/AAIDwAAAAABwAAAHAAAAcAAABwAAAHAAAAcAAABwAAAH///Af//8B///wHAAAAcAAABwAAAHAAAAcAAABwAAAGAAAAAAAAAAAAAH//wAf//gB///AAAAeAAAA8AAABwAAAHAAAAcAAABwAAAHAAAAcAAADgAAAeAf//wB//+AH//gAAAAAAAAAAGAAAAfAAAB/gAAB/wAAA/4AAAf8AAAP/AAAH8AAADwAAA/AAAf8AAP+AAP/AAH/gAB/wAAH4AAAcAAABAAAAHwAAAf4AAA/+AAAP/gAAH/wAAB/wAAA/AAAf8AAf/AAP/gAP/gAB/gAAH4AAAf+AAAf/AAAH/wAAB/8AAAfwAAB/AAB/8AA/+AA/+AAf+AAB/AAAHAAAAAAAAAAAAQGAADAeAA8B8AHwD8B+AD4PgAH74AAH/AAAPwAAA/gAAP/gAD8fAAfA/AH4A+AeAA8BwABwEAABAQAAABwAAAHwAAAPwAAAfwAAAfgAAAfgAAAf/wAB//AAf/8AH8AAA/AAAPwAAB8AAAHAAAAQAAAAAAAAAAABAcAAcBwADwHAA/AcAP8BwD/wHAfnAcH4cBx+BwHPwHAf8AcB/ABwH4AHAeAAcBgABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/////////gAAAOAAAA4AAADAAAAAAAAAAAAAAAAAAAAAAAeAAAB/gAAH/4AAB/+AAAf/gAAH/AAAB8AAAAQAAAAAAAAAAAAAAOAAAA4AAADgAAAP/////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADgAAAcAAADgAAAcAAADgAAAcAAAB4AAADwAAADgAAAHAAAAOAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAYAAABgAAAGAAAAYAAABgAAAGAAAAYAAABgAAAGAAAAYAAABgAAAGAAAAYAAABgAAAGAAAAYAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAADj+AAef8AD5xwAOGHAA44MADjgwAOOHAA44YADjDgAH/8AAf/8AAf/wAAAAAAAAAAAAAAAAAAAf//8B///wH//+AAcA4ADgBwAOAHAA4AcADgBwAOAHAA8A8AB8PgAD/8AAH/gAAH4AAAAAAAAAAAAH4AAB/4AAP/wAB4HgAPAPAA4AcADgBwAOAHAA4AcADgBwAPAPAAeB4AA4HAABgYAAAAAAAAAAAAfgAAH/gAB//gAHgeAA8A8ADgBwAOAHAA4AcADgBwAOAHAAcA4B///wH///Af//8AAAAAAAAAAAAAAAAH4AAB/4AAP/wAB7HgAPMPAA4wcADjBwAOMHAA4wcADjBwAPMPAAfx4AA/HAAB8YAAAwAAAAAAAAAAAAwAAADAAAB///AP//8B///wHMAAAYwAABjAAAGMAAAAAAAAAPwAAD/wMA//w4DwPHgeAePBwA4cHADhwcAOHBwA4cHADhwOAcPB///4H///Af//wAAAAAAAAAAAAAAAAAAB///wH///AAf/8ABwAAAOAAAA4AAADgAAAOAAAA4AAADwAAAH//AAP/8AAf/wAAAAAAAAAAAAAAAAAAAc//8Bz//wHP//AAAAAAAAAAAAAAHAAAAcAAAH+f///5///7H//8AAAAAAAAAAAAAAH///Af//8B///wAAPAAAB+AAAP8AAB54AAfDwAD4HgAOAPAAwAcACAAwAAAAAAAAAB///wH///Af//8AAAAAAAAAAAAAAAAAAAAP//AA//8AB//wAHAAAA4AAADgAAAOAAAA4AAAD4AAAH//AAP/8AB//wAHAAAA4AAADgAAAOAAAA4AAADwAAAH//AAP/8AAf/wAAAAAAAAAAAAAAAP//AA//8AB//wAHAAAA4AAADgAAAOAAAA4AAADgAAAPAAAAf/8AA//wAB//AAAAAAAAAAAAAAAAB+AAAf+AAD/8AAeB4ADwDwAOAHAA4AcADgBwAOAHAA4AcADwDwAHw+AAP/wAAf+AAAfgAAAAAAAAAAAAAAAB///8H///wP///A4BwAHADgAcAOABwA4AHADgAcAOAB4B4AD4fAAH/4AAP/AAAPwAAAAAAAAAAAAPwAAD/wAA//wADwPAAeAeABwA4AHADgAcAOABwA4AHADgAOAcAB///8H///wf///AAAAAAAAAAAAAAAAAAAD//wAP//AAf/8ABwAAAOAAAA4AAADgAAAOAAAAAAAAAYGAAD4cAAfx4AD3DwAOOHAA44cADjhwAOGHAA4ccADxzwAHj+AAOP4AAYOAAAAAAAwAAADAAAAMAAAP//wA///gD///AAwAcADABwAMAHAAwAcADAAwAAAAAAAAAAD/gAAP/4AA//4AAA/gAAAPAAAAcAAABwAAAHAAAAcAAABwAAAOAA//8AD//wAP//AAAAAAAAAAAIAAAA4AAAD8AAAH+AAAH/AAAD/gAAB/AAAB8AAA/wAAf8AAP+AAD/AAAPgAAAwAAAAAAAAIAAAA8AAAD/AAAH/gAAD/wAAA/wAAA/AAAf8AAP+AAP+AAA/AAAD+AAAH/AAAD/gAAA/wAAA/AAAf8AAP/AAP/AAA/gAADgAAAAAAAAAAEADAAwAOAHAA+B8AB8PgAB74AAD/AAAH4AAA/wAAHvgAB8PgAPgfAA4AcADAAwAAABABAAAAHAAAAfgAAA/wAAA/wAwAf4fAAP/8AAP/AAB/gAA/wAAf4AAP+AAB/AAAHgAAAQAAAAAAEADAAwAOAPAA4B8ADgPwAOD/AA4ecADnxwAO8HAA/gcAD8BwAPAHAA4AcACAAwAAAAAAAAAAAAAAAAAAAAAAAAAA8AB////f//////n/+AAAA4AAADgAAAAAAAAAAAAAAAAAH///Af//8B///wAAAAAAAAAAAAAAAAAAA4AAADgAAAOAAAA//5/9////z////AAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAB8AAAHwAAAcAAABwAAAHgAAAOAAAA8AAABwAAAHAAAB8AAAHwAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAYAAABgAAAGAAAAYAAABgAAAGAAAAYAAABgAAAGAAAAGAAABwAAAOAAABwAAAHAAAAcAAAA4AAABwAAABgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAOAB4B4ADwPAAHh4AAPPAAAf4AAA/AAAB4AAAPwAAB/gAAPPAAB4eAAPA8AB4B4AHADgAIAEAAAAAAADAAAAMAAAAwAAADAAAAMAAAAwAAHDDgA8MPADww8AGDBgAAMAAAAwAAADAAAAMAAAAwAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADn//gOf/+A5//4AAAAAAAAAAAAAAAAAAAD/AAA//AAH/+AA+B8ADgBwAOAHAHwAPgfAA+B8AD4A4AcADwDwAHgeAAOBwAAQCAAAAAAAAAAAADgcAAOBwAA4HAD//8A///wD///AeDgcBwOBwHA4HAcDgcB4GBwD4AHAHgAcAOAAAAAAAAAAAAAMAGAB7+8AD//gAHx8AAcBwADgDgAOAOAA4A4ADgDgAOAOAA4A4ABwHAAHg8AA//4AH//wAMOGAAAAAAQAAABwAAAHwMYAPwxgAfjGAAfsYAAf7gAAf/wAB//AAf/8AH7GAA/MYAPwxgB8DGAHAAAAQAAAAAAAAAAAAAf/D/5/8P/n/w/+AAAAAAAAAAAAAAAAAAAABwAAffhwD//Hgf+cfBzwwcGHDhwYcOHBxw4cHDhxwfOPvA8//4Bx//AADwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAP/wAB//gAPAPAB4AOAPDw8A4/xwHH/jgc4HOBzgc4HMAzgcwDOBzgc4HPDjgOcOeA4whwBwAOAHwD4APw/AAf/4AAf+AAAPAAAAAAAATgAAD/AAANsAAA2wAADTAAAP8AAAfwAAAAAAAAAAAAAAAAAAgAAAPAAAB+AAAOeAADw8AAOIwAADxAAAfgAADngAA8PAADgMAAEAQAAAAAAAAAAABgAAAGAAAAYAAABgAAAGAAAAYAAABgAAAGAAAAYAAABgAAAGAAAAYAAAB+AAAH4AAAAAAAAAAAAAAAAAAAAD8AAA/8AAHh4AAYDgAD/3AAN/MAA0QwADRjAAN/MAA7hwABwOAADhwAAH+AAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAD/AAAeeAABw4AAGDgAAYOAABw4AAH/AAAP8AAAfAAAAAAAAAAAAAAAAAAAwYAADBgAAMGAAAwYAADBgAAMGAAP+YAA/5gAD/mAAAwYAADBgAAMGAAAwYAADBgAAAAAAAAAAAAAAAMDAABwcAAPDwAAwPAADB8AAMOwAA5zAAB+MAADwwAAAAAAAAAAAIBAAAwGAADMcAANwwAA/DAAD8MAAO/wAAx+AAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf///B///8H//AAAAeAAAA4AAADgAAAOAAAA4AAADgAAAcAB//gAH//gAf/+AAAAAAAAAAAAAAAAAAAAP4AAB/4AAP/gAB//AAH/8AAf/wAB//AAH///8f///x////AAAAAAAAAB////H///8f///wAAAAAAAAAAAAAAABAAAAOAAAB4AAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAzAAAPMAAA/wAAAeAAAAAAAAAAAAAAAAAAAIAAABgAAAMAAAA//AAD/8AAAAAAAAAAAAAAAAAAAAAA8AAAP4AAAwwAADDAAAMMAAA5wAAB+AAADwAAAAAAAAAAAAAAAAAMAwAA8HAAB44AAD/AAAD4AADGMAAOBwAAeOAAA/wAAA+AAABgAAAAAAAAAAAAAAABAAAAMAAABwAAAH/8CAf/wcAAAHgAAA8AAAHgAAB4AAAPAAAB4AAAeAAADwAAA+AAAHgCAA8A8APAfwB4H7AHB+MAAHAwAAQ/wAAD/AAAAwAAADAAAAAAAAAAAAAAAAAAAAEAAAAwAAAHAAAAf/wIB//BwAAAeAAADwAAAeAAAHgAAA8AAAHgAAB4AAAPAAAD4AAAeAAADwAAA8GAwHg4HAcHA8AAYHwABg7AAGHMAAf4wAA/DAAA4MAAAAAAAAAAYBgABgHAAGMOAAZwYABvBgAH8OCAe/wcBx+HgABg8AAAHgAAB4AAAPAAAB4AAAeAAADwAAA+AAAHgHAA8B8APAfwB4HzADB8MAAHAwAAQ/wAAD/AAAAwAAAAAAAAAAAAAAAAAA4AAAP4AAB/wAAPHgABwOA4/A4Dn4DgOfAOAAAA4AAAHgAAB8AAAHgAAAYAAAAAAAAEAAADwAAB/AAA/8AAf+AAP/gAH/OAB/g4AHwDgAfAOAB/g4AD/zgAA/+AAAf8AAAP+AAAH8AAADwAAABAAAAEAAADwAAB/AAA/8AAf+AAP/gAH/OAB/g4AHwDgAfAOAB/g4AD/zgAA/+AAAf8AAAP+AAAH8AAADwAAABAAAAEAAADwAAB/AAA/8AAf+AAP/gAH/OAB/g4AHwDgAfAOAB/g4AD/zgAA/+AAAf8AAAP+AAAH8AAADwAAABAAAAEAAADwAAB/AAA/8AAf+AAP/gAH/OAB/g4AHwDgAfAOAB/g4AD/zgAA/+AAAf8AAAP+AAAH8AAADwAAABAAAAEAAADwAAB/AAA/8AAf+AAP/gAH/OAB/g4AHwDgAfAOAB/g4AD/zgAA/+AAAf8AAAP+AAAH8AAADwAAABAAAAAAAAABwAAA/AAAf8AAP/AAH/wfD/nD+/wcMb4BwxvgHD+/wcHx/5wEAf/AAAP+AAAH/AAAD8AAABwAAAAAAAEAAADwAAB/AAA/8AAf+AAP/gAH/OAB/g4AHwDgAcAOABwA4AHADgAf//8B///wHA4HAcDgcBwOBwHA4HAcDgcBwOBwHA4HAcDgcBwOBwHAAHAYAAMAAAAAAAAAAA/4AAP/4AD//4APAHgB4APAPAAeA4AA4DgADg+AAPz4AA//gAD/+AAOe4AA4BwAHAHgA8APgPgAeA8AAYDAAAAAAAAAAAAAAAAf//8B///wH///AcDgcBwOBwHA4HAcDgcBwOBwHA4HAcDgcBwOBwHAAHAcAAcAAAAAAAAAAAAAAB///wH///Af//8BwOBwHA4HAcDgcBwOBwHA4HAcDgcBwOBwHA4HAcAAcBwABwAAAAAAAAAAAAAAH///Af//8B///wHA4HAcDgcBwOBwHA4HAcDgcBwOBwHA4HAcDgcBwABwHAAHAAAAAAAAAAAAAAAf//8B///wH///AcDgcBwOBwHA4HAcDgcBwOBwHA4HAcDgcBwOBwHAAHAcAAcAAAAAAAAAAAAAAB///wH///Af//8AAAAAAAAAAAAAAAAAAAH///Af//8B///wAAAAAAAAAAAAAAAAAAAf//8B///wH///AAAAAAAAAAAAAAAAAAAB///wH///Af//8AAAAAAAAAAABgAAAGAAH///Af//8B///wHAYHAcBgcBwGBwHAYHAcBgcBwABwHAAHAeAA8A8AHgB+D8AD//gAH/8AAD+AAAAAAAAAAAAAAAAf//8B///wH///APwAAAPgAAAfgAAAfAAAA/AAAA+AAAA+AAAB8AAAB8AAAD8B///wH///Af//8AAAAAAAAAAAf8AAH/8AB//8AHgDwA8AHgHgAPAcAAcBwABwHAAHAcAAcBwABwHAAHAcAAcA4ADgDwAeAH4PwAP/+AAf/wAAP4AAAAAAAH/AAB//AAf//AB4A8APAB4B4ADwHAAHAcAAcBwABwHAAHAcAAcBwABwHAAHAOAA4A8AHgB+D8AD//gAH/8AAD+AAAAAAAB/wAAf/wAH//wAeAPADwAeAeAA8BwABwHAAHAcAAcBwABwHAAHAcAAcBwABwDgAOAPAB4Afg/AA//4AB//AAA/gAAAAAAAf8AAH/8AB//8AHgDwA8AHgHgAPAcAAcBwABwHAAHAcAAcBwABwHAAHAcAAcA4ADgDwAeAH4PwAP/+AAf/wAAP4AAAAAAAH/AAB//AAf//AB4A8APAB4B4ADwHAAHAcAAcBwABwHAAHAcAAcBwABwHAAHAOAA4A8AHgB+D8AD//gAH/8AAD+AAAAAAAAAAAAGDgAA8eAAB7wAAD+AAAHwAAAfAAAD+AAAe8AADw4AAGBAAAAAAAAAAAAAAAAAf8MAH//4B///AHgD4A8AfgHgD/AcAecBwDxwHAeHAcDwcBw+BwHHgHAc8AcA/gDgD8AeAH4PwA//+AH//wAMP4AAAAAAAAAAAf//AB//+AH//8AAAB4AAADwAAAHAAAAcAAABwAAAHAAAAcAAABwAAAOAAAB4B///AH//4Af/+AAAAAAAAAAAAAAAAAAAAH//wAf//gB///AAAAeAAAA8AAABwAAAHAAAAcAAABwAAAHAAAAcAAADgAAAeAf//wB//+AH//gAAAAAAAAAAAAAAAAAAAB//8AH//4Af//wAAAHgAAAPAAAAcAAABwAAAHAAAAcAAABwAAAHAAAA4AAAHgH//8Af//gB//4AAAAAAAAAAAAAAAAAAAAf//AB//+AH//8AAAB4AAADwAAAHAAAAcAAABwAAAHAAAAcAAABwAAAOAAAB4B///AH//4Af/+AAAAAAAAAAAQAAABwAAAHwAAAPwAAAfwAAAfgAAAfgAAAf/wAB//AAf/8AH8AAA/AAAPwAAB8AAAHAAAAQAAAAAAAAAAAAAf//8B///wH///ABwHAAHAcAAcBwABwHAAHAcAAcBwABwHAAHg8AAP/gAAf8AAA/gAAAAAAAAAAAAAAAA///AP//8A///wHgAAAcAAcBwABwHBwHAcHAcB4+BwD/4PAH954APn/gAAP8AAAOAAAAAAAAAAAAAD4AAcfwADz/gAfOOCBww4PHHBg+ccGAZxw4AHHDAAcYcAA//gAD//gAD/+AAAAAAAAAAAAAAAAAPgABx/AAPP+AB844AHDDgAccGAZxwYPnHDg8ccMDBxhwAD/+AAP/+AAP/4AAAAAAAAAAAAAAAAA+AAHH8AA8/4BnzjgOcMOBxxwYOHHBg4ccOBxxwwDnGHAGP/4AA//4AA//gAAAAAAAAAAAAAAAAHwAA4/gAHn/A8+ccDzhhwMOODA444MBjjhwHOOGAM4w4Dx//AOH//AAH/8AAAAAAAAAAAAAAAAAfAADj+AAef8Bz5xwHOGHAc44MADjgwAOOHAY44YBzjDgHH/8AAf/8AAf/wAAAAAAAAAAAAAAAAAfAADj+AAef8AD5xweOGHD844MMzjgwzOOHD844YHjjDgAH/8AAf/8AAf/wAAAAAAAAAAAAAAAAHwAAx/gAHn/AAc4cADjhwAOMDAA4wcADjBwAOMHAA4w4AB//AAH/4AAP/wAB/fgAPMPAA4wcADjBwAOMHAA4wcADjBwAPMPAAfx4AA/HAAB8YAAAAAAAAAAAA/AAAP/AAB/+AAPA8AB4B4AHADgwcAPzBwA/8HADngcAOMB4B4ADwPAAHA4AAMDAAAAAAAAAAAAA/AAAP/AAB/+AAPY8AB5h4OHGDg+cYOB5xg4AnGDgAcYOAB5h4AD+PAAH44AAPjAAAGAAAAAAAAAAAAAPwAAD/wAAf/gAD2PAAeYeABxg4AHGDgOcYOD5xg4OHGDggeYeAA/jwAB+OAAD4wAABgAAAAAAAAAAAAD8AAA/8AAH/4AY9jwDnmHgecYODhxg4OHGDg8cYOB5xg4BnmHgCP48AAfjgAA+MAAAYAAAAAAAAAAAAB+AAAf+AAD/8Acex4BzzDwHOMHAA4wcADjBwAOMHAc4wcBzzDwGH8eAAPxwAAfGAAAMAAAAAAAAAAAOAAAA+f/+A5//4An//gAAAAAAAAAAAAAAAAAAAJ//4Dn//g+f/+DgAAAAAAAAMAAABwAAAOP//Aw//8Dj//wHAAAAMAAABwAAAHAAAAA//8AD//wAP//AcAAABwAAAAAAAAAA/gAAP/AAB//AAPA8AA4A4DDgDgPMAOA/wA4D7ADgPOAOB+8B4C/+/AA//4AB//AAAHAAAAAAAAAAAAP//AA//8Bx//wPHAAAw4AADjgAAGOAAAc4AAAzgAAPPAAA4f/8AA//wAB//AAAAAAAAAAAAAAAAA/AAAP/AAB/+AAPA8CB4B4OHADg+cAOA5wA4AHADgAcAOAB4B4AD4fAAH/4AAP/AAAPwAAAAAAAAAAAAPwAAD/wAAf/gADwPAAeAeABwA4AnADgecAOD5wA4OHADgAeAeAA+HwAB/+AAD/wAAD8AAAAAAAAAAAAD8AAA/8AAH/4AY8DwDngHgecAODhwA4OHADg8cAOB5wA4BngHgCPh8AAf/gAA/8AAA/AAAAAAAAAAAAB+AAAf+AAD/8AceB4DzwDwMOAHA44AcBjgBwHOAHAM4AcDzwDwOHw+AAP/wAAf+AAAfgAAAAAAAAAAAAfgAAH/gAA//AHHgeAc8A8BzgBwAOAHAA4AcADgBwHOAHAc8A8Bh8PgAD/8AAH/gAAH4AAAAAAAAAAAAMAAAAwAAADAAAAMAAAAwAAADAAADtwAAO3AAA7cAAAMAAAAwAAADAAAAMAAAAAAAAAAAAAH5gAB//AAP/4AB4PgAPB/AA4PcADh5wAOPHAA54cADvBwAP4PAAfD4AB//AAP/4AAZ+AAAAAAAAAAAAf8AAB//AAH//AAAH8AAAB4OAADg+AAOB4AA4AgADgAAAOAAABwAH//gAf/+AB//4AAAAAAAAAAAAAAAH/AAAf/wAB//wAAB/AAAAeAAAA4BgADgeAAOD4AA4MAADgAAAcAB//4AH//gAf/+AAAAAAAAAAAAAAAB/wAAH/8AAf/8AYAfwDgAHgcAAODgAA4OAADg8AAOB4AA4BgAHACf/+AB//4AH//gAAAAAAAAAAAAAAA/4AAD/+AAP/+AcAP4BwADwHAAHAAAAcAAABwAAAHAcAAcBwADgGP//AA//8AD//wAAAAAAAAAABAAAAHAAAAfgAAA/wAAA/wAAAf4cAAP/zgAP/+AB/jgA/wAAf4AAP+AAB/AAAHgAAAQAAAAAAAAAAAA//////////////A4BwAHADgAcAOABwA4AHADgAcAOAB4B4AD4fAAH/4AAP/AAAPwAAAAAABAAAAHAAAAfgAAw/wADg/wA+Af4fAAP/8AAP/AAB/g4A/wDgf4AOP+AAB/AAAHgAAAQAAA=='),
- 32,
- atob("BgkMGhEZEgYMDAwQCAwICxILEBAREBEOEREJCREVEQ8ZEhEUExAOFBQHDREPGBMUERQSEhEUERsREBIMCwwTEg4QERAREQoREQcHDgcYEREREQoPDBEPFg8PDwwIDBMcCgoAAAAAAAAAAAAAACERESEAAAAAAAAAAAAAAAAhIQAGCRAQEhAIDw8XCQ8RABIODRELCw4REwcLCQoPHBscDxISEhISEhoUEBAQEAcHBwcTExQUFBQUDhQUFBQUEBEREBAQEBAQGhARERERBwcHBxAREREREREPEREREREPEQ8="),
- 28+(scale<<8)+(1<<16)
- );
- return this;
-};
-
-Graphics.prototype.setMiniFont = function(scale) {
- // Actual height 16 (15 - 0)
- this.setFontCustom(
- atob('AAAAAAAAAAAAAP+w/5AAAAAA4ADgAOAA4AAAAAAAAAABgBmAGbAb8D+A+YDZ8B/wf4D5gJmAGQAQAAAAAAAeOD8cMwzxj/GPMYwc/Az4AAAAAHAA+DDIYMjA+YBzAAYADeA7MHMw4zDD4ADAAAAz4H/wzjDHMMMwwbBj4APgADAAAAAA4ADgAAAAAAAAAAfwH/54B+ABAAAAAOABeAcf/gfwAAAAACAAaAD4APgAOABgAAAAAAACAAIAAgA/wAMAAgACAAAAAAAAPAA4AAAAAAIAAgACAAIAAgAAAAAAADAAMAAAAAAAcAfwf4D4AIAAAAA/wH/gwDDAMMAwwDB/4D/AAAAAAGAAwAD/8P/wAAAAAHAw8HDA8MHww7DnMH4wGBAAAMBgyHDcMPww/DDv4MfAAAAAAAHgD+A+YPhgwGAH8AfwAEAAAAAA/GD8cMwwzDDMMM5wx+ABgAAAP8B/4MwwzDDMMMwwx+ADwAAAgADAAMBwwfDPgP4A8ADAAAAAe+D/8M4wxjDGMP5wf+ABwAAAfAB+cMYwwjDCMMYwf+A/wAAAAAAAAAxgBCAAAAAAAAAYPBA4AAAAAAAAAgAHAA+AHMAYYAAAAAAAAAAAAAAJAAkACQAJAAkACQAJAAkAAAAAAAAAAAAAABhgHMAPgAcAAgAAAAAAAABgAOAAwbDDsMYA/AA4AAAAAAAD4A/wGBgxzDPsMyQjJDPkM+wYIBxgD+AAAAAAABAA8A/gf8DwwODA/sAfwAHwADAAAP/w//DGMMYwxjDOMP9we+ABwA8AP8Bw4MAwwDDAMMAwwDDgcHDgMMAAAAAA//D/8MAwwDDAMMAw4HB/4D/AAAAAAP/w//DGMMYwxjDGMMQwgBAAAP/w//DDAMMAwwDDAMAADwA/wHDgwDDAMMAwwDDCMOJwc+ADwAAA//D/8AMAAwADAAMAAwD/8P/wAAAAAP/w//AAAABgAHAAMAAwAHD/4P+AAAAAAP/w//AOAB+AOcBw4MBwgDAAEAAA//D/8AAwADAAMAAwADAAAP/w//A8AA8AA+AA8AHwB8AeAHgA//D/8AAAAAD/8P/wcAAcAA8AA4AB4P/w//AAAA8AP8Bw4MAwwDDAMMAwwDDgcH/gP8AAAAAA//D/8MMAwwDDAMYA7gB8ABgADwA/wHDgwDDAMMAwwDDA8ODwf/A/8AAAAAD/8P/wwwDDAMMAx4Dv4HxwEBAAAHjg/HDMMMYwxjDGMONwc+ABwMAAwADAAMAA//D/8MAAwADAAIAAAAD/wP/gAHAAMAAwADAAMAHg/8AAAMAA+AA/AAfgAPAA8AfgPwD4AMAAwAD4AD+AA/AA8A/g/gDwAP4AH8AB8APwH8D8AMAAgBDAMPDgO8APAB8AOcDw8MAwgBCAAOAAeAAeAAfwH/B4AOAAwAAAAMAwwPDB8Mew3jD4MPAwwDAAAAAAAAB//3//QABAAAAAAADgAP4AH+AB8AAQAABAAEAAf/9//wAAAAAAAAAAGAAwAGAAwABgADAAGAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAQA3wHbAZMBswGzAf4A/wAAAAAP/w//AYMBgwGDAYMA/gB8AAAAEAD+Ae8BgwGDAYMBgwDGAAAAMAD+Ae8BgwGDAYMBhw//D/8AAAAYAP4B/wGTAZMBkwGTAP4AcAEAAYAP/w//CQAJAAAwAP4hz3GDMQMxAzGHcf/h/8AAAAAP/w//AYABgAGAAYAA/wB/AAAAAA3/Df8AAAAAOf/9//AAAAAP/w//ADgAfADGAYMBAQAAD/8P/wAAAAAB/wH/AYABgAGAAf8A/wGAAYABgAH/AP8AAAAAAf8B/wGAAYABgAGAAP8AfwAAADAA/gHvAYMBgwGDAYMA/gB8AAAAAAH/8f/xgwGDAYMBgwD+AHwAAAAwAP4B7wGDAYMBgwGHAf/x//AAAAAB/wH/AYABgAEAAAAA5gHzAbMBkwGbAd8AzgEAAYAP/wf/AQMBAwAAAAAB/gH/AAMAAwADAAcB/wH/AAABAAHgAPwAHwAPAH4B8AGAAQAB8AB+AA8APwHwAeAA/AAPAD8B+AHAAQEBgwHOAHwAOAD+AccBAwAAAQAB4AD4EB/wB8A/APgBwAAAAAEBgwGPAZ8B8wHjAcMBAQAAAAAABgf/9/n2AAAAAAAP/w//AAAEAAYAB/nz//AGAAAAAAAAAAAAcABgAGAAcAAwAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'),
- 32,
- atob("AwUHDwoOCwQHBwcJBAcEBgoGCQkKCQoICQoFBQoMCgkPCgoMCwkICwsECAoIDgsMCgwKCgoLCg8KCQoHBgcLCwgJCgkKCQYKCgQECAQOCgoKCgYIBwoIDAkJCAcEBwsQ"),
- 16+(scale<<8)+(1<<16)
- );
- return this;
-};
-
let imgLock = function() {
return {
width : 16, height : 16, bpp : 1,
@@ -103,31 +63,31 @@ let clockInfoItems = clock_info.load();
// Add some custom clock-infos
let weekOfYear = function() {
- var date = new Date();
+ let date = new Date();
date.setHours(0, 0, 0, 0);
// Thursday in current week decides the year.
date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7);
// January 4 is always in week 1.
- var week1 = new Date(date.getFullYear(), 0, 4);
+ let week1 = new Date(date.getFullYear(), 0, 4);
// Adjust to Thursday in week 1 and count number of weeks from date to week1.
return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000
- 3 + (week1.getDay() + 6) % 7) / 7);
-}
+};
clockInfoItems[0].items.unshift({ name : "weekofyear",
get : function() { return { text : "Week " + weekOfYear(),
- img : null}},
+ img : null};},
show : function() {},
hide : function() {},
-})
+});
// Empty for large time
clockInfoItems[0].items.unshift({ name : "nop",
get : function() { return { text : null,
- img : null}},
+ img : null};},
show : function() {},
hide : function() {},
-})
+});
@@ -138,7 +98,7 @@ let clockInfoMenu = clock_info.addInteractive(clockInfoItems, {
w: W,
h: H-135,
draw : (itm, info, options) => {
- var hideClkInfo = info.text == null;
+ let hideClkInfo = info.text == null;
g.setColor(g.theme.fg);
g.fillRect(options.x, options.y, options.x+options.w, options.y+options.h);
@@ -147,8 +107,8 @@ let clockInfoMenu = clock_info.addInteractive(clockInfoItems, {
g.setColor(g.theme.bg);
if (options.focus){
- var y = hideClkInfo ? options.y+20 : options.y+2;
- var h = hideClkInfo ? options.h-20 : options.h-2;
+ let y = hideClkInfo ? options.y+20 : options.y+2;
+ let h = hideClkInfo ? options.h-20 : options.h-2;
g.drawRect(options.x, y, options.x+options.w-2, y+h-1); // show if focused
g.drawRect(options.x+1, y+1, options.x+options.w-3, y+h-2); // show if focused
}
@@ -161,22 +121,22 @@ let clockInfoMenu = clock_info.addInteractive(clockInfoItems, {
}
// Set text and font
- var image = info.img;
- var text = String(info.text);
+ let image = info.img;
+ let text = String(info.text);
if(text.split('\n').length > 1){
- g.setMiniFont();
+ g.setFont("6x8"); //g.setMiniFont();
} else {
- g.setSmallFont();
+ g.setFont("6x8:3"); //g.setSmallFont();
}
// Compute sizes
- var strWidth = g.stringWidth(text);
- var imgWidth = image == null ? 0 : 24;
- var midx = options.x+options.w/2;
+ let strWidth = g.stringWidth(text);
+ let imgWidth = image == null ? 0 : 24;
+ let midx = options.x+options.w/2;
// Draw
if (image) {
- var scale = imgWidth / image.width;
+ let scale = imgWidth / image.width;
g.drawImage(image, midx-parseInt(imgWidth*1.3/2)-parseInt(strWidth/2), options.y+6, {scale: scale});
}
g.drawString(text, midx+parseInt(imgWidth*1.3/2), options.y+20);
@@ -206,56 +166,56 @@ let draw = function() {
let drawDate = function() {
// Draw background
- var y = getLineY()
+ let y = getLineY();
g.reset().clearRect(0,0,W,y);
// Draw date
y = parseInt(y/2)+4;
y += isFullscreen() ? 0 : 8;
- var date = new Date();
- var dateStr = date.getDate();
+ let date = new Date();
+ let dateStr = date.getDate();
dateStr = ("0" + dateStr).substr(-2);
- g.setMediumFont(); // Needed to compute the width correctly
- var dateW = g.stringWidth(dateStr);
+ g.setFont("6x8:4"); //g.setMediumFont(); // Needed to compute the width correctly
+ let dateW = g.stringWidth(dateStr);
- g.setSmallFont();
- var dayStr = locale.dow(date, true);
- var monthStr = locale.month(date, 1);
- var dayW = Math.max(g.stringWidth(dayStr), g.stringWidth(monthStr));
- var fullDateW = dateW + 10 + dayW;
+ g.setFont("6x8:3"); //g.setSmallFont();
+ let dayStr = locale.dow(date, true);
+ let monthStr = locale.month(date, 1);
+ let dayW = Math.max(g.stringWidth(dayStr), g.stringWidth(monthStr));
+ let fullDateW = dateW + 10 + dayW;
g.setFontAlign(-1,0);
g.drawString(dayStr, W/2 - fullDateW/2 + 10 + dateW, y-12);
g.drawString(monthStr, W/2 - fullDateW/2 + 10 + dateW, y+11);
- g.setMediumFont();
+ g.setFont("6x8:4"); //g.setMediumFont();
g.setColor(g.theme.fg);
g.drawString(dateStr, W/2 - fullDateW / 2, y+2);
};
let drawTime = function() {
- var hideClkInfo = clockInfoMenu.menuA == 0 && clockInfoMenu.menuB == 0;
+ let hideClkInfo = clockInfoMenu.menuA == 0 && clockInfoMenu.menuB == 0;
// Draw background
- var y1 = getLineY();
- var y = y1;
- var date = new Date();
+ let y1 = getLineY();
+ let y = y1;
+ let date = new Date();
- var hours = String(date.getHours());
- var minutes = date.getMinutes();
+ let hours = String(date.getHours());
+ let minutes = date.getMinutes();
minutes = minutes < 10 ? String("0") + minutes : minutes;
- var colon = settings.hideColon ? "" : ":";
- var timeStr = hours + colon + minutes;
+ let colon = settings.hideColon ? "" : ":";
+ let timeStr = hours + colon + minutes;
// Set y coordinates correctly
y += parseInt((H - y)/2) + 5;
if (hideClkInfo){
- g.setLargeFont();
+ g.setFont("6x8:5"); //g.setLargeFont();
} else {
y -= 15;
- g.setMediumFont();
+ g.setFont("6x8:4"); //g.setMediumFont();
}
// Clear region and draw time
@@ -330,7 +290,7 @@ let charging = function(charging){
// Jump to battery
clockInfoMenu.setItem(0, 2);
drawTime();
-}
+};
Bangle.on('charging', charging);
let kill = function(){
@@ -343,12 +303,6 @@ E.on("kill", kill);
* Startup Clock
*/
-// The upper part is inverse i.e. light if dark and dark if light theme
-// is enabled. In order to draw the widgets correctly, we invert the
-// dark/light theme as well as the colors.
-let themeBackup = g.theme;
-g.setTheme({bg:g.theme.fg,fg:g.theme.bg, dark:!g.theme.dark}).clear();
-
// Show launcher when middle button pressed
Bangle.setUI({
mode : "clock",
@@ -362,7 +316,7 @@ Bangle.setUI({
// save settings
kill();
E.removeListener("kill", kill);
- g.setTheme(themeBackup);
+ Bangle.removeListener('charging', charging);
widget_utils.show();
}
});
@@ -371,6 +325,7 @@ Bangle.setUI({
Bangle.loadWidgets();
// Draw first time
+g.setColor(g.theme.fg).fillRect(0,135,W,H); // Otherwise this rect will wait for clock_info before updating
draw();
} // End of app scope
diff --git a/apps/bwclklite/metadata.json b/apps/bwclklite/metadata.json
index 430f466b2..8c68bc40d 100644
--- a/apps/bwclklite/metadata.json
+++ b/apps/bwclklite/metadata.json
@@ -1,19 +1,43 @@
{
"id": "bwclk",
"name": "BW Clock",
- "version": "0.31",
+ "version": "0.32",
"description": "A very minimalistic clock.",
"readme": "README.md",
"icon": "app.png",
- "screenshots": [{"url":"screenshot.png"}, {"url":"screenshot_2.png"}, {"url":"screenshot_3.png"}],
+ "screenshots": [
+ {
+ "url": "screenshot.png"
+ },
+ {
+ "url": "screenshot_2.png"
+ },
+ {
+ "url": "screenshot_3.png"
+ }
+ ],
"type": "clock",
"tags": "clock,clkinfo",
- "supports": ["BANGLEJS2"],
- "dependencies" : { "clock_info":"module" },
+ "supports": [
+ "BANGLEJS2"
+ ],
+ "dependencies": {
+ "clock_info": "module"
+ },
"allow_emulator": true,
"storage": [
- {"name":"bwclk.app.js","url":"app.js"},
- {"name":"bwclk.img","url":"app-icon.js","evaluate":true},
- {"name":"bwclk.settings.js","url":"settings.js"}
+ {
+ "name": "bwclk.app.js",
+ "url": "app.js"
+ },
+ {
+ "name": "bwclk.img",
+ "url": "app-icon.js",
+ "evaluate": true
+ },
+ {
+ "name": "bwclk.settings.js",
+ "url": "settings.js"
+ }
]
}
From 20e300182e21fb2cfc413efcd8f5bc714d2a00e8 Mon Sep 17 00:00:00 2001
From: thyttan <6uuxstm66@mozmail.comā©>
Date: Sat, 25 Feb 2023 19:03:59 +0100
Subject: [PATCH 04/89] Change all occurrances of bwclk to bwclklite
---
apps/bwclklite/README.md | 7 +++++--
apps/bwclklite/app.js | 4 ++--
apps/bwclklite/metadata.json | 12 ++++++------
apps/bwclklite/settings.js | 2 +-
4 files changed, 14 insertions(+), 11 deletions(-)
diff --git a/apps/bwclklite/README.md b/apps/bwclklite/README.md
index 882d525f6..974411be0 100644
--- a/apps/bwclklite/README.md
+++ b/apps/bwclklite/README.md
@@ -1,5 +1,5 @@
-# BW Clock
-A very minimalistic clock.
+# BW Clock Lite
+This is a fork of a very minimalistic clock.

@@ -25,3 +25,6 @@ Note: Check out the settings to change different themes.
## Creator
[David Peer](https://github.com/peerdavid)
+
+## Contributors
+thyttan
diff --git a/apps/bwclklite/app.js b/apps/bwclklite/app.js
index 61a3feae1..1008eae9c 100644
--- a/apps/bwclklite/app.js
+++ b/apps/bwclklite/app.js
@@ -11,7 +11,7 @@ const widget_utils = require("widget_utils");
/************************************************
* Globals
*/
-const SETTINGS_FILE = "bwclk.setting.json";
+const SETTINGS_FILE = "bwclklite.setting.json";
const W = g.getWidth();
const H = g.getHeight();
@@ -92,7 +92,7 @@ clockInfoItems[0].items.unshift({ name : "nop",
let clockInfoMenu = clock_info.addInteractive(clockInfoItems, {
- app: "bwclk",
+ app: "bwclklite",
x : 0,
y: 135,
w: W,
diff --git a/apps/bwclklite/metadata.json b/apps/bwclklite/metadata.json
index 8c68bc40d..bab852623 100644
--- a/apps/bwclklite/metadata.json
+++ b/apps/bwclklite/metadata.json
@@ -1,8 +1,8 @@
{
- "id": "bwclk",
- "name": "BW Clock",
+ "id": "bwclklite",
+ "name": "BW Clock Lite",
"version": "0.32",
- "description": "A very minimalistic clock.",
+ "description": "A very minimalistic clock. This version of BW Clock is quicker at the cost of the custom font.",
"readme": "README.md",
"icon": "app.png",
"screenshots": [
@@ -27,16 +27,16 @@
"allow_emulator": true,
"storage": [
{
- "name": "bwclk.app.js",
+ "name": "bwclklite.app.js",
"url": "app.js"
},
{
- "name": "bwclk.img",
+ "name": "bwclklite.img",
"url": "app-icon.js",
"evaluate": true
},
{
- "name": "bwclk.settings.js",
+ "name": "bwclklite.settings.js",
"url": "settings.js"
}
]
diff --git a/apps/bwclklite/settings.js b/apps/bwclklite/settings.js
index 116253fda..2d3916a3d 100644
--- a/apps/bwclklite/settings.js
+++ b/apps/bwclklite/settings.js
@@ -1,5 +1,5 @@
(function(back) {
- const SETTINGS_FILE = "bwclk.setting.json";
+ const SETTINGS_FILE = "bwclklite.setting.json";
// initialize with default settings...
const storage = require('Storage')
From 05146ce283ef06bed856cac08164817e75607c03 Mon Sep 17 00:00:00 2001
From: thyttan <6uuxstm66@mozmail.comā©>
Date: Sat, 25 Feb 2023 19:17:29 +0100
Subject: [PATCH 05/89] change screenshots
---
apps/bwclklite/screenshot.png | Bin 2841 -> 2022 bytes
apps/bwclklite/screenshot_3.png | Bin 3031 -> 2307 bytes
2 files changed, 0 insertions(+), 0 deletions(-)
diff --git a/apps/bwclklite/screenshot.png b/apps/bwclklite/screenshot.png
index 37acf7cc07edd69a42f300923ecb8bfbec97a9cc..e5eee966040bddbe4dfaa92bf2705fec429760c1 100644
GIT binary patch
literal 2022
zcmeHIdo+{@6dzxo`c#-np@_`HNTQ*qkyo=sFO8Yxo$`h4K}Iafc&p8$
z`5M_`6n&|TRIH-(klDPpLh>3Bv(wo>_pkkP&)IvZi@1t>u!+=D^GAg%fzl>`i@Ik6z6oPhS9#b6etJK67GMF$M$
zw?`7zEma*>C=P~g&Kx?fUn4o2f{pCYi(h4QuB3=hCWqJiS=0y=(=eJ1BGBFby7mbj
z6_B1RQd=|n@(E)cN?qWqWhWEm2nKMvi*B1FpuU!d&j=eeLR~R%O~CeC21mau7XyUV
zpRg97B=Hs%@O|vJg9b34a|D3yPL9Ro-s_&9qYqEclt0`~h3>ZbxPD#^Un@4|FH`|r
zi@wvgq&4Qbt{-<#LoL^`n^@Q`#$~cta5Ya24rV>G1G)Gy@M*M*AQTK9;tyPA=Nf!~
z-t9cHMjKuvvt4-}4X>SVQCd5~s6OIWZ6*kNMeu!1a()W9csPOC8)Fi&T~aML-n`!h
zGA}*65YN+U&&BjtA)#Qu>uHZ8>dBE_AlJ%gS+Qd>nzL&g?4L4r)IY2tTZCw`MK;ho
z{Diy>=iNJTipAnMGzYCe@D-sriZhUk2};t{H`)*M^ti{V9=Z@V
z_icZJ=8N_6W66mbjF=_-$b3>z=|uLU6>znq;V07%>oQDZu+d|HpdelJRYWbM*fM30
z6Sl#`1txQTz!O!2{D99%!|_kw%S$OOj6rmoqyloqab9p-4^g^8NL~ixrf-g$IB-BZ
zXK-hUywzrQ;$U}Gr$pXbDWA-FBaPB$pA85MJn@A_5JOWIOW~k*xuw|YttBgk%VD8e
z6YzcqCntSzWwlRB*Xvi8E*Vi78x+{Vx}bvly3eRKCkOI9FJj@)r<`9yOh_
z2lgSEFR~6Cucu21yu>1W)=j9su`DX~>QvNIzD51qM3a1C%d!*{GLO$nMTsS*f|muW
z-`H%5`+RGxyj}wSIjk76>3HiFcDE(in)^+SVgvg(-2uI`q+YM;1E3)jGs+=4Ga|>a
zJ|?y|Q~Yu^#r391fxpxkt)L)v+>tz#TaxJ}3z~U9JNnueQoY~ox%08%g&i_eNh{xq
zxe>IOjw+3at#Ty+ZF|j_vTc5kbL}y3rk!Vqh6-5lAnUplh$X362M=KF{(TTJ>}l`G
zIPAUN=SOuHk>Z34q~SVipmO-2*kuVDZB03
zNnY&ot&I|o?rh<0O+J(tzAS`Cml5BF^zAP@8CW-4x%PR*g$HWilM;MMQQJZ8$JwtP
zvm~5kfg$OF%uecWL}C0uBW1^!nXljF(hnL3JymeepY
zYY%~6Y476|H4X0h>43}b`1{Bd<=CP*P6Q3I8IH|#TJcNe!AtQsLEkqc+gxSBf4Nh79zU#j{P7ca`S1j5D)yu0&$
zOwoaH-raiHmK5_x%#2XQs-s}qEXW`99Gv1toN?pGi3-M&s|_OEj}D?L=PMT_<+jv7
zaRu_m3LrK-*L%J8?;d2e)aF~CMD)Ss!awp*SNkfA7jp3hO;p^9#_O!UEL5gfUa{$A
zN$A>pMa8$%P_uPC3i8&;4N2Qq~FaLY^jVIhnv@!(eay6{%VYq1JfR%aZdjQ
DNjG3t
literal 2841
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
bu7T|roXdI-%T9jpy1+p%KhG+6@|Ax8FvV5G
diff --git a/apps/bwclklite/screenshot_3.png b/apps/bwclklite/screenshot_3.png
index d52057569b0c80df6656e22333f4347e7552411a..573675d28c55b01ddd97e99a86fd5e53b2552290 100644
GIT binary patch
literal 2307
zcmdT`X;4!M5)Lmg%rRuCJ;)!^@Mb
zwq?f_6bhy0cHG5B5&8czNLk^lYX3n|1f@$pWM@=mC-#dX0WUeb`9cb?pzw4Q3gWrB
z9Q9>TrXENWMvgw
z@0z?9jsQ^R7OsksY+}iq2#g@-0EqZ1X?r$8I8cBBvT24brU%qB&95TdPvluB6a8PP
zzm%*9g)=ix8V9G{JLGA|C8nSMUf}*iv)Ii_;PkI+u7~dZ9&J@V@6ADCb_EE0Gy}=`
zcs}Q`!#1GaJ0Fedbt%^On$7DRfQstc@6vJSP2OS%&X(3Xu$C;L#3WX&$Iu(|QrQOR
zi5<-Pn#d~0^%dj=$v%n7u^JisIKfy;`9_9{iE
z#=ZE@O!$9H1nZ{}!05-$g8b?ATi~6<}>9#|!C>_fY3}M~Co7Y-`d7V%x
zp}M8@WUy`kIBnASZUiGV&DgCD=-LzNe+ZiANn6^(Ht$#NP(QUbPgVnZ>JsXSQE6GE
zGd+t8+-RTefenHZXxH0Vj)<1u3$)80WFXL*wcPv|6?CPJ{$Rp9!xKAJ;9t%*%F3MPDLz?9V=eMC64(UhH>=g
zh|&d(i@)K=bTXsYCfC~VrDSK&f56f!QpI)8li&w0{vl@4X
z!O>JU>CysV4_ytlmxV~0e|28?)Ggd?3sM7PE~sWm>N8dN8=)^bV%(H}^n>Z$QWfvh
z4QH7rrUiMUL5~()1mv%6nTk0QlJ@Gu_Aax;AXEC2nlRV-zsxq&l!58p&GA@vx0b=o
z=p6(4s(N7vk}J1R>SS}<%BOXK@{GepHu)hTWJb{alc6_#CkoHrLz#)5ertH*LH|i3wUIQ
zagvySC@wR;irAjY=yyTEe|5?!xq(th%q&t%38VoY1v>!f)SJ6cJV4EtDmLdMA*26P
zC|O#xT@{v`Du%BXqJZ|>+xR&sfc`i0`~Tk=G73^QJj9cK5@xPv4MjJ79V?SpNO_#9
zu~fwJ5yaZKD;nC^FC2+%HVkY;^U;DOqU}cD(#p96YJy}p0AU+4Dhv*;LhW{vNqKkv
zC{Op90p#|Mw!d<
zE@^vf?JBoP+=LER^+G=-=YS|9;K=e#gWg^M
zv(lg9z7xjeXMCkM5zC(##p^RT7*ypaWIA@u@|YicKG7w#t0ESJ
zJ-M&l^4`?=Ign!g-tM{qp*%dA1enHl=vi0!&Q-mi0?w+QA%XWmO+75X?J~sXgm;=b0d^1}w)U9iuMj
z{aNBBnY53~e(dyl1R^G%L&1U?&b1k^4HU1+@d@;|C$~9K%{)SDwDxGNRNslXw$ydo
z%bhCsZEVZg4nMX^o}o6oQ#+BF-SeNetUb@FN;Vez@7!ouTCwl`Mqsap-ie^aaJc=6
zk>!=2&rRiwyKywD3TnG5-u2oBX79RU|6>G~SYym@LdU_49*5@$bH}eCOt(s`w*|jO
zO8XvnsA?hDD0^TlyToPQRX~nfU`?lYOESKExp~%#OgyeSc}P%cyiawpqgKc80$W>n
z#j(KtusB$-dUup5wiGX0<4$X?sD2dJ>B8IsTK4igoyH8JwO|^d$SX8xVgk;qDCAga
zhxB-U$=S$Hckrtleua4Zo3+_xrq=_A?*n=C0t
zq=Hr)ZM6LPM5j)ps29G%0Y#(|AtFVQ!A_hZr?AHN8)ZA=GV8f#f<&Ue=1$Fi+cu~R
zH`|gWXduRI%{{y+ckO#=RO2srlllX|?oCZ^mh4>R1iw}`^b9LK6mX?)Po#_`?|ozS
zZ2yThs~Z&mvSs9o+ViIBaqFJo3CcM|yO4=~6C?e2YZuPozH8PjXXl>9?>cb2t-QwSIQ^?Mz_Q|5+kh`+~w+0z|WfR)o
uYgM~s{=uq_HmAT@PLAf3Cbg6WvUi&9?DnP0L
literal 3031
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
From 137ad32d85db502a97a6c6848c31a6412f79ec41 Mon Sep 17 00:00:00 2001
From: thyttan <97237430+thyttan@users.noreply.github.com>
Date: Sat, 25 Feb 2023 19:19:53 +0100
Subject: [PATCH 06/89] match new screenshot for clock info
---
apps/bwclklite/README.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/apps/bwclklite/README.md b/apps/bwclklite/README.md
index 974411be0..1ad320894 100644
--- a/apps/bwclklite/README.md
+++ b/apps/bwclklite/README.md
@@ -5,9 +5,9 @@ This is a fork of a very minimalistic clock.
## Features
The BW clock implements features that are exposed by other apps through the `clkinfo` module.
-For example, if you install the HomeAssistant app, this menu item will be shown if you first
-touch the bottom of the screen and then swipe left/right to the home assistant menu. To select
-sub-items simply swipe up/down. To run an action (e.g. trigger home assistant), simply select the clkinfo (border) and touch on the item again. See also the screenshot below:
+For example, if you install the Simple Timer app, this menu item will be shown if you first
+touch the bottom of the screen and then swipe left/right to the Simple Timer menu. To select
+sub-items simply swipe up/down. To run an action (e.g. add 5 min), simply select the clkinfo (border) and touch on the item again. See also the screenshot below:

From 3bec7ffcdb00c50168018b18322cda00c98ca2d9 Mon Sep 17 00:00:00 2001
From: thyttan <97237430+thyttan@users.noreply.github.com>
Date: Sat, 25 Feb 2023 19:21:41 +0100
Subject: [PATCH 07/89] Indentation
---
apps/bwclklite/ChangeLog | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/apps/bwclklite/ChangeLog b/apps/bwclklite/ChangeLog
index 8b79a4c4e..c728997da 100644
--- a/apps/bwclklite/ChangeLog
+++ b/apps/bwclklite/ChangeLog
@@ -31,7 +31,6 @@ clkinfo.addInteractive that would cause ReferenceError.
0.29: use setItem of clockInfoMenu to change the active item
0.30: Use widget_utils
0.31: Use clock_info module as an app
-0.32: Diverge from BW Clock. Change out the custom font for a standard bitmap
- one to speed up loading times. Remove invertion of theme as this doesn't
- work very well with fastloading. Do an quick inital fillRect on the
- clock info area.
+0.32: Diverge from BW Clock. Change out the custom font for a standard bitmap one to speed up loading times.
+ Remove invertion of theme as this doesn'twork very well with fastloading.
+ Do an quick inital fillRect on theclock info area.
From f5211fff10e559cf4694449bc0f32621ba3221d4 Mon Sep 17 00:00:00 2001
From: thyttan <6uuxstm66@mozmail.comā©>
Date: Sat, 25 Feb 2023 19:30:42 +0100
Subject: [PATCH 08/89] use screenshot with widgets
---
apps/bwclklite/screenshot.png | Bin 2022 -> 2489 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
diff --git a/apps/bwclklite/screenshot.png b/apps/bwclklite/screenshot.png
index e5eee966040bddbe4dfaa92bf2705fec429760c1..28983c9c44158b1929ef0d8a890321992dc3990f 100644
GIT binary patch
literal 2489
zcmds(dpOf?8^C8KLo&xn&U+m)ksMOZLPq3#m{UJie#K}tWWPBK-%4Z-Z%C4D2^};>
zV)CQDl|%HhlBOJ&L(Z9sRl;xm|Ni&>_ukj_-1qfd&wbz5bwAhhdG7m)x2KD|tcENE
z0+Dw;>f|f7b-x#Un^<$WQ((a
zOAH`x!FW5aaBFLJ@eapR3t2%ofLYD-E-s#tEU?v#$Z6n+hL_g9Z|Q8>>t=wHE6t>``i&G`
z3(AfKcxrR31PW9<=E39IsoB@vH`ce5%;+2Hz;)5ocgGdDg*X10)|FwkZ0
zBOa9v#@ix8I^3ZR8F0oB4_>S-SZiGNM~Ym30vT)x5*z!?Tl)XO~J@f
zG%IK%2HH<4ZpU%Pm%z)*`0z{$ORxJs6^n*-UvbWTH=8$Na@%sMSj$q*V+YExW+r*n
zm2wVL<-m0_rv>`M2)4*CtK!md8fzm(K^oAihEcS3lTTzcnO(pGqOSNgixAh5{!Xbx
zN%`}aH4Mm;$YIekvd{UK%0LSwl_kj{>Gk15rxG-fBeYB4Fd}5EoyHBo3rgEp_q4~f
zVKHS(Rio!D*5z$78*}>esntQ~Z?d1-tKN-1djU*#);pi(m+9
z53zgC{QRaRwvyP6TBi_lw$GA}{0CH(KbN#*+oa5qJ6pP{ZgiG>n2W-DWSq9#6yJ
z1lU`O%?g9j{?lt(39{wKZQX84lvEbMO;2Q#E`hNaMcce8O&Q>n|LG$z8^v7Wtr7k;
zIfnzT-f_9*gh(9W=9_=3W&6W1A2}bgON)A2_|)PWAB8}?HmnK0v7XYR+8khe>>i)0
zW`iCNPQ$&VjW?|M#1FgMdSlr=>n`
zFA>sYwjSXe|Xe8c5NuS()%J+(*0UUZ=
zMt3jtsbX`|x`)#XKHL{v8zACD`vg81w#@SQWe+@Ptnhg
ziy=LBtWj;SW~qAB>~Txy|Kv3tsabv06!@4rEFTWENd{G=6+tQ{oThV`=CC|NlMy23
zK~mAtn%IzGqZ5o}bDM4rDurn*;oNbhXIC#n)wVQhMwP1bB;jxhMYdd5IAUG&J#bi8
z7!a4ck;Ep5pTKx7f3{;^uVORLzaA?3=r-^#D7*|-YDI(Vl67jGJoM8+*ITY{Ga>)=
zki4~(^5tp~-3kFWN(Vn4l__zB0G7l;bQuJii83G^)3+iN4Hjd31K7N>sx)8
zsc_P`HuyXrR4ebs>KOFjYgJ1Xv*)q)!}zN6bfXYehl_g1bGc$=!pS)7PDn^+O5dH$
zbetGHTlJ%a@hU7DwgY2ugEsN*=KzI2-%QiiQUIRHI9=R8ubkGAhN6V8B$^PaJKebI
zYv6pYh_b6uDX-^2;SXXWQGva~n{-!glepq<7JcX%Ysl;%M}yav;Vpfy$xm+U5!D3Q
z$msDRAsK8L_1^VvOI
z^~JS;+n>B+oCW*tNAU(P4^&M`xLja2iA{5^G?VAqU
W-{ce}`{?&9264rCI@LN7F8l*+;e2@j
literal 2022
zcmeHIdo+{@6dzxo`c#-np@_`HNTQ*qkyo=sFO8Yxo$`h4K}Iafc&p8$
z`5M_`6n&|TRIH-(klDPpLh>3Bv(wo>_pkkP&)IvZi@1t>u!+=D^GAg%fzl>`i@Ik6z6oPhS9#b6etJK67GMF$M$
zw?`7zEma*>C=P~g&Kx?fUn4o2f{pCYi(h4QuB3=hCWqJiS=0y=(=eJ1BGBFby7mbj
z6_B1RQd=|n@(E)cN?qWqWhWEm2nKMvi*B1FpuU!d&j=eeLR~R%O~CeC21mau7XyUV
zpRg97B=Hs%@O|vJg9b34a|D3yPL9Ro-s_&9qYqEclt0`~h3>ZbxPD#^Un@4|FH`|r
zi@wvgq&4Qbt{-<#LoL^`n^@Q`#$~cta5Ya24rV>G1G)Gy@M*M*AQTK9;tyPA=Nf!~
z-t9cHMjKuvvt4-}4X>SVQCd5~s6OIWZ6*kNMeu!1a()W9csPOC8)Fi&T~aML-n`!h
zGA}*65YN+U&&BjtA)#Qu>uHZ8>dBE_AlJ%gS+Qd>nzL&g?4L4r)IY2tTZCw`MK;ho
z{Diy>=iNJTipAnMGzYCe@D-sriZhUk2};t{H`)*M^ti{V9=Z@V
z_icZJ=8N_6W66mbjF=_-$b3>z=|uLU6>znq;V07%>oQDZu+d|HpdelJRYWbM*fM30
z6Sl#`1txQTz!O!2{D99%!|_kw%S$OOj6rmoqyloqab9p-4^g^8NL~ixrf-g$IB-BZ
zXK-hUywzrQ;$U}Gr$pXbDWA-FBaPB$pA85MJn@A_5JOWIOW~k*xuw|YttBgk%VD8e
z6YzcqCntSzWwlRB*Xvi8E*Vi78x+{Vx}bvly3eRKCkOI9FJj@)r<`9yOh_
z2lgSEFR~6Cucu21yu>1W)=j9su`DX~>QvNIzD51qM3a1C%d!*{GLO$nMTsS*f|muW
z-`H%5`+RGxyj}wSIjk76>3HiFcDE(in)^+SVgvg(-2uI`q+YM;1E3)jGs+=4Ga|>a
zJ|?y|Q~Yu^#r391fxpxkt)L)v+>tz#TaxJ}3z~U9JNnueQoY~ox%08%g&i_eNh{xq
zxe>IOjw+3at#Ty+ZF|j_vTc5kbL}y3rk!Vqh6-5lAnUplh$X362M=KF{(TTJ>}l`G
zIPAUN=SOuHk>Z34q~SVipmO-2*kuVDZB03
zNnY&ot&I|o?rh<0O+J(tzAS`Cml5BF^zAP@8CW-4x%PR*g$HWilM;MMQQJZ8$JwtP
zvm~5kfg$OF%uecWL}C0uBW1^!nXljF(hnL3JymeepY
zYY%~6Y476|H4X0h>43}b`1{Bd<=CP*P6Q3I8IH|#TJcNe!AtQsLEkqc+gxSBf4Nh79zU#j{P7ca`S1j5D)yu0&$
zOwoaH-raiHmK5_x%#2XQs-s}qEXW`99Gv1toN?pGi3-M&s|_OEj}D?L=PMT_<+jv7
zaRu_m3LrK-*L%J8?;d2e)aF~CMD)Ss!awp*SNkfA7jp3hO;p^9#_O!UEL5gfUa{$A
zN$A>pMa8$%P_uPC3i8&;4N2Qq~FaLY^jVIhnv@!(eay6{%VYq1JfR%aZdjQ
DNjG3t
From 4324cbd4c1af70c59b844eb1de7d8d7b556f2dcc Mon Sep 17 00:00:00 2001
From: dapgo
Date: Tue, 28 Feb 2023 12:04:00 +0100
Subject: [PATCH 09/89] helloworld compat improvements
minor improvements and bjs2
---
apps/helloworld/README.md | 38 ++++--
apps/helloworld/helloworld.app.js | 219 ++++++++++++++++++++++++++++++
apps/helloworld/metadata.json | 7 +-
apps/helloworld/screenshot.png | Bin 0 -> 5193 bytes
apps/helloworld/ss_emul_BJS1.png | Bin 0 -> 5193 bytes
apps/helloworld/ss_emul_BJS2.png | Bin 0 -> 3422 bytes
6 files changed, 253 insertions(+), 11 deletions(-)
create mode 100644 apps/helloworld/helloworld.app.js
create mode 100644 apps/helloworld/screenshot.png
create mode 100644 apps/helloworld/ss_emul_BJS1.png
create mode 100644 apps/helloworld/ss_emul_BJS2.png
diff --git a/apps/helloworld/README.md b/apps/helloworld/README.md
index 370ec349b..0617a9450 100644
--- a/apps/helloworld/README.md
+++ b/apps/helloworld/README.md
@@ -3,7 +3,6 @@
A cross cultural hello world!/hola mundo! app
The most common testing sentence in several languages ;)
-
## Pictures:
Launcher icon
@@ -14,6 +13,10 @@ Screen - Spanish

+Screenshot BJS2 emul
+
+
+
Screen - English

@@ -22,6 +25,10 @@ Screen - Japanese

+Screenshot BJS1 emul
+
+
+
## Usage
@@ -31,17 +38,32 @@ interact to change language, color or quit.
## Features
-Colours, all inputs , graph, widgets loaded
-Counter for Times Display
+ - Compatible Bangle.js1 Bangle.js2
+ - Bottom Widget compatible
+ - Change FG/BG colors,
+ - Usage of many input events
-## Controls
+## Pending/future Features
+- replace UI hardcoded colors for dynamic based on theme
+- BJS2 change BTN1 from quit to Change FG Color (conflict wit setUI?)
-finger swipe
-button 1,2 and 3
-touch screen left, center or right
+
+## Controls/UI
+ - Left area: Back/Exit/launcher
+ - BTN3 (long press)(BJS1): default Exit/kill app
+
+ - BTN1 (BJS2): Back/Exit/launcher
+ - BTN1 (BJS1): Change Language
+ - BTN2 (BJS1): Change FG Color
+ - BTN3 (BJS1): Quit
+
+ - Right area: Change BG Color
+ - Swipe left: Change Language
+ - Swipe right: Change Language
## Creator
-Daniel Perez
\ No newline at end of file
+This app is so basic that probably the easiest is to just edit the code
+Otherwise you can contact me [here](https://github.com/dapgo/my_espruino_smartwatch_things)
\ No newline at end of file
diff --git a/apps/helloworld/helloworld.app.js b/apps/helloworld/helloworld.app.js
new file mode 100644
index 000000000..1b6684f3f
--- /dev/null
+++ b/apps/helloworld/helloworld.app.js
@@ -0,0 +1,219 @@
+//HolaMundo v202212
+// place your const, vars, functions or classes here
+{
+ var contador=1;
+ var v_mode_debug=0;
+ var v_model=process.env.BOARD;
+
+ var v_color_statictxt='#b30000';
+ //var v_color_b_area='#111111';
+ //orange RGB format rrggbb //white,Orange,DarkGreen,Yellow,Maroon,Blue,green,Purple,cyan,olive,DarkCyan,pink
+ var a_colors= Array(0xFFFF,0xFD20,0x03E0,0xFFE0,0x7800,0x001F,0x07E0,0x780F,0x07FF,0x7BE0,0x03EF,0xF81F);
+
+ var x_max_screen=g.getWidth();
+ var y_max_screen=g.getHeight();
+ var y_wg_bottom=g.getHeight()-25;
+ var y_wg_top=25;
+
+ //EMSCRIPTEN,EMSCRIPTEN2
+if (v_model=='BANGLEJS'||v_model=='EMSCRIPTEN') {
+ var v_color_lines=0xFFFF; //White hex format
+ var v_color_text=0x07E0;
+ var v_font1size=10; //out of quotes
+ var v_font2size=12;
+ var v_font_banner_size=30;
+ var v_font3size=12;
+ var x_btn_area=215;
+ var x_max_usable_area=x_btn_area;//Pend! only for bangle.js
+ var y_btn2=124; //harcoded for bangle.js cuz it is not the half of display height
+ var graph_y=120;
+ var box_x2=195;
+ var box_y2=150;
+ }else{ //BJS2
+ //176x176
+ var v_color_lines="#000"; //White hex format
+ var v_color_text="#000";
+ var v_font1size=9; //out of quotes
+ var v_font2size=9;
+ var v_font_banner_size=16;
+ var v_font3size=8;
+ //g.setColor("#000"); //black or dark
+ x_max_usable_area=176;
+ var graph_y=60;
+ var box_x2=128;
+ var box_y2=104;
+ }
+ if (v_mode_debug>0) console.log("device="+v_model);
+ var v_arraypos=0;
+ var v_acolorpos=0; //for fg
+ var v_aBGcolorPos=5; //for bg
+ var a_string1 = Array('hola', 'hello', 'saluton', 'ola','ciao', 'salut','czesc','konnichiwa');
+ var a_string2 = Array('mundo!', 'world!', 'mondo!','mundo!','mondo!','monde!','swiat!','sekai!');
+
+
+}
+ if (v_mode_debug>0) {
+ console.log("*** UI dimensions***");
+ console.log("x="+x_max_screen);
+ console.log("y_wg_bottom="+y_wg_bottom);
+ }
+
+ // special function to handle display switch on
+ Bangle.on('lcdPower', (on) => {
+ if (on) {
+ contador=contador+1;
+ PrintHelloWorld();
+ // call your app function here
+ // If you clear the screen, do Bangle.drawWidgets();
+ }
+ });
+
+ //Clear/fill dynamic area except widget area, right and bottom status line
+ function ClearActiveArea(){
+ g.setColor(a_colors[v_aBGcolorPos]); //dynamic color
+ g.fillRect(0,y_wg_top,box_x2,box_y2);
+ g.flip();
+ }
+
+ function DrawBangleButtons(){
+ g.setFontVector(v_font1size);
+ g.setColor(v_color_lines);//White
+
+ g.drawString("Lang", x_max_screen-g.stringWidth("Lang"),y_wg_top+v_font1size+1);
+ //above Btn2
+ //g.setFontVector(v_font1size).drawString("Off", x_max_screen-g.stringWidth("Off"),y_btn2-(2*v_font1size));
+ g.drawString("Color", x_max_screen-g.stringWidth("Color"),y_btn2-v_font1size);
+ //above Btn3
+ g.drawString("Quit", x_max_screen-g.stringWidth("Quit"),y_wg_bottom-(2*v_font1size));
+ g.flip();
+ g.setColor(v_color_text); //green
+ g.setFontVector(v_font1size);
+ g.drawString("B1", x_max_screen-g.stringWidth("B1"),y_wg_top);
+ g.drawString("B2", x_max_screen-g.stringWidth("B2"),y_btn2);
+ g.drawString("B3",x_max_screen-g.stringWidth("B3"),y_wg_bottom-v_font1size);
+ g.flip();
+}
+
+function DrawBottomInfoBanner(){
+/* External Vars:v_color_text,v_font2size,x_max_usable_area,y_wg_bottom
+*/
+ g.setColor(v_color_text);
+ var info_text1="Swipe <- -> (Lang)";
+ //var info_text2="Touch: Left=Up Right=Down";
+ //aligned left of max usable area
+ g.setFontVector(v_font2size);
+ //g.drawString(info_text2, x_max_usable_area-g.stringWidth(info_text2)-2 ,y_wg_bottom-(2*v_font2size));
+ g.drawString(info_text1, x_max_usable_area-g.stringWidth(info_text1)-2 ,y_wg_bottom-v_font2size);
+ g.flip();
+}
+
+ //function Graphics.setColor(r, g, b) binary
+ // banglejs.com/reference#l_Graphics_setColor
+
+ function PrintHelloWorld(){
+ ClearActiveArea(); //except widgets and bottom
+
+ if (v_mode_debug>0) console.log("drawing a "+a_string1[v_arraypos]+" "+a_string2[v_arraypos]);
+
+ g.setColor(a_colors[v_acolorpos]); //dynamic color
+ g.setFont("Vector",v_font_banner_size);
+ g.drawString(a_string1[v_arraypos],2,55);
+ //line below 2nd string
+ g.drawLine(10, 149, 150, 149);
+ g.flip();
+
+ g.setColor(a_colors[v_acolorpos+1]); //dynamic color
+ g.drawString(a_string2[v_arraypos],5,85);
+ g.flip();
+
+ g.setFont("Vector",v_font3size);
+ g.setColor(v_color_statictxt);
+ g.drawString("Display on/off: "+contador ,10,box_y2+7);
+ //var mem=process.memory();
+ //if (v_mode_debug>0) console.log("Mem free/total: "+mem.free+"/"+mem.total);
+ g.flip();
+ }
+
+ function PrintMainStaticArea(){
+ g.setColor(v_color_statictxt);
+ g.setFont("Vector",v_font3size);
+ g.drawString("#by DPG #bangle.js",10,box_y2+5+(v_font3size*2));
+ g.drawString("#javascript #espruino",10,box_y2+5+(v_font3size*3));
+
+ var img_obj_RedHi = {
+ width : 40, height : 40, bpp : 4,
+ transparent : 0,
+ buffer : require("heatshrink").decompress(atob("AFkM7vd4EAhoTNhvQhvcgHdAQIAL5oWCFIPdExo+CEoIZCABI0DhvADIZhJL4IXDHRkMEAQmOCYgmOAAIOBHwImNRQgmPHgYmCUIIXMJobfB3jgCWZJNDEga1JYQQQCMYZoJJAJNDBwgTICQPdCY7lDRQx4DVIwTIHYZzEHZATFBwblDCZRKEO5ITFWAbIJCYrHBAAImICYwEB5raKCYwAMCYXc5gADE5hLDAAgTIBJLkBBJAyKHw5hKBRJJKKJSuII5Q0IhqPKCbjRKCc4AgA=="))
+ }
+ g.drawImage(img_obj_RedHi,box_x2+2,graph_y);
+ g.flip();
+ }
+
+
+ //inc var postion for text array
+ function ChangeLang(dir){
+ if (v_mode_debug>0) console.log("ChangeLang, dir, Prev pos: "+dir+" , "+v_arraypos);
+
+ if ((dir==1) && (v_arraypos0)) v_arraypos--;
+ else if ((dir== -1) && (v_arraypos==0)) v_arraypos=a_string1.length-1;
+ PrintHelloWorld();
+ }
+
+ //inc var postion for color array
+ function ChangeColor(){
+ //if (v_mode_debug>0) console.log("ChangeColor, colpos: "+v_acolorpos);
+ if (v_acolorpos {
+ if(dir == 1) ChangeLang(1); //right
+ else ChangeLang(-1); //left
+ });
+ }
+
+ if (v_mode_debug>0) console.log("**************************");
+ if (v_mode_debug>0) console.log("Log: *** hola mundo app");
+ g.clear();
+ Bangle.loadWidgets();
+ Bangle.drawWidgets();
+ Bangle.setUI({
+ mode : "custom",
+ back : function() {load();}
+ });
+ if (v_model=='BANGLEJS'||v_model=='EMSCRIPTEN') DrawBangleButtons();
+ DrawBottomInfoBanner();
+ UserInput();
+ PrintMainStaticArea();
+ PrintHelloWorld();
+
\ No newline at end of file
diff --git a/apps/helloworld/metadata.json b/apps/helloworld/metadata.json
index b8fe1b1e3..b9dec6b52 100644
--- a/apps/helloworld/metadata.json
+++ b/apps/helloworld/metadata.json
@@ -2,14 +2,15 @@
"id": "helloworld",
"name": "hello, world!",
"shortName": "hello world",
- "version": "0.02",
+ "version": "0.03",
"description": "A cross cultural hello world!/hola mundo! app with colors and languages",
"icon": "app.png",
"tags": "input,interface,buttons,touch",
- "supports": ["BANGLEJS"],
+ "screenshots": [{"url":"screenshot.png"}],
+ "supports": ["BANGLEJS","BANGLEJS2"],
"readme": "README.md",
"storage": [
- {"name":"helloworld.app.js","url":"app.js"},
+ {"name":"helloworld.app.js","url":"helloworld.app.js"},
{"name":"helloworld.img","url":"app-icon.js","evaluate":true}
]
}
diff --git a/apps/helloworld/screenshot.png b/apps/helloworld/screenshot.png
new file mode 100644
index 0000000000000000000000000000000000000000..32cbd4ff37148d772cff92ea25ea5646aabab4d2
GIT binary patch
literal 5193
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
Date: Sat, 4 Mar 2023 12:35:13 -0500
Subject: [PATCH 10/89] [draguboard] Create draguboard app from dragboard
---
apps/draguboard/ChangeLog | 1 +
apps/draguboard/README.md | 8 ++
apps/draguboard/app.png | Bin 0 -> 9180 bytes
apps/draguboard/lib.js | 147 +++++++++++++++++++++++++++++++++
apps/draguboard/metadata.json | 15 ++++
apps/draguboard/screenshot.png | Bin 0 -> 16421 bytes
apps/draguboard/settings.js | 44 ++++++++++
7 files changed, 215 insertions(+)
create mode 100644 apps/draguboard/ChangeLog
create mode 100644 apps/draguboard/README.md
create mode 100644 apps/draguboard/app.png
create mode 100644 apps/draguboard/lib.js
create mode 100644 apps/draguboard/metadata.json
create mode 100644 apps/draguboard/screenshot.png
create mode 100644 apps/draguboard/settings.js
diff --git a/apps/draguboard/ChangeLog b/apps/draguboard/ChangeLog
new file mode 100644
index 000000000..a228aab54
--- /dev/null
+++ b/apps/draguboard/ChangeLog
@@ -0,0 +1 @@
+0.01: New App based on dragboard, but with a U shaped drag area
diff --git a/apps/draguboard/README.md b/apps/draguboard/README.md
new file mode 100644
index 000000000..2386c7658
--- /dev/null
+++ b/apps/draguboard/README.md
@@ -0,0 +1,8 @@
+Swipe along the drag bars and release to select a letter, number or punctuation.
+
+Tap on left for backspace or right for space.
+
+Settings:
+- ABC Color: color of the characters row
+- Num Color: color of the digits and symbols row
+- Highlight Color: color of the currently shown character
diff --git a/apps/draguboard/app.png b/apps/draguboard/app.png
new file mode 100644
index 0000000000000000000000000000000000000000..ae7262b47746c2bc8db95e4067eec233a15a8702
GIT binary patch
literal 9180
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