@@ -294,17 +294,17 @@ def interpolate_submobject(
294
294
295
295
296
296
class Write (DrawBorderThenFill ):
297
- """Simulate hand-writing a text-based mobject, such as :class:`~.Text`,
298
- :class:`~.MarkupText`, :class:`~.Tex`, :class:`~.MathTex`,
299
- or :class:`~.VMobject` in general.
297
+ """Simulate hand-writing a text-based mobject, such as :class:`~.Text`
298
+ and :class:`~.Tex`, or simulate hand-drawing a :class:`~.VMobject`.
300
299
301
300
Parameters
302
301
----------
303
302
vmobject
304
303
The VMobject to animate.
305
304
stroke_width
306
- Stroke width for drawing. If not given, for SVG-based mobjects (such as :class:`Text`, :class:`MarkupText`, or :class:`MathTex`)
307
- the stroke width is scaled relative to the font size. Others use 2.0.
305
+ Stroke width for drawing. If not provided, it is scaled based on font size
306
+ for text-based mobjects when the font is very small or very large;
307
+ otherwise defaults to 2.0.
308
308
rate_func
309
309
The function defining the animation progress.
310
310
reverse
@@ -386,10 +386,14 @@ def _adjust_stroke_width_for_text(
386
386
) -> float :
387
387
if stroke_width is not None :
388
388
return stroke_width
389
- if not isinstance (vmobject , SVGMobject ):
390
- return 2.0 # default in DrawBorderThenFill
389
+ if not isinstance (vmobject , SVGMobject ) or vmobject . height == 0 :
390
+ return 2
391
391
font_size = getattr (vmobject , "font_size" , DEFAULT_FONT_SIZE )
392
- return (font_size / DEFAULT_FONT_SIZE ) * DEFAULT_STROKE_WIDTH * scale_factor
392
+ if font_size < 20 or font_size > 6 * DEFAULT_FONT_SIZE :
393
+ # adjust stroke_width if font_size is too small or too big
394
+ return (font_size / DEFAULT_FONT_SIZE ) * DEFAULT_STROKE_WIDTH * scale_factor
395
+ else :
396
+ return 2
393
397
394
398
def reverse_submobjects (self ) -> None :
395
399
self .mobject .invert (recursive = True )
0 commit comments