Thank you for your helping. I didn't compile with UCDN. If I did that, Do I have to make any changes in the HBDrawText function? Best regards.
2014-11-29 6:58 GMT+09:00 Behdad Esfahbod <beh...@behdad.org>: > Humm. Re the shaping issue, you most probably don't have any Unicode > callbacks > set up. Did you compile with UCDN? You should. > > On 14-11-28 12:28 AM, aron wrote: > > Hi > > I use the latest version of HarfBuzz as a static library in VisualStudio, > > The Mongolian string can't be rendered as I expected in my program > > but rendered correctly in sh-view.exe. Could anyone tell me where is > wrong in > > my program. > > > > I found that the vaule -- glyph_info[i].codepoint is less than real glyph > > index, the difference is always 87 in my case.What is the correct way to > get > > glyph index? > > > > void HBDrawText(HDC dc, int x, int y) > > { > > const char*fontFilePath = "./MongolianWhite.ttf"; > > const wchar_t*text = L"ᠺᠣᠮᠫᠢᠦ᠋ᠲ᠋ᠧᠷ";//Mongolian string for render > > > > > > FT_Libraryft_library; > > FT_Faceft_face; > > > > FT_Init_FreeType(&ft_library); /* initialize library */ > > FT_New_Face(ft_library, fontFilePath, 0, &ft_face); /* create face > object */ > > FT_Set_Pixel_Sizes(ft_face, 0, 40); /* set character size */ > > > > hb_font_t*font= hb_ft_font_create(ft_face, NULL); > > hb_buffer_t*buffer= hb_buffer_create();; > > > > // > > //set buffer > > // > > hb_buffer_add_utf16(buffer, (uint16_t *)text, lstrlen(text), 0, -1); > > hb_buffer_set_direction(buffer, HB_DIRECTION_TTB); /* or LTR */ > > hb_buffer_set_script(buffer, HB_SCRIPT_MONGOLIAN); /* see hb-unicode.h */ > > hb_buffer_guess_segment_properties(buffer); > > // > > // > > // > > hb_shape(font, buffer, NULL, 0); > > > > intglyph_count= hb_buffer_get_length(buffer); > > hb_glyph_info_t *glyph_info= hb_buffer_get_glyph_infos(buffer, 0); > > > > WCHARdbg_info[6]; > > intpen_x= x; > > intyBaseLine= y; > > intglyphPosX= 0; > > intglyphPosY= 0; > > > > for (int i = 0; i < glyph_count; ++i) > > { > > FT_UInt glyph_index = glyph_info[i].codepoint; > > FT_Load_Glyph(ft_face, glyph_index, FT_LOAD_DEFAULT); > > wsprintf(dbg_info, L"%d,", glyph_index + 87);//*why + 87?* > > OutputDebugString(dbg_info); > > > > /* convert to an anti-aliased bitmap */ > > FT_Render_Glyph(ft_face->glyph, FT_RENDER_MODE_NORMAL); > > > > FreeTypeDrawBitmap(dc, &ft_face->glyph->bitmap, pen_x + > > ft_face->glyph->bitmap_left, > > yBaseLine - ft_face->glyph->bitmap_top); > > pen_x += ft_face->glyph->advance.x >> 6; > > } > > hb_buffer_destroy(buffer); > > hb_font_destroy(font); > > FT_Done_Face(ft_face); > > FT_Done_FreeType(ft_library); > > } > > > > this is the glyph index list generated by this program(incorrect). > > 769,660,566,487,675,490,705 > > hb-shape' s output(correct) is: > > [769|660|566|484|678|492|705] > > > > > > -- > > Aron > > > > > > _______________________________________________ > > HarfBuzz mailing list > > HarfBuzz@lists.freedesktop.org > > http://lists.freedesktop.org/mailman/listinfo/harfbuzz > > > > -- > behdad > http://behdad.org/ > -- Aron
_______________________________________________ HarfBuzz mailing list HarfBuzz@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/harfbuzz