mirror of
https://github.com/3b1b/manim.git
synced 2025-07-27 20:12:24 +08:00
Update some Text Mobject changes
This commit is contained in:
@ -1,8 +1,8 @@
|
|||||||
import cairo
|
|
||||||
import copy
|
|
||||||
import hashlib
|
|
||||||
import re
|
import re
|
||||||
import os
|
import os
|
||||||
|
import copy
|
||||||
|
import hashlib
|
||||||
|
import cairo
|
||||||
import manimlib.constants as consts
|
import manimlib.constants as consts
|
||||||
from manimlib.constants import *
|
from manimlib.constants import *
|
||||||
from manimlib.mobject.svg.svg_mobject import SVGMobject
|
from manimlib.mobject.svg.svg_mobject import SVGMobject
|
||||||
@ -21,10 +21,10 @@ class TextSetting(object):
|
|||||||
|
|
||||||
class Text(SVGMobject):
|
class Text(SVGMobject):
|
||||||
CONFIG = {
|
CONFIG = {
|
||||||
#Mobject
|
# Mobject
|
||||||
'color': WHITE,
|
'color': consts.WHITE,
|
||||||
'height': None,
|
'height': None,
|
||||||
#Text
|
# Text
|
||||||
'font': '',
|
'font': '',
|
||||||
'gradient': None,
|
'gradient': None,
|
||||||
'lsh': -1,
|
'lsh': -1,
|
||||||
@ -46,7 +46,7 @@ class Text(SVGMobject):
|
|||||||
|
|
||||||
file_name = self.text2svg()
|
file_name = self.text2svg()
|
||||||
SVGMobject.__init__(self, file_name, **config)
|
SVGMobject.__init__(self, file_name, **config)
|
||||||
|
|
||||||
if self.t2c:
|
if self.t2c:
|
||||||
self.set_color_by_t2c()
|
self.set_color_by_t2c()
|
||||||
if self.gradient:
|
if self.gradient:
|
||||||
@ -54,9 +54,9 @@ class Text(SVGMobject):
|
|||||||
if self.t2g:
|
if self.t2g:
|
||||||
self.set_color_by_t2g()
|
self.set_color_by_t2g()
|
||||||
|
|
||||||
#anti-aliasing
|
# anti-aliasing
|
||||||
self.scale(0.1)
|
self.scale(0.1)
|
||||||
|
|
||||||
def find_indexes(self, word):
|
def find_indexes(self, word):
|
||||||
m = re.match(r'\[([0-9\-]{0,}):([0-9\-]{0,})\]', word)
|
m = re.match(r'\[([0-9\-]{0,}):([0-9\-]{0,})\]', word)
|
||||||
if m:
|
if m:
|
||||||
@ -133,10 +133,10 @@ class Text(SVGMobject):
|
|||||||
for start, end in self.find_indexes(word):
|
for start, end in self.find_indexes(word):
|
||||||
fsw[i] = x
|
fsw[i] = x
|
||||||
settings.append(TextSetting(start, end, *fsw))
|
settings.append(TextSetting(start, end, *fsw))
|
||||||
|
|
||||||
#Set All text settings(default font slant weight)
|
# Set All text settings(default font slant weight)
|
||||||
fsw = [self.font, self.slant, self.weight]
|
fsw = [self.font, self.slant, self.weight]
|
||||||
settings.sort(key = lambda setting: setting.start)
|
settings.sort(key=lambda setting: setting.start)
|
||||||
temp_settings = settings.copy()
|
temp_settings = settings.copy()
|
||||||
start = 0
|
start = 0
|
||||||
for setting in settings:
|
for setting in settings:
|
||||||
@ -145,8 +145,8 @@ class Text(SVGMobject):
|
|||||||
start = setting.end
|
start = setting.end
|
||||||
if start != len(self.text):
|
if start != len(self.text):
|
||||||
temp_settings.append(TextSetting(start, len(self.text), *fsw))
|
temp_settings.append(TextSetting(start, len(self.text), *fsw))
|
||||||
settings = sorted(temp_settings, key = lambda setting: setting.start)
|
settings = sorted(temp_settings, key=lambda setting: setting.start)
|
||||||
|
|
||||||
if re.search(r'\n', self.text):
|
if re.search(r'\n', self.text):
|
||||||
line_num = 0
|
line_num = 0
|
||||||
for start, end in self.find_indexes('\n'):
|
for start, end in self.find_indexes('\n'):
|
||||||
@ -160,9 +160,9 @@ class Text(SVGMobject):
|
|||||||
new_setting.start = end
|
new_setting.start = end
|
||||||
new_setting.line_num = line_num
|
new_setting.line_num = line_num
|
||||||
settings.append(new_setting)
|
settings.append(new_setting)
|
||||||
settings.sort(key = lambda setting: setting.start)
|
settings.sort(key=lambda setting: setting.start)
|
||||||
break
|
break
|
||||||
|
|
||||||
for setting in settings:
|
for setting in settings:
|
||||||
if setting.line_num == -1:
|
if setting.line_num == -1:
|
||||||
setting.line_num = 0
|
setting.line_num = 0
|
||||||
@ -170,7 +170,7 @@ class Text(SVGMobject):
|
|||||||
return settings
|
return settings
|
||||||
|
|
||||||
def text2svg(self):
|
def text2svg(self):
|
||||||
#anti-aliasing
|
# anti-aliasing
|
||||||
size = self.size * 10
|
size = self.size * 10
|
||||||
lsh = self.lsh * 10
|
lsh = self.lsh * 10
|
||||||
|
|
||||||
@ -182,7 +182,7 @@ class Text(SVGMobject):
|
|||||||
file_name = os.path.join(dir_name, hash_name)+'.svg'
|
file_name = os.path.join(dir_name, hash_name)+'.svg'
|
||||||
if os.path.exists(file_name):
|
if os.path.exists(file_name):
|
||||||
return file_name
|
return file_name
|
||||||
|
|
||||||
surface = cairo.SVGSurface(file_name, 600, 400)
|
surface = cairo.SVGSurface(file_name, 600, 400)
|
||||||
context = cairo.Context(surface)
|
context = cairo.Context(surface)
|
||||||
context.set_font_size(size)
|
context.set_font_size(size)
|
||||||
@ -201,8 +201,8 @@ class Text(SVGMobject):
|
|||||||
if setting.line_num != last_line_num:
|
if setting.line_num != last_line_num:
|
||||||
offset_x = 0
|
offset_x = 0
|
||||||
last_line_num = setting.line_num
|
last_line_num = setting.line_num
|
||||||
context.move_to(START_X+offset_x, START_Y + lsh*setting.line_num)
|
context.move_to(START_X + offset_x, START_Y + lsh*setting.line_num)
|
||||||
context.show_text(text)
|
context.show_text(text)
|
||||||
offset_x += context.text_extents(text)[4]
|
offset_x += context.text_extents(text)[4]
|
||||||
|
|
||||||
return file_name
|
return file_name
|
||||||
|
Reference in New Issue
Block a user