Files
wf/source/Background/Marks/IMark.mc
2025-10-15 13:13:00 +03:00

81 lines
1.9 KiB
MonkeyC

import Toybox.Graphics;
import Toybox.Lang;
import Toybox.WatchUi;
class IMark extends Drawable {
var CenterShift as [Float, Float];
var Color as ColorType;
var Radius as Float;
var Seconds as Number;
typedef MarkParams as {
:Identifier as Object,
:Type as MarkType,
:Seconds as Number,
:Color as ColorType,
:HandsParams as IHands.HandsParams,
};
enum MarkType {
START_MARK,
PRIMARY_MARK,
SECONDARY_MARK,
TERTIARY_MARK,
}
enum MarkStyleType {
LINE_MARK,
DOT_MARK,
ARABIC_MARK,
EMPTY_MARK,
}
static function getMark(style as MarkStyleType, options as MarkParams) as IMark? {
switch (style) {
case EMPTY_MARK:
return null;
case LINE_MARK:
default:
return new LineMark(options);
}
}
function initialize(options as MarkParams) {
Drawable.initialize({:identifier => options[:Identifier]});
CenterShift = getOrElse(getOrElse(options[:HandsParams], {}), [0.0, 0.0]);
Color = getOrElse(options[:Color], Graphics.COLOR_WHITE);
Radius = getOrElse(options[:Radius], 1.0);
Seconds = options[:Seconds];
}
function draw(dc as Dc) as Void {
var center = getCenter(dc, CenterShift);
drawMark(dc, center[0], center[1]);
}
function drawMark(dc as Dc, x as Float, y as Float) as Void {}
function getMarkType() as MarkType {
switch (Seconds) {
case 0:
return START_MARK;
case 15:
case 30:
case 45:
return PRIMARY_MARK;
case 5:
case 10:
case 20:
case 25:
case 35:
case 40:
case 50:
case 55:
return SECONDARY_MARK;
default:
return TERTIARY_MARK;
}
}
}