Пользовательский текст TextField AS3 рисуется вне его textWidth - PullRequest
0 голосов
/ 03 мая 2018

Так что это немного сложно объяснить. У меня есть собственный класс Text, который автоматически изменяет размеры и устанавливает ширину текста при изменении его значения. Затем я беру этот текст и рисую его на растровом изображении, чтобы увеличить его, чтобы текст выглядел пиксельно.

У меня есть свойство с именем maxWidth, которое позволяет вам ограничить ширину текста, если вы хотите, чтобы он поддерживал определенную ширину. По умолчанию maxWidth - это ширина родительского текста, чтобы он не обрезался или неожиданно не расширял границы родительского текста.

Так что, к сожалению, когда я рисую текст, он иногда обрезается с правой стороны. Теперь я проверил все значения, и width и textWidth отображаются как в пределах их значений maxWidth, но когда я сам просматриваю скриншоты, я вижу, что текст на самом деле примерно на 3 пикселя шире, чем должен будет.

Вот изображение, чтобы лучше объяснить, что я имею в виду:

Я повернул границы, чтобы вы могли легко понять, что я имею в виду. Слово «и» в первой строке выводится за пределы ее границы. Вот строка кода, которая обрабатывает изменение размера текста при изменении его границ.

override protected function checkResize(value:String):void {
    var bufferWidth:uint = Math.floor(Number(defaultTextFormat.size) / bufferDivisor) + bufferMin;
    var maxWidth:Number = this.maxWidth;
    x = y = 0;

    if (parent is Stage) {
        var stageParent:Stage = Stage(parent);
        super.width = stageParent.stageWidth;
        super.height = stageParent.stageHeight;

        if (maxWidth == 0) maxWidth = stageParent.stageWidth;
    }
    else {
        super.width = parent.width;
        super.height = parent.height;

        if (maxWidth == 0) maxWidth = parent.width;
    }

    maxWidth = maxWidth / scale;
    text = value;

    if (textWidth + bufferWidth <= maxWidth) super.width = textWidth + bufferWidth;
    else super.width = maxWidth;

    super.height = textHeight + 4;

    if (textSnapshot) updateSnapshot();
    if (alignRelation) Align.alignTo(textSprite, alignRelation, alignDirection, alignXOffset, alignYOffest);
}

И для этого текста, в частности, значение width указывает на 512, что является правильным, поскольку это maxWidth. Однако, если вы заметите верхнюю строку в тексте, она выходит за границы ширины 512, она фактически проходит до 515, даже если говорит, что ее width равно 512. Еще более странным является textWidth состояния, что это 510,4 даже хотя первая строка выходит далеко за рамки этой суммы. Я просто хочу знать, делаю ли я что-то неправильно или есть способ получить истинное значение textWidth.

...