[cairo] Another possible issue with Cairo / Pango
Kieran McCusker
kieran.mccusker at kwest.info
Fri Jan 4 09:09:35 PST 2008
Hi
I am using Cairo/Pango to produce graphs and what I do is measure text
elements before drawing to calculate graph sizes.
What I find is that if I use the size reported by Pango to draw the text
will sometimes wrap. To get around it I am having to use the following
code :-
def measure_text(text,width = @body_rect.width,alignment =
Pango::Layout::ALIGN_LEFT)
@layout.markup = text
@layout.alignment = alignment
@layout.width = width * Pango::SCALE
@layout.font_description =
Pango::FontDescription.new(@current_style.font_name)
@cr.update_pango_layout(@layout)
ink_rect, logical_rect = @layout.pixel_extents
height = logical_rect.height
extra = 0
if width > logical_rect.width
width = logical_rect.width
while true
@layout.width = (width+extra) * Pango::SCALE
@cr.update_pango_layout(@layout)
ink_rect, logical_rect = @layout.pixel_extents
break if height == logical_rect.height || extra > 20
RAILS_DEFAULT_LOGGER.warn("Need extra> #{width} #{extra} #{height}
#{logical_rect.height} #{text}")
extra += 1
end
end
Rectangle.new(logical_rect.width+extra,logical_rect.height)
end
Using 'Luxi Sans 9' with no scaling what I get (for example) is
Need extra> 77 0 30 45 Problems with neighbours
Need extra> 77 1 30 45 Problems with neighbours
Need extra> 77 2 30 45 Problems with neighbours
I am using fc7.x86_64 with cairo 1.4.10 and pango 1.16.4. If needed I
can write a full test program.
Many thanks
Kieran
P.s.
Behdad if you read this, have you had any time to look at the
overkerning issue (Bug 341481 – pangocairo kerning problem with
nonidentity scaling)
More information about the cairo
mailing list