Extract the symbol drawing logic into a helper class.
This commit is contained in:
@@ -44,6 +44,25 @@ class Images ():
|
|||||||
def __setitem__ (self, key, value):
|
def __setitem__ (self, key, value):
|
||||||
self.images[key] = value
|
self.images[key] = value
|
||||||
|
|
||||||
|
class SymbolDrawer ():
|
||||||
|
def __init__ (self, size, direction="ltr"):
|
||||||
|
self.direction = direction
|
||||||
|
self.image = Image.new("RGBA", size)
|
||||||
|
self.symbol_pos = (0, 0)
|
||||||
|
|
||||||
|
def add_symbol (self, symbol):
|
||||||
|
if isinstance(symbol, str):
|
||||||
|
symbol = symbols[symbol]
|
||||||
|
|
||||||
|
self.image.paste(symbol, self.symbol_pos)
|
||||||
|
if self.direction == "ltr":
|
||||||
|
self.symbol_pos = (self.symbol_pos[0] + symbol.width, self.symbol_pos[1])
|
||||||
|
elif self.direction == "ttb":
|
||||||
|
self.symbol_pos = (self.symbol_pos[0], self.symbol_pos[1] + symbol.height)
|
||||||
|
|
||||||
|
def draw_onto (self, target_image, dest):
|
||||||
|
target_image.alpha_composite(self.image, dest)
|
||||||
|
|
||||||
images = Images(IMAGES_DIRECTORY)
|
images = Images(IMAGES_DIRECTORY)
|
||||||
symbols = Images(SYMBOLS_DIRECTORY)
|
symbols = Images(SYMBOLS_DIRECTORY)
|
||||||
|
|
||||||
@@ -118,20 +137,15 @@ def draw_symbols (image, draw, field):
|
|||||||
height = field.get("height", image.height)
|
height = field.get("height", image.height)
|
||||||
direction = field.get("direction", "ltr")
|
direction = field.get("direction", "ltr")
|
||||||
|
|
||||||
symbols_image = Image.new(image.mode, (width, height))
|
symbol_drawer = SymbolDrawer((width, height), direction)
|
||||||
|
|
||||||
symbol_pos = (0, 0)
|
symbol_pos = (0, 0)
|
||||||
for symbol_name in symbol_text.split(" "):
|
for symbol_name in symbol_text.split(" "):
|
||||||
if symbol_name:
|
if symbol_name:
|
||||||
symbol = symbols[symbol_name]
|
symbol = symbols[symbol_name]
|
||||||
symbols_image.paste(symbol, symbol_pos)
|
symbol_drawer.add_symbol(symbol)
|
||||||
|
|
||||||
if direction == "ltr":
|
|
||||||
symbol_pos = (symbol_pos[0] + symbol.width, symbol_pos[1])
|
|
||||||
elif direction == "ttb":
|
|
||||||
symbol_pos = (symbol_pos[0], symbol_pos[1] + symbol.height)
|
|
||||||
|
|
||||||
image.alpha_composite(symbols_image, (field.get("x"), field.get("y")))
|
symbol_drawer.draw_onto(image, (field.get("x"), field.get("y")))
|
||||||
|
|
||||||
def rescale_text_for_sizes (*args):
|
def rescale_text_for_sizes (*args):
|
||||||
def scaler (value):
|
def scaler (value):
|
||||||
|
|||||||
Reference in New Issue
Block a user