diff --git a/py/hexagram/dial.py b/py/hexagram/dial.py index 75af4c6..311dc1f 100644 --- a/py/hexagram/dial.py +++ b/py/hexagram/dial.py @@ -62,9 +62,7 @@ class Dial(Gauge): cr.stroke() - def draw_needle(self, cr: cairo.Context, min_radius: float, max_radius: float, value: float): - angle = self.angle(value) - + def draw_needle(self, cr: cairo.Context, min_radius: float, max_radius: float, angle: float): cr.set_source_rgba(1, 0.4, 1, 0.75) cr.set_line_width(8) @@ -101,7 +99,26 @@ class Dial(Gauge): cr.stroke() def draw_fg(self, cr: cairo.Context): - self.draw_needle(cr, 0.5, 0.89, self.value) + gradient = cairo.RadialGradient(self.x, + self.y, + self.radius, + self.x, + self.y, + self.radius / 2) + gradient.add_color_stop_rgba(0, 1, 0.4, 1, 0.75) + gradient.add_color_stop_rgba(1, 0, 0.0, 0, 0.50) + + angle = self.angle(self.value) + cr.set_line_width(self.radius * 0.375) + cr.set_source(gradient) + + cr.arc(self.x, self.y, self.radius * 0.713, + self.min_angle - self.ANGLE_OFFSET - (math.pi / 180.0) * 1.5, + angle) + + cr.stroke() + + self.draw_needle(cr, 0.5, 0.89, angle) class BottomDial(Dial): MIN_ANGLE = 144.0 * (math.pi / 180.0) @@ -133,4 +150,4 @@ class BottomDial(Dial): min_radius = 0.8 max_radius = 0.9 - self.draw_needle(cr, min_radius, max_radius, self.value) + self.draw_needle(cr, min_radius, max_radius, self.angle(self.value))