diff --git a/bin/xmet-spc-render b/bin/xmet-spc-render index 007bb12..2998f9c 100755 --- a/bin/xmet-spc-render +++ b/bin/xmet-spc-render @@ -84,7 +84,7 @@ args = argparser.parse_args() config = Config.load() db = Database.from_config(config) -conus = SPCOutlookMap() +conus = SPCOutlookMap(args.dark) if args.file is None: outlook = SPCOutlook.for_timestamp(db, args.valid, args.day) diff --git a/lib/xmet/spc.py b/lib/xmet/spc.py index 76da8ff..2a5228b 100644 --- a/lib/xmet/spc.py +++ b/lib/xmet/spc.py @@ -647,15 +647,23 @@ class SPCOutlookLegend(): return self.width, self.height - def draw_item(self, cr: cairo.Context, key: str, x: float, y: float): + def draw_item(self, + cr: cairo.Context, + key: str, + x: float, + y: float, + dark: bool=False): cr.save() cr.set_source_rgb(*self.colors[key]) cr.rectangle(x, y, self.COLOR_WIDTH, self.COLOR_HEIGHT) cr.fill() + color = (1, 1, 1) if dark else (0, 0, 0) + + cr.set_source_rgb(*color) + cr.set_line_width(1) - cr.set_source_rgb(0, 0, 0) cr.rectangle(x, y, self.COLOR_WIDTH, self.COLOR_HEIGHT) cr.stroke() @@ -666,11 +674,12 @@ class SPCOutlookLegend(): cr.move_to(x + self.COLOR_WIDTH + self.MARGIN, y + self.COLOR_WIDTH / 2 + extents.height / 2) + cr.set_source_rgb(*color) cr.show_text(text) cr.restore() - def draw(self, cr: cairo.Context, x: float, y: float): + def draw(self, cr: cairo.Context, x: float, y: float, dark: bool=False): cr.save() cr.select_font_face(self.FONT_FACE, @@ -679,7 +688,11 @@ class SPCOutlookLegend(): cr.set_font_size(self.FONT_SIZE) - cr.set_source_rgba(0.2, 0.2, 0.2, 0.1) + if dark: + cr.set_source_rgba(0.2, 0.2, 0.2, 0.8) + else: + cr.set_source_rgba(0.2, 0.2, 0.2, 0.1) + draw_rounded_rect(cr, x, y, self.width, self.height, self.RADIUS) cr.fill() @@ -692,7 +705,7 @@ class SPCOutlookLegend(): item_y = y + self.MARGIN + i * (self.COLOR_HEIGHT + self.MARGIN) - self.draw_item(cr, key, x + self.MARGIN, item_y) + self.draw_item(cr, key, x + self.MARGIN, item_y, dark) i += 1 @@ -727,7 +740,7 @@ class SPCOutlookMap(EquirectMap): None: ( 20/255.0, 20/255.0, 20/255.0), } - def __init__(self): + def __init__(self, dark: bool=False): super().__init__(*MAP_SCREEN_DIMENSIONS, MAP_BOUNDS) self.hatched_surface = cairo.RecordingSurface(cairo.CONTENT_COLOR_ALPHA, @@ -739,6 +752,8 @@ class SPCOutlookMap(EquirectMap): cr.line_to(4, 4) cr.stroke() + self.dark = dark + def draw_legend(self, cr: cairo.Context, kind: SPCOutlookType): @@ -772,7 +787,7 @@ class SPCOutlookMap(EquirectMap): x = self.width - 3 * self.MARGIN - size[0] y = self.height - 6 * self.MARGIN - size[1] - legend.draw(cr, x, y) + legend.draw(cr, x, y, self.dark) def draw_logo(self, cr: cairo.Context, path: str): cr.save() @@ -808,6 +823,11 @@ class SPCOutlookMap(EquirectMap): x = self.width - extents.width - 48 y = self.height - extents.height - 16 + if self.dark: + cr.set_source_rgb(1, 1, 1) + else: + cr.set_source_rgb(0, 0, 0) + cr.move_to(x, y) cr.show_text(text) @@ -826,11 +846,19 @@ class SPCOutlookMap(EquirectMap): x = self.width - extents.width - 32 y = 8 + extents.height - cr.set_source_rgba(1, 1, 1, 0.8) + if self.dark: + cr.set_source_rgba(0, 0, 0, 0.2) + else: + cr.set_source_rgba(1, 1, 1, 0.8) + cr.rectangle(x - 4, y - 3, extents.width + 8, extents.height + 8) cr.fill() - cr.set_source_rgb(0, 0, 0) + if self.dark: + cr.set_source_rgb(1, 1, 1) + else: + cr.set_source_rgb(0, 0, 0) + cr.move_to(x, y + extents.height) cr.show_text(text)