digital displays

This commit is contained in:
Gyuri Horák 2025-11-04 18:46:24 +01:00
parent 710c4a0cd0
commit 147db823b7
WARNING! Although there is a key with this ID in the database it does not verify this commit! This commit is SUSPICIOUS.
GPG Key ID: 4993F07B3EAE8D38

View File

@ -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,