Fixes rotated image
[librarian.git] / src / librarian / covers / widgets / title.py
index a5c6522..b9dc8cb 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Librarian, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Wolne Lektury. See NOTICE for more information.
+#
 import PIL.ImageFont
 from librarian import get_resource
 from librarian.cover import Metric
@@ -10,35 +13,29 @@ class TitleBox(Widget):
     leading = 176  # 50pt
     tracking = 2.385
 
-    def __init__(self, cover, width, height, lines, force=False):
+    def __init__(self, cover, width, height, lines, scale=1):
         self.width = width
         self.height = height
         self.lines = lines
-        self.force = force
-        self.m = Metric(self, cover.m._scale)
+        self.m = Metric(self, cover.m._scale * scale)
         super().__init__(cover)
 
     def setup(self):
-        m = self.m
-        while True:
-            try:
-                self.build_box()
-            except:
-                if self.force:
-                    self.m = Metric(self, self.m._scale * .99)
-                    print('lower to', self.m.font_size)
-                else:
-                    raise
-            else:
-                break
-
-    def build_box(self):
         title_font = PIL.ImageFont.truetype(
             get_resource('fonts/SourceSans3VF-Roman.ttf'),
             self.m.font_size,
-            layout_engine=PIL.ImageFont.LAYOUT_BASIC
+            layout_engine=PIL.ImageFont.Layout.BASIC
         )
         title_font.set_variation_by_axes([800])
+        title_font_2 = PIL.ImageFont.truetype(
+            get_resource('fonts/OpenSans-VariableFont_wdth,wght.ttf'),
+            self.m.font_size,
+            layout_engine=PIL.ImageFont.Layout.BASIC
+        )
+        title_font_2.set_variation_by_axes([700, 700])
+        font_fallbacks = {
+            ('\u0590', '\u05FF'): title_font_2,
+        }
 
         lines = self.lines or (int(self.height * (176/200) / self.m.leading) - 0)
         
@@ -50,7 +47,8 @@ class TitleBox(Widget):
             lines,
             self.m.leading,
             self.m.tracking,
-            .5, .5
+            .5, .5,
+            font_fallbacks=font_fallbacks
         )
         self.margin_top = self.tb.margin_top