changeset 2262:fe64be23680e

Mac: Switch to using NSFontManager fontWithFamily instead of NSFont fontWithName fontWithName: required the PostScript font name which could be the same as the family name, but often had no spaces, or extra text associated. Since we need to use the shared font manager, pull it out of the font chooser. Also "New Times Roman" worked on most platforms but required "Times New Roman" on Mac, so hopefully this will work on other platforms too.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Wed, 27 Jan 2021 19:07:25 +0000
parents 281e2df2c022
children 176470d75695
files dwtest.c mac/dw.m
diffstat 2 files changed, 23 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/dwtest.c	Wed Jan 27 09:35:38 2021 +0000
+++ b/dwtest.c	Wed Jan 27 19:07:25 2021 +0000
@@ -1398,11 +1398,11 @@
         dw_listbox_append(fontname, "Verdana");
         dw_listbox_append(fontname, "Helvetica");
         dw_listbox_append(fontname, "DejaVu Sans");
-        dw_listbox_append(fontname, "New Times Roman");
-        dw_listbox_append(fontname, "New Times Roman Bold");
-        dw_listbox_append(fontname, "New Times Roman Italic");
-        dw_listbox_append(fontname, "New Times Roman Italic Bold");
-        dw_listbox_append(fontname, "New Times Roman Bold Italic");
+        dw_listbox_append(fontname, "Times New Roman");
+        dw_listbox_append(fontname, "Times New Roman Bold");
+        dw_listbox_append(fontname, "Times New Roman Italic");
+        dw_listbox_append(fontname, "Times New Roman Italic Bold");
+        dw_listbox_append(fontname, "Times New Roman Bold Italic");
         dw_box_pack_start(hbox, fontname, 150, -1, TRUE, FALSE, 1);
         dw_box_pack_start(notebookbox4, hbox, -1, -1, TRUE, FALSE, 1);
 
--- a/mac/dw.m	Wed Jan 27 09:35:38 2021 +0000
+++ b/mac/dw.m	Wed Jan 27 19:07:25 2021 +0000
@@ -840,6 +840,7 @@
 @end
 
 NSApplication *DWApp = nil;
+NSFontManager *DWFontManager = nil;
 NSMenu *DWMainMenu;
 NSFont *DWDefaultFont;
 DWTimerHandler *DWHandler;
@@ -2065,10 +2066,8 @@
 @interface DWFontChoose : NSFontPanel
 {
     DWDialog *dialog;
-    NSFontManager *fontManager;
 }
 -(void)setDialog:(DWDialog *)input;
--(void)setFontManager:(NSFontManager *)input;
 -(DWDialog *)dialog;
 @end
 
@@ -2076,13 +2075,12 @@
 -(BOOL)windowShouldClose:(id)window
 {
     DWDialog *d = dialog; dialog = nil;
-    NSFont *pickedfont = [fontManager selectedFont];
+    NSFont *pickedfont = [DWFontManager selectedFont];
     dw_dialog_dismiss(d, pickedfont);
     [window orderOut:nil];
     return NO;
 }
 -(void)setDialog:(DWDialog *)input { dialog = input; }
--(void)setFontManager:(NSFontManager *)input { fontManager = input; }
 -(DWDialog *)dialog { return dialog; }
 @end
 
@@ -8705,8 +8703,18 @@
         if(name && (name++))
         {
             int size = atoi(fontname);
+            char *Italic = strstr(name, " Italic");
+            char *Bold = strstr(name, " Bold");
+            size_t len = (Italic ? (Bold ? (Italic > Bold ? (Bold - name) : (Italic - name)) : (Italic - name)) : (Bold ? (Bold - name) : strlen(name)));
+            char *newname = alloca(len+1);
+
+            memset(newname, 0, len+1);
+            strncpy(newname, name, len);
             
-            font = [NSFont fontWithName:[ NSString stringWithUTF8String:name ] size:(float)size];
+            font = [DWFontManager fontWithFamily:[NSString stringWithUTF8String:newname]
+                                          traits:(Italic ? NSItalicFontMask : 0)|(Bold ? NSBoldFontMask : 0)
+                                          weight:5
+                                            size:(float)size];
         }
     }
     return font;
@@ -10212,7 +10220,6 @@
 {
     /* Create the Color Chooser Dialog class. */
     static DWFontChoose *fontDlg = nil;
-    static NSFontManager *fontManager = nil;
     DWDialog *dialog;
     NSFont *font = nil;
 
@@ -10231,18 +10238,16 @@
     else
     {
         [NSFontManager setFontPanelFactory:[DWFontChoose class]];
-        fontManager = [NSFontManager sharedFontManager];
-        fontDlg = (DWFontChoose *)[fontManager fontPanel:YES];
+        fontDlg = (DWFontChoose *)[DWFontManager fontPanel:YES];
     }
 
     dialog = dw_dialog_new(fontDlg);
     if(font)
-        [fontManager setSelectedFont:font isMultiple:NO];
+        [DWFontManager setSelectedFont:font isMultiple:NO];
     else
-        [fontManager setSelectedFont:[NSFont fontWithName:@"Helvetica" size:9.0] isMultiple:NO];
+        [DWFontManager setSelectedFont:[NSFont fontWithName:@"Helvetica" size:9.0] isMultiple:NO];
     [fontDlg setDialog:dialog];
-    [fontDlg setFontManager:fontManager];
-    [fontManager orderFrontFontPanel:fontManager];
+    [DWFontManager orderFrontFontPanel:DWFontManager];
 
 
     /* Wait for them to pick a color */
@@ -12512,6 +12517,7 @@
     [DWApp setMainMenu:DWMainMenu];
     DWObj = [[DWObject alloc] init];
     DWDefaultFont = nil;
+    DWFontManager = [NSFontManager sharedFontManager];
 #ifdef BUILDING_FOR_MOJAVE
     if (@available(macOS 10.14, *))
     {