Only write translators on cover if they fit.
authorRadek Czajka <rczajka@rczajka.pl>
Fri, 15 Jul 2022 11:27:27 +0000 (13:27 +0200)
committerRadek Czajka <rczajka@rczajka.pl>
Fri, 15 Jul 2022 11:27:27 +0000 (13:27 +0200)
src/librarian/covers/marquise.py
src/librarian/covers/widgets/author.py

index d1f832c..fb84a79 100644 (file)
@@ -17,6 +17,8 @@ class MarquiseCover(Cover):
     height = 2970
     margin = 100
     logo_h = 177
+    author_width = 1300
+
     title_box_top = 262
 
     color_schemes = [
@@ -138,8 +140,8 @@ class MarquiseCover(Cover):
             marquise.title_box_position[1],
         )
 
-        AuthorBox(self, self.m.width - self.m.margin).apply(
-            img, 0, self.m.margin
+        AuthorBox(self, self.m.author_width).apply(
+            img, self.m.width - self.m.margin - self.m.author_width, self.m.margin
         )
         WLLogo(self).apply(img, self.m.margin, self.m.margin, None, self.m.logo_h)
 
index 786204c..162215f 100644 (file)
@@ -1,7 +1,7 @@
 import PIL.ImageFont
 from librarian import get_resource
 from librarian.cover import Metric
-from ..utils.textbox import TextBox, split_words
+from ..utils.textbox import TextBox, DoesNotFit, split_words
 from .base import Widget
 
 
@@ -31,36 +31,43 @@ class AuthorBox(Widget):
 
         authors = [a.readable() for a in self.cover.book_info.authors]
         translators = [a.readable() for a in self.cover.book_info.translators]
+
+        authors_written = False
         if authors and translators:
             author_str = ', '.join(authors)
             translator_str = '(tłum. ' + ', '.join(translators) + ')'
             # just print
             parts = [author_str, translator_str]
 
-            self.textboxes = [
-                TextBox(
-                    self.width,
-                    self.m.leading * 2,
-                    [author_str],
-                    author_font,
-                    1,
-                    self.m.leading,
-                    0,
-                    1, 0
-                ),
-                TextBox(
-                    self.width,
-                    self.m.leading * 2,
-                    [translator_str],
-                    translator_font,
-                    1,
-                    self.m.leading,
-                    0,
-                    1, 0
-                )
-            ]
+            try:
+                self.textboxes = [
+                    TextBox(
+                        self.width,
+                        self.m.leading * 2,
+                        [author_str],
+                        author_font,
+                        1,
+                        self.m.leading,
+                        0,
+                        1, 0
+                    ),
+                    TextBox(
+                        self.width,
+                        self.m.leading * 2,
+                        [translator_str],
+                        translator_font,
+                        1,
+                        self.m.leading,
+                        0,
+                        1, 0
+                    )
+                ]
+            except DoesNotFit:
+                pass
+            else:
+                authors_written = True
 
-        else:
+        if not authors_written:
             assert authors
             if len(authors) == 2:
                 parts = authors