From 00fdeca185acaaaa00a238b4ca7a2b4e795ab9fb Mon Sep 17 00:00:00 2001 From: pancake Date: Sat, 1 Jan 2022 19:47:43 +0100 Subject: [PATCH 1/2] Initial import of the tinydraw application --- apps.json | 19 ++++ apps/tinydraw/ChangeLog | 1 + apps/tinydraw/README.md | 12 +++ apps/tinydraw/add_to_apps.json | 14 +++ apps/tinydraw/app-icon.js | 1 + apps/tinydraw/app.js | 159 +++++++++++++++++++++++++++++++++ apps/tinydraw/app.png | Bin 0 -> 1650 bytes apps/tinydraw/screenshot.png | Bin 0 -> 4787 bytes 8 files changed, 206 insertions(+) create mode 100644 apps/tinydraw/ChangeLog create mode 100644 apps/tinydraw/README.md create mode 100644 apps/tinydraw/add_to_apps.json create mode 100644 apps/tinydraw/app-icon.js create mode 100644 apps/tinydraw/app.js create mode 100644 apps/tinydraw/app.png create mode 100644 apps/tinydraw/screenshot.png diff --git a/apps.json b/apps.json index e5e9f8f02..b822f2f0b 100644 --- a/apps.json +++ b/apps.json @@ -4838,6 +4838,25 @@ {"name": "flow.img", "url": "app-icon.js","evaluate": true } ] }, + { "id": "tinydraw", + "name": "TinyDraw", + "shortName":"TinyDraw", + "version":"0.01", + "type": "app", + "description": "Draw stuff in your wrist", + "icon": "app.png", + "allow_emulator": true, + "tags": "tools, keyboard, text, scribble", + "supports" : ["BANGLEJS2"], + "readme": "README.md", + "storage": [ + {"name":"tinydraw.app.js","url":"app.js"}, + {"name":"tinydraw.img","url":"app-icon.js","evaluate":true} + ], + "screenshots":[ + { "url":"screenshot.png" } + ] + }, { "id": "scribble", "name": "Scribble", "shortName":"Scribble", diff --git a/apps/tinydraw/ChangeLog b/apps/tinydraw/ChangeLog new file mode 100644 index 000000000..af7f83942 --- /dev/null +++ b/apps/tinydraw/ChangeLog @@ -0,0 +1 @@ +0.01: Initial release diff --git a/apps/tinydraw/README.md b/apps/tinydraw/README.md new file mode 100644 index 000000000..555730262 --- /dev/null +++ b/apps/tinydraw/README.md @@ -0,0 +1,12 @@ +TinyDraw +======== + +This is a simple drawing application to make +simple sketches in your watch! + +It is my first BangleJS application, I plan +to continue improving this app over time, but +if you want to contribute, i would be happy +to apply any patch! + +--pancake diff --git a/apps/tinydraw/add_to_apps.json b/apps/tinydraw/add_to_apps.json new file mode 100644 index 000000000..21a90049e --- /dev/null +++ b/apps/tinydraw/add_to_apps.json @@ -0,0 +1,14 @@ +{ "id": "tinydraw", + "name": "TinyDraw", + "shortName":"TinyDraw", + "version":"0.01", + "description": "Draw stuff in your wrist!", + "icon": "app.png", + "tags": "keyboard, text, scribble", + "supports" : ["BANGLEJS2"], + "readme": "README.md", + "storage": [ + {"name":"tinydraw.app.js","url":"app.js"}, + {"name":"tinydraw.img","url":"app-icon.js","evaluate":true} + ] +} diff --git a/apps/tinydraw/app-icon.js b/apps/tinydraw/app-icon.js new file mode 100644 index 000000000..1f0eaae27 --- /dev/null +++ b/apps/tinydraw/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwhC/ACEF7vd6oXTroXB7tQC6QWC7vQC6Xf//9C6n4xGPC4VM5nMoAXNxH/xH96EECwPM4gXNx///AXBhgXC5gXRqAXOt3u91gC4S/BC5sGCwPu8wXCuAXOhwXC9wXcR5oXJX5oXHxGIuF3DYQXRDIWHC5SPH/7yBAIN3u6/QC4JME+AXIg5WCC44CBJRN4KwQXHAgOAC5BWCC6gOCC6xUBC6cIUIQbCAAwXJvAMBQ4QXRg6fEC6SQBLQQXRJAYAJC5UIFpIXMMAQXUVIYXVGBQXLh4XKw4XKgCpCAA34F5apK/FwC5ZIJxAWLSJP4LxhhJxBGMMIeIJQX4xH3Cxz0CxAACu4WQAH4A/AAwA==")) diff --git a/apps/tinydraw/app.js b/apps/tinydraw/app.js new file mode 100644 index 000000000..e4c612219 --- /dev/null +++ b/apps/tinydraw/app.js @@ -0,0 +1,159 @@ +(function () { + var pen = 'circle'; + var discard = null; + var kule = [255, 255, 255]; + var oldLock = false; + + setInterval(() => { + if (Bangle.isLocked()) { + if (oldLock) { + return; + } + g.setColor('#fff'); + g.fillRect(0, 0, g.getWidth(), 20); + g.setFont('6x8', 2); + g.setColor('#000'); + g.drawString('PLEASE UNLOCK', 10, 2); + oldLock = true; + } else { + oldLock = false; + drawUtil(); + } + }, 1000); + + function nextColor () { + kule[0] = Math.random(); + kule[1] = Math.random(); + kule[2] = Math.random(); + } + + function nextPen () { + switch (pen) { + case 'circle': pen = 'pixel'; break; + case 'pixel': pen = 'crayon'; break; + case 'crayon': pen = 'square'; break; + case 'square': pen = 'circle'; break; + default: pen = 'pixel'; break; + } + console.log('set time'); + drawUtil(); + + discard = setTimeout(function () { console.log('timeout'); discard = null; }, 500); + } + + function drawUtil () { + if (Bangle.isLocked()) { + // do something to tell the user to unlock the screen + } + // titlebar + g.setColor(kule[0], kule[1], kule[2]); + g.fillRect(0, 0, g.getWidth(), 20); + // clear button + g.setColor('#000'); // black + g.fillCircle(10, 10, 8, 8); + g.setColor('#fff'); + g.drawLine(8, 8, 13, 13); + g.drawLine(13, 8, 8, 13); + // tool button + g.setColor('#fff'); + g.fillCircle(g.getWidth() - 10, 10, 8); + g.setColor('#000'); + + var w = g.getWidth(); + switch (pen) { + case 'circle': + g.fillCircle(w - 10, 10, 5); + break; + case 'square': + g.fillRect(w - 5, 5, w - 15, 15); + break; + case 'pixel': + g.setPixel(10, 10); + g.fillCircle(w - 10, 10, 2); + break; + case 'crayon': + var tap = { x: 10, y: 15, dy: -5, dx: 5 }; + g.drawLine(w - tap.x, tap.y, w - tap.x + tap.dx, tap.y + tap.dy); + g.drawLine(w - tap.x + 1, tap.y + 2, w - tap.x + tap.dx, tap.y + tap.dy - 2); + g.drawLine(w - tap.x + 2, tap.y + 2, w - tap.x + tap.dx, tap.y + tap.dy + 2); + break; + } + } + var tapTimer = null; + Bangle.on('drag', function (tap) { + if (tap.b === 0) { + if (tapTimer !== null) { + clearTimeout(tapTimer); + tapTimer = null; + } + } + // tap and hold the clear button + if (tap.x < 32 && tap.y < 32) { + if (tap.b === 1) { + if (tapTimer === null) { + tapTimer = setTimeout(function () { + g.clear(); + drawUtil(); + tapTimer = null; + }, 800); + } + if (discard) { + clearTimeout(discard); discard = null; + return; + } + } + return; + } + if (tap.x > g.getWidth() - 32 && tap.y < 32) { + if (tap.b === 1) { + if (tapTimer === null) { + tapTimer = setTimeout(function () { + g.clear(); + drawUtil(); + tapTimer = null; + }, 800); + } + if (discard) { + clearTimeout(discard); + discard = null; + return; + } + nextPen(); + } + drawUtil(); + return; + } else if (tap.y < 32) { + nextColor(); + drawUtil(); + return; + } + + g.setColor(kule[0], kule[1], kule[2]); + + switch (pen) { + case 'pixel': + g.setPixel(tap.x, tap.y); + g.drawLine(tap.x, tap.y, tap.x + tap.dx, tap.y + tap.dy); + break; + case 'crayon': + g.drawLine(tap.x, tap.y, tap.x + tap.dx, tap.y + tap.dy); + g.drawLine(tap.x + 1, tap.y + 2, tap.x + tap.dx, tap.y + tap.dy - 2); + g.drawLine(tap.x + 2, tap.y + 2, tap.x + tap.dx, tap.y + tap.dy + 2); + break; + case 'circle': + var XS = tap.dx / 10; + var YS = tap.dy / 10; + for (i = 0; i < 10; i++) { + g.fillCircle(tap.x + (i * XS), tap.y + (i * YS), 4, 4); + } + break; + case 'square': + g.fillRect(tap.x - 10, tap.y - 10, tap.x + 10, tap.y + 10); + break; + } + drawUtil(); + }); + + g.clear(); + drawUtil(); +})(); diff --git a/apps/tinydraw/app.png b/apps/tinydraw/app.png new file mode 100644 index 0000000000000000000000000000000000000000..01eda0a60ed4eaa25874cbe5cb0788819c796af4 GIT binary patch literal 1650 zcmV-&295cNP)F7=ErT_RA|01Z$N!$o!zp1#2-;FiT`^S%e=%SvCkHGsc9ds39S#_{(G{(X7f8 zSR^Krm`q|MsRh#!OteD0>W9s%HnrdDz1tlr0mAtF)IQyAez8OGKA(Wfc;#G?|=Uaot>R;l8RyQPlXk% zEfxR}Es2>>|6tLea@0Lm>u`*!T`o_QOeXTOth7xk5g)o%EjP~A{<8TBDE{*RSe8Y5 zdppc#Gftj7iDOp^fOszez~+8E!FikA**rM-dZ)|fi2?wZ%M&#?_`+YB&hW595fvq@1+Z&D zM*sj=_HCGp#bN*e4<5ZkUH<2mC;36n;TTm<*Un7*oJOFG>f!;M0B``nMgS%Nw*XxH zg(>`Rs_%?LZ7$=Br$3Ef2ZCWU6=vdRJpuveYXE2h&Li;D0H_J@lOpOHN5;F0m`o<} zPG@f>el8(&0zl3bTuy+W3^o9(-w!ou+w`G0JwF!#2j<8}1CYI2D3yp0#m2Ih$v%jU zWi3*P_)xe7Y@7%G-fVNNT5gP9xni$e9`i65E;5-9K& z`ZU(8S%b4@&!V%lvqh~|WB2aeZww2CXl!gO-nVbxZ;=#m5x|xy61gG3Pb%QtxpOEj zEd|3cP%4$k%*@1&9Xs&o(Ic=d3$0d*oSdA>`}gl#O(xS{V`F1bsZ_f&GBW-M>t?Bp z>f+0&uDp!uy344J0?+bsQz+fNdzXTE`SK+JpvK0=P+4DJ9|55H`ub3r(P$(91b~D> zA&JFe0zj3Ol^4Ul+bFj+6doX=*W>Hchb_*U^E(G zHk(mYRD`^|yz<$0giI!z{75KxdlnK3XW#KN3TSO@#nGcjk(`{2#Kc5sG#U_5t45>A zosFTmxOgxO6ZY`_pxx-ez(DB#`t|E^>C&b2%a<=7udA!emrA7o0H4nXp69_Z3}iAH zL?RJ*o`=up0|2<)qYwxLp?bj{7l}lXy|ySRDanqBiJ^gk0U{#eIF77VE2XEWlR}{& zg+f7ky`DTC4{;nvZnv8{Iy%Vdbdt~KBcIPl9*>7QIy%Vhc9YlZC9l^@9*>8NMk9@l zjfHZ+Y&Oq22WCW1Pmhve80VQYXNc!{;(4Apjw6G?Kmvh)SeB)xrY7=wy&;Ero+rQG zAF3aG5B|o#^E@9}0RT`{RiyzyPoF*w8RIyP3JVMA-C1Zph?s!k;oxCI3EHpc*v!C(j(F&T)0pUfNtNuJul~9ym&!LNlBEOn@d<|6c-oo0YKNUU!Sl_e<<49 z+exKTQA$b*_4f9DhmV0%r%q{t$HSJE7P8yzGsb&YR~MZ>f1UtPdU`r_b#?uSkBO$H zrrgxjR02TDmoKNn!on#9Y}l|NbUdx7s35D=nmt#$OeDl;wc6|l4<6`-hKAnbBoYa> wZ{Ln>+qR{orKOD|BqUg{ge5Ft37;(f2V~L;L7FfU%>V!Z07*qoM6N<$g7T*d=>Px# literal 0 HcmV?d00001 diff --git a/apps/tinydraw/screenshot.png b/apps/tinydraw/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..27d5cc56cd4017f25f42bf9405e2575771e4b4b1 GIT binary patch literal 4787 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 N002ovPDHLkV1i{CF?av~ literal 0 HcmV?d00001 From f7be3effa437251ba5e7fe8f3b5ccb4f2ffa09e7 Mon Sep 17 00:00:00 2001 From: pancake Date: Sun, 2 Jan 2022 01:45:11 +0100 Subject: [PATCH 2/2] Fix readme --- apps/tinydraw/README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/apps/tinydraw/README.md b/apps/tinydraw/README.md index 555730262..a4acd9a72 100644 --- a/apps/tinydraw/README.md +++ b/apps/tinydraw/README.md @@ -1,12 +1,14 @@ TinyDraw ======== -This is a simple drawing application to make -simple sketches in your watch! +This is a simple drawing application to make sketches +using different brushes and colors for your BangleJS2 watch! + +* Brush types: dot, brush, circle, square It is my first BangleJS application, I plan to continue improving this app over time, but -if you want to contribute, i would be happy -to apply any patch! +if you want to contribute or provide feedback +don't hesitate to contact me! --pancake