On Sunday, 16 July 2023 at 07:13:20 BST, Werner LEMBERG <w...@gnu.org> wrote:
 
 
 
> > I added a "-s" command line option to both ftview and ftgrid to swap
> > rsvg out with skia and run the same binary twice, one with "-s" and
>.> one without, just to look at them side by side. Fixed the pixel
> positioning discrepancies.  Patch posted online below
>.>
> >  
> >https://github.com/HinTak/harfbuzz-python-demos/blob/master/skia-adventure/ft2-demos-skia-m110.diff

> Very nice!  Of course, it would be necessary to properly adjust the
> build support to find Skia the 'official' way before I can add this to
> the `freetype-demos` repository.  Too bad that building Skia is so
> demanding.
Yes, that's completely understood. There are at least two problems of 
committing the diff as is - the use of prebuilt and unofficial binaries, and 
that skia is moving so fast (the patch has already bit-rotten between m110 and 
m116/main). Both of which can be solved by having skia as a git submodule and 
locking it at a particular state; then we have a 3rd problem, which is that 
building skia is a 1GB clone, which then wants to clone another 1GB+ of 
dependencies before starting. I'd like to give it a try eventually to trim it 
down, do shallow clones etc, later, maybe one cold winter holiday with nothing 
to do :-).
Since this is just adding a "-s" switch (and 100MB+ disk usage), I have rebuilt 
my system's ft2-demos to have the feature semi-permanently.
https://github.com/FontVal-extras/binary-archive/commit/8c7d17bc7423e4371e29ac7074ea6e8ec530cf98
One question, is c++ built libfreetype binary completely compatible? It seems 
the opposite is (c++ built ft2-demos can use c-built freetype) is. In fact I 
was running 2.13.1 c++ built ft2-demo against the system's c-built freetype 
2.13.0 briefly, before I rebooted.But I don't want to install the matching 
c++-built libfreetype (people thinking of grabbing my ft2-demos rpm - please 
DON'T grab the matching libfreetype one, take the one from the commit before 
that! The matching one is just a built-set for archive purpose...)
I am thinking of stuffing skia underneath for COLRv1 too. Added the COLRv1 
detection python code to freetype-py yesterday.
Basically I am thinking of doing a
FT_Load_Glyph_Extended(face, glyph_id, flags) {   if (glyph_id not COLRv1)      
    return FT_Load_Glyph(....); /* pass it on */
   ... do stuff and fill in a color bitmap and it's size/offset..}
Since ftgrid has only one FT_Load_Glyph() call (in fact most of ft2-demos are 
like that), this is the least intrusive way of adding it. It is actually mostly 
very similar to how the SVG renderer hook is done.
I think the SVG renderer hook is somewhat equivalent to this:
FT_Load_Glyph_Extended(face, glyph_id, flags) {     If (not SVG)        return 
FT_Load_Glyph();
   If (svg_init() not yet run once)        run svg_init(); /* once ever */
   svg_preset_slot();      if (flags without LOAD_RENDER)          return;     
svg_render();
   /* svg_free() is never used... */}
Except svg_renderer() and svg_preset_slot() wants to keep some private state 
persisting and sharing between successive calls.
I actually like some part of skia better than cairo: skia objects are shared 
pointers and internally reference-counted, so they just go away when you stop 
using them. No need to do "cairo_destroy_context(ctx);" etc. In fact the Google 
folks extended some of freetype structs to automatically do that too, something 
like:
convenientFT_Face = unique_ptr<FT_FaceRec, <destructor_func>FT_Face_Done>();
So that "FT_Face_Done" is called automatically when "convenientFT_Face" goes 
out of scope.
Quite clever. If only skia is easier to build and use!
Hin-Tak



  

Reply via email to