Move ShiftIndicator to tacho.py
This commit is contained in:
parent
62387e4ead
commit
a9878c921d
2 changed files with 76 additions and 75 deletions
|
@ -8,85 +8,11 @@ from hexagram.pattern import HexagonPattern
|
||||||
from hexagram.gauge import Gauge, TextGauge
|
from hexagram.gauge import Gauge, TextGauge
|
||||||
from hexagram.dial import Dial
|
from hexagram.dial import Dial
|
||||||
from hexagram.speedo import Speedo
|
from hexagram.speedo import Speedo
|
||||||
from hexagram.tacho import Tacho
|
from hexagram.tacho import Tacho, ShiftIndicator
|
||||||
from hexagram.fuel import FuelGauge
|
from hexagram.fuel import FuelGauge
|
||||||
from hexagram.thermo import Thermometer
|
from hexagram.thermo import Thermometer
|
||||||
from hexagram.status import StatusIconBox, ColdStatus, ColdIcon
|
from hexagram.status import StatusIconBox, ColdStatus, ColdIcon
|
||||||
|
|
||||||
class ShiftIndicator(Gauge):
|
|
||||||
__slots__ = 'x', 'y', 'rpm_min', 'rpm_redline', 'rpm_max',
|
|
||||||
|
|
||||||
LIGHT_WIDTH = 48
|
|
||||||
LIGHT_HEIGHT = 12
|
|
||||||
LIGHT_SPACING = 8
|
|
||||||
LIGHT_LOW = 0.25
|
|
||||||
|
|
||||||
LIGHT_COLORS = (
|
|
||||||
(0.0, 1.0, 0.0),
|
|
||||||
(0.6, 1.0, 0.0),
|
|
||||||
(1.0, 1.0, 0.0),
|
|
||||||
(1.0, 0.6, 0.0),
|
|
||||||
(1.0, 0.0, 0.0),
|
|
||||||
)
|
|
||||||
|
|
||||||
LIGHT_LEVELS = (
|
|
||||||
(0, 8),
|
|
||||||
(1, 7),
|
|
||||||
(2, 6),
|
|
||||||
(3, 5),
|
|
||||||
(4,),
|
|
||||||
)
|
|
||||||
|
|
||||||
def __init__(self, x: float, y: float, rpm_min: float, rpm_redline: float, rpm_max: float):
|
|
||||||
self.value = 0
|
|
||||||
self.x = x
|
|
||||||
self.y = y
|
|
||||||
self.rpm_min = rpm_min
|
|
||||||
self.rpm_redline = rpm_redline
|
|
||||||
self.rpm_max = rpm_max
|
|
||||||
|
|
||||||
def draw_level(self, cr: cairo.Context, level: int, on: bool=False):
|
|
||||||
max_level = len(self.LIGHT_LEVELS) - 1
|
|
||||||
|
|
||||||
if level < 0:
|
|
||||||
level = 0
|
|
||||||
elif level >= max_level:
|
|
||||||
level = max_level
|
|
||||||
|
|
||||||
r, g, b = self.LIGHT_COLORS[level]
|
|
||||||
|
|
||||||
if not on:
|
|
||||||
r *= self.LIGHT_LOW
|
|
||||||
g *= self.LIGHT_LOW
|
|
||||||
b *= self.LIGHT_LOW
|
|
||||||
|
|
||||||
cr.set_source_rgb(r, g, b)
|
|
||||||
|
|
||||||
for i in self.LIGHT_LEVELS[level]:
|
|
||||||
x = i * (self.LIGHT_WIDTH + self.LIGHT_SPACING)
|
|
||||||
|
|
||||||
cr.rectangle(self.x + x,
|
|
||||||
self.y,
|
|
||||||
self.LIGHT_WIDTH,
|
|
||||||
self.LIGHT_HEIGHT)
|
|
||||||
|
|
||||||
cr.fill()
|
|
||||||
|
|
||||||
def draw_bg(self, cr: cairo.Context):
|
|
||||||
for level in range(0, len(self.LIGHT_LEVELS)):
|
|
||||||
self.draw_level(cr, level)
|
|
||||||
|
|
||||||
def draw_fg(self, cr: cairo.Context):
|
|
||||||
if self.value < self.rpm_min:
|
|
||||||
return
|
|
||||||
|
|
||||||
adj = self.value - self.rpm_min
|
|
||||||
adj_max = self.rpm_max - self.rpm_min
|
|
||||||
level = int((adj / adj_max) * len(self.LIGHT_LEVELS))
|
|
||||||
|
|
||||||
for l in range(0, len(self.LIGHT_LEVELS)):
|
|
||||||
self.draw_level(cr, l, level >= l)
|
|
||||||
|
|
||||||
class Odometer(TextGauge):
|
class Odometer(TextGauge):
|
||||||
def __init__(self, x: float, y: float, align: Align):
|
def __init__(self, x: float, y: float, align: Align):
|
||||||
super().__init__(x, y, 0, 999999999, align)
|
super().__init__(x, y, 0, 999999999, align)
|
||||||
|
|
|
@ -2,6 +2,7 @@ import enum
|
||||||
import math
|
import math
|
||||||
import cairo
|
import cairo
|
||||||
|
|
||||||
|
from hexagram.gauge import Gauge
|
||||||
from hexagram.dial import Dial
|
from hexagram.dial import Dial
|
||||||
from hexagram.trans import Gear, ShiftMode
|
from hexagram.trans import Gear, ShiftMode
|
||||||
|
|
||||||
|
@ -88,3 +89,77 @@ class Tacho(Dial):
|
||||||
self.y + height / 4)
|
self.y + height / 4)
|
||||||
|
|
||||||
cr.show_text(text)
|
cr.show_text(text)
|
||||||
|
|
||||||
|
class ShiftIndicator(Gauge):
|
||||||
|
__slots__ = 'x', 'y', 'rpm_min', 'rpm_redline', 'rpm_max',
|
||||||
|
|
||||||
|
LIGHT_WIDTH = 48
|
||||||
|
LIGHT_HEIGHT = 12
|
||||||
|
LIGHT_SPACING = 8
|
||||||
|
LIGHT_LOW = 0.25
|
||||||
|
|
||||||
|
LIGHT_COLORS = (
|
||||||
|
(0.0, 1.0, 0.0),
|
||||||
|
(0.6, 1.0, 0.0),
|
||||||
|
(1.0, 1.0, 0.0),
|
||||||
|
(1.0, 0.6, 0.0),
|
||||||
|
(1.0, 0.0, 0.0),
|
||||||
|
)
|
||||||
|
|
||||||
|
LIGHT_LEVELS = (
|
||||||
|
(0, 8),
|
||||||
|
(1, 7),
|
||||||
|
(2, 6),
|
||||||
|
(3, 5),
|
||||||
|
(4,),
|
||||||
|
)
|
||||||
|
|
||||||
|
def __init__(self, x: float, y: float, rpm_min: float, rpm_redline: float, rpm_max: float):
|
||||||
|
self.value = 0
|
||||||
|
self.x = x
|
||||||
|
self.y = y
|
||||||
|
self.rpm_min = rpm_min
|
||||||
|
self.rpm_redline = rpm_redline
|
||||||
|
self.rpm_max = rpm_max
|
||||||
|
|
||||||
|
def draw_level(self, cr: cairo.Context, level: int, on: bool=False):
|
||||||
|
max_level = len(self.LIGHT_LEVELS) - 1
|
||||||
|
|
||||||
|
if level < 0:
|
||||||
|
level = 0
|
||||||
|
elif level >= max_level:
|
||||||
|
level = max_level
|
||||||
|
|
||||||
|
r, g, b = self.LIGHT_COLORS[level]
|
||||||
|
|
||||||
|
if not on:
|
||||||
|
r *= self.LIGHT_LOW
|
||||||
|
g *= self.LIGHT_LOW
|
||||||
|
b *= self.LIGHT_LOW
|
||||||
|
|
||||||
|
cr.set_source_rgb(r, g, b)
|
||||||
|
|
||||||
|
for i in self.LIGHT_LEVELS[level]:
|
||||||
|
x = i * (self.LIGHT_WIDTH + self.LIGHT_SPACING)
|
||||||
|
|
||||||
|
cr.rectangle(self.x + x,
|
||||||
|
self.y,
|
||||||
|
self.LIGHT_WIDTH,
|
||||||
|
self.LIGHT_HEIGHT)
|
||||||
|
|
||||||
|
cr.fill()
|
||||||
|
|
||||||
|
def draw_bg(self, cr: cairo.Context):
|
||||||
|
for level in range(0, len(self.LIGHT_LEVELS)):
|
||||||
|
self.draw_level(cr, level)
|
||||||
|
|
||||||
|
def draw_fg(self, cr: cairo.Context):
|
||||||
|
if self.value < self.rpm_min:
|
||||||
|
return
|
||||||
|
|
||||||
|
adj = self.value - self.rpm_min
|
||||||
|
adj_max = self.rpm_max - self.rpm_min
|
||||||
|
level = int((adj / adj_max) * len(self.LIGHT_LEVELS))
|
||||||
|
|
||||||
|
for l in range(0, len(self.LIGHT_LEVELS)):
|
||||||
|
self.draw_level(cr, l, level >= l)
|
||||||
|
|
Loading…
Add table
Reference in a new issue