Skip to content

Instantly share code, notes, and snippets.

@matthewtole
Last active December 29, 2015 16:39
Show Gist options
  • Save matthewtole/7699091 to your computer and use it in GitHub Desktop.
Save matthewtole/7699091 to your computer and use it in GitHub Desktop.
Clock Layer - A layer class for display the time and date in Pebble apps.
/***
* Clock Layer
* Copyright © 2013 Matthew Tole
***/
#include <pebble.h>
#include "clock-layer.h"
struct ClockLayer {
TextLayer* text_layer;
char* format;
};
ClockLayer* clock_layer_create(GRect frame) {
ClockLayer* clock_layer = malloc(sizeof(ClockLayer));
clock_layer->text_layer = text_layer_create(frame);
text_layer_set_text_alignment(clock_layer->text_layer, GTextAlignmentCenter);
text_layer_set_text_color(clock_layer->text_layer, GColorBlack);
text_layer_set_background_color(clock_layer->text_layer, GColorClear);
clock_layer->format = "%H:%M";
return clock_layer;
}
void clock_layer_destroy(ClockLayer* clock_layer) {
if (clock_layer == NULL) {
return;
}
if (clock_layer->text_layer != NULL) {
text_layer_destroy(clock_layer->text_layer);
}
free(clock_layer);
}
void clock_layer_set_time_format(ClockLayer* clock_layer, char* format) {
free(clock_layer->format);
clock_layer->format = malloc(strlen(format));
strncpy(clock_layer->format, format, strlen(format));
}
TextLayer* clock_layer_get_text_layer(ClockLayer* clock_layer) {
return clock_layer->text_layer;
}
void clock_layer_update(ClockLayer* clock_layer) {
time_t tmp = time(NULL);
struct tm* now = localtime(&tmp);
clock_layer_set_time(clock_layer, now);
}
void clock_layer_set_time(ClockLayer* clock_layer, struct tm* current_time) {
static char time_str[32];
strftime(time_str, sizeof(time_str), clock_layer->format, current_time);
text_layer_set_text(clock_layer->text_layer, time_str);
}
/***
* Clock Layer
* Copyright © 2013 Matthew Tole
***/
#pragma once
#include <pebble.h>
struct ClockLayer;
typedef struct ClockLayer ClockLayer;
ClockLayer* clock_layer_create(GRect rect);
void clock_layer_destroy(ClockLayer* clock_layer);
void clock_layer_set_time_format(ClockLayer* clock_layer, char* format);
void clock_layer_set_text_color(ClockLayer* clock_layer, GColor color);
TextLayer* clock_layer_get_text_layer(ClockLayer* clock_layer);
void clock_layer_update(ClockLayer* clock_layer);
void clock_layer_set_time(ClockLayer* clock_layer, struct tm* time);
#define clock_layer_add_to_window(layer, window) layer_add_child(window_get_root_layer(window), clock_layer_get_layer(layer))
#define clock_layer_set_text_color(layer, color) text_layer_set_text_color(clock_layer_get_text_layer(layer), color)
#define clock_layer_set_background_color(layer, color) text_layer_set_background_color(clock_layer_get_text_layer(layer), color)
#define clock_layer_set_font(layer, font) text_layer_set_font(clock_layer_get_text_layer(layer), font)
#define clock_layer_set_text_alignment(layer, alignment) text_layer_set_text_alignment(clock_layer_get_text_layer(layer), alignment)
#define clock_layer_get_layer(layer) text_layer_get_layer(clock_layer_get_text_layer(layer))
#define clock_layer_set_system_font(layer, font) clock_layer_set_font(layer, fonts_get_system_font(font))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment