# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # globally used functions to put other templates in class FileScope: header = """ #pragma once #include "pebble.h" void {watch_name}_init(Layer *window); """ includes = """ #include "{header_name}" #include "resource_ids.gen.h" #include """ init_function = """ void {watch_name}_init(Layer *window) {{ const GPoint CENTER = {{window->frame.size.w / 2, window->frame.size.h / 2}}; {init_content} window->update_proc = &{watch_name}_update; }} """ update_function = """ static void {watch_name}_update(Layer *me) {{ const GPoint CENTER = {{me->frame.size.w / 2, me->frame.size.h / 2}}; (void)me; PblTm t; get_time(&t); {update_content} }} """ # TODO: make the app number an actual function call defs_file = """ #pragma once #define PBL_GEN_LOCAL_INCLUDE #include "{watch_name}.h" #define PBL_GEN_COMPANY_NAME_STR "{company_name}" #define PBL_GEN_VISIBLE_NAME_STR "{visible_name}" #define PBL_GEN_INIT(win_layer) {watch_name}_init(win_layer) """ # non-moving image (like a background) class StaticImage: static_defs = """ static BmpContainer s_{name}; """ init_lines = """ bmp_init_container({res_def_name}, &s_{name}); layer_add_child(window, &s_{name}.layer.layer); """ # formatted textual date strings class TimeText: static_defs = """ static TextLayer s_{name}; static char s_{name}_buffer[{buffer_length}] = ""; """ # TODO: getting fonts is ghetto-ugly in code right now init_lines = """ text_layer_init(&s_{name}, GRect({x}, {y}, {w}, {h})); text_layer_set_text(&s_{name}, s_{name}_buffer); text_layer_set_text_color(&s_{name}, {color}); text_layer_set_background_color(&s_{name}, {background_color}); GFont {name}_font = {font_func}; text_layer_set_font(&s_{name}, {name}_font); layer_add_child(window, &s_{name}.layer); """ update_lines = """ string_format_time(s_{name}_buffer, sizeof(s_{name}_buffer), "{date_format_string}", &t); text_layer_set_text(&s_{name}, s_{name}_buffer); """ # common analog hands class Hand: static_defs = """ static RotBmpPairContainer s_{name}; """ init_lines = """ rotbmp_pair_init_container({res_def_name}_WHITE, {res_def_name}_BLACK, &s_{name}); rotbmp_pair_layer_set_src_ic(&s_{name}.layer, GPoint({pivot_x}, {pivot_y})); GRect {name}_frame = layer_get_frame(&s_{name}.layer.layer); {name}_frame.origin.x = CENTER.x - ({name}_frame.size.w / 2); {name}_frame.origin.y = CENTER.y - ({name}_frame.size.h / 2); layer_set_frame(&s_{name}.layer.layer, {name}_frame); layer_add_child(window, &s_{name}.layer.layer); """ update_lines = """ rotbmp_pair_layer_set_angle(&s_{name}.layer, TRIG_MAX_ANGLE * {angle_ratio}); """