51 lines
1.3 KiB
Python
51 lines
1.3 KiB
Python
import enum
|
|
import math
|
|
import cairo
|
|
|
|
from hexagram.dial import BottomDial
|
|
|
|
class Thermometer(BottomDial):
|
|
MIN_VALUE = 48
|
|
MAX_VALUE = 127
|
|
WARN_VALUE = 116
|
|
|
|
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_legend(cr, 0.78, self.min_value, "C")
|
|
|
|
cr.set_source_rgb(1, 0, 0)
|
|
self.draw_legend(cr, 0.75, self.max_value, "H", -15, 5)
|
|
|
|
cr.set_line_width(6.0)
|
|
|
|
level = self.min_value
|
|
incr = (self.max_value - self.min_value) / 8.0
|
|
|
|
for i in range(0, 9):
|
|
level = self.min_value + i * incr
|
|
|
|
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
|