From d41284222074ef7fcf4b86f838453d8ee3d32dad Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Sun, 24 Apr 2022 00:46:21 -0700 Subject: [PATCH 1/4] Create lib.js --- apps/tapkb/lib.js | 168 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 apps/tapkb/lib.js diff --git a/apps/tapkb/lib.js b/apps/tapkb/lib.js new file mode 100644 index 000000000..24c52154f --- /dev/null +++ b/apps/tapkb/lib.js @@ -0,0 +1,168 @@ +exports.input = function(options) { + options = options||{}; + var text = options.text; + if ("string"!=typeof text) text=""; + +var layer = 0; +var caps = 0; + +class keyPad { + constructor(x1, y1, x2, y2, func) { + this.x1 = x1; + this.y1 = y1; + this.x2 = x2; + this.y2 = y2; + this.func = !func ? "" : func; + } + get funcName() { + this.func = func; + } + set funcName(a) { + this.func = a; + } + + draw() { + g.setColor(g.theme.fg).drawRect(this.x1, this.y1, this.x2, this.y2).clearRect(this.x1+1, this.y1+1, this.x2-1, this.y2-1).setFont("6x8",2).setFontAlign(0, 0, 0).drawString(this.func, (((this.x2-this.x1)/2)+this.x1), (((this.y2-this.y1)/2)+this.y1)); + } + + onTouch(xy) { + if (this.func == "space") text += " "; + else if (this.func == "<-") text = text.slice(0, -1); + else if (this.func == "new\nline") text += String.fromCharCode(182); + else if (this.func == "caps") { + caps = 1; + renderKeys(); + } + else if (this.func == "Caps") { + caps = 2; + renderKeys(); + } + else if (this.func == "CAPS") { + caps = 0; + renderKeys(); + } + else { + text += this.func; + if (caps == 1) caps = 0; + } + g.clearRect(25, 0, g.getWidth(), 25).setFontAlign(-1, -1).drawString(text.substring(text.length-12, text.length)+"_", 25, 7); + } +} + +function renderKeys() { + var a; + var i; + if (layer == 0) { + if (caps == 0) { + a = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "caps", "space", "<-"]; + } + else a = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "Caps", "space", "<-"]; + if (caps == 2) a[9] = "CAPS"; + for (i = 0; i < a.length; i++) { + pad[i].funcName = a[i]; + } + } + else if (layer == 1) { + if (caps == 0) { + a = ["j", "k", "l", "m", "n", "o", "p", "q", "r", "caps", "space", "<-"]; + } + else a = ["J", "K", "L", "M", "N", "O", "P", "Q", "R", "Caps", "space", "<-"]; + if (caps == 2) a[9] = "CAPS"; + for (i = 0; i < a.length; i++) { + pad[i].funcName = a[i]; + } + } + else if (layer == 2) { + if (caps == 0) { + a = ["s", "t", "u", "v", "w", "x", "y", "z", "0", "caps", "space", "<-"]; + } + else a = ["S", "T", "U", "V", "W", "X", "Y", "Z", "0", "Caps", "space", "<-"]; + if (caps == 2) a[9] = "CAPS"; + for (i = 0; i < a.length; i++) { + pad[i].funcName = a[i]; + } + } + else if (layer == 3) { + if (caps == 0) { + a = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "caps", "space", "<-"]; + } + else a = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "Caps", "space", "<-"]; + if (caps == 2) a[9] = "CAPS"; + for (i = 0; i < a.length; i++) { + pad[i].funcName = a[i]; + } + } + else if (layer == 4) { + if (caps == 0) { + a = [".", ",", "?", "!", "(", ")", "-", "\'", "new\nline", "caps", "space", "<-"]; + } + else a = ["-", "+", "/", "*", ":", "#", "$", "%", "new\nline", "Caps", "space", "<-"]; + if (caps == 2) a[9] = "CAPS"; + for (i = 0; i < a.length; i++) { + pad[i].funcName = a[i]; + } + } + + for (var j = 0; j < pad.length; j++) { + pad[j].draw(); + } +} + +var pad = []; +pad[0] = new keyPad(0, 29, 57, 64); +pad[1] = new keyPad(59, 29, 116, 64); +pad[2] = new keyPad(118, 29, 175, 64); +pad[3] = new keyPad(0, 66, 57, 101); +pad[4] = new keyPad(59, 66, 116, 101); +pad[5] = new keyPad(118, 66, 175, 101); +pad[6] = new keyPad(0, 103, 57, 138); +pad[7] = new keyPad(59, 103, 116, 138); +pad[8] = new keyPad(118, 103, 175, 138); +pad[9] = new keyPad(0, 140, 57, 175); +pad[10] = new keyPad(59, 140, 116, 175); +pad[11] = new keyPad(118, 140, 175, 175); +g.clear(); +renderKeys(); + +var drag; +var e; + +return new Promise((resolve,reject) => { + + Bangle.setUI({mode:"custom", drag:e=>{ + if (!drag) { // start dragging + drag = {x: e.x, y: e.y}; + } + else if (!e.b) { // released + const dx = e.x-drag.x, dy = e.y-drag.y; + drag = null; + //horizontal swipes + if (Math.abs(dx)>Math.abs(dy)+10) { + //swipe left + if (dx<0) layer == 4 ? layer = 0 : layer++; + //swipe right + if (dx>0) layer == 0 ? layer = 4 : layer--; + } + } + renderKeys(); + },touch:(button, xy)=>{ + for (var i = 0; i < pad.length; i++) { + if ((xy.x >= pad[i].x1) && (xy.x <= pad[i].x2) && (xy.y >= pad[i].y1) && (xy.y <= pad[i].y2)) { + pad[i].onTouch(xy); + i = pad.length; + } + } + },back:()=>{ + Bangle.setUI(); + g.clear(); + resolve(text.replace(new RegExp(String.fromCharCode(182), 'g'), '\n')); + }}); + g.clearRect(25, 0, g.getWidth(), 25).setColor(g.theme.fg).setFont("6x8", 2); + if (text == "") g.setFontAlign(0, -1).drawString("<-Swipe->", g.getWidth()/2, 7); + else { + text = text.replace(/\n/g, String.fromCharCode(182)); + g.setFontAlign(-1, -1).drawString(text.substring(text.length-12, text.length)+"_", 25, 7); + } +}); + +}; From 7a0d47b4d8ce83f467dcd8d21c26ee52f1d71c2a Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Sun, 24 Apr 2022 00:46:44 -0700 Subject: [PATCH 2/4] Add files via upload --- apps/tapkb/ChangeLog | 1 + apps/tapkb/README.md | 4 ++++ apps/tapkb/app-icon.js | 1 + apps/tapkb/app.png | Bin 0 -> 678 bytes apps/tapkb/metadata.json | 15 +++++++++++++++ apps/tapkb/screenshot.png | Bin 0 -> 2589 bytes 6 files changed, 21 insertions(+) create mode 100644 apps/tapkb/ChangeLog create mode 100644 apps/tapkb/README.md create mode 100644 apps/tapkb/app-icon.js create mode 100644 apps/tapkb/app.png create mode 100644 apps/tapkb/metadata.json create mode 100644 apps/tapkb/screenshot.png diff --git a/apps/tapkb/ChangeLog b/apps/tapkb/ChangeLog new file mode 100644 index 000000000..624f1b0fb --- /dev/null +++ b/apps/tapkb/ChangeLog @@ -0,0 +1 @@ +0.01: Initial version \ No newline at end of file diff --git a/apps/tapkb/README.md b/apps/tapkb/README.md new file mode 100644 index 000000000..8fc7cece0 --- /dev/null +++ b/apps/tapkb/README.md @@ -0,0 +1,4 @@ +# Usage + +* Swipe left or right to cycle between the alphabet, numerals, and symbols. +* "New line" is represented by paragraph symbols (¶). When you hit the back button, these symbols will be converted into newline. \ No newline at end of file diff --git a/apps/tapkb/app-icon.js b/apps/tapkb/app-icon.js new file mode 100644 index 000000000..c2b495917 --- /dev/null +++ b/apps/tapkb/app-icon.js @@ -0,0 +1 @@ +atob("MDCBAf////////////////AAAAAAD8AAAAAAA4AAAAAAAYAAAAAAAQf/////4A//////8A//////8A//////8A//////8A//////8A///8P/8A///8P/8A///8P/8A///8P/8A///8P/8A///8P/8A///8P//w///8P//w///8MP/w///8MP/w///8MMPw///8MMPw///8AMMA///8AAMA///8AAAA///8AAAA///8OAAA///8P+AA//wcP/8Af/AEP/8IA+AAP/8IA+AAP/8MA+DAP/8PA+BgP/8P//B4P/8P//g8P/8P//wfP/8P//4Pv/8P//8H//8P//8D//8P//+D//8P///B//4P///gAAAf///wAAAf///4AAA////8AADw==") \ No newline at end of file diff --git a/apps/tapkb/app.png b/apps/tapkb/app.png new file mode 100644 index 0000000000000000000000000000000000000000..2b01ad28042e192524bee3c2cddf89ef958086bd GIT binary patch literal 678 zcmV;X0$KfuP)Dw!Y7&dt$lmS}_w#N8_rP$=?CkSC&&=%1 z&U=i|E*!&s^sv;j(!)I*%@RI=J1r2Ix7?02|HEn$A2)$8ZH6tTY?&s^`FQ0E?8lh) zU<^~3)vxs~%qJ?RhNCeT4(Qj~gM~z8n|eNpG5uN>I?+WOok6QAh(5jDVX3GKtKPu) z0An>WRagB8j0_ALBLl<6AXlNf(6@SxMxX{%+8;(E&>(V+%xDBEU>>hZJeM4q)H$;$ zBpP_FJ-j58QoitD;XvmHBb~?>Fo9r&c@mt#@iYL*J^;U?!QcsF6jR& zXcMm26u5Q+gw5wmg7_EaFrR+>;63Z#8gcVjDgrg8je=tSQMkiH8Z!CzX}1fJ4$> zsCAc_CJn%u2E{+e+NKQc;OdTmS$7 M07*qoM6N<$f}npf`2YX_ literal 0 HcmV?d00001 diff --git a/apps/tapkb/metadata.json b/apps/tapkb/metadata.json new file mode 100644 index 000000000..c450f3d47 --- /dev/null +++ b/apps/tapkb/metadata.json @@ -0,0 +1,15 @@ +{ + "id": "tapkb", + "name": "Tap keyboard", + "version":"0.01", + "description": "An onscreen tap keyboard.", + "icon": "app.png", + "type":"textinput", + "tags": "keyboard", + "supports" : ["BANGLEJS2"], + "readme": "README.md", + "screenshots": [{"url":"screenshot.png"}], + "storage": [ + {"name":"textinput","url":"lib.js"} + ] +} \ No newline at end of file diff --git a/apps/tapkb/screenshot.png b/apps/tapkb/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..bd1caed380d80e350f8ec523e85adebf0355864e GIT binary patch literal 2589 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 literal 0 HcmV?d00001 From 033a2a4f6e24cc81c4f36a29b5619f4250292c3b Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Sun, 24 Apr 2022 00:47:55 -0700 Subject: [PATCH 3/4] Update README.md --- apps/tapkb/README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/tapkb/README.md b/apps/tapkb/README.md index 8fc7cece0..4f49b1494 100644 --- a/apps/tapkb/README.md +++ b/apps/tapkb/README.md @@ -1,4 +1,7 @@ -# Usage +# Tap Keyboard +This was originally designed for the Noteify app. With the new keyboard system in place, it has become its own keyboard app. +## Usage * Swipe left or right to cycle between the alphabet, numerals, and symbols. -* "New line" is represented by paragraph symbols (¶). When you hit the back button, these symbols will be converted into newline. \ No newline at end of file +* Hitting "caps" once will capitalize one character only. Hitting "caps" twice activates caps lock, and all subsequent characters will be capitalized until you hit "caps" again. +* "New line" is represented by a pilcrow (¶). When you hit the back button, these symbols will be converted into newline. From 370c9e87aa3c0d01386d80812214f197515cfb0f Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Mon, 25 Apr 2022 17:17:22 -0700 Subject: [PATCH 4/4] Update lib.js --- apps/tapkb/lib.js | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/apps/tapkb/lib.js b/apps/tapkb/lib.js index 24c52154f..5ff524165 100644 --- a/apps/tapkb/lib.js +++ b/apps/tapkb/lib.js @@ -14,12 +14,6 @@ class keyPad { this.y2 = y2; this.func = !func ? "" : func; } - get funcName() { - this.func = func; - } - set funcName(a) { - this.func = a; - } draw() { g.setColor(g.theme.fg).drawRect(this.x1, this.y1, this.x2, this.y2).clearRect(this.x1+1, this.y1+1, this.x2-1, this.y2-1).setFont("6x8",2).setFontAlign(0, 0, 0).drawString(this.func, (((this.x2-this.x1)/2)+this.x1), (((this.y2-this.y1)/2)+this.y1)); @@ -59,7 +53,7 @@ function renderKeys() { else a = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "Caps", "space", "<-"]; if (caps == 2) a[9] = "CAPS"; for (i = 0; i < a.length; i++) { - pad[i].funcName = a[i]; + pad[i].func = a[i]; } } else if (layer == 1) { @@ -69,7 +63,7 @@ function renderKeys() { else a = ["J", "K", "L", "M", "N", "O", "P", "Q", "R", "Caps", "space", "<-"]; if (caps == 2) a[9] = "CAPS"; for (i = 0; i < a.length; i++) { - pad[i].funcName = a[i]; + pad[i].func = a[i]; } } else if (layer == 2) { @@ -79,7 +73,7 @@ function renderKeys() { else a = ["S", "T", "U", "V", "W", "X", "Y", "Z", "0", "Caps", "space", "<-"]; if (caps == 2) a[9] = "CAPS"; for (i = 0; i < a.length; i++) { - pad[i].funcName = a[i]; + pad[i].func = a[i]; } } else if (layer == 3) { @@ -89,7 +83,7 @@ function renderKeys() { else a = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "Caps", "space", "<-"]; if (caps == 2) a[9] = "CAPS"; for (i = 0; i < a.length; i++) { - pad[i].funcName = a[i]; + pad[i].func = a[i]; } } else if (layer == 4) { @@ -99,7 +93,7 @@ function renderKeys() { else a = ["-", "+", "/", "*", ":", "#", "$", "%", "new\nline", "Caps", "space", "<-"]; if (caps == 2) a[9] = "CAPS"; for (i = 0; i < a.length; i++) { - pad[i].funcName = a[i]; + pad[i].func = a[i]; } }