51 lines
1.4 KiB
Python
51 lines
1.4 KiB
Python
import enum
|
|
import math
|
|
import cairo
|
|
|
|
from hexagram.dial import BottomDial
|
|
|
|
class Thermometer(BottomDial):
|
|
MIN_VALUE = 85
|
|
MAX_VALUE = 110
|
|
WARN_VALUE = 106
|
|
|
|
FONT_FACE = "Muli"
|
|
|
|
def __init__(self, x: float, y: float, radius: float):
|
|
super().__init__(x, y, radius,
|
|
self.MIN_ANGLE,
|
|
self.MAX_ANGLE,
|
|
self.MIN_VALUE,
|
|
self.MAX_VALUE)
|
|
|
|
def draw_bg(self, cr: cairo.Context):
|
|
super().draw_bg(cr)
|
|
|
|
cr.select_font_face(self.FONT_FACE,
|
|
cairo.FontSlant.NORMAL,
|
|
cairo.FontWeight.BOLD)
|
|
|
|
cr.set_font_size(self.radius * 0.1)
|
|
|
|
cr.set_source_rgb(1, 1, 1)
|
|
#self.draw_value(cr, 0.78, self.min_value, "C", -25, 0)
|
|
self.draw_value(cr, 0.78, self.min_value, "C")
|
|
|
|
cr.set_source_rgb(1, 0, 0)
|
|
#self.draw_value(cr, 0.75, self.max_value, "H", -5, 0)
|
|
self.draw_value(cr, 0.75, self.max_value, "H")
|
|
|
|
cr.set_line_width(6.0)
|
|
|
|
level = self.min_value
|
|
incr = math.ceil((self.max_value - self.min_value) / 9)
|
|
|
|
while level <= self.max_value:
|
|
if level >= self.WARN_VALUE:
|
|
cr.set_source_rgb(0.8, 0, 0)
|
|
else:
|
|
cr.set_source_rgb(1, 1, 1)
|
|
|
|
self.draw_mark(cr, 0.83, 0.87, level)
|
|
|
|
level += incr
|