From: Plom Heller Date: Fri, 10 Apr 2026 03:30:09 +0000 (+0200) Subject: Refactor line drawing. X-Git-Url: https://plomlompom.com/repos/booking/%22https:/validator.w3.org/%7B%7Bprefix%7D%7D/%7B%7Bdb.prefix%7D%7D/todo?a=commitdiff_plain;p=bookmaker Refactor line drawing. --- diff --git a/bookmaker.py b/bookmaker.py index 7b45832..92e7a38 100755 --- a/bookmaker.py +++ b/bookmaker.py @@ -159,6 +159,25 @@ class Page: c.save() self._pypdf.merge_page(PdfReader(packet).pages[0]) + def draw_orth_lines( + self, + lines: tuple[tuple[bool, float], ...], + rgb_color: tuple[float, float, float] = (0.0, 0.0, 0.0), + line_width: float = 2.0, + ) -> None: + 'Draw horizontal or vertical lines.' + min_x, min_y, max_x, max_y = self._pypdf.mediabox + full_lines = [] + for is_horizontal, position in lines: + if is_horizontal: + x0, x1 = min_x, max_x + y0 = y1 = position + else: + y0, y1 = min_y, max_y + x0 = x1 = position + full_lines += [(x0, y0, x1, y1)] + self.draw_lines(full_lines, rgb_color, line_width) + def draw_borders( self, rgb_color: tuple[float, float, float] = (0.0, 0.0, 0.0), @@ -166,12 +185,10 @@ class Page: ) -> None: 'Draw border lines around mediabox.' min_x, min_y, max_x, max_y = self._pypdf.mediabox - self.draw_lines(((min_x, min_y, min_x, max_y), # left - (min_x, min_y, max_x, min_y), # bottom - (max_x, min_y, max_x, max_y), # right - (min_x, max_y, max_x, max_y)), # top - rgb_color, - line_width) + self.draw_orth_lines( + ((False, min_x), (True, min_y), (False, max_x), (True, max_y)), + rgb_color, + line_width) class PageCrop: @@ -721,12 +738,9 @@ def ornate_nup4( 'Apply nup4 line guides onto new_page.' if arg_analyze: new_page.draw_borders((0.5, 1.0, 1.0)) - new_page.draw_lines( - ((0, new_page.box['top']/2, - new_page.box['right'], new_page.box['top']/2), - (new_page.box['right']/2, new_page.box['top'], - new_page.box['right']/2, new_page.box['bottom'])), - line_width=0.1) + new_page.draw_orth_lines(((True, new_page.box['top']/2), + (False, new_page.box['right']/2)), + line_width=0.1) printable_offset_x = nup4_geometry.margin printable_offset_y = nup4_geometry.margin * A4_HEIGHT / A4_WIDTH new_page.scale(nup4_geometry.shrink_for_margin) @@ -736,10 +750,9 @@ def ornate_nup4( x_left_spine_limit = A4_WIDTH/2 * nup4_geometry.shrink_for_spine x_right_spine_limit = A4_WIDTH - x_left_spine_limit if arg_analyze: - new_page.draw_lines( - ((x_left_spine_limit, A4_HEIGHT, x_left_spine_limit, 0), - (x_right_spine_limit, A4_HEIGHT, x_right_spine_limit, 0)), - line_width=0.1, rgb_color=(1.0, 0.5, 1.0)) + new_page.draw_orth_lines(((False, x_left_spine_limit,), + (False, x_right_spine_limit)), + line_width=0.1, rgb_color=(1.0, 0.5, 1.0)) if is_front_page: draw_cut(new_page, x_left_spine_limit, 1) draw_cut(new_page, x_right_spine_limit, -1)