An idea is to implement Negative Spacing values, so we can make a text exceed the TextBox limits, but showing only whats inside it. It can turn some text animations and other exhibition styles easier.
Example:
text = TextBox('''
▒███████▒ ██▒ █▓ ▒█████ ██▀███ ██ ▄█▀▓██ ██▓
▒ ▒ ▒ ▄▀░▓██░ █▒▒██▒ ██▒▓██ ▒ ██▒ ██▄█▒ ▒██ ██▒
░ ▒ ▄▀▒░ ▓██ █▒░▒██░ ██▒▓██ ░▄█ ▒▓███▄░ ▒██ ██░
▄▀▒ ░ ▒██ █░░▒██ ██░▒██▀▀█▄ ▓██ █▄ ░ ▐██▓░
▒███████▒ ▒▀█░ ░ ████▓▒░░██▓ ▒██▒▒██▒ █▄ ░ ██▒▓░
░▒▒ ▓░▒░▒ ░ ▐░ ░ ▒░▒░▒░ ░ ▒▓ ░▒▓░▒ ▒▒ ▓▒ ██▒▒▒
░░▒ ▒ ░ ▒ ░ ░░ ░ ▒ ▒░ ░▒ ░ ▒░░ ░▒ ▒░ ▓██ ░▒░
░ ░ ░ ░ ░ ░░ ░ ░ ░ ▒ ░░ ░ ░ ░░ ░ ▒ ▒ ░░
░ ░ ░ ░ ░ ░ ░ ░ ░ ░
░ ░ ░ ░
''')
text.spacing.top = -2
text.spacing.left = -3 # Haven't implemented a function for this yet, but if negative numbers were allowed, changing Spacing vars directly wouldn't have any problem :^)
print(str(text))
Output:
▄▀▒░ ▓██ █▒░▒██░ ██▒▓██ ░▄█ ▒▓███▄░ ▒██ ██░
▀▒ ░ ▒██ █░░▒██ ██░▒██▀▀█▄ ▓██ █▄ ░ ▐██▓░
█████▒ ▒▀█░ ░ ████▓▒░░██▓ ▒██▒▒██▒ █▄ ░ ██▒▓░
▓░▒░▒ ░ ▐░ ░ ▒░▒░▒░ ░ ▒▓ ░▒▓░▒ ▒▒ ▓▒ ██▒▒▒
▒ ░ ▒ ░ ░░ ░ ▒ ▒░ ░▒ ░ ▒░░ ░▒ ▒░ ▓██ ░▒░
░ ░ ░ ░░ ░ ░ ░ ▒ ░░ ░ ░ ░░ ░ ▒ ▒ ░░
░ ░ ░ ░ ░ ░ ░ ░ ░
░ ░ ░
as the str(text) is a product from TextBox text, the string inside the TextBox is not affected, so we can change the spacing again:
text.spacing.top = 0
text.spacing.bottom = -4
text.spacing.left = 3
text.spacing.right = -6
print(str(text))
Output:
▒███████▒ ██▒ █▓ ▒█████ ██▀███ ██ ▄█▀▓██
▒ ▒ ▒ ▄▀░▓██░ █▒▒██▒ ██▒▓██ ▒ ██▒ ██▄█▒ ▒█
░ ▒ ▄▀▒░ ▓██ █▒░▒██░ ██▒▓██ ░▄█ ▒▓███▄░ ▒
▄▀▒ ░ ▒██ █░░▒██ ██░▒██▀▀█▄ ▓██ █▄ ░
▒███████▒ ▒▀█░ ░ ████▓▒░░██▓ ▒██▒▒██▒ █▄ ░
░▒▒ ▓░▒░▒ ░ ▐░ ░ ▒░▒░▒░ ░ ▒▓ ░▒▓░▒ ▒▒ ▓▒
So in a Left-Aligned TextBox (default), the difference between a negative bottom margin and a height limit is that the height limit would put a Limit Message (default: "[...]") into the end, but just if it exceeds the height, a negative bottom in a non-limited box is relative its end.
text.spacing.bottom = 0
text.height = 6
print(str(text))
Output:
▒███████▒ ██▒ █▓ ▒█████ ██▀███ ██ ▄█▀▓██
▒ ▒ ▒ ▄▀░▓██░ █▒▒██▒ ██▒▓██ ▒ ██▒ ██▄█▒ ▒█
░ ▒ ▄▀▒░ ▓██ █▒░▒██░ ██▒▓██ ░▄█ ▒▓███▄░ ▒
▄▀▒ ░ ▒██ █░░▒██ ██░▒██▀▀█▄ ▓██ █▄ ░
▒███████▒ ▒▀█░ ░ ████▓▒░░██▓ ▒██▒▒██▒ █▄ ░
░▒▒ ▓░▒░▒ ░ ▐░ ░ ▒░▒░▒░ ░ ▒▓ ░▒▓░▒ ▒▒ [...]
And the difference between a negative right margin and a width limit is that when the width exceeds, it breaks the line, so we would have a sadly broken ASCII art:
text.SetMargin(0) # Set all margins 0
text.width = 46
print(str(text))
Output:
▒███████▒ ██▒ █▓ ▒█████ ██▀███ ██ ▄█▀▓██
██▓
▒ ▒ ▒ ▄▀░▓██░ █▒▒██▒ ██▒▓██ ▒ ██▒ ██▄█▒ ▒█
█ ██▒
░ ▒ ▄▀▒░ ▓██ █▒░▒██░ ██▒▓██ ░▄█ ▒▓███▄░ ▒
██ ██░ [...]
Must consider that positioning is not implemented, so we can't put aside other TextBox yet. :/