50 lines
1.3 KiB
Python
50 lines
1.3 KiB
Python
import enum
|
|
import math
|
|
import cairo
|
|
|
|
from hexagram.dial import BottomDial
|
|
|
|
class FuelGauge(BottomDial):
|
|
MIN_VALUE = 0
|
|
MAX_VALUE = 15
|
|
|
|
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)
|
|
|
|
self.value = 0
|
|
|
|
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, 0, 0)
|
|
self.draw_legend(cr, 0.75, 0, "0", -5, 5)
|
|
|
|
cr.set_source_rgb(1, 1, 1)
|
|
self.draw_legend(cr, 0.75, 15, "1", -10, 5)
|
|
|
|
cr.set_line_width(6.0)
|
|
|
|
for level in range(0, self.MAX_VALUE+1):
|
|
if level < 2:
|
|
min_radius = 0.84
|
|
cr.set_source_rgb(1, 0, 0)
|
|
elif level < 4:
|
|
min_radius = 0.82
|
|
cr.set_source_rgb(1, 0, 0)
|
|
else:
|
|
min_radius = 0.82
|
|
cr.set_source_rgb(1, 1, 1)
|
|
|
|
self.draw_mark(cr, min_radius, 0.87, level)
|