Центрирование текста по прямоугольнику не работает

у меня есть sf::RectangleShape inputFieldRect_ и sf::Text inputFieldText_ и я хочу центрировать текст по прямоугольнику, потому что размеры sf :: Text будут различаться, потому что его строка будет иметь разную длину.

После настройки inputFieldText_Строка с inputFieldText_.setString(s); (s это std::string что пользователь вводит) Я настраиваю его положение так, чтобы оно все еще находилось в центре inputFieldRect_,

Это мой код для этого, но текст слишком много слева и немного слишком низко, поэтому не идеально отцентрирован:

sf::FloatRect rectBounds = inputFieldRect_.getGlobalBounds();
sf::FloatRect textBounds = inputFieldText_.getGlobalBounds();

inputFieldText_.setPosition(
rectBounds.left + (rectBounds.width / 2) - (textBounds.width / 2),
rectBounds.top + (rectBounds.height / 2) - (textBounds.height / 2)
);

Может кто-нибудь, пожалуйста, помогите мне? Я не вижу недостаток.

0

Решение

Если объем текста на выходе довольно мал, я предлагаю вам посмотреть, где находится точка рисования для текста: текст обычно рисуется из базовой линии текста (Y) и из логической начальной буквы X первого символа. , Логично, потому что это может быть гораздо правильнее, чем вы ожидаете. **

Если это не помогает, может быть полезно выяснить, следует ли вам использовать LocalBounds: иногда в инфраструктуре разница не так проста, как кажется.

** Разница называется левый подшипник (и да, есть и правый подшипник). Смотрите примечания на этой странице: http://msdn.microsoft.com/en-us/library/system.windows.media.glyphrundrawing(v=vs.110).aspx

1

Другие решения