<div dir="ltr"><div class="gmail_default" style="font-size:small">I am having a weird problem where I can render text with HarfBuzz and it is generally doing the right thing in terms of shaping, but glyph offsets seem to be coming out zero all the time, leading to general badness.</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">Here's a very clear case, I am rendering Chinese with the initial character being this left-bracket-quote-thing that is supposed to be offset pretty far to the right:</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small"><img src="cid:ii_151d0a2089be7114" alt="Inline image 1" width="353" height="98"><br></div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">(Yeah, nothing is really happening here to shape this text, I am just saying that the shaping and all that is working fine with Arabic etc, but this particular square-bracket quote is a really obvious case of an offset being wrong).</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">The hb_glyph_position_t for this glyph gives me:</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">x_advance = 2880</div><div class="gmail_default" style="font-size:small">y_advance = 0</div><div class="gmail_default" style="font-size:small">x_offset = 0</div><div class="gmail_default" style="font-size:small">y_offset = 0</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">Now, when I ask FreeType about the glyph, </div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">format = FT_GLYPH_FORMAT_BITMAP</div><div class="gmail_default" style="font-size:small">bitmap_left = 29</div><div class="gmail_default" style="font-size:small">bitmap_top = 39</div><div class="gmail_default" style="font-size:small">advance.x = 2880</div><div class="gmail_default" style="font-size:small">advance.y = 0</div><div class="gmail_default" style="font-size:small">metrics.horiBearingX = 1856</div><div class="gmail_default" style="font-size:small">metrics.horiBearingY = 2496</div><div class="gmail_default" style="font-size:small">metrics.horiAdvanace = 2880</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">So the advances agree, but the offsets are getting dropped on the floor somehow.</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">When I change my code to use FreeType's offsets, I get:</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small"><img src="cid:ii_151d0b5a208a8626" alt="Inline image 2" width="320" height="83"><br></div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">and all is right with the world.</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">But of course the whole *point* of using HarfBuzz is that I am supposed to be able to listen to what HB tells me. So this is a problem.</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">(My Arabic rendering is messed up too, by the way ... you can see the current results at this blog posting: <a href="http://the-witness.net/news/2015/12/entering-the-home-stretch/">http://the-witness.net/news/2015/12/entering-the-home-stretch/</a> ... so it is not like this is a corner case.)</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">To shape I am doing this:</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default"><div class="gmail_default" style="font-size:small">    hb_buffer_clear_contents(hb_buffer);</div><div><div>    hb_buffer_set_direction(hb_buffer, HB_DIRECTION_LTR);</div><div>    hb_buffer_set_script(hb_buffer, HB_SCRIPT_UNKNOWN);</div><div>    hb_buffer_set_language(hb_buffer, hb_language_from_string("zh_TW", -1));</div></div><div><br></div><div><div>    hb_buffer_add_utf8(hb_buffer, s, len, 0, len);</div></div><div><br></div><div style="font-size:small"><div>    hb_shape(hb_font, hb_buffer, features, num_features);</div><div><br></div><div>(num_features == 0 in this case.)</div><div><br></div><div>It seems pretty straightforward. But since there doesn't seem to be any real HB documentation anywhere that I can find, I don't really know.</div><div><br></div><div>This is using HarfBuzz 1.1.2 on Windows.</div><div><br></div><div>Anyone have any idea what is going on here?</div></div></div></div>