On 12.09.2015 0:12, Ebrahim Byagowi wrote:
On Fri, Sep 11, 2015 at 4:53 PM, Bas Schouten <[email protected]
<mailto:[email protected]>> wrote:
Harfbuzz is MIT licensed right? I have no problem with that code
being used and distributed under the MIT license.
Thank you very much :)
On Fri, Sep 11, 2015 at 11:41 AM, Nikolay Sivov <[email protected]
<mailto:[email protected]>> wrote:
The only reason to use GdiInterop is to enable GDI font
substitution/resolution. If you don't need that dwrite way would be
to get system font collection, locate family by name, and use
GetFirstMatchingFont() with desired weight/style/stretch triple.
I think in order to use fonts given to harfbuzz by hb_blob I can't query
system font collection and some fonts may not even available on the
system, I am missing something here?
If the goal is to use memory buffers for fonts you'll need custom
IDWriteFontFileLoader and memory based IDWriteFontFileStream
implementation. After that you'll need to register your loader within
factory context using RegisterFontFileLoader(). Later you can use
CreateCustomFontFileReference() to get IDWriteFontFile and finally
CreateFontFace() using this file to get back fontface instance pointer.
That's I believe is a proper way to use fonts that are no installed
system wide, and it should be preferred so you don't have to rely on how
gdi with realize select font.
Why do you need this? Dwrite input is supposed to be in WCHARs.
As far as I know dwrite WCHAR is not playing well with non-BMP
characters and harfbuzz codepoints can not be used as wchar simply, and
this also being done on uniscribe backend. But am I missing another
thing here?
Yes, sorry, I guess I glanced quickly and was too fast to comment.
You're doing hb text buffer to WCHAR text buffer conversion, for some
reason I thought it was the other way around.
+ hr = analyzer->GetGlyphs(pchars, length,
+ fontFace, FALSE,
+ buffer->props.direction,
+ &runHead->mScript, NULL, NULL, NULL, NULL, 0,
+ maxGlyphs, clusters, textProperties,
+ glyphs, glyphProperties, &actualGlyphs);
How can this work if you never pass run text to it? Not to mention
locale. Also looks like you only try with runHead, so the rest of
runs are ignored?
Well, it works, but may I don't know how also :) Locale done
<https://github.com/ebraminio/harfbuzz/commit/99183a34e5f7e0a7c87281789e97a04d7e7cf16a>,
while being a little ugly but is working for now. Yes I just assumed
that we have one run, not pretty but assumption I guess for now.
Yeah, again I was too eager to comment, and being used to C most of the
time when dealing with COM method calls I didn't spot that you pass text
and length. The remaining problem is that you pass all of it at once,
but what actually should happen is that you should pass text pointer and
length that corresponds to a run you're about to shape - now you use
script ID for first run assuming that it's the same for the rest of the
text, which is not necessary true of course. Same goes for direction and
locale - those should be specific to each run.
Thank you for the reviews :)
_______________________________________________
HarfBuzz mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/harfbuzz
_______________________________________________
HarfBuzz mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/harfbuzz