Embed wrapping fix
Draw call locations now calculated after all string replacements. Does this fix the center and right align embed? Quick testing could not find any errors, but more thorough testing needed.dev
parent
30df4cd115
commit
7cc75b24a2
|
|
@ -105,6 +105,7 @@ module Squib
|
||||||
layout.markup = str
|
layout.markup = str
|
||||||
clean_str = layout.text
|
clean_str = layout.text
|
||||||
draw_calls = []
|
draw_calls = []
|
||||||
|
searches = []
|
||||||
while (key = next_embed(embed.rules.keys, clean_str)) != nil
|
while (key = next_embed(embed.rules.keys, clean_str)) != nil
|
||||||
rule = embed.rules[key]
|
rule = embed.rules[key]
|
||||||
spacing = rule[:width] * Pango::SCALE
|
spacing = rule[:width] * Pango::SCALE
|
||||||
|
|
@ -112,17 +113,20 @@ module Squib
|
||||||
str.sub!(key, "<span size=\"0\">a<span letter_spacing=\"#{spacing.to_i}\">a</span>a</span>")
|
str.sub!(key, "<span size=\"0\">a<span letter_spacing=\"#{spacing.to_i}\">a</span>a</span>")
|
||||||
layout.markup = str
|
layout.markup = str
|
||||||
clean_str = layout.text
|
clean_str = layout.text
|
||||||
rect = layout.index_to_pos(index)
|
searches << { index: index, rule: rule }
|
||||||
|
end
|
||||||
|
searches.each do |search|
|
||||||
|
rect = layout.index_to_pos(search[:index])
|
||||||
iter = layout.iter
|
iter = layout.iter
|
||||||
while iter.next_char! && iter.index < index; end
|
while iter.next_char! && iter.index < search[:index]; end
|
||||||
case layout.alignment
|
case layout.alignment
|
||||||
when Pango::Layout::Alignment::CENTER,
|
when Pango::Layout::Alignment::CENTER,
|
||||||
Pango::Layout::Alignment::RIGHT
|
Pango::Layout::Alignment::RIGHT
|
||||||
Squib.logger.warn "Center- or right-aligned text do not always embed properly. This is a known issue with a workaround. See https://github.com/andymeneely/squib/issues/46"
|
Squib.logger.warn "Center- or right-aligned text do not always embed properly. This is a known issue with a workaround. See https://github.com/andymeneely/squib/issues/46"
|
||||||
end
|
end
|
||||||
x = Pango.pixels(rect.x) + rule[:dx]
|
x = Pango.pixels(rect.x) + search[:rule][:dx]
|
||||||
y = Pango.pixels(rect.y) + rule[:dy]
|
y = Pango.pixels(rect.y) + search[:rule][:dy]
|
||||||
draw_calls << {x: x, y: y, draw: rule[:draw]} # defer drawing until we've valigned
|
draw_calls << {x: x, y: y, draw: search[:rule][:draw]} # defer drawing until we've valigned
|
||||||
end
|
end
|
||||||
return draw_calls
|
return draw_calls
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue