у меня есть 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)
);
Может кто-нибудь, пожалуйста, помогите мне? Я не вижу недостаток.
Если объем текста на выходе довольно мал, я предлагаю вам посмотреть, где находится точка рисования для текста: текст обычно рисуется из базовой линии текста (Y) и из логической начальной буквы X первого символа. , Логично, потому что это может быть гораздо правильнее, чем вы ожидаете. **
Если это не помогает, может быть полезно выяснить, следует ли вам использовать LocalBounds: иногда в инфраструктуре разница не так проста, как кажется.
** Разница называется левый подшипник (и да, есть и правый подшипник). Смотрите примечания на этой странице: http://msdn.microsoft.com/en-us/library/system.windows.media.glyphrundrawing(v=vs.110).aspx