From 147db823b776da873a75cc0510a87c069a2a3efc Mon Sep 17 00:00:00 2001 From: Gyuri Horak Date: Tue, 4 Nov 2025 18:46:24 +0100 Subject: [PATCH] digital displays --- source/DecimalWatchFaceView.mc | 50 ++++++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/source/DecimalWatchFaceView.mc b/source/DecimalWatchFaceView.mc index 93a177a..d073030 100644 --- a/source/DecimalWatchFaceView.mc +++ b/source/DecimalWatchFaceView.mc @@ -10,8 +10,28 @@ class DecimalWatchFaceView extends WatchUi.WatchFace { var isHighPowerMode = true; // Track if we're in high power mode + // Custom colors for AMOLED-friendly shadows + const VERY_DARK_RED = 0x330000; // #330000 + const VERY_DARK_GRAY = 0x333333; // #333333 + + var useAmoledColors = false; // Whether to use darker colors + function initialize() { WatchFace.initialize(); + + // Check if device likely has AMOLED screen + // AMOLED devices typically support always-on display and higher color depths + var deviceSettings = System.getDeviceSettings(); + + // Check if device supports always-on display (common on AMOLED) + // or if we can detect high color support + if (deviceSettings has :requiresBurnInProtection) { + useAmoledColors = deviceSettings.requiresBurnInProtection; + } else { + // Fallback: use darker colors if device has round screen (most AMOLED watches) + // This is a heuristic, but safer to use dark colors on all devices + useAmoledColors = true; // Use darker colors by default for burn-in protection + } } // Load your resources here @@ -53,13 +73,10 @@ class DecimalWatchFaceView extends WatchUi.WatchFace { dc.setColor(Graphics.COLOR_BLACK, Graphics.COLOR_BLACK); dc.clear(); - // Draw the watchface + // Draw the watchface (circle, ticks, numbers) drawWatchFace(dc, useFiveHourMode, isMorning); - // Draw the hands - drawHand(dc, displayTime, useFiveHourMode, show12HourShadow, clockTime); - - // Draw digital time displays + // Draw digital time displays (before hands so hands appear on top) if (showNumericTime) { // Draw decimal time at bottom drawDigitalTime(dc, decimalTime); @@ -69,6 +86,9 @@ class DecimalWatchFaceView extends WatchUi.WatchFace { drawTraditionalTime(dc, clockTime); } } + + // Draw the hands last (on top of everything) + drawHand(dc, displayTime, useFiveHourMode, show12HourShadow, clockTime); } // Called when this View is removed from the screen. Save the @@ -175,8 +195,7 @@ class DecimalWatchFaceView extends WatchUi.WatchFace { } } - // Draw center dot - dc.fillCircle(centerX, centerY, 5); + // Note: Center dot is drawn in drawHand() to ensure it's on top of everything } // Draw hour, minute, and second hands for current decimal time @@ -200,11 +219,15 @@ class DecimalWatchFaceView extends WatchUi.WatchFace { var traditional60MinuteAngle = (minute / 60.0) * 360.0 - 90.0; var traditional60MinuteLength = radius - 45; // Same as decimal minute hand + // Choose colors based on screen type (darker for AMOLED burn-in protection) + var shadowGray = useAmoledColors ? VERY_DARK_GRAY : Graphics.COLOR_DK_GRAY; + var shadowRed = useAmoledColors ? VERY_DARK_RED : Graphics.COLOR_DK_RED; + // Draw traditional minute hand (dark gray) - drawSingleHand(dc, centerX, centerY, traditional60MinuteAngle, traditional60MinuteLength, 4, Graphics.COLOR_DK_GRAY); + drawSingleHand(dc, centerX, centerY, traditional60MinuteAngle, traditional60MinuteLength, 4, shadowGray); // Draw traditional hour hand (dark red) - drawSingleHand(dc, centerX, centerY, traditional12HourAngle, traditional12HourLength, 6, Graphics.COLOR_DK_RED); + drawSingleHand(dc, centerX, centerY, traditional12HourAngle, traditional12HourLength, 6, shadowRed); } // Adjust scale based on mode @@ -223,9 +246,9 @@ class DecimalWatchFaceView extends WatchUi.WatchFace { // Calculate second hand (shows finer detail) // Only visible in high power mode - var multiplier = useFiveHourMode ? 5.0 : 10.0; + var multiplier = 100.0; // 0.01 increments var secondFractionalPart = (decimalTime * multiplier) - (decimalTime * multiplier).toNumber(); - var secondAngle = secondFractionalPart * 360.0 - 90.0; + var secondAngle = secondFractionalPart * 360.0 + 90.0; var secondHandLength = radius - 35; // Longest hand // Draw second hand first (if in high power mode), so it appears behind other hands @@ -306,8 +329,11 @@ class DecimalWatchFaceView extends WatchUi.WatchFace { // Format as HH:MM var timeString = hour12.format("%d") + ":" + minute.format("%02d"); + // Choose color based on screen type (darker for AMOLED burn-in protection) + var shadowGray = useAmoledColors ? VERY_DARK_GRAY : Graphics.COLOR_DK_GRAY; + // Draw at top center in dark gray - dc.setColor(Graphics.COLOR_DK_GRAY, Graphics.COLOR_TRANSPARENT); + dc.setColor(shadowGray, Graphics.COLOR_TRANSPARENT); dc.drawText( width / 2, height * 0.25,