I'm trying to use Rubygame to determine each of a string's character widths as a percentage of the string's total width...
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]}"
The program's output for the string above is...
Size: 642 Total: 650 Difference: 8
...And varies depending on the length and content of the string.
The result is close, but... Does anyone know why there's a difference of 8 between the sum of the character widths and the string's width?
Any help would be greatly appreciated...
Cheers...
Davide
PS I'm also open to suggestions about other/better ways of doing this.
Yes: because a good TrueType font, like any good font, will be kerned by the layout engine. http://en.wikipedia.org/wiki/Kerning
When doing layout with variable width fonts - which you want - always use the full string width. Per-character numbers are meaningless. (...and, really, the "right" way to do this is to use something that does layout for you. Pango is a project that does that; go count the lines of code, and consider if you really want to write that yourself.)