From e73d01e61f2075c84dcbcef4f57d1a8b4583eb79 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Thu, 24 Sep 2020 22:59:44 +0200 Subject: [PATCH 1/5] set canvas size based on text length --- manim/mobject/svg/text_mobject.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/mobject/svg/text_mobject.py b/manim/mobject/svg/text_mobject.py index 6116fe3e90..12efd4036b 100644 --- a/manim/mobject/svg/text_mobject.py +++ b/manim/mobject/svg/text_mobject.py @@ -297,7 +297,7 @@ def text2svg(self): file_name = os.path.join(dir_name, hash_name) + ".svg" if os.path.exists(file_name): return file_name - surface = cairo.SVGSurface(file_name, 600, 400) + surface = cairo.SVGSurface(file_name, len(self.text) * size, 400) context = cairo.Context(surface) context.set_font_size(size) context.move_to(START_X, START_Y) From 650d1528fbabf9e326433e7e702e6233c6f9afeb Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Thu, 24 Sep 2020 23:01:29 +0200 Subject: [PATCH 2/5] add test --- tests/test_text.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 tests/test_text.py diff --git a/tests/test_text.py b/tests/test_text.py new file mode 100644 index 0000000000..ea227c58aa --- /dev/null +++ b/tests/test_text.py @@ -0,0 +1,9 @@ +from manim import Text + + +def test_long_string(): + """Check that `#469 `_ + is resolved.""" + + t = Text("a" * 150, font="Arial") + assert len(t.text) == len(t.submobjects) From 27dae43800cba83b89c4704a5db9f40cf2850a8d Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Mon, 28 Sep 2020 14:49:59 +0200 Subject: [PATCH 3/5] warning for very large font sizes --- manim/mobject/svg/text_mobject.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/manim/mobject/svg/text_mobject.py b/manim/mobject/svg/text_mobject.py index 12efd4036b..a18a38fecc 100644 --- a/manim/mobject/svg/text_mobject.py +++ b/manim/mobject/svg/text_mobject.py @@ -115,6 +115,11 @@ def __init__(self, text, **config): self.line_spacing = self.size + self.size * 0.3 else: self.line_spacing = self.size + self.size * self.line_spacing + if self.size > 800: + logger.warning( + "Using a font size larger than 800 can lead to render problems." + " See https://github.com/ManimCommunity/manim/pull/476 for details." + ) file_name = self.text2svg() self.remove_last_M(file_name) SVGMobject.__init__(self, file_name, **config) From 92435269e3d265243e10840fc5667ccadd10079a Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sun, 25 Oct 2020 20:39:05 +0100 Subject: [PATCH 4/5] apply same fix to PangoText --- manim/mobject/svg/text_mobject.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/manim/mobject/svg/text_mobject.py b/manim/mobject/svg/text_mobject.py index 5145bd3ca0..5de7b22f36 100644 --- a/manim/mobject/svg/text_mobject.py +++ b/manim/mobject/svg/text_mobject.py @@ -638,6 +638,11 @@ def __init__(self, text: str, **config): # pylint: disable=redefined-outer-name self.line_spacing = self.size + self.size * 0.3 else: self.line_spacing = self.size + self.size * self.line_spacing + if self.size > 800: + logger.warning( + "Using a font size larger than 800 can lead to render problems." + " See https://github.com/ManimCommunity/manim/pull/476 for details." + ) file_name = self.text2svg() self.remove_last_M(file_name) SVGMobject.__init__(self, file_name, **config) @@ -845,7 +850,7 @@ def text2svg(self): file_name = os.path.join(dir_name, hash_name) + ".svg" if os.path.exists(file_name): return file_name - surface = cairocffi.SVGSurface(file_name, 600, 400) + surface = cairocffi.SVGSurface(file_name, len(self.text) * size, 400) context = cairocffi.Context(surface) context.move_to(START_X, START_Y) settings = self.text2settings() From 3339e9545b0bd6c06c20211e2986b7bd3b743d40 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sun, 25 Oct 2020 21:19:29 +0100 Subject: [PATCH 5/5] RTL text seems to require more space per character; add a corresponding factor for canvas width --- manim/mobject/svg/text_mobject.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manim/mobject/svg/text_mobject.py b/manim/mobject/svg/text_mobject.py index 5de7b22f36..493a744e8c 100644 --- a/manim/mobject/svg/text_mobject.py +++ b/manim/mobject/svg/text_mobject.py @@ -323,7 +323,7 @@ def text2svg(self): file_name = os.path.join(dir_name, hash_name) + ".svg" if os.path.exists(file_name): return file_name - surface = cairo.SVGSurface(file_name, len(self.text) * size, 400) + surface = cairo.SVGSurface(file_name, 4 * len(self.text) * size, 400) context = cairo.Context(surface) context.set_font_size(size) context.move_to(START_X, START_Y) @@ -850,7 +850,7 @@ def text2svg(self): file_name = os.path.join(dir_name, hash_name) + ".svg" if os.path.exists(file_name): return file_name - surface = cairocffi.SVGSurface(file_name, len(self.text) * size, 400) + surface = cairocffi.SVGSurface(file_name, 4 * len(self.text) * size, 400) context = cairocffi.Context(surface) context.move_to(START_X, START_Y) settings = self.text2settings()