Guest User

DSWATCH

a guest
Dec 25th, 2016
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.38 KB | None | 0 0
  1. /**
  2.  * Animation source:
  3.  * http://bestanimations.com/Science/Physics/Physics2.html
  4.  */
  5.  
  6. #include <pebble.h>
  7.  
  8. static Window *s_main_window;
  9. static TextLayer *s_time_layer, *s_date_layer;
  10. static GBitmap *s_bitmap = NULL;
  11. static GFont s_time_font, s_date_font;
  12. static BitmapLayer *s_bitmap_layer;
  13. static GBitmapSequence *s_sequence = NULL;
  14.  
  15. static void load_sequence();
  16.  
  17. static void timer_handler(void *context) {
  18.   uint32_t next_delay;
  19.  
  20.   // Advance to the next APNG frame
  21.   if(gbitmap_sequence_update_bitmap_next_frame(s_sequence, s_bitmap, &next_delay)) {
  22.     bitmap_layer_set_bitmap(s_bitmap_layer, s_bitmap);
  23.     layer_mark_dirty(bitmap_layer_get_layer(s_bitmap_layer));
  24.  
  25.     // Timer for that delay
  26.     app_timer_register(next_delay, timer_handler, NULL);
  27.   } else {
  28.     // Start again
  29.     load_sequence();
  30.   }
  31. }
  32.  
  33. static void load_sequence() {
  34.   // Free old data
  35.   if(s_sequence) {
  36.     gbitmap_sequence_destroy(s_sequence);
  37.     s_sequence = NULL;
  38.   }
  39.   if(s_bitmap) {
  40.     gbitmap_destroy(s_bitmap);
  41.     s_bitmap = NULL;
  42.   }
  43.  
  44.   // Create sequence
  45.   s_sequence = gbitmap_sequence_create_with_resource(RESOURCE_ID_ANIMATION);
  46.  
  47.   // Create GBitmap
  48.   s_bitmap = gbitmap_create_blank(gbitmap_sequence_get_bitmap_size(s_sequence), GBitmapFormat8Bit);
  49.  
  50.   // Begin animation
  51.   app_timer_register(1, timer_handler, NULL);
  52. }
  53.  
  54.  
  55. static void update_time() {
  56.   time_t temp = time(NULL);
  57.   struct tm *tick_time = localtime(&temp);
  58.  
  59.   // Create a long-lived buffer, and show the time
  60.   static char buffer[] = "00:00";
  61.   if(clock_is_24h_style()) {
  62.     strftime(buffer, sizeof("00:00"), "%H:%M", tick_time);
  63.   } else {
  64.     strftime(buffer, sizeof("00:00"), "%I:%M", tick_time);
  65.   }
  66.   text_layer_set_text(s_time_layer, buffer);
  67.  
  68.   // Show the date
  69.   static char date_buffer[16];
  70.   strftime(date_buffer, sizeof(date_buffer), "%a %d %b", tick_time);
  71.   text_layer_set_text(s_date_layer, date_buffer);
  72. }
  73. static void tick_handler(struct tm *tick_time, TimeUnits units_changed) {
  74.   update_time();
  75.  
  76.  
  77.  
  78. }
  79.  
  80. static void main_window_load(Window *window) {
  81.   Layer *window_layer = window_get_root_layer(window);
  82.   GRect bounds = layer_get_bounds(window_layer);
  83.  
  84.   s_bitmap_layer = bitmap_layer_create(bounds);
  85.   layer_add_child(window_layer, bitmap_layer_get_layer(s_bitmap_layer));
  86.  
  87.   load_sequence();
  88.  
  89.  
  90.   // Create GFonts
  91.   s_time_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_PERFECT_DOS_53));
  92.   s_date_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_PERFECT_DOS_24));
  93.  
  94.   // Create time TextLayer
  95.   s_time_layer = text_layer_create(GRect(5, 10, 139, 50));
  96.   text_layer_set_background_color(s_time_layer, GColorClear);
  97.   text_layer_set_text_color(s_time_layer, GColorFromRGB(255,255,255));
  98.   text_layer_set_text(s_time_layer, "00:00");
  99.   text_layer_set_font(s_time_layer, s_time_font);
  100.   text_layer_set_text_alignment(s_time_layer, GTextAlignmentCenter);
  101.   layer_add_child(window_get_root_layer(window), text_layer_get_layer(s_time_layer));
  102.  
  103.   // Create date TextLayer
  104.   s_date_layer = text_layer_create(GRect(0, 56, 144, 30));
  105.   text_layer_set_text_color(s_date_layer, GColorWhite);
  106.   text_layer_set_background_color(s_date_layer, GColorClear);
  107.   text_layer_set_text_alignment(s_date_layer, GTextAlignmentCenter);
  108.   text_layer_set_text(s_date_layer, "Jul 26");
  109.   text_layer_set_font(s_date_layer, s_date_font);
  110.   layer_add_child(window_get_root_layer(window), text_layer_get_layer(s_date_layer));
  111.  
  112.  
  113.    // Initialize the display
  114.   update_time();
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121. }
  122.  
  123. static void main_window_unload(Window *window) {
  124.   bitmap_layer_destroy(s_bitmap_layer);
  125.   fonts_unload_custom_font(s_time_font);
  126.   fonts_unload_custom_font(s_date_font);
  127.   text_layer_destroy(s_time_layer);
  128.   text_layer_destroy(s_date_layer);
  129.  
  130. }
  131.  
  132. static void init() {
  133.   s_main_window = window_create();
  134.   window_set_background_color(s_main_window, GColorBlack);
  135. #if defined(PBL_SDK_2)
  136.   window_set_fullscreen(s_main_window, true);
  137. #endif
  138.   window_set_window_handlers(s_main_window, (WindowHandlers) {
  139.     .load = main_window_load,
  140.     .unload = main_window_unload,
  141.   });
  142.   window_stack_push(s_main_window, true);
  143.   // Register with Event Services
  144.   tick_timer_service_subscribe(MINUTE_UNIT, tick_handler);
  145.  
  146. }
  147.  
  148. static void deinit() {
  149.   window_destroy(s_main_window);
  150. }
  151.  
  152. int main() {
  153.   init();
  154.   app_event_loop();
  155.   deinit();
  156. }
Advertisement
Add Comment
Please, Sign In to add comment