On Sat, Jan 29, 2022 at 9:15 PM Stewart MacLean <stewmaclean@gmail.com> 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 <tinchodias@gmail.com> 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/9cda0f563023c68714c6c54e6c5f...
Cheers, Martìn
On Tue, Jan 25, 2022 at 7:36 AM Stewart MacLean <stewmaclean@gmail.com> 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