commit
						09977c28c0
					
				| @ -406,6 +406,7 @@ list(APPEND SOURCE_FILES | ||||
|         displayapp/screens/FlashLight.cpp | ||||
|         displayapp/screens/List.cpp | ||||
|         displayapp/screens/BatteryInfo.cpp | ||||
|         displayapp/screens/Steps.cpp | ||||
| 
 | ||||
|         ## Settings | ||||
|         displayapp/screens/settings/QuickSettings.cpp | ||||
| @ -414,6 +415,7 @@ list(APPEND SOURCE_FILES | ||||
|         displayapp/screens/settings/SettingTimeFormat.cpp | ||||
|         displayapp/screens/settings/SettingWakeUp.cpp | ||||
|         displayapp/screens/settings/SettingDisplay.cpp | ||||
|         displayapp/screens/settings/SettingSteps.cpp | ||||
| 
 | ||||
|         ## Watch faces | ||||
|         displayapp/icons/bg_clock.c | ||||
| @ -466,6 +468,7 @@ list(APPEND SOURCE_FILES | ||||
|         displayapp/fonts/jetbrains_mono_extrabold_compressed.c | ||||
|         displayapp/fonts/jetbrains_mono_bold_20.c | ||||
|         displayapp/fonts/jetbrains_mono_76.c | ||||
|         displayapp/fonts/jetbrains_mono_42.c | ||||
|         displayapp/fonts/lv_font_sys_48.c | ||||
|         displayapp/lv_pinetime_theme.c | ||||
| 
 | ||||
|  | ||||
| @ -8,13 +8,13 @@ namespace Pinetime { | ||||
|     public: | ||||
|       void Update(int16_t x, int16_t y, int16_t z, uint32_t nbSteps); | ||||
| 
 | ||||
|       uint16_t X() const { | ||||
|       int16_t X() const { | ||||
|         return x; | ||||
|       } | ||||
|       uint16_t Y() const { | ||||
|       int16_t Y() const { | ||||
|         return y; | ||||
|       } | ||||
|       uint16_t Z() const { | ||||
|       int16_t Z() const { | ||||
|         return z; | ||||
|       } | ||||
|       uint32_t NbSteps() const { | ||||
|  | ||||
| @ -86,6 +86,14 @@ namespace Pinetime { | ||||
|         return settings.brightLevel; | ||||
|       }; | ||||
| 
 | ||||
|       void SetStepsGoal( uint32_t goal ) {  | ||||
|         if ( goal != settings.stepsGoal )  | ||||
|           settingsChanged = true; | ||||
|         settings.stepsGoal = goal;  | ||||
|       }; | ||||
|        | ||||
|       uint32_t GetStepsGoal() const { return settings.stepsGoal; }; | ||||
| 
 | ||||
|     private: | ||||
|       Pinetime::Drivers::SpiNorFlash& spiNorFlash; | ||||
|       struct SettingsData { | ||||
| @ -95,7 +103,7 @@ namespace Pinetime { | ||||
| 
 | ||||
|         uint8_t clockFace = 0; | ||||
| 
 | ||||
|         uint32_t stepsGoal = 1000; | ||||
|         uint32_t stepsGoal = 10000; | ||||
|         uint32_t screenTimeOut = 15000; | ||||
| 
 | ||||
|         WakeUpMode wakeUpMode = WakeUpMode::None; | ||||
|  | ||||
| @ -21,12 +21,14 @@ namespace Pinetime { | ||||
|       Navigation, | ||||
|       StopWatch, | ||||
|       Motion, | ||||
|       Steps, | ||||
|       QuickSettings, | ||||
|       Settings, | ||||
|       SettingWatchFace, | ||||
|       SettingTimeFormat, | ||||
|       SettingDisplay, | ||||
|       SettingWakeUp | ||||
|       SettingWakeUp, | ||||
|       SettingSteps | ||||
|     }; | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -25,6 +25,7 @@ | ||||
| #include "displayapp/screens/Twos.h" | ||||
| #include "displayapp/screens/FlashLight.h" | ||||
| #include "displayapp/screens/BatteryInfo.h" | ||||
| #include "displayapp/screens/Steps.h" | ||||
| 
 | ||||
| #include "drivers/Cst816s.h" | ||||
| #include "drivers/St7789.h" | ||||
| @ -37,6 +38,7 @@ | ||||
| #include "displayapp/screens/settings/SettingTimeFormat.h" | ||||
| #include "displayapp/screens/settings/SettingWakeUp.h" | ||||
| #include "displayapp/screens/settings/SettingDisplay.h" | ||||
| #include "displayapp/screens/settings/SettingSteps.h" | ||||
| 
 | ||||
| using namespace Pinetime::Applications; | ||||
| using namespace Pinetime::Applications::Display; | ||||
| @ -289,6 +291,10 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) | ||||
|       currentScreen = std::make_unique<Screens::SettingDisplay>(this, settingsController); | ||||
|       ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); | ||||
|       break; | ||||
|     case Apps::SettingSteps:  | ||||
|       currentScreen = std::make_unique<Screens::SettingSteps>(this, settingsController); | ||||
|       returnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); | ||||
|       break; | ||||
|     case Apps::BatteryInfo: | ||||
|       currentScreen = std::make_unique<Screens::BatteryInfo>(this, batteryController); | ||||
|       ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); | ||||
| @ -328,6 +334,9 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) | ||||
|     case Apps::Motion: | ||||
|       currentScreen = std::make_unique<Screens::Motion>(this, motionController); | ||||
|       break; | ||||
|     case Apps::Steps:  | ||||
|       currentScreen = std::make_unique<Screens::Steps>(this, motionController, settingsController); | ||||
|       break; | ||||
|   } | ||||
|   currentApp = app; | ||||
| } | ||||
|  | ||||
							
								
								
									
										258
									
								
								src/displayapp/fonts/jetbrains_mono_42.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										258
									
								
								src/displayapp/fonts/jetbrains_mono_42.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,258 @@ | ||||
| /*******************************************************************************
 | ||||
|  * Size: 42 px | ||||
|  * Bpp: 1 | ||||
|  * Opts:  | ||||
|  ******************************************************************************/ | ||||
| 
 | ||||
| #ifdef LV_LVGL_H_INCLUDE_SIMPLE | ||||
| #include "lvgl.h" | ||||
| #else | ||||
| #include "lvgl/lvgl.h" | ||||
| #endif | ||||
| 
 | ||||
| #ifndef JETBRAINS_MONO_42 | ||||
| #define JETBRAINS_MONO_42 1 | ||||
| #endif | ||||
| 
 | ||||
| #if JETBRAINS_MONO_42 | ||||
| 
 | ||||
| /*-----------------
 | ||||
|  *    BITMAPS | ||||
|  *----------------*/ | ||||
| 
 | ||||
| /*Store the image of the glyphs*/ | ||||
| static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { | ||||
|     /* U+0025 "%" */ | ||||
|     0x1f, 0x80, 0x7, 0x3f, 0xc0, 0xe, 0x7f, 0xe0, | ||||
|     0x1c, 0xf0, 0xf0, 0x1c, 0xe0, 0x70, 0x38, 0xe0, | ||||
|     0x70, 0x70, 0xe0, 0x70, 0x70, 0xe0, 0x70, 0xe0, | ||||
|     0xe0, 0x71, 0xc0, 0xe0, 0x71, 0xc0, 0xf0, 0xf3, | ||||
|     0x80, 0x7f, 0xe7, 0x0, 0x3f, 0xc7, 0x0, 0x1f, | ||||
|     0x8e, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x3c, 0x0, | ||||
|     0x0, 0x38, 0x0, 0x0, 0x71, 0xf8, 0x0, 0xe3, | ||||
|     0xfc, 0x0, 0xe7, 0xfe, 0x1, 0xcf, 0xf, 0x3, | ||||
|     0x8e, 0x7, 0x3, 0x8e, 0x7, 0x7, 0xe, 0x7, | ||||
|     0xe, 0xe, 0x7, 0xe, 0xe, 0x7, 0x1c, 0xe, | ||||
|     0x7, 0x38, 0xf, 0xf, 0x38, 0x7, 0xfe, 0x70, | ||||
|     0x3, 0xfc, 0xe0, 0x1, 0xf8, | ||||
| 
 | ||||
|     /* U+0030 "0" */ | ||||
|     0x3, 0xf8, 0x1, 0xff, 0xc0, 0xff, 0xfe, 0x1f, | ||||
|     0x7, 0xc7, 0xc0, 0x7c, 0xf0, 0x7, 0xbc, 0x0, | ||||
|     0x7f, 0x80, 0xf, 0xf0, 0x1, 0xfe, 0x0, 0x3f, | ||||
|     0xc0, 0x7, 0xf8, 0x0, 0xff, 0xe, 0x1f, 0xe3, | ||||
|     0xe3, 0xfc, 0x7c, 0x7f, 0x8f, 0x8f, 0xf0, 0xe1, | ||||
|     0xfe, 0x0, 0x3f, 0xc0, 0x7, 0xf8, 0x0, 0xff, | ||||
|     0x0, 0x1f, 0xe0, 0x3, 0xfc, 0x0, 0x7f, 0x80, | ||||
|     0xf, 0xf0, 0x1, 0xef, 0x0, 0x79, 0xf0, 0x1f, | ||||
|     0x1f, 0x7, 0xc3, 0xff, 0xf8, 0x1f, 0xfc, 0x0, | ||||
|     0xfe, 0x0, | ||||
| 
 | ||||
|     /* U+0031 "1" */ | ||||
|     0x3, 0xf0, 0x0, 0xfe, 0x0, 0x3f, 0xc0, 0x1f, | ||||
|     0xf8, 0x7, 0xcf, 0x1, 0xf1, 0xe0, 0x3c, 0x3c, | ||||
|     0x7, 0x7, 0x80, 0x80, 0xf0, 0x0, 0x1e, 0x0, | ||||
|     0x3, 0xc0, 0x0, 0x78, 0x0, 0xf, 0x0, 0x1, | ||||
|     0xe0, 0x0, 0x3c, 0x0, 0x7, 0x80, 0x0, 0xf0, | ||||
|     0x0, 0x1e, 0x0, 0x3, 0xc0, 0x0, 0x78, 0x0, | ||||
|     0xf, 0x0, 0x1, 0xe0, 0x0, 0x3c, 0x0, 0x7, | ||||
|     0x80, 0x0, 0xf0, 0x0, 0x1e, 0x0, 0x3, 0xc0, | ||||
|     0x0, 0x78, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, | ||||
|     0xff, 0xf8, | ||||
| 
 | ||||
|     /* U+0032 "2" */ | ||||
|     0x3, 0xf8, 0x1, 0xff, 0xc0, 0x7f, 0xfe, 0x1f, | ||||
|     0x7, 0xc7, 0xc0, 0x3c, 0xf0, 0x7, 0xbc, 0x0, | ||||
|     0x7f, 0x80, 0xf, 0xf0, 0x1, 0xe0, 0x0, 0x3c, | ||||
|     0x0, 0x7, 0x80, 0x1, 0xf0, 0x0, 0x3c, 0x0, | ||||
|     0xf, 0x80, 0x1, 0xe0, 0x0, 0x7c, 0x0, 0x1f, | ||||
|     0x0, 0x7, 0xc0, 0x1, 0xf0, 0x0, 0x7e, 0x0, | ||||
|     0xf, 0x80, 0x3, 0xe0, 0x0, 0xf8, 0x0, 0x3e, | ||||
|     0x0, 0xf, 0x80, 0x3, 0xe0, 0x0, 0xf8, 0x0, | ||||
|     0x3e, 0x0, 0x7, 0xff, 0xfe, 0xff, 0xff, 0xdf, | ||||
|     0xff, 0xf8, | ||||
| 
 | ||||
|     /* U+0033 "3" */ | ||||
|     0x7f, 0xff, 0x8f, 0xff, 0xf1, 0xff, 0xfe, 0x0, | ||||
|     0x3, 0xc0, 0x0, 0xf0, 0x0, 0x3c, 0x0, 0xf, | ||||
|     0x0, 0x3, 0xc0, 0x0, 0xf0, 0x0, 0x3e, 0x0, | ||||
|     0x7, 0x80, 0x1, 0xfe, 0x0, 0x3f, 0xf0, 0x7, | ||||
|     0xff, 0x0, 0x3, 0xf0, 0x0, 0x1e, 0x0, 0x3, | ||||
|     0xc0, 0x0, 0x3c, 0x0, 0x7, 0x80, 0x0, 0xf0, | ||||
|     0x0, 0x1e, 0x0, 0x3, 0xfc, 0x0, 0x7f, 0x80, | ||||
|     0xf, 0xf0, 0x1, 0xef, 0x0, 0x79, 0xf0, 0x1f, | ||||
|     0x1f, 0x7, 0xc3, 0xff, 0xf0, 0x1f, 0xfc, 0x0, | ||||
|     0xfe, 0x0, | ||||
| 
 | ||||
|     /* U+0034 "4" */ | ||||
|     0x0, 0x1e, 0x0, 0xf, 0x80, 0x3, 0xc0, 0x1, | ||||
|     0xe0, 0x0, 0x78, 0x0, 0x3c, 0x0, 0x1f, 0x0, | ||||
|     0x7, 0x80, 0x3, 0xc0, 0x1, 0xf0, 0x0, 0x78, | ||||
|     0x0, 0x3e, 0x0, 0xf, 0x0, 0x7, 0x80, 0xf3, | ||||
|     0xe0, 0x3c, 0xf0, 0xf, 0x7c, 0x3, 0xde, 0x0, | ||||
|     0xff, 0x0, 0x3f, 0xc0, 0xf, 0xf0, 0x3, 0xff, | ||||
|     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x3, | ||||
|     0xc0, 0x0, 0xf0, 0x0, 0x3c, 0x0, 0xf, 0x0, | ||||
|     0x3, 0xc0, 0x0, 0xf0, 0x0, 0x3c, | ||||
| 
 | ||||
|     /* U+0035 "5" */ | ||||
|     0x7f, 0xff, 0x9f, 0xff, 0xe7, 0xff, 0xf9, 0xe0, | ||||
|     0x0, 0x78, 0x0, 0x1e, 0x0, 0x7, 0x80, 0x1, | ||||
|     0xe0, 0x0, 0x78, 0x0, 0x1e, 0x0, 0x7, 0x8f, | ||||
|     0x81, 0xef, 0xf8, 0x7f, 0xff, 0x1f, 0x87, 0xe7, | ||||
|     0xc0, 0x79, 0xe0, 0x1f, 0x0, 0x3, 0xc0, 0x0, | ||||
|     0xf0, 0x0, 0x3c, 0x0, 0xf, 0x0, 0x3, 0xc0, | ||||
|     0x0, 0xf0, 0x0, 0x3c, 0x0, 0xf, 0xf0, 0x3, | ||||
|     0xde, 0x1, 0xe7, 0x80, 0x78, 0xf8, 0x7e, 0x3f, | ||||
|     0xff, 0x3, 0xff, 0x80, 0x3f, 0x0, | ||||
| 
 | ||||
|     /* U+0036 "6" */ | ||||
|     0x0, 0x3c, 0x0, 0x7, 0x80, 0x0, 0x78, 0x0, | ||||
|     0xf, 0x0, 0x1, 0xe0, 0x0, 0x1e, 0x0, 0x3, | ||||
|     0xc0, 0x0, 0x3c, 0x0, 0x7, 0x80, 0x0, 0x70, | ||||
|     0x0, 0xf, 0x0, 0x1, 0xe7, 0xc0, 0x1f, 0xff, | ||||
|     0x3, 0xff, 0xfc, 0x3f, 0xf, 0xc7, 0xc0, 0x3e, | ||||
|     0x78, 0x1, 0xe7, 0x80, 0x1f, 0xf0, 0x0, 0xff, | ||||
|     0x0, 0xf, 0xf0, 0x0, 0xff, 0x0, 0xf, 0xf0, | ||||
|     0x0, 0xff, 0x0, 0xf, 0xf8, 0x1, 0xe7, 0x80, | ||||
|     0x1e, 0x7c, 0x3, 0xe3, 0xf0, 0xfc, 0x1f, 0xff, | ||||
|     0x80, 0xff, 0xf0, 0x1, 0xf8, 0x0, | ||||
| 
 | ||||
|     /* U+0037 "7" */ | ||||
|     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, | ||||
|     0x0, 0x1e, 0xf0, 0x1, 0xef, 0x0, 0x1e, 0xf0, | ||||
|     0x3, 0xcf, 0x0, 0x3c, 0x0, 0x3, 0x80, 0x0, | ||||
|     0x78, 0x0, 0x7, 0x80, 0x0, 0xf0, 0x0, 0xf, | ||||
|     0x0, 0x0, 0xf0, 0x0, 0x1e, 0x0, 0x1, 0xe0, | ||||
|     0x0, 0x3c, 0x0, 0x3, 0xc0, 0x0, 0x3c, 0x0, | ||||
|     0x7, 0x80, 0x0, 0x78, 0x0, 0x7, 0x80, 0x0, | ||||
|     0xf0, 0x0, 0xf, 0x0, 0x1, 0xe0, 0x0, 0x1e, | ||||
|     0x0, 0x1, 0xe0, 0x0, 0x3c, 0x0, 0x3, 0xc0, | ||||
|     0x0, 0x7c, 0x0, 0x7, 0x80, 0x0, | ||||
| 
 | ||||
|     /* U+0038 "8" */ | ||||
|     0x1, 0xf8, 0x0, 0xff, 0xf0, 0x1f, 0xff, 0x83, | ||||
|     0xf0, 0xfc, 0x3c, 0x3, 0xc7, 0xc0, 0x3e, 0x78, | ||||
|     0x1, 0xe7, 0x80, 0x1e, 0x78, 0x1, 0xe7, 0x80, | ||||
|     0x1e, 0x3c, 0x3, 0xc3, 0xe0, 0x7c, 0x1f, 0xf, | ||||
|     0x80, 0xff, 0xf0, 0x3, 0xfc, 0x0, 0x7f, 0xe0, | ||||
|     0xf, 0xff, 0x3, 0xe0, 0x7c, 0x3c, 0x3, 0xc7, | ||||
|     0x80, 0x1e, 0xf0, 0x0, 0xff, 0x0, 0xf, 0xf0, | ||||
|     0x0, 0xff, 0x0, 0xf, 0xf0, 0x0, 0xff, 0x80, | ||||
|     0x1f, 0x7c, 0x3, 0xe7, 0xe0, 0x7e, 0x3f, 0xff, | ||||
|     0xc0, 0xff, 0xf0, 0x3, 0xfc, 0x0, | ||||
| 
 | ||||
|     /* U+0039 "9" */ | ||||
|     0x3, 0xf8, 0x0, 0xff, 0xf0, 0x1f, 0xff, 0x83, | ||||
|     0xe0, 0xfc, 0x7c, 0x3, 0xe7, 0x80, 0x1e, 0xf8, | ||||
|     0x1, 0xff, 0x0, 0xf, 0xf0, 0x0, 0xff, 0x0, | ||||
|     0xf, 0xf0, 0x0, 0xff, 0x0, 0xf, 0xf8, 0x1, | ||||
|     0xf7, 0x80, 0x1e, 0x7c, 0x3, 0xe3, 0xe0, 0x7e, | ||||
|     0x3f, 0xff, 0xc1, 0xff, 0xfc, 0x7, 0xe7, 0x80, | ||||
|     0x0, 0xf8, 0x0, 0xf, 0x0, 0x1, 0xe0, 0x0, | ||||
|     0x1e, 0x0, 0x3, 0xc0, 0x0, 0x3c, 0x0, 0x7, | ||||
|     0x80, 0x0, 0xf8, 0x0, 0xf, 0x0, 0x1, 0xe0, | ||||
|     0x0, 0x1e, 0x0, 0x3, 0xc0, 0x0, | ||||
| 
 | ||||
|     /* U+003A ":" */ | ||||
|     0x7d, 0xff, 0xff, 0xff, 0xef, 0x80, 0x0, 0x0, | ||||
|     0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, | ||||
|     0xf7, 0xff, 0xff, 0xff, 0xbe | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| /*---------------------
 | ||||
|  *  GLYPH DESCRIPTION | ||||
|  *--------------------*/ | ||||
| 
 | ||||
| static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { | ||||
|     {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, | ||||
|     {.bitmap_index = 0, .adv_w = 403, .box_w = 24, .box_h = 31, .ofs_x = 1, .ofs_y = 0}, | ||||
|     {.bitmap_index = 93, .adv_w = 403, .box_w = 19, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, | ||||
|     {.bitmap_index = 167, .adv_w = 403, .box_w = 19, .box_h = 31, .ofs_x = 4, .ofs_y = 0}, | ||||
|     {.bitmap_index = 241, .adv_w = 403, .box_w = 19, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, | ||||
|     {.bitmap_index = 315, .adv_w = 403, .box_w = 19, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, | ||||
|     {.bitmap_index = 389, .adv_w = 403, .box_w = 18, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, | ||||
|     {.bitmap_index = 459, .adv_w = 403, .box_w = 18, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, | ||||
|     {.bitmap_index = 529, .adv_w = 403, .box_w = 20, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, | ||||
|     {.bitmap_index = 607, .adv_w = 403, .box_w = 20, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, | ||||
|     {.bitmap_index = 685, .adv_w = 403, .box_w = 20, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, | ||||
|     {.bitmap_index = 763, .adv_w = 403, .box_w = 20, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, | ||||
|     {.bitmap_index = 841, .adv_w = 403, .box_w = 7, .box_h = 24, .ofs_x = 9, .ofs_y = 0} | ||||
| }; | ||||
| 
 | ||||
| /*---------------------
 | ||||
|  *  CHARACTER MAPPING | ||||
|  *--------------------*/ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /*Collect the unicode lists and glyph_id offsets*/ | ||||
| static const lv_font_fmt_txt_cmap_t cmaps[] = | ||||
| { | ||||
|     { | ||||
|         .range_start = 37, .range_length = 1, .glyph_id_start = 1, | ||||
|         .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY | ||||
|     }, | ||||
|     { | ||||
|         .range_start = 48, .range_length = 11, .glyph_id_start = 2, | ||||
|         .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /*--------------------
 | ||||
|  *  ALL CUSTOM DATA | ||||
|  *--------------------*/ | ||||
| 
 | ||||
| #if LV_VERSION_CHECK(8, 0, 0) | ||||
| /*Store all the custom data of the font*/ | ||||
| static  lv_font_fmt_txt_glyph_cache_t cache; | ||||
| static const lv_font_fmt_txt_dsc_t font_dsc = { | ||||
| #else | ||||
| static lv_font_fmt_txt_dsc_t font_dsc = { | ||||
| #endif | ||||
|     .glyph_bitmap = glyph_bitmap, | ||||
|     .glyph_dsc = glyph_dsc, | ||||
|     .cmaps = cmaps, | ||||
|     .kern_dsc = NULL, | ||||
|     .kern_scale = 0, | ||||
|     .cmap_num = 2, | ||||
|     .bpp = 1, | ||||
|     .kern_classes = 0, | ||||
|     .bitmap_format = 0, | ||||
| #if LV_VERSION_CHECK(8, 0, 0) | ||||
|     .cache = &cache | ||||
| #endif | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| /*-----------------
 | ||||
|  *  PUBLIC FONT | ||||
|  *----------------*/ | ||||
| 
 | ||||
| /*Initialize a public general font descriptor*/ | ||||
| #if LV_VERSION_CHECK(8, 0, 0) | ||||
| const lv_font_t jetbrains_mono_42 = { | ||||
| #else | ||||
| lv_font_t jetbrains_mono_42 = { | ||||
| #endif | ||||
|     .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt,    /*Function pointer to get glyph's data*/ | ||||
|     .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt,    /*Function pointer to get glyph's bitmap*/ | ||||
|     .line_height = 31,          /*The maximum line height required by the font*/ | ||||
|     .base_line = 0,             /*Baseline measured from the bottom of the line*/ | ||||
| #if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) | ||||
|     .subpx = LV_FONT_SUBPX_NONE, | ||||
| #endif | ||||
| #if LV_VERSION_CHECK(7, 4, 0) | ||||
|     .underline_position = -7, | ||||
|     .underline_thickness = 2, | ||||
| #endif | ||||
|     .dsc = &font_dsc           /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #endif /*#if JETBRAINS_MONO_42*/ | ||||
| 
 | ||||
| @ -49,7 +49,7 @@ std::unique_ptr<Screen> ApplicationList::CreateScreen1() { | ||||
|     {Symbols::stopWatch, Apps::StopWatch}, | ||||
|     {Symbols::music, Apps::Music}, | ||||
|     {Symbols::map, Apps::Navigation}, | ||||
|     {Symbols::shoe, Apps::Motion}, | ||||
|     {Symbols::shoe, Apps::Steps}, | ||||
|     {Symbols::heartBeat, Apps::HeartRate}, | ||||
|     {"", Apps::None}, | ||||
|   }}; | ||||
| @ -62,7 +62,7 @@ std::unique_ptr<Screen> ApplicationList::CreateScreen2() { | ||||
|     {Symbols::paintbrush, Apps::Paint}, | ||||
|     {Symbols::paddle, Apps::Paddle}, | ||||
|     {"2", Apps::Twos}, | ||||
|     {"", Apps::None}, | ||||
|     {"M", Apps::Motion}, | ||||
|     {"", Apps::None}, | ||||
|     {"", Apps::None}, | ||||
|   }}; | ||||
|  | ||||
| @ -3,8 +3,6 @@ | ||||
| #include "../DisplayApp.h" | ||||
| 
 | ||||
| using namespace Pinetime::Applications::Screens; | ||||
| extern lv_font_t jetbrains_mono_extrabold_compressed; | ||||
| extern lv_font_t jetbrains_mono_bold_20; | ||||
| 
 | ||||
| Motion::Motion(Pinetime::Applications::DisplayApp* app, Controllers::MotionController& motionController) | ||||
|   : Screen(app), motionController {motionController} { | ||||
| @ -29,13 +27,16 @@ Motion::Motion(Pinetime::Applications::DisplayApp* app, Controllers::MotionContr | ||||
|   lv_chart_init_points(chart, ser3, 0); | ||||
|   lv_chart_refresh(chart); /*Required after direct set*/ | ||||
| 
 | ||||
|   label = lv_label_create(lv_scr_act(), NULL); | ||||
|   lv_label_set_text_fmt(label, "X #FF0000 %d# Y #008000 %d# Z #FFFF00 %d#", 0, 0, 0); | ||||
|   lv_label_set_align(label, LV_LABEL_ALIGN_CENTER); | ||||
|   lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 10); | ||||
|   lv_label_set_recolor(label, true); | ||||
|    | ||||
|   labelStep = lv_label_create(lv_scr_act(), NULL); | ||||
|   lv_obj_align(labelStep, chart, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); | ||||
|   lv_label_set_text(labelStep, "Steps: "); | ||||
|   lv_label_set_text(labelStep, "Steps ---"); | ||||
| 
 | ||||
|   labelStepValue = lv_label_create(lv_scr_act(), NULL); | ||||
|   lv_obj_align(labelStepValue, labelStep, LV_ALIGN_OUT_RIGHT_MID, 0, 0); | ||||
|   lv_label_set_text(labelStepValue, "-"); | ||||
| } | ||||
| 
 | ||||
| Motion::~Motion() { | ||||
| @ -47,8 +48,10 @@ bool Motion::Refresh() { | ||||
|   lv_chart_set_next(chart, ser2, motionController.Y()); | ||||
|   lv_chart_set_next(chart, ser3, motionController.Z()); | ||||
| 
 | ||||
|   snprintf(nbStepsBuffer, nbStepsBufferSize, "%lu", motionController.NbSteps()); | ||||
|   lv_label_set_text(labelStepValue, nbStepsBuffer); | ||||
|   lv_label_set_text_fmt(labelStep, "Steps %lu", motionController.NbSteps()); | ||||
| 
 | ||||
|   lv_label_set_text_fmt(label, "X #FF0000 %d# Y #008000 %d# Z #FFFF00 %d#", motionController.X() / 0x10, motionController.Y() / 0x10, motionController.Z() / 0x10); | ||||
|   lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 10); | ||||
| 
 | ||||
|   return running; | ||||
| } | ||||
|  | ||||
| @ -26,9 +26,9 @@ namespace Pinetime { | ||||
|         lv_chart_series_t* ser1; | ||||
|         lv_chart_series_t* ser2; | ||||
|         lv_chart_series_t* ser3; | ||||
|         lv_obj_t* label; | ||||
| 
 | ||||
|         lv_obj_t* labelStep; | ||||
|         lv_obj_t* labelStepValue; | ||||
|         static constexpr uint8_t nbStepsBufferSize = 9; | ||||
|         char nbStepsBuffer[nbStepsBufferSize + 1]; | ||||
|         bool running = true; | ||||
|  | ||||
							
								
								
									
										72
									
								
								src/displayapp/screens/Steps.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								src/displayapp/screens/Steps.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,72 @@ | ||||
| #include "Steps.h" | ||||
| #include <lvgl/lvgl.h> | ||||
| #include "../DisplayApp.h" | ||||
| #include "Symbols.h" | ||||
| 
 | ||||
| using namespace Pinetime::Applications::Screens; | ||||
| 
 | ||||
| Steps::Steps( | ||||
|     Pinetime::Applications::DisplayApp *app,  | ||||
|     Controllers::MotionController& motionController, | ||||
|     Controllers::Settings &settingsController)  | ||||
|       : Screen(app),  | ||||
|       motionController{motionController}, | ||||
|       settingsController{settingsController} { | ||||
| 
 | ||||
|   stepsArc = lv_arc_create(lv_scr_act(), nullptr); | ||||
| 
 | ||||
|   lv_obj_set_style_local_bg_opa(stepsArc, LV_ARC_PART_BG, LV_STATE_DEFAULT, LV_OPA_0);   | ||||
|   lv_obj_set_style_local_border_width(stepsArc, LV_ARC_PART_BG, LV_STATE_DEFAULT, 2);   | ||||
|   lv_obj_set_style_local_radius(stepsArc, LV_ARC_PART_BG, LV_STATE_DEFAULT, 0);   | ||||
|   lv_obj_set_style_local_line_color(stepsArc, LV_ARC_PART_INDIC, LV_STATE_DEFAULT, lv_color_hex(0x0000FF));   | ||||
|   lv_arc_set_end_angle(stepsArc, 200); | ||||
|   lv_obj_set_size(stepsArc, 220, 220); | ||||
|   lv_arc_set_range(stepsArc, 0, 500); | ||||
|   lv_obj_align(stepsArc, nullptr, LV_ALIGN_CENTER, 0, 0); | ||||
| 
 | ||||
|   stepsCount = motionController.NbSteps(); | ||||
| 
 | ||||
|   lv_arc_set_value(stepsArc, int16_t(500 * stepsCount / settingsController.GetStepsGoal())); | ||||
| 
 | ||||
|   lSteps = lv_label_create(lv_scr_act(), nullptr); | ||||
|   lv_obj_set_style_local_text_color(lSteps, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x00FF00)); | ||||
|   lv_obj_set_style_local_text_font(lSteps, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_42);    | ||||
|   lv_label_set_text_fmt(lSteps, "%li", stepsCount);  | ||||
|   lv_obj_align(lSteps, nullptr, LV_ALIGN_CENTER, 0, -20); | ||||
| 
 | ||||
|   lv_obj_t * lstepsL = lv_label_create(lv_scr_act(), nullptr); | ||||
|   lv_obj_set_style_local_text_color(lstepsL, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); | ||||
|   lv_label_set_text_static(lstepsL, "Steps");  | ||||
|   lv_obj_align(lstepsL, lSteps, LV_ALIGN_OUT_BOTTOM_MID, 0, 10); | ||||
| 
 | ||||
|   lv_obj_t * lstepsGoal = lv_label_create(lv_scr_act(), nullptr); | ||||
|   lv_obj_set_style_local_text_color(lstepsGoal, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_CYAN); | ||||
|   lv_label_set_text_fmt(lstepsGoal,"Goal\n%i", settingsController.GetStepsGoal());  | ||||
|   lv_label_set_align(lstepsGoal, LV_LABEL_ALIGN_CENTER); | ||||
|   lv_obj_align(lstepsGoal, lSteps, LV_ALIGN_OUT_BOTTOM_MID, 0, 60); | ||||
| 
 | ||||
|   lv_obj_t * backgroundLabel = lv_label_create(lv_scr_act(), nullptr); | ||||
|   lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); | ||||
|   lv_obj_set_size(backgroundLabel, 240, 240); | ||||
|   lv_obj_set_pos(backgroundLabel, 0, 0); | ||||
|   lv_label_set_text_static(backgroundLabel, ""); | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| Steps::~Steps() { | ||||
|   lv_obj_clean(lv_scr_act()); | ||||
| } | ||||
| 
 | ||||
| bool Steps::Refresh() { | ||||
|    | ||||
|   stepsCount = motionController.NbSteps(); | ||||
| 
 | ||||
|   lv_label_set_text_fmt(lSteps,"%li", stepsCount); | ||||
|   lv_obj_align(lSteps, nullptr, LV_ALIGN_CENTER, 0, -20); | ||||
|       | ||||
|   lv_arc_set_value(stepsArc, int16_t(500 * stepsCount / settingsController.GetStepsGoal())); | ||||
| 
 | ||||
|   return running; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										39
									
								
								src/displayapp/screens/Steps.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								src/displayapp/screens/Steps.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,39 @@ | ||||
| #pragma once | ||||
| 
 | ||||
| #include <cstdint> | ||||
| #include <lvgl/lvgl.h> | ||||
| #include "Screen.h" | ||||
| #include <components/motion/MotionController.h> | ||||
| 
 | ||||
| namespace Pinetime { | ||||
| 
 | ||||
|   namespace Controllers { | ||||
|     class Settings; | ||||
|   } | ||||
| 
 | ||||
|   namespace Applications { | ||||
|     namespace Screens { | ||||
| 
 | ||||
|       class Steps : public Screen { | ||||
|         public: | ||||
|           Steps(DisplayApp* app, Controllers::MotionController& motionController, Controllers::Settings &settingsController); | ||||
|           ~Steps() override; | ||||
| 
 | ||||
|           bool Refresh() override; | ||||
|            | ||||
| 
 | ||||
|         private:           | ||||
| 
 | ||||
|           Controllers::MotionController& motionController; | ||||
|           Controllers::Settings& settingsController; | ||||
| 
 | ||||
|           lv_obj_t * lSteps; | ||||
|           lv_obj_t * lStepsIcon; | ||||
|           lv_obj_t * stepsArc; | ||||
| 
 | ||||
|           uint32_t stepsCount; | ||||
| 
 | ||||
|       }; | ||||
|     } | ||||
|   } | ||||
| } | ||||
							
								
								
									
										98
									
								
								src/displayapp/screens/settings/SettingSteps.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								src/displayapp/screens/settings/SettingSteps.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,98 @@ | ||||
| #include "SettingSteps.h" | ||||
| #include <lvgl/lvgl.h> | ||||
| #include "displayapp/DisplayApp.h" | ||||
| #include "displayapp/screens/Symbols.h" | ||||
| 
 | ||||
| using namespace Pinetime::Applications::Screens; | ||||
| 
 | ||||
| namespace { | ||||
|   static void event_handler(lv_obj_t * obj, lv_event_t event) { | ||||
|     SettingSteps* screen = static_cast<SettingSteps *>(obj->user_data); | ||||
|     screen->UpdateSelected(obj, event); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| SettingSteps::SettingSteps( | ||||
|   Pinetime::Applications::DisplayApp *app, Pinetime::Controllers::Settings &settingsController) : | ||||
|   Screen(app), | ||||
|   settingsController{settingsController} | ||||
| { | ||||
| 
 | ||||
|   lv_obj_t * container1 = lv_cont_create(lv_scr_act(), nullptr); | ||||
| 
 | ||||
|   //lv_obj_set_style_local_bg_color(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111));
 | ||||
|   lv_obj_set_style_local_bg_opa(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_TRANSP); | ||||
|   lv_obj_set_style_local_pad_all(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 10); | ||||
|   lv_obj_set_style_local_pad_inner(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 5); | ||||
|   lv_obj_set_style_local_border_width(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 0); | ||||
|   lv_obj_set_pos(container1, 30, 60); | ||||
|   lv_obj_set_width(container1, LV_HOR_RES - 50); | ||||
|   lv_obj_set_height(container1, LV_VER_RES - 60); | ||||
|   lv_cont_set_layout(container1, LV_LAYOUT_COLUMN_LEFT); | ||||
| 
 | ||||
|   lv_obj_t * title = lv_label_create(lv_scr_act(), NULL);   | ||||
|   lv_label_set_text_static(title,"Daily steps goal"); | ||||
|   lv_label_set_align(title, LV_LABEL_ALIGN_CENTER); | ||||
|   lv_obj_align(title, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 15, 15); | ||||
| 
 | ||||
|   lv_obj_t * icon = lv_label_create(lv_scr_act(), NULL); | ||||
|   lv_obj_set_style_local_text_color(icon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE); | ||||
|    | ||||
|   lv_label_set_text_static(icon, Symbols::shoe); | ||||
|   lv_label_set_align(icon, LV_LABEL_ALIGN_CENTER); | ||||
|   lv_obj_align(icon, title, LV_ALIGN_OUT_LEFT_MID, -10, 0); | ||||
| 
 | ||||
| 
 | ||||
|   stepValue = lv_label_create(lv_scr_act(), NULL); | ||||
|   lv_obj_set_style_local_text_font(stepValue, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_42); | ||||
|   lv_label_set_text_fmt(stepValue,"%i", settingsController.GetStepsGoal()); | ||||
|   lv_label_set_align(stepValue, LV_LABEL_ALIGN_CENTER); | ||||
|   lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_CENTER, 0, -10); | ||||
| 
 | ||||
|   btnPlus = lv_btn_create(lv_scr_act(), NULL); | ||||
|   btnPlus->user_data = this; | ||||
|   lv_obj_set_size(btnPlus, 80, 50); | ||||
|   lv_obj_align(btnPlus, lv_scr_act(), LV_ALIGN_CENTER, 55, 80); | ||||
|   lv_obj_set_style_local_value_str(btnPlus, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "+"); | ||||
|   lv_obj_set_event_cb(btnPlus, event_handler); | ||||
| 
 | ||||
|   btnMinus = lv_btn_create(lv_scr_act(), NULL); | ||||
|   btnMinus->user_data = this; | ||||
|   lv_obj_set_size(btnMinus, 80, 50); | ||||
|   lv_obj_set_event_cb(btnMinus, event_handler); | ||||
|   lv_obj_align(btnMinus, lv_scr_act(), LV_ALIGN_CENTER, -55, 80); | ||||
|   lv_obj_set_style_local_value_str(btnMinus, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "-"); | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| SettingSteps::~SettingSteps() { | ||||
|   lv_obj_clean(lv_scr_act()); | ||||
|   settingsController.SaveSettings(); | ||||
| } | ||||
| 
 | ||||
| bool SettingSteps::Refresh() { | ||||
|   return running; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void SettingSteps::UpdateSelected(lv_obj_t *object, lv_event_t event) { | ||||
|   uint32_t value = settingsController.GetStepsGoal(); | ||||
|   if(object == btnPlus && (event == LV_EVENT_PRESSED)) { | ||||
|     value += 1000; | ||||
|     if ( value <= 500000 ) { | ||||
|       settingsController.SetStepsGoal(value); | ||||
|       lv_label_set_text_fmt(stepValue,"%i", settingsController.GetStepsGoal()); | ||||
|       lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_CENTER, 0, -10); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   if(object == btnMinus && (event == LV_EVENT_PRESSED)) { | ||||
|     value -= 1000; | ||||
|     if ( value >= 1000 ) { | ||||
|       settingsController.SetStepsGoal(value); | ||||
|       lv_label_set_text_fmt(stepValue,"%i", settingsController.GetStepsGoal()); | ||||
|       lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_CENTER, 0, -10); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
| } | ||||
							
								
								
									
										32
									
								
								src/displayapp/screens/settings/SettingSteps.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/displayapp/screens/settings/SettingSteps.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,32 @@ | ||||
| #pragma once | ||||
| 
 | ||||
| #include <cstdint> | ||||
| #include <lvgl/lvgl.h> | ||||
| #include "components/settings/Settings.h" | ||||
| #include "displayapp/screens/Screen.h" | ||||
| 
 | ||||
| namespace Pinetime { | ||||
| 
 | ||||
|   namespace Applications { | ||||
|     namespace Screens { | ||||
| 
 | ||||
|       class SettingSteps : public Screen{ | ||||
|         public: | ||||
|           SettingSteps(DisplayApp* app, Pinetime::Controllers::Settings &settingsController); | ||||
|           ~SettingSteps() override; | ||||
| 
 | ||||
|           bool Refresh() override; | ||||
|           void UpdateSelected(lv_obj_t *object, lv_event_t event); | ||||
|           | ||||
|         private:           | ||||
| 
 | ||||
|           Controllers::Settings& settingsController; | ||||
| 
 | ||||
|           lv_obj_t * stepValue; | ||||
|           lv_obj_t * btnPlus; | ||||
|           lv_obj_t * btnMinus; | ||||
|            | ||||
|       }; | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @ -44,9 +44,7 @@ std::unique_ptr<Screen> Settings::CreateScreen1() { | ||||
|     {Symbols::clock, "Wake Up", Apps::SettingWakeUp}, | ||||
|     {Symbols::clock, "Time format", Apps::SettingTimeFormat}, | ||||
|     {Symbols::clock, "Watch face", Apps::SettingWatchFace}, | ||||
|   } | ||||
| 
 | ||||
|   }; | ||||
|   }}; | ||||
| 
 | ||||
|   return std::unique_ptr<Screen>(new Screens::List(0, 2, app, settingsController, applications)); | ||||
| } | ||||
| @ -54,13 +52,11 @@ std::unique_ptr<Screen> Settings::CreateScreen1() { | ||||
| std::unique_ptr<Screen> Settings::CreateScreen2() { | ||||
| 
 | ||||
|   std::array<Screens::List::Applications, 4> applications {{ | ||||
|     {Symbols::shoe, "Steps", Apps::SettingSteps}, | ||||
|     {Symbols::batteryHalf, "Battery", Apps::BatteryInfo}, | ||||
|     {Symbols::check, "Firmware", Apps::FirmwareValidation}, | ||||
|     {Symbols::list, "About", Apps::SysInfo}, | ||||
|     {"", "", Apps::None}, | ||||
|   } | ||||
| 
 | ||||
|   }; | ||||
|   }}; | ||||
| 
 | ||||
|   return std::unique_ptr<Screen>(new Screens::List(1, 2, app, settingsController, applications)); | ||||
| } | ||||
|  | ||||
| @ -415,6 +415,7 @@ typedef void* lv_indev_drv_user_data_t;            /*Type of user data in the in | ||||
| 
 | ||||
| #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(jetbrains_mono_bold_20) \ | ||||
|                                LV_FONT_DECLARE(jetbrains_mono_extrabold_compressed) \ | ||||
|                                LV_FONT_DECLARE(jetbrains_mono_42) \ | ||||
|                                LV_FONT_DECLARE(jetbrains_mono_76) \ | ||||
|                                LV_FONT_DECLARE(lv_font_sys_48) | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user