fontkorean and jclock (#3357)

* Create app.js

* Create app-icon.js

* Create README.md

* Add files via upload

* Create metadata.json

* Update README.md

* Update metadata.json

* Create ChangeLog

* Rename ChangeLog to ChangeLog

* Rename README.md to README.md

* Rename app-icon.js to app-icon.js

* Rename app.js to app.js

* Rename app.png to app.png

* Rename metadata.json to metadata.json

* Update README.md

* Update app.js

* Update app.js

* Update app.js

* Update app.js

* Update app.js

* Update app.js

* Update app.js

* Update app.js

* Update app.js

* Update app.js

* Update app.js

* Update app.js

* Update app.js

* Update app.js

* Update app.js

* Create font_Korean

* Delete apps/font_Korean

* Update app-icon.js

* Add files via upload

* Update README.md

* Update app.js

* Add files via upload

* Update app.js

* Delete apps/jclock/jclock_screenshot_BT.png

* Delete apps/jclock/jclock_screenshot_no_BT.png

* Update README.md

* Update app.js

* Add files via upload

* Update README.md

* Update metadata.json

* Update metadata.json

* Update metadata.json

* Create app.js

* Create metadata.json

* Update metadata.json

* Add files via upload

* Delete apps/font_Korean/app.js

* Create boot.js

* Add files via upload

* Create lib.js

* Create Changelog

* Create README.md

* Delete apps/font_Korean/Changelog

* Create ChangeLog

* Update metadata.json

* Update README.md

* Update metadata.json

* Update app.js

* Delete apps/jclock/jclock_screenshot_BT.png

* Delete apps/jclock/jclock_screenshot_no_BT.png

* Add files via upload

* Update ChangeLog

* Update metadata.json

* Update app.js

* Update ChangeLog

* Delete apps/jclock/jclock_screenshot_BT.png

* Delete apps/jclock/jclock_screenshot_no_BT.png

* Add files via upload

* Delete apps/jclock/jclock_screenshot_BT.png

* Delete apps/jclock/jclock_screenshot_no_BT.png

* Add files via upload

* Update and rename README.md to README.md

* Update and rename metadata.json to metadata.json

* Update and rename boot.js to boot.js

* Update and rename ChangeLog to ChangeLog

* Update metadata.json

* Rename font_Korean_icon.png to fontKorean_icon.png

* Rename lib.js to lib.js

* Rename font_Korean.pbf to fontKorean.pbf

* Delete apps/fontKorean directory

* Create boot.js

* Add files via upload

* Create ChangeLog

* Create ChangeLog

* Update metadata.json

* Delete apps/font_Korean directory

* Update metadata.json

* Rename ChangeLog to ChangeLog

* Add files via upload

* Delete apps/fontKorean directory

* Add files via upload

* Update metadata.json

* Delete apps/fontkorean/fontkorean.pbf

* Update app.js

* Update README.md
master
jeonlab 2024-04-17 04:01:02 -04:00 committed by GitHub
parent 4efad187fc
commit f02c3a53a8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 151 additions and 0 deletions

View File

@ -0,0 +1 @@
0.01: First release

17
apps/fontkorean/README.md Normal file
View File

@ -0,0 +1,17 @@
# Fonts (Korean)
This library provides an Korean font that can be used to display messages.
The font is the 16px high [GNU Unifont](https://unifoundry.com/unifont/index.html).
Korean characters from Unicode codepoint 32-255, 0x1100-0x11FF, 0x3130-0x318F, 0xA960-0xA97F
## Usage
See [the BangleApps README file](https://github.com/espruino/BangleApps/blob/master/README.md#api-reference)
for more information on fonts.
## Recreating fontkorean.pbf
* Go to `bin` directory
* Run `./font_creator.js "Korean" ../apps/fontkorean/font.pbf`

1
apps/fontkorean/boot.js Normal file
View File

@ -0,0 +1 @@
Graphics.prototype.setFontIntl = function() { return this.setFontPBF(require("Storage").read("fontkorean.pbf")); };

BIN
apps/fontkorean/font.pbf Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 494 B

3
apps/fontkorean/lib.js Normal file
View File

@ -0,0 +1,3 @@
exports.getFont = (options) => {
return "Intl"; // placeholder for now - see https://github.com/espruino/BangleApps/issues/3109
};

View File

@ -0,0 +1,16 @@
{ "id": "fontkorean",
"name": "Korean font",
"version":"0.01",
"description": "Installs a font data, Unifont characters for Korean **Requires 420 KB storage**",
"icon": "fontkorean_icon.png",
"tags": "font",
"type": "module",
"provides_modules" : ["font"],
"supports" : ["BANGLEJS2"],
"readme": "README.md",
"storage": [
{"name":"font","url":"lib.js"},
{"name":"fontkorean.boot.js","url":"boot.js"},
{"name":"fontkorean.pbf","url":"font.pbf"}
]
}

2
apps/jclock/ChangeLog Normal file
View File

@ -0,0 +1,2 @@
0.01: Created
0.02: Changed side bar color to blue for better clarity when it's locked

26
apps/jclock/README.md Normal file
View File

@ -0,0 +1,26 @@
# jclock
I have used Rebble clock since I bought my Banglejs 2, and wanted to make my own clock with much simpler features and to switch the time window and the feature window because I'm wearing my watch on my left wrist and about a half (left side) of the screen is covered by the sleeve of my jacket or shirts. Of course it won't happen during summer, but I decided to make my first Bagle app with these changes. See Features below for the items displayed on the screen.
- The layout is inspired by the Rebble clock.
- The big font KdamThmor is copied from the Rebble clock.
## Features
- Single screen
- No settings
- Time on the right side with big font
- On the sidebar on the left
- Day of week
- Day
- Month
- Steps
- Bluetooth connection status
- Battery %
- Update time and status every 1 minute
## Screenshots
![](jclock_screenshot_no_BT.png)
![](jclock_screenshot_BT.png)
## Creator
Written by [JeonLab](https://jeonlab.wordpress.com)

1
apps/jclock/app-icon.js Normal file
View File

@ -0,0 +1 @@
require("heatshrink").decompress(atob("mEw4f/AAIHB7ue4cYrPO0cQtUy2WUHU0kyVJARAQEhIRLkgQCgQOKAQWACIYbHIImQAYMSpQRLgmSCIVSCJcACIWSKJARPzO9gETm+4BwNACI8Etu28GN23fIgIRIg14hnw/UI7wRGltvCIMjuEO7BCBCI97twRCsEICIMO7gRKnYRCju2/A1Hr4RHEY5ZDGokJzeACJRZB+EAgPbCIxrDgd4g347kBEY8rLIUHUIPA9qhICIcA/LFBj830ARLAAwR/CMkd3wOBozXHCIcE5oRCswRLg/RCIMD3gRLcoIRBgOwCJ8Z+ARIfYQRDx8ACI97CI1uCI9K7YRFglt23b4ARGuQROpPXAQI1EAAJHHkgCCg4gB+ARVyQRIdI+SdgVSCKFKCJcEyADBgVJlIRJhMkCIUAEQgCIwAXECJUgHYoRJPQIAlA="))

68
apps/jclock/app.js Normal file
View File

@ -0,0 +1,68 @@
// single screen, clock on the right, sidebar without image (date/steps/bluetooth connection status/batt%)
// Large font KdamThmor taken from Rebble clock
Graphics.prototype.setFontKdamThmor = function(scale) {
// Actual height 70 (69 - 0)
this.setFontCustom(
E.toString(require('heatshrink').decompress(atob('AH4AMgfABZM/BZMB/4WJg/+BZMf/ALJ//gIpP/wAugLpUAvyBKsDC/ACKYJQIKYJgaYKv6YJh7HJeoP8VxLSJg//+D0JIhMf/7RIf4JPJv//LX5a6CwLvJn5aJLYIKJgY4IADn/KpKvBAAKvIAARiGBQanGOwILJBQgLFFogvGIgZHGWAIAEdwg5FNYreBAAjvDeoIAFYQcfBYy3DEQRKEKQQiCAoRiCIogoDCIJGDEQLlEIwZoBCwYLCHQQoBQwgGEj7aFGoKuDKwYSFE4LZFv41Ch6dEIITICn5FEDwQuDeAwuEBQgeEB4b8EFwbADNIZdaHQoSBFwUfNIoGEv5GFXYpGEIoJBCZgjZGHQILDCwIpDj//GgQoBMggcBAApkDBQwiDDoQAEEQY0BERJGBERBGCERC8BBYrYFBQj8FLwrBGBQbkFEYoKFBYgtFL4jLFZ4gKJAH4AciALKRA73DbIgAFj/ABZLOGEQjDEj40En6tEv4oDgLPEAoLRFCIcHDgouJDgP4FxAiFFwt//xXEFwcDEQouEj4iEFwv/EQguEEQJ6EFwgiBS4guE/5uEFwiiBAAyiDBQwdDCw4uCIoIAGFwSLBF34unAAy7EAAy7EAAzqEAArqEF34ukAH4AGgfgNJWAAod8Cwn+SQn4RggFEv4oE/4FDg//FAYFFn4oEAoidBFAYFFh//YIYFBFwd//7BDAoIuCgf/YIYFBFwcfFAgFFDgIoDDgIFCEQpcBFwZFFn4uEAoJcEFwYFBLgouDQoo/BAwcf/hcEFwgiELgPfFwQRBEQYVBFwcPDYYzB+YSDn55DKwOPFwgbCKwP8CQYuBXIouEKIZcBIIgbF/BBEDYZcB4ASFDYI5BCgIuEHQSzCFwo6CeYQuEv4nBOYIPBFwa7Ddoa7FJoLtCFwhNBAAQfBFwiTBAAXAT4oKDCYSfFAAQ9BFwg6BAAQHBFwhDCLgQuFIwY5BFwhGDDwT9FOQI5CFwpSDDoYuDBYQWCFwoLCAgQuFCIsHFwgAFh4uEAH4AWjgLKvwGFj6LDP4sBcgjhCCwaGDn4LEgKjDAgKXEh61Dg7LEdQIuDj7AEZgIpDfYPACIgdCFwLjDdIQRCFwIoDEQJdEFAgiBJgYoEEQoLCAoRFFBYRjCFAIWDQII0Dv6SFv40CRYg1DHQRXBBQg1BFISpDBwQSEEQTQDj4SCDYJKBh42Cv4uCh4TCn4aBIIIuDCYIHBDQIeBFwYPBg4aCe4YPDfAYuHv4uNLo6bBLpJ4EFwYTBEQIHBCQYbBHQIqBEwIGCXYl/IQTwDD4P+CwIfBFILCCBAQACwACBEQQQBAArlDn4LGcoY3BGAIlEHQYAB+YiGMQIAB54DCOgRGD/0fEQpGD+A+CEQZ6BLYhFEKQX8HwYKDBYXgHwQ5DBYQpBBYQ5DHYRWDUQQAGgK5DADsBBZUfb4IAIOYoAETgJcFAAbLBBRBoBUQg5FRYxQDRYJGIZQQ5KFxDtCFxDpCFw7dIfAouICwQuHHIP+FxBQB8YuHf4UPFw6KCn4uGKAWAFw6KB/glBHJHAFw5QCQQIuGRQLzBFww5CKgRQH/A9BFwxQCFw45BCYQuGKAI5BFwwGBKAIuHRQRVCFwhQDFw6KBKAIuHfwQAEGAYKGGgbQCAAowCFwIAGF34ugAAjqHTojqFfQrqFcYoWJF0f+CxMH8ALJAEkCBZU8BRMB/CCKOw0DA4V/OwqhBA4IDBwAKFVoTlBBQytCn6xDBQX/IQQDDAgIACSwIRBTQQWDGwUHHQYzBAAK5CHQk/Fwo6EFwppBNoQuGgIPDFwYeCOoguC34eCh74DEASMCCQI+CDYQCBCQYuDDYMPFwQ6BFwYbBn4uCg4uE8ASBFwUfFwqIBCQV/FwsfLpAbBPgZdFFwpdGFwhdHDwQPELoYeCHwYbD/46CAYaMEBwLqFFwRGCv5RDFYUfBYIWBGQQuDv7iDMIQuCNIIADCwQuCfIgiDFwT5DEQYuDHQIiFVAc/EQyJDIwYiDc4RGDNAYuBCAJGDRYQHBCAQLDCwcPCAR+BHIgAEBYQKHEYQtDAH4Ak/gKJZALMBRhLGDAAjSGWYgLCEY7qDBYwtCXhBEBewzpF/5fGj4LDdYwKD//gKBBeHKAZGGHIX+gJGGKAQfBHQoSBCYQEB+A5GA4InBHQiJEQgKKGOIUPHQg5CFQU/HQaKDVgR1ERQQeCIwK8DBQPvDwUHFwZQB/0/DwUfFwaKB+IeDv4PCHIWHFw45B/geDFwjBCDwYPDEQKsCLoxFB+CIDCQIPCP4OAj6MCj4uEBAN/FQV/SAS0CFwIqBXYioCA4ZYBVwYbBHoIaCQAY+CHoPACwKADGwa+CEQcPFQIfBAARVCgE+dgiGCBYRVCHQLiFganEEQsIZQgiFAAZFGAAZGDNAYADcQSLDAAhSCVwYLHHI4LCCxC5FAH4AIJhRYBXgQAGh5vJgE/VI4uDSRAuJoAuJg4uKvguJg/wFxN/OAQuGaoIuJv/8FxAWBFxN/T4YuFCwIuJCwIuICwQuICwIuICwQGDFwgWCEQQuECwQpDFwk/BQIdDFwYPBCwguECwwuDCw4uDCw4uCCw4uDCw4uCCxAuCCxAuBCwYKEFwQWCRIYuD8YWIEAO/CxEPCoQWGLQYWHFwIWJJ4YWHFwYKGFwYWHFwYKHFwQWIFwQKHFwQWIFwQKIFwIWJdQQuJ8ALJAH8f/BuK/gIFv6RDBYqlBwEBSIIjFA4OAWgSSEA4WAv4LGA4TXC//Ab4v+j4LCwBYDAwP8DQTNEAwXzAYTCDFQfvAYRSDFQYADIwYqDAAZGCEQYAB8A6ENARHCDoI6DAgKKCD4N/HQQIB8ACBCYQGBAYMHE4IxBIQIPBHQU/DYIOBA4ISCDYQHBh4iCh7ICD4IaEAYJpCB4d/GwQuEGwasBDwYPBA4MHFw4HCj4uHA4QuULqyUDRgxCCRhC0Cn46CEwYbB+DhCYQa7DAAQyBcoIaBdQoLBawYrCAApRCHQILGKIT/C//7Eoh1DAAPvAYRRCIwkfEQpGD/AyDBQSBBCQQiGKQX+HwYiDKQXwGQRFDBYYyDNAYLCAwILCBQg+FHIgAEC4IKIQwKtCAH4AWnwKJPoKrEOAi3GaY4WJ/6KHW4ShIfwTbFAAMDCwX8A4UYHIrQE8AiFeYcHHwQiDKQZ6DEQZSCgYmDEQZGCj4uCEQQZBCYRtDNAPAg46Cg5hDv5aBBYI6Bn4aCRYInBDQIpCFwQTBGwQaBGQIuCn59Cn4uBSAgbDHoYuCE4JlCEwJjBCQUPEQUH/hjCFwaUCj/wHIKzDSgd/4AWBQAhhDcYTpDFwg5BUYYuE8Y5ELoufHIhdFaoguBYYbJESgjWDGgQHCH4IiDBQZZBCIIiCKAa7CIwIWCKAbPC8AWCKAZpCCgRQFIQhQGHQQADKAhOEKApGDAARQEIwZQHIwpQFBYpQFKQgWHPwYWHBYQWIEYREGL4YKJAH4AegIEDsCxGPIfgCwr/Dn6nFh6jCgKcGn/wEQQbDXgYqCn/4BQkDDwYPDFzV/JoUfB4RdOgI1DnjG/ACoA='))),
46,
atob("GBo2NjY2NjY2NjY2Gg=="),
94+(scale<<8)+(1<<16)
);
return this;
};
var drawTimeout;
// schedule a draw for the next minute
function queueDraw() {
if (drawTimeout) clearTimeout(drawTimeout);
drawTimeout = setTimeout(function() {
drawTimeout = undefined;
draw();
}, 60000 - (Date.now() % 60000));
}
const zeroPad = (num, places) => String(num).padStart(places, '0');
function draw() {
let barWidth = 64;
let date = new Date();
// queue next draw in one minute
queueDraw();
// clean screen
g.reset().clearRect(Bangle.appRect);
// draw side bar in blue
g.setColor('#00f');
g.fillRect(0, 0, barWidth, g.getHeight());
// show time on the right
g.setColor(g.theme.fg);
g.setFontKdamThmor().setFontAlign(0,-1).drawString(zeroPad(date.getHours(),2), 120, 10);
g.setFontKdamThmor().setFontAlign(0,-1).drawString(zeroPad(date.getMinutes(),2), 120, g.getHeight()/2+10);
// show date
g.setFont('Vector', 20).setFontAlign(0, -1).setColor('#fff');
g.drawString(require("date_utils").dow(date.getDay(),1).toUpperCase(), barWidth/2, 3);
g.drawString(date.getDate(), barWidth/2, 28);
g.drawString(require("date_utils").month(date.getMonth()+1,1).toUpperCase(), barWidth/2, 53);
// divider, place holder for any other info
g.drawString('=====', barWidth/2, 78);
// show daily steps
g.drawString(Bangle.getHealthStatus("day").steps, barWidth/2, 103);
// show battery remaining percentage
g.drawString(E.getBattery() + '%', barWidth/2, 153);
// Bluetooth connection status
if (NRF.getSecurityStatus().connected) g.drawString('>BT<', barWidth/2, 128);
}
draw();
Bangle.setUI("clock");

BIN
apps/jclock/app.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

16
apps/jclock/metadata.json Normal file
View File

@ -0,0 +1,16 @@
{ "id":"jclock",
"name":"jclock",
"shortName":"jclock",
"icon":"app.png",
"version":"0.02",
"description":"Similar layout to Rebble clock, but much simpler features with switched time and the feature window. The time is on the right side. This is my first Bangle app.",
"type": "clock",
"tags": "clock",
"supports" : ["BANGLEJS2"],
"screenshots": [{"url":"jclock_screenshot_no_BT.png"},{"url":"jclock_screenshot_BT.png"}],
"storage": [
{"name":"jclock.app.js","url":"app.js"},
{"name":"jclock.img","url":"app-icon.js","evaluate":true}
],
"readme":"README.md"
}