81 lines
		
	
	
		
			No EOL
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			No EOL
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "Clock.h"  
 | |
| #include "../SevenSegment.h"
 | |
| #include "../Icons.h"
 | |
| #include <Fonts/FreeSans9pt7b.h>
 | |
| #include <Fonts/FreeMonoBold9pt7b.h>
 | |
| #include <Fonts/FreeMonoBold12pt7b.h>
 | |
| 
 | |
| WatchFacePages::Clock::Clock(WatchyDisplay & display, WatchFeatures::WatchFeatures & features)
 | |
|   : m_display(display), m_features(features)
 | |
| {
 | |
| }
 | |
| 
 | |
| void WatchFacePages::Clock::InitBoot()
 | |
| {
 | |
| }
 | |
| 
 | |
| void WatchFacePages::Clock::InitWake()
 | |
| {
 | |
| 
 | |
| }
 | |
| 
 | |
| void WatchFacePages::Clock::DrawPage(bool partialRefresh)
 | |
| {
 | |
|   m_display.setFullWindow();
 | |
| 
 | |
|   m_display.fillScreen(GxEPD_WHITE);
 | |
|   DrawBatteryIcon();
 | |
| 
 | |
| 	tmElements_t currentTime;
 | |
| 	m_features.rtc.Get(currentTime);
 | |
|   int tzOffset = m_features.storage.GetTzOffset();
 | |
|   m_features.rtc.OffsetTime(currentTime, tzOffset);
 | |
| 	SevenSegment sevenSegment(30, 60, 6, 5, 5);
 | |
| 
 | |
|   if (currentTime.Hour < 10) {
 | |
|     sevenSegment.DrawDigit(m_display, 0, 15, 75, GxEPD_BLACK);
 | |
|   } else {
 | |
|     sevenSegment.DrawDigit(m_display, currentTime.Hour / 10, 20, 75, GxEPD_BLACK);
 | |
|   }
 | |
| 
 | |
|   sevenSegment.DrawDigit(m_display, currentTime.Hour % 10, 60, 75, GxEPD_BLACK);
 | |
| 
 | |
|   if (currentTime.Minute < 10) {
 | |
|     sevenSegment.DrawDigit(m_display, 0, 110, 75, GxEPD_BLACK);
 | |
|   } else {
 | |
|     sevenSegment.DrawDigit(m_display, currentTime.Minute / 10, 110, 75, GxEPD_BLACK);
 | |
|   }
 | |
| 
 | |
|   sevenSegment.DrawDigit(m_display, currentTime.Minute % 10, 150, 75, GxEPD_BLACK);
 | |
| 
 | |
|   m_display.fillRect(97, 90, 5, 5, GxEPD_BLACK);
 | |
|   m_display.fillRect(97, 110, 5, 5, GxEPD_BLACK);
 | |
| 
 | |
|   m_display.display(partialRefresh);
 | |
| }
 | |
| 
 | |
| void WatchFacePages::Clock::DrawBatteryIcon()
 | |
| {
 | |
|   m_display.fillRect(200 - 48, 5, 43, 23, GxEPD_BLACK);
 | |
|   m_display.fillRect(200 - 46, 7, 39, 19, GxEPD_WHITE);
 | |
|   int intLevel = m_features.battery.GetPercentage();
 | |
|   uint8_t level = intLevel / 100.0f;
 | |
| 
 | |
|   m_display.fillRect(200 - 44, 9, (int)std::round(35.0f * level), 15, GxEPD_BLACK);
 | |
| 
 | |
|   int x = 200 - 85;
 | |
|   if (intLevel == 100) {
 | |
|     x -= 13;
 | |
|   }
 | |
| 
 | |
|   m_display.setFont(&FreeMonoBold9pt7b);
 | |
|   m_display.setCursor(x, 22);
 | |
|   m_display.setTextColor(GxEPD_BLACK);
 | |
|   m_display.print(intLevel);
 | |
|   m_display.print("%");
 | |
| 
 | |
|   m_display.setFont(&FreeMonoBold12pt7b);
 | |
|   m_display.drawBitmap(10, 177, Icons::steps, 19, 23, GxEPD_BLACK);
 | |
|   m_display.setCursor(40, 195);
 | |
|   m_display.print(m_features.stepCounter.GetSteps());
 | |
| } | 
