On Fri, May 24, 2019 at 1:58 PM Konstantin Ritt <[email protected]> wrote:
> пт, 24 мая 2019 г. в 20:49, Behdad Esfahbod <[email protected]>: > >> Thanks Konstantin, >> >> What about DirectWrite-driven font funcs though? Does Qt have those? >> > > Yep we do, both GDI and DW. > I think we should start moving our backends (or their respective parts) to > HB at some point. We could start a dedicated topic to discuss that. > Yes please. I look forward to that! Same with CoreText font funcs. > > Regards, > Konstantin > > > > >> >> On Fri, May 24, 2019 at 1:45 PM Konstantin Ritt <[email protected]> >> wrote: >> >>> Hi Behdad, >>> >>> That was just a glance example of the font table >>> referencing GDI-HB bridge. >>> Feel free to use it in hb-<backend> if you like it ;P >>> >>> As for font-funcs, I doubt GDI is a subject of interest these days. I >>> might be wrong here, though. >>> >>> Regards, >>> Konstantin >>> >>> >>> пт, 24 мая 2019 г. в 19:18, Behdad Esfahbod <[email protected]>: >>> >>>> Thanks Konstantin! >>>> >>>> Should this become a hb-uniscribe (or hb-gdi?) API? >>>> >>>> On Fri, May 24, 2019 at 12:17 PM Konstantin Ritt <[email protected]> >>>> wrote: >>>> >>>>> hb_blob_t *my_reference_table(hb_face_t * /*face*/, hb_tag_t tag, void >>>>> *user_data) >>>>> >>>>> { >>>>> >>>>> HDC hdc = (HDC)user_data; >>>>> >>>>> SelectObject(hdc, hfont); >>>>> >>>>> >>>>> char *buffer = NULL; >>>>> >>>>> DWORD length = 0; >>>>> >>>>> length = GetFontData(hdc, byte_swap<DWORD>(tag), 0, buffer, >>>>> length); >>>>> >>>>> if (length == GDI_ERROR) >>>>> >>>>> return hb_blob_get_empty(); >>>>> >>>>> >>>>> buffer = (char *)::malloc(length); >>>>> >>>>> length = GetFontData(hdc, byte_swap<DWORD>(tag), 0, buffer, length); >>>>> >>>>> if (length == GDI_ERROR) >>>>> >>>>> length = 0; >>>>> >>>>> >>>>> return hb_blob_create((const char *)buffer, length, >>>>> HB_MEMORY_MODE_READONLY, buffer, ::free); >>>>> >>>>> } >>>>> >>>>> >>>>> hb_face_t *my_face_create_from_hdc(HDC hdc) >>>>> >>>>> { >>>>> >>>>> return hb_face_create_for_tables(my_reference_table, (void *)hdc, >>>>> NULL); >>>>> >>>>> } >>>>> >>>>> >>>>> >>>>> >>>>> Regards, >>>>> Konstantin >>>>> >>>>> >>>>> пт, 24 мая 2019 г. в 16:39, Eli Zaretskii <[email protected]>: >>>>> >>>>>> > From: Ebrahim Byagowi <[email protected]> >>>>>> > Date: Fri, 24 May 2019 20:13:43 +0430 >>>>>> > Cc: Harfbuzz <[email protected]> >>>>>> > >>>>>> > Pardon me for the may inaccurate following answer I have to write >>>>>> quickly, >>>>>> >>>>>> Thanks for your help. >>>>>> >>>>>> > > Also, does HarfBuzz support TrueType Collection (TTC) files, and >>>>>> if so, does it want the data only for the >>>>>> > currently selected font or all >>>>>> > of the data? >>>>>> > >>>>>> > It does, if you want harfbuzz handles it for you, you should give >>>>>> it the full blob and set the index you like in >>>>>> > second argument of hb_face_create, otherwise you should handle it >>>>>> yourself. >>>>>> >>>>>> OK, this brings me to another question: what should I in general pass >>>>>> as the 2nd argument of hb_face_create? Suppose I'm using a TTF or OTF >>>>>> font file, should I always pass zero as the 2nd argument? What is the >>>>>> semantics of that argument? >>>>>> >>>>>> > > I'm now working on the HarfBuzz font driver for Emacs on Windows >>>>>> using GetFontData with the dwTable >>>>>> > argument zero, to get the entire data of the font. >>>>>> > >>>>>> > Is it DirectWrite? Have you seen the helper we have the in >>>>>> hb-directwrite.h and hb-uniscribe.h? They can be >>>>>> > very useful. >>>>>> >>>>>> I'm not using DirectWrite, nor am I using Uniscribe. My HarfBuzz is >>>>>> built without these two, as I understand building with these back-ends >>>>>> is only needed for comparison. I want to use the HarfBuzz shaper, and >>>>>> only it (Emacs already has support for Uniscribe). >>>>>> >>>>>> But yes, I do consult these files to figure out answers to my >>>>>> questions. >>>>>> >>>>>> > > does their memory need to be freed in some manner after I have >>>>>> the hb_font_t object, or do I have to keep >>>>>> > them as long as hb_font_t is in use? >>>>>> > >>>>>> > Don't free it yourself specially if in use, you can use harfbuzz >>>>>> destroy callback so harfbuzz can handle it for >>>>>> > you. >>>>>> >>>>>> Sorry, I don't think I understand: what do you mean by "harfbuzz >>>>>> destroy callback"? If you mean the 'destroy" argument of >>>>>> hb_blob_create, then AFAIU this is called only to destroy user_data, >>>>>> and I don't have user_data, I pass NULL as the 4th argument of >>>>>> hb_blob_create. And hb_face_create doesn't have any callback argument >>>>>> at all. >>>>>> >>>>>> I see in the few programs in util/ that both the blob and the face are >>>>>> destroyed as soon as hb_font_t object is created, which is why I >>>>>> thought I could do the same. But now you seem to say I shouldn't? >>>>>> >>>>>> For that matter, what should I use as the 'mode' argument of >>>>>> hb_blob_create? >>>>>> >>>>>> This page: >>>>>> >>>>>> https://harfbuzz.github.io/object-model-blobs.html >>>>>> >>>>>> shows an example of calling hb_blob_create with 'free' (in my case, >>>>>> 'xfree') as the 'destroy' callback, so I guess my interpretation of >>>>>> that argument as being pertinent to user_data was incorrect? Still, >>>>>> the questions about memory management for hb_face_t and about the >>>>>> semantics of the hb_memory_mode_t enum values are left unanswered. >>>>>> >>>>>> > > I see that hb_blob_create, hb_face_create etc. return empty >>>>>> objects when they fail. But I see no "is-empty" >>>>>> > function or macro in the docs, did I miss something? >>>>>> > >>>>>> > Some of the objects may work with empty comparison but it is not >>>>>> broken face >>>>>> > https://github.com/harfbuzz/harfbuzz/issues/1572 but something >>>>>> does it very accurately is >>>>>> > hb_face_get_glyph_count >>>>>> >>>>>> AFAIU, you are saying that if hb_face_get_glyph_count returns zero, >>>>>> the face is empty and shouldn't be used, is that right? >>>>>> >>>>>> > > Where do those 64.0 factors come from? >>>>>> > >>>>>> > Subpixel accuracy, harfbuzz works with integers but as subpixel >>>>>> accuracy needed you have to we need to do >>>>>> > some scaling. Scaling is not the pixels but _set_ppem and _set_ptem >>>>>> is (this is very inaccurate, but I hope >>>>>> > would be useful) >>>>>> >>>>>> Does this mean I should use the factor of 64 in my code as well? Or >>>>>> does that value depend on some properties of the font? >>>>>> >>>>>> > >>>>>> > > Or point me to the documentation where that is described, if I >>>>>> missed it? >>>>>> > >>>>>> > https://harfbuzz.github.io/ may address some of your issues >>>>>> >>>>>> Thanks again for your help. >>>>>> _______________________________________________ >>>>>> HarfBuzz mailing list >>>>>> [email protected] >>>>>> https://lists.freedesktop.org/mailman/listinfo/harfbuzz >>>>> >>>>> _______________________________________________ >>>>> HarfBuzz mailing list >>>>> [email protected] >>>>> https://lists.freedesktop.org/mailman/listinfo/harfbuzz >>>> >>>> >>>> >>>> -- >>>> behdad >>>> http://behdad.org/ >>>> >>> >> >> -- >> behdad >> http://behdad.org/ >> > -- behdad http://behdad.org/
_______________________________________________ HarfBuzz mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/harfbuzz
