added drop shadows to the hands
parent
d0fa7bc990
commit
2604a8d3ae
25
src/main.c
25
src/main.c
|
@ -13,11 +13,12 @@
|
||||||
#define DOT_RADIUS HAND_WIDTH/4
|
#define DOT_RADIUS HAND_WIDTH/4
|
||||||
#define HAND_MARGIN_OUTER 10-(HAND_WIDTH/2)
|
#define HAND_MARGIN_OUTER 10-(HAND_WIDTH/2)
|
||||||
#define HAND_MARGIN_INNER 0
|
#define HAND_MARGIN_INNER 0
|
||||||
|
#define SHADOW_OFFSET 2
|
||||||
|
|
||||||
#define ANIMATION_DURATION 600
|
#define ANIMATION_DURATION 600
|
||||||
#define ANIMATION_DELAY 150
|
#define ANIMATION_DELAY 150
|
||||||
|
|
||||||
uint8_t shadowtable[] = {192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, \
|
static uint8_t shadowtable[] = {192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, \
|
||||||
192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, \
|
192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, \
|
||||||
192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, \
|
192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, \
|
||||||
192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, \
|
192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, \
|
||||||
|
@ -34,6 +35,9 @@ uint8_t shadowtable[] = {192,192,192,192,192,192,192,192,192,192,192,192,192,192
|
||||||
224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, \
|
224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, \
|
||||||
240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255};
|
240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255};
|
||||||
|
|
||||||
|
// alpha should only be 0b??111111 where ?? = 00 (full shade), 01 (much shade), 10 (some shade), 11 (none shade)
|
||||||
|
static uint8_t alpha = 0b10111111;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int hours;
|
int hours;
|
||||||
int minutes;
|
int minutes;
|
||||||
|
@ -48,7 +52,7 @@ static int s_radius = 0;
|
||||||
static bool s_animating = false;
|
static bool s_animating = false;
|
||||||
static float anim_offset;
|
static float anim_offset;
|
||||||
|
|
||||||
static GColor gcolorbg, gcolorm, gcolorh, gcolorp;
|
static GColor gcolorbg, gcolorm, gcolorh, gcolorp, gcolorshadow;
|
||||||
|
|
||||||
static void inbox_received_handler(DictionaryIterator *iter, void *context) {
|
static void inbox_received_handler(DictionaryIterator *iter, void *context) {
|
||||||
Tuple *colorbg_t = dict_find(iter, KEY_BG_COLOR);
|
Tuple *colorbg_t = dict_find(iter, KEY_BG_COLOR);
|
||||||
|
@ -60,6 +64,7 @@ static void inbox_received_handler(DictionaryIterator *iter, void *context) {
|
||||||
int colorbg = colorbg_t->value->int32;
|
int colorbg = colorbg_t->value->int32;
|
||||||
persist_write_int(KEY_BG_COLOR, colorbg);
|
persist_write_int(KEY_BG_COLOR, colorbg);
|
||||||
gcolorbg = GColorFromHEX(colorbg);
|
gcolorbg = GColorFromHEX(colorbg);
|
||||||
|
gcolorshadow = (GColor8) shadowtable[alpha & gcolorbg.argb];
|
||||||
}
|
}
|
||||||
if(colorm_t) {
|
if(colorm_t) {
|
||||||
int colorm = colorm_t->value->int32;
|
int colorm = colorm_t->value->int32;
|
||||||
|
@ -157,7 +162,22 @@ static void update_proc(Layer *layer, GContext *ctx) {
|
||||||
.y = (int16_t)(-cos_lookup(hour_angle) * (int32_t)HAND_MARGIN_INNER / TRIG_MAX_RATIO) + s_center.y,
|
.y = (int16_t)(-cos_lookup(hour_angle) * (int32_t)HAND_MARGIN_INNER / TRIG_MAX_RATIO) + s_center.y,
|
||||||
};
|
};
|
||||||
// Draw hands with positive length only
|
// Draw hands with positive length only
|
||||||
|
//gcolorshadow gcolorh gcolorm
|
||||||
if((s_radius - HAND_MARGIN_OUTER) > HAND_MARGIN_INNER) {
|
if((s_radius - HAND_MARGIN_OUTER) > HAND_MARGIN_INNER) {
|
||||||
|
if(s_radius > 2 * HAND_MARGIN_OUTER) {
|
||||||
|
graphics_context_set_stroke_color(ctx, gcolorshadow);
|
||||||
|
graphics_context_set_stroke_width(ctx, HAND_WIDTH);
|
||||||
|
hour_hand_inner.y += SHADOW_OFFSET; hour_hand_outer.y += SHADOW_OFFSET;
|
||||||
|
graphics_draw_line(ctx, hour_hand_inner, hour_hand_outer);
|
||||||
|
hour_hand_inner.y -= SHADOW_OFFSET; hour_hand_outer.y -= SHADOW_OFFSET;
|
||||||
|
}
|
||||||
|
if(s_radius > HAND_MARGIN_OUTER) {
|
||||||
|
graphics_context_set_stroke_color(ctx, gcolorshadow);
|
||||||
|
graphics_context_set_stroke_width(ctx, HAND_WIDTH);
|
||||||
|
minute_hand_inner.y += SHADOW_OFFSET+1; minute_hand_outer.y += SHADOW_OFFSET+1;
|
||||||
|
graphics_draw_line(ctx, minute_hand_inner, minute_hand_outer);
|
||||||
|
minute_hand_inner.y -= SHADOW_OFFSET+1; minute_hand_outer.y -= SHADOW_OFFSET+1;
|
||||||
|
}
|
||||||
if(s_radius > 2 * HAND_MARGIN_OUTER) {
|
if(s_radius > 2 * HAND_MARGIN_OUTER) {
|
||||||
graphics_context_set_stroke_color(ctx, gcolorh);
|
graphics_context_set_stroke_color(ctx, gcolorh);
|
||||||
graphics_context_set_stroke_width(ctx, HAND_WIDTH);
|
graphics_context_set_stroke_width(ctx, HAND_WIDTH);
|
||||||
|
@ -186,6 +206,7 @@ static void window_load(Window *window) {
|
||||||
} else {
|
} else {
|
||||||
gcolorbg=GColorBlack;
|
gcolorbg=GColorBlack;
|
||||||
}
|
}
|
||||||
|
gcolorshadow = (GColor8) shadowtable[alpha & gcolorbg.argb];
|
||||||
if (persist_exists(KEY_MINUTE_COLOR)) {
|
if (persist_exists(KEY_MINUTE_COLOR)) {
|
||||||
int colorm = persist_read_int(KEY_MINUTE_COLOR);
|
int colorm = persist_read_int(KEY_MINUTE_COLOR);
|
||||||
gcolorm = GColorFromHEX(colorm);
|
gcolorm = GColorFromHEX(colorm);
|
||||||
|
|
Loading…
Reference in New Issue