1
1
#include "date_time_input.h"
2
+ #include "furi_hal_rtc.h"
2
3
#include <furi.h>
3
4
#include <assets_icons.h>
4
5
@@ -88,9 +89,31 @@ static inline void date_time_input_draw_block(
88
89
}
89
90
}
90
91
91
- static void date_time_input_draw_time_callback (Canvas * canvas , DateTimeInputModel * model ) {
92
- furi_check (model -> datetime );
92
+ static inline void date_time_input_draw_text (
93
+ Canvas * canvas ,
94
+ int32_t x ,
95
+ int32_t y ,
96
+ size_t w ,
97
+ size_t h ,
98
+ Font font ,
99
+ EditState state ,
100
+ const char * text ) {
101
+ furi_assert (canvas );
102
+ furi_assert (text );
93
103
104
+ canvas_set_color (canvas , ColorBlack );
105
+ if (state != EditStateDisabled && state != EditStateNone ) {
106
+ canvas_set_color (canvas , ColorWhite );
107
+ }
108
+
109
+ canvas_set_font (canvas , font );
110
+ canvas_draw_str_aligned (canvas , x + w / 2 , y + h / 2 , AlignCenter , AlignCenter , text );
111
+ if (state != EditStateNone ) {
112
+ canvas_set_color (canvas , ColorBlack );
113
+ }
114
+ }
115
+
116
+ static void date_time_input_draw_hour_24hr_callback (Canvas * canvas , DateTimeInputModel * model ) {
94
117
char buffer [64 ];
95
118
96
119
canvas_set_font (canvas , FontSecondary );
@@ -102,6 +125,46 @@ static void date_time_input_draw_time_callback(Canvas* canvas, DateTimeInputMode
102
125
canvas , 30 , ROW_1_Y , 28 , ROW_1_H , FontBigNumbers , get_state (model , 1 , 0 , hour ), buffer );
103
126
canvas_draw_box (canvas , 60 , ROW_1_Y + ROW_1_H - 7 , 2 , 2 );
104
127
canvas_draw_box (canvas , 60 , ROW_1_Y + ROW_1_H - 7 - 6 , 2 , 2 );
128
+ }
129
+
130
+ static void date_time_input_draw_hour_12hr_callback (Canvas * canvas , DateTimeInputModel * model ) {
131
+ char buffer [64 ];
132
+
133
+ canvas_set_font (canvas , FontSecondary );
134
+ canvas_draw_str (canvas , 0 , ROW_1_Y - 2 , " H H M M S S" );
135
+ canvas_set_font (canvas , FontPrimary );
136
+
137
+ uint8_t hour = model -> datetime -> hour % 12 ;
138
+ // Show 12:00 instead of 00:00 for 12-hour time
139
+ if (hour == 0 ) hour = 12 ;
140
+
141
+ // Placeholder XX since FontBigNumbers can't draw letters
142
+ snprintf (buffer , sizeof (buffer ), "%02u XX" , hour );
143
+ date_time_input_draw_block (
144
+ canvas , 2 , ROW_1_Y , 56 , ROW_1_H , FontBigNumbers , get_state (model , 1 , 0 , hour ), buffer );
145
+ canvas_draw_box (canvas , 60 , ROW_1_Y + ROW_1_H - 7 , 2 , 2 );
146
+ canvas_draw_box (canvas , 60 , ROW_1_Y + ROW_1_H - 7 - 6 , 2 , 2 );
147
+
148
+ if (model -> datetime -> hour < 12 ) {
149
+ snprintf (buffer , sizeof (buffer ), "AM" );
150
+ } else {
151
+ snprintf (buffer , sizeof (buffer ), "PM" );
152
+ }
153
+ date_time_input_draw_text (
154
+ canvas , 28 , ROW_1_Y + 3 , 28 , ROW_1_H , FontPrimary , get_state (model , 1 , 0 , hour ), buffer );
155
+ }
156
+
157
+ static void date_time_input_draw_time_callback (Canvas * canvas , DateTimeInputModel * model ) {
158
+ furi_check (model -> datetime );
159
+
160
+ char buffer [64 ];
161
+
162
+ // Draw hour depending on RTC time format
163
+ if (furi_hal_rtc_get_locale_timeformat () == FuriHalRtcLocaleTimeFormat24h ) {
164
+ date_time_input_draw_hour_24hr_callback (canvas , model );
165
+ } else {
166
+ date_time_input_draw_hour_12hr_callback (canvas , model );
167
+ }
105
168
106
169
snprintf (buffer , sizeof (buffer ), "%02u" , model -> datetime -> minute );
107
170
date_time_input_draw_block (
0 commit comments