пт, 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. 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/ >
_______________________________________________ HarfBuzz mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/harfbuzz
