Author: manolo
Date: 2011-02-19 14:29:39 -0800 (Sat, 19 Feb 2011)
New Revision: 8447
Log:
Fl::set_fonts() under Mac OS adds now all available fonts sorted in 
alphabetical order.

Modified:
   branches/branch-1.3/src/fl_set_fonts_mac.cxx

Modified: branches/branch-1.3/src/fl_set_fonts_mac.cxx
===================================================================
--- branches/branch-1.3/src/fl_set_fonts_mac.cxx        2011-02-19 18:03:43 UTC 
(rev 8446)
+++ branches/branch-1.3/src/fl_set_fonts_mac.cxx        2011-02-19 22:29:39 UTC 
(rev 8447)
@@ -56,6 +56,13 @@
   return f->fontname;
 }
 
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
+static int name_compare(const void *a, const void *b)
+{
+  return strcmp(*(char**)a, *(char**)b);
+}
+#endif
+
 static int fl_free_font = FL_FREE_FONT;
 
 Fl_Font Fl::set_fonts(const char* xstarname) {
@@ -76,6 +83,7 @@
   CFRelease(fcref);
   CFIndex count = CFArrayGetCount(arrayref);
   CFIndex i;
+  char **tabfontnames = new char*[count]; // never free'ed
   for (i = 0; i < count; i++) {
        CTFontDescriptorRef fdesc = 
(CTFontDescriptorRef)CFArrayGetValueAtIndex(arrayref, i);
        CTFontRef font = CTFontCreateWithFontDescriptor(fdesc, 0., NULL);
@@ -83,10 +91,14 @@
        CFRelease(font);
        static char fname[100];
        CFStringGetCString(cfname, fname, sizeof(fname), kCFStringEncodingUTF8);
+       tabfontnames[i] = strdup(fname); // never free'ed
        CFRelease(cfname);
-       Fl::set_font((Fl_Font)(fl_free_font++), strdup(fname));
        }
   CFRelease(arrayref);
+  qsort(tabfontnames, count, sizeof(char*), name_compare);
+  for (i = 0; i < count; i++) {
+    Fl::set_font((Fl_Font)(fl_free_font++), tabfontnames[i]);
+    }
   return (Fl_Font)fl_free_font;
 }
 else {

_______________________________________________
fltk-commit mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-commit

Reply via email to