changeset 1050:48f43c975533

Added dw_font_choose() on the Mac for 2.1.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Thu, 02 Jun 2011 05:23:45 +0000
parents b3674ea2909f
children 6919854298fd
files dw.h mac/dw.m
diffstat 2 files changed, 80 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/dw.h	Wed Jun 01 23:07:27 2011 +0000
+++ b/dw.h	Thu Jun 02 05:23:45 2011 +0000
@@ -1617,6 +1617,7 @@
 void API dw_color_foreground_set(unsigned long value);
 void API dw_color_background_set(unsigned long value);
 unsigned long API dw_color_choose(unsigned long value);
+char * API dw_font_choose(char *currfont);
 void API dw_draw_point(HWND handle, HPIXMAP pixmap, int x, int y);
 void API dw_draw_line(HWND handle, HPIXMAP pixmap, int x1, int y1, int x2, int y2);
 void API dw_draw_rect(HWND handle, HPIXMAP pixmap, int fill, int x, int y, int width, int height);
--- a/mac/dw.m	Wed Jun 01 23:07:27 2011 +0000
+++ b/mac/dw.m	Thu Jun 02 05:23:45 2011 +0000
@@ -1110,6 +1110,31 @@
 -(DWDialog *)dialog { return dialog; }
 @end
 
+/* Subclass for a font chooser type */
+@interface DWFontChoose : NSFontPanel
+{
+    DWDialog *dialog;
+    NSFontManager *fontManager;
+}
+-(void)setDialog:(DWDialog *)input;
+-(void)setFontManager:(NSFontManager *)input;
+-(DWDialog *)dialog;
+@end
+
+@implementation DWFontChoose
+-(BOOL)windowShouldClose:(id)window 
+{ 
+    DWDialog *d = dialog; dialog = nil;
+    NSFont *pickedfont = [fontManager 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
+
 /* Subclass for a splitbar type */
 @interface DWSplitBar : NSSplitView
 #ifdef BUILDING_FOR_SNOW_LEOPARD
@@ -7205,6 +7230,60 @@
     return font;
 }
 
+/* Allows the user to choose a color using the system's color chooser dialog.
+ * Parameters:
+ *       value: current color
+ * Returns:
+ *       The selected color or the current color if cancelled.
+ */
+char * API dw_font_choose(char *currfont)
+{
+    /* Create the Color Chooser Dialog class. */
+    static DWFontChoose *fontDlg = nil;
+    static NSFontManager *fontManager = nil;
+    DWDialog *dialog;
+    NSFont *font = nil;
+    
+    if(currfont)
+        font = _dw_font_by_name(currfont);
+    
+    if(fontDlg)
+    {
+        dialog = [fontDlg dialog];
+        /* If someone is already waiting just return */
+        if(dialog)
+        {
+            return NULL;
+        }
+    }
+    else
+    {
+        [NSFontManager setFontPanelFactory:[DWFontChoose class]];
+        fontManager = [NSFontManager sharedFontManager];
+        fontDlg = (DWFontChoose *)[fontManager fontPanel:YES];
+    }
+    
+    dialog = dw_dialog_new(fontDlg);
+    if(font)
+        [fontManager setSelectedFont:font isMultiple:NO];
+    else
+        [fontManager setSelectedFont:[NSFont fontWithName:@"Helvetica" size:9.0] isMultiple:NO];
+    [fontDlg setDialog:dialog];
+    [fontDlg setFontManager:fontManager];
+    [fontManager orderFrontFontPanel:fontManager];
+
+    
+    /* Wait for them to pick a color */
+    font = (NSFont *)dw_dialog_wait(dialog);
+    if(font)
+    {
+        NSString *fontname = [font displayName];
+        NSString *output = [NSString stringWithFormat:@"%d.%s", (int)[font pointSize], [fontname UTF8String]];
+        return strdup([output UTF8String]);        
+    }
+    return NULL;
+}
+
 /*
  * Sets the font used by a specified window (widget) handle.
  * Parameters: