From 6b71001b9735eb2df6e39227be3b0c68bd05adfb Mon Sep 17 00:00:00 2001 From: lastfuture Date: Tue, 30 Apr 2013 02:48:09 +0200 Subject: [PATCH] First commit --- resources/src/images/menu_icon_squared.png | Bin 0 -> 1032 bytes resources/src/resource_map.json | 11 + squared_screen.png | Bin 0 -> 1190 bytes src/squared.c | 343 +++++++++++++++++++++ 4 files changed, 354 insertions(+) create mode 100644 resources/src/images/menu_icon_squared.png create mode 100644 resources/src/resource_map.json create mode 100644 squared_screen.png create mode 100644 src/squared.c diff --git a/resources/src/images/menu_icon_squared.png b/resources/src/images/menu_icon_squared.png new file mode 100644 index 0000000000000000000000000000000000000000..ff8541d96eddce9ea14e5d932c2d0236ff261446 GIT binary patch literal 1032 zcmeAS@N?(olHy`uVBq!ia0y~yV31&7V36TpW?*3OvFN|Uz`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@OBQqqTB*NFnDmgz_FA=0huOhdA0R(L9D+&^m zvr|hHl2X$%^K6yg@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBIxIyhIN=dU- z$|xx*u+rBrFE7_CH`dE9O4m2Ew6p}7VPvFRl#-@fT$xvrSfQI&tPC^3CAB!YD6^m> zGe1uOWMX1cerbuVk`mO|irfNUU%0_}#n6CC&d=4aNG#Ad)HBe}%?0@j?BU{)pj3o2 zu&OQ&sVqp<4@xc0FD*(=4N6T@MzRXOMIeO*zP?ueMVaZDd5JkL`N^fZsd*)yF1AV) zxdnPDnJHH0mKG*%25v3}7DfhU7KVlv1{TK7PUdbdhE4{S2A0M!GqCA(GBw;IWm2**QVo82c zNPd0}ECmE)m70G)wffy(FY|Dq~rn<3UYA+F~KPtl*;WC5ZNa+FU3}=NXg#L zjHi4%0|NtFfKP}k0|UeV|NocXoPU>rfkDO7#WAGfR#HOB0j>fLVP=Vk4H2CabJ&^s ibvT2VINJ>z8Wb-m33+XX-P literal 0 HcmV?d00001 diff --git a/resources/src/resource_map.json b/resources/src/resource_map.json new file mode 100644 index 0000000..b0eaec5 --- /dev/null +++ b/resources/src/resource_map.json @@ -0,0 +1,11 @@ +{ + "media": [ + { + "defName": "IMAGE_MENU_ICON", + "type": "png", + "file": "images/menu_icon_squared.png" + } + ], + "friendlyVersion": "VERSION", + "versionDefName": "APP_RESOURCES" +} \ No newline at end of file diff --git a/squared_screen.png b/squared_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..f09adeba17b2105a09861f3967d1b5fc482bead6 GIT binary patch literal 1190 zcmeAS@N?(olHy`uVBq!ia0y~yV3@$bz_5aYnSp`9V&il#1_lPn64!{5;QX|b^2DN4 z2FH~Aq*MjZ+{E}FfdWj%4dKI|^3?N`*Ur~^l zoSj;tkd&I9nP;o?e)oPQh0GLNrEpVU1K$GY)Qn7zs-o23D!-8As_bOT6eW8*1)B=1 zirj+S)RIJnirk#MVyg;UC9t_xdBs*BVSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY z4HeAH^bAc*&CCpS6pRcEjr0wS^bO2(4Na^}&8&>f6`(-LPQj)qCCw_x#SLm#QA(Pv zQbtKhft9{~d3m{Bxv^e;QM$gNrKKgv3?n1mqLeh<;>x^|#0uTKVr7^KE~&-IMVSR9 znfZANAQKal@=Hr>m6V{yR^%4=`oay)D~1MCa(=FUMPh-zp`L+$ZZ61QU=J6U1f?RJ zfmL;JNM%8)eo$(0erZv1YEWvLGLlvJEdnVl@b$IwFUm~M%uCF1$xklLP0cIubg@;c z$Su%I$xN{_x3n;EGjMY;urM+(voJKYFt9Lob~1N!F?2GpG_W*=nSo8Og^7!)o2#3f zqot{#p`ojhlcAZji?O+>iG{O)nW-CGuV-FyNn&1dD$L%@%oHoAURS(&t(=Qe6HD@o zLh|!-U@0IVBfliSI3vG6!8zDWLBlsOIWrF=pb3f~aOhjPq!wkCrKY$Q<>xAZL)a=4 ziwg`aEDQ_{%}or&=aWe69up4uSvvFJGI}vh47JGdra_+vl{V&+?nB;;D6AM(=qXDDf|d3pf{U_uLA^ zR@ltL!NIZO)-0>)BMgj;jEpl=9UL4Su3ee5Bwg&m$Kvg0j6lj3TnIZkwbe>MKtNzZ zZ5Bx6_m#ig{~vD4ZD?p{u;cIQ?+j0u6c7*yaGao$`Q;k_uWuDLGDUT)t5|OB-t~8l z@pq=bl2_^sZ|i^kIJr@)@z3c7pXvqGj+0bghU+r%Ff6c?omv$ATozPvc)I$ztaD0e F0swCFg&_a{ literal 0 HcmV?d00001 diff --git a/src/squared.c b/src/squared.c new file mode 100644 index 0000000..ddcca88 --- /dev/null +++ b/src/squared.c @@ -0,0 +1,343 @@ +#include "pebble_os.h" +#include "pebble_app.h" +#include "pebble_fonts.h" + +#define MY_UUID { 0x0F, 0xA6, 0xE1, 0x51, 0xCF, 0x7E, 0x45, 0x39, 0x8E, 0xE2, 0x02, 0x71, 0xD4, 0xE5, 0x12, 0x0A } +PBL_APP_INFO(MY_UUID, + "Squared", "lastfuture", + 1, 2, /* App version */ + RESOURCE_ID_IMAGE_MENU_ICON, + APP_INFO_WATCH_FACE); + +Window window; + +#define US_DATE false // true == MM/DD, false == DD/MM +#define TILE_SIZE 10 +#define NUMSLOTS 8 +#define SPACING_X TILE_SIZE +#define SPACING_Y TILE_SIZE +#define DIGIT_CHANGE_ANIM_DURATION 1800 +#define STARTDELAY 2500 + +#define FONT blocks + +typedef struct { + Layer layer; + int prevDigit; + int curDigit; + int divider; + uint32_t normTime; +} digitSlot; + +digitSlot slot[NUMSLOTS]; + +AnimationImplementation animImpl; +Animation anim; +bool splashEnded = false; + +unsigned char blocks[][5][5] = {{ + {1,1,1,1,1}, + {1,0,0,0,1}, + {1,0,1,0,1}, + {1,0,0,0,1}, + {1,1,1,1,1} +}, { + {1,1,0,1,1}, + {0,0,0,0,1}, + {1,1,1,0,1}, + {0,0,0,0,1}, + {1,1,1,0,1} +}, { + {1,1,1,1,1}, + {0,0,0,0,1}, + {1,1,1,1,1}, + {1,0,0,0,0}, + {1,1,1,1,1} +}, { + {1,1,1,1,1}, + {0,0,0,0,1}, + {0,1,1,1,1}, + {0,0,0,0,1}, + {1,1,1,1,1} +}, { + {1,0,1,0,1}, + {1,0,0,0,1}, + {1,1,1,1,1}, + {0,0,0,0,1}, + {1,1,1,0,1} +}, { + {1,1,1,1,1}, + {1,0,0,0,0}, + {1,1,1,1,1}, + {0,0,0,0,1}, + {1,1,1,1,1} +}, { + {1,1,1,1,1}, + {1,0,0,0,0}, + {1,1,1,1,1}, + {1,0,0,0,1}, + {1,1,1,1,1} +}, { + {1,1,1,1,1}, + {0,0,0,0,1}, + {1,0,1,0,1}, + {1,0,1,0,1}, + {1,0,1,0,1} +}, { + {1,1,1,1,1}, + {1,0,0,0,1}, + {1,1,1,1,1}, + {1,0,0,0,1}, + {1,1,1,1,1} +}, { + {1,1,1,1,1}, + {1,0,0,0,1}, + {1,1,1,1,1}, + {0,0,0,0,1}, + {1,1,1,1,1} +}, { + {1,1,1,1,1}, + {0,0,0,0,0}, + {1,1,1,1,1}, + {0,0,0,0,0}, + {1,1,1,1,1} +}, { + {1,0,1,0,1}, + {1,0,1,0,1}, + {1,0,1,0,1}, + {1,0,1,0,1}, + {1,0,1,0,1} +}}; + +int startDigit[NUMSLOTS] = { + 11,10,10,11,11,10,10,11 +}; + +#define FONT_HEIGHT_BLOCKS (sizeof *FONT / sizeof **FONT) +#define FONT_WIDTH_BLOCKS (sizeof **FONT) +#define TOTALBLOCKS FONT_HEIGHT_BLOCKS * FONT_WIDTH_BLOCKS +#define FONT_HEIGHT FONT_HEIGHT_BLOCKS*TILE_SIZE +#define FONT_WIDTH FONT_WIDTH_BLOCKS*TILE_SIZE + +#define SCREEN_WIDTH 144 + +#define TILES_X ( \ + FONT_WIDTH + SPACING_X + FONT_WIDTH) +#define TILES_Y ( \ + FONT_HEIGHT + SPACING_Y + FONT_HEIGHT) + +#define ORIGIN_X ((SCREEN_WIDTH - TILES_X)/2) +#define ORIGIN_Y TILE_SIZE*1.5 + +GRect slotFrame(int i) { + int x, y, w, h; + if (i<4) { + w = FONT_WIDTH; + h = FONT_HEIGHT; + if (i%2) { + x = ORIGIN_X + FONT_WIDTH + SPACING_X; // i = 1 or 3 + } else { + x = ORIGIN_X; // i = 0 or 2 + } + + if (i<2) { + y = ORIGIN_Y; + } else { + y = ORIGIN_Y + FONT_HEIGHT + SPACING_Y; + } + } else { + w = FONT_WIDTH/2; + h = FONT_HEIGHT/2; + x = ORIGIN_X + (FONT_WIDTH + SPACING_X) * (i - 4) / 2; + y = ORIGIN_Y + (FONT_HEIGHT + SPACING_Y) * 2; + } + return GRect(x, y, w, h); +} + +void updateSlot(digitSlot *slot, GContext *ctx) { + int t, tx, ty, w, offs, shift, total, tilesize, widthadjust; + total = TOTALBLOCKS; + widthadjust = 0; + if (slot->divider == 2) { + widthadjust = 1; + } + tilesize = TILE_SIZE/slot->divider; + uint32_t skewedNormTime = slot->normTime*2; + graphics_context_set_fill_color(ctx, GColorBlack); + graphics_fill_rect(ctx, GRect(0, 0, slot->layer.bounds.size.w, slot->layer.bounds.size.h), 0, GCornerNone); + for (t=0; tcurDigit][ty][tx] == FONT[slot->prevDigit][ty][tx]) { + if(FONT[slot->curDigit][ty][tx]) { + w = tilesize; + } + } else { + if (slot->normTime == ANIMATION_NORMALIZED_MAX && FONT[slot->curDigit][ty][tx]) { + w = tilesize; + } else { + if(FONT[slot->curDigit][ty][tx] || FONT[slot->prevDigit][ty][tx]) { + offs = (skewedNormTime*TILE_SIZE/ANIMATION_NORMALIZED_MAX)+shift; + if(FONT[slot->curDigit][ty][tx]) { + w = offs; + offs = 0; + } else { + w = tilesize-offs; + } + } + } + } + if (w < 0) { + w = 0; + } else if (w > tilesize) { + w = tilesize; + } + if (offs < 0) { + offs = 0; + } else if (offs > tilesize) { + offs = tilesize; + } + if (w > 0) { + graphics_context_set_fill_color(ctx, GColorWhite); + graphics_fill_rect(ctx, GRect((tx*tilesize)+offs-(tx*widthadjust), ty*tilesize-(ty*widthadjust), w-widthadjust, tilesize-widthadjust), 0, GCornerNone); + } + } +} + +unsigned short get_display_hour(unsigned short hour) { + if (clock_is_24h_style()) { + return hour; + } + unsigned short display_hour = hour % 12; + return display_hour ? display_hour : 12; +} + + +void handle_tick(AppContextRef ctx, PebbleTickEvent *evt) { + PblTm now; + int ho, mi, da, mo, i; + + if (splashEnded) { + if (animation_is_scheduled(&anim)) + animation_unschedule(&anim); + + get_time(&now); + + ho = get_display_hour(now.tm_hour); + mi = now.tm_min; + da = now.tm_mday; + mo = now.tm_mon+1; + + for (i=0; i