On Sat, Jan 29, 2022 at 9:15 PM Stewart MacLean <[email protected]> wrote: > > Hi Martin, > > Thanks for the reply - in fact those methods have just been recently added by > Esteban who very kindly sent me the answers!
Ah! great :D Are you working in the same or a different repo? Martín > > Cheers, > Stewart > > On Sun, Jan 30, 2022 at 1:06 AM Martin Dias <[email protected]> wrote: >> >> Hello Stewart, >> >> I didn't know how to answer your question, but I've found an >> implementation of the same call. See the send of #listFamilies:count: >> message in: >> https://github.com/pharo-spec/gtk-bindings/blob/9cda0f563023c68714c6c54e6c5f77f3c57b6c90/src/Pango/PangoFontMap.class.st#L53 >> >> Cheers, >> Martìn >> >> On Tue, Jan 25, 2022 at 7:36 AM Stewart MacLean <[email protected]> >> wrote: >> > >> > Hi, >> > >> > I'm trying to figure out how to implement code to retrieve a list of font >> > families using the Pango libraries. The key function definition is: >> > >> > https://docs.gtk.org/Pango/method.FontMap.list_families.html >> > >> > void >> > pango_font_map_list_families ( >> > PangoFontMap* fontmap, >> > PangoFontFamily*** families, >> > int* n_families >> > ) >> > >> > I've found some C code, which is shown below. The tricky bit is the ***. >> > I've managed to get this working in VisualWorks (code also below), but >> > can't figure out how to do this using the Pharo FFI. >> > >> > I've managed to get the basic Pango functionality going, but I can't >> > figure out how to use ExternalAddress to do this. Running on a MacMini M1. >> > >> > Any pointers (:)) appreciated! >> > >> > Thanks, >> > >> > Stew >> > >> > C Version >> > ---------------- >> > #include <glib.h> >> > #include <pango/pangocairo.h> >> > >> > static void >> > list_fonts () >> > { >> > int i; >> > PangoFontFamily ** families; >> > int n_families; >> > PangoFontMap * fontmap; >> > >> > fontmap = pango_cairo_font_map_get_default(); >> > pango_font_map_list_families (fontmap, & families, & n_families); >> > printf ("There are %d families\n", n_families); >> > for (i = 0; i < n_families; i++) { >> > PangoFontFamily * family = families[i]; >> > const char * family_name; >> > >> > family_name = pango_font_family_get_name (family); >> > printf ("Family %d: %s\n", i, family_name); >> > } >> > g_free (families); >> > } >> > >> > int main (int argc, char ** argv) >> > { >> > list_fonts (); >> > return 0; >> > } >> > >> > ================================= >> > VisualWorks Version >> > --------------------------- >> > availableFamilyNames >> > " >> > Transcript clear. >> > (FontFamily availableFamilyNames asSortedCollection: [: a : b | a < b]) >> > do: [: each | Transcript cr; show: each]. >> > >> > NamedFontSelector open >> > " >> > >> > "08/09/20 SIM. Modified to work on 64bit. >> > Clues obtained from: >> > XSurface class >>displaySurface: >> > DisplaySurface>>cairoVisual >> > PDFSurface class>>versions" >> > >> > | listPointer sizePointer ffPointers result | >> > >> > ObjectMemory is64Bit >> > ifTrue: >> > [listPointer := CIntegerType unsignedLongLong gcMalloc. >> > sizePointer := listPointer sizeof gcCopyToHeap] >> > ifFalse: >> > [listPointer := 0 gcCopyToHeap. >> > sizePointer := 0 gcCopyToHeap]. >> > >> > LibPango default >> > pango_font_map_list_families: LibPango default >> > pango_cairo_font_map_get_default >> > with: listPointer >> > with: sizePointer. >> > >> > ffPointers := >> > (ObjectMemory is64Bit >> > ifTrue: [CIntegerType unsignedLongLong] >> > ifFalse: [ CIntegerType unsignedInt]) >> > newPointerToAddress: listPointer contents. >> > >> > result := OrderedCollection new: sizePointer contents. >> > sizePointer contents timesRepeat: >> > [result >> > add: (LibPango default pango_font_family_get_name: ffPointers >> > contents) utf8. >> > ffPointers += 1]. >> > LibPango default g_free: listPointer contents. >> > ^result >> > >> >
