Rubygame :: TTF - разница между шириной строки и шириной всех ее символов - PullRequest
1 голос
/ 31 января 2012

Я пытаюсь использовать Rubygame для определения каждой ширины символа строки в процентах от общей ширины строки ...

require "rubygems"
require "rubygame"

include Rubygame

TTF.setup

$font = TTF.new "/Library/Fonts/Times New Roman.ttf", 40

total = 0

"Hello TrueType text! My name is Davide".each_char do |c|
  size = $font.size_text c

  #puts "Char: #{c} - #{size[0]}/#{total}"

  total = total + size[0]
end

puts "Size: #{$font.size_text('Hello TrueType text! My name is Davide')[0]}"
puts "Total: #{total}"
puts "Difference: #{total - $font.size_text('Hello TrueType text! My name is Davide')[0]}"

Вывод программы для приведенной выше строки: ...

Size: 642
Total: 650
Difference: 8

... И изменяется в зависимости от длины и содержания строки.

Результат близок, но ... Кто-нибудь знает, почему между суммой есть разница в 8ширины символов и ширины строки?

Любая помощь будет принята с благодарностью ...

Приветствия ...

Davide

PS I 'Я также открыт для предложений о других / лучших способах сделать это.

1 Ответ

1 голос
/ 31 января 2012

Результат близок, но ... Кто-нибудь знает, почему существует разница в 8 между суммой ширины символов и ширины строки?

Да: потому что хороший шрифт TrueType, как и любой хороший шрифт, будет обработан механизмом макета. http://en.wikipedia.org/wiki/Kerning

Когда вы делаете макет со шрифтами переменной ширины - которые вы хотите - всегда используйте полную ширину строки. Числа за символ не имеют смысла. (... и, действительно, «правильный» способ сделать это - использовать что-то, что делает макет для вас. Pango - это проект, который делает это; посчитайте строки кода и подумайте, Вы действительно хотите написать это сами.)

...