Get the real size of a Label

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By MarcPhi

Hello is there a way to get the real size of a label, when the text is clipping above the normal bounderies or is there a ways to check if the text clips)?

Hello, I do not understand very well what you want to do, but on the label you can activate the Autowrap option, so that the text is not cut.

Aquiles | 2019-10-29 17:14

hey thats exactly what i did, but i want to know when the text uses autowrap so i can change the text size accordingly

MarcPhi | 2019-10-29 18:05

a slightly crude solution, it would be to see how many characters enter the specific width and then compare with $Label.get_total_character_count() that will return you a number of characters.

Aquiles | 2019-10-29 22:13

:bust_in_silhouette: Reply From: Adam_S

You could use the resized() signal, and get the size of the Label with $Label.rect_size. The properties “Clip text” and “Autowrap” have to be off for this to work.


Since you want to have autowrap on, you need to check the size (in pixels) of your longest word:

func check_word_size():
    var font = $Label.get_font("font")
    var words = $Label.text.split(" ",false)
    var longest_word = ""

    for i in words:
        if font.get_string_size(i).x > font.get_string_size(longest_word).x:
            longest_word = i

    if font.get_string_size(longest_word).x > $Label.rect_size.x:

the problem with that solution is that i would need to split the text in lines on my own

i would like to have autowrap on but:
Imgur: The magic of the Internet

MarcPhi | 2019-10-30 18:47

Just updated my answer.

Adam_S | 2019-10-31 04:40

:bust_in_silhouette: Reply From: snakefoot
theme.default_font.get_string_size( $Label.text )

will give you the size of the text as a Vector2.

$Label.autowrap = true
$Label.rect_size.x = 1
while( $Label.get_line_count() > 1 ):
 $Label.rect_size.x += 1

will resize the Label until the text fits in one line.

You could use a similar method to shrink the font size, but this very easily leads to font size zero if you don’t know how long your String could potentially be.