X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=OSX%2Fjwxyz.m;h=559133804a75f9b3d4ea280f2d05eba526d3a82d;hp=b7fc19fe47d493bf15598d4e104ff637ba6f17f2;hb=6b1c86cf395f59389e4ece4ea8f4bea2c332745b;hpb=488f2fa8fbdbc77e91a70da2962d73af49e6cace diff --git a/OSX/jwxyz.m b/OSX/jwxyz.m index b7fc19fe..55913380 100644 --- a/OSX/jwxyz.m +++ b/OSX/jwxyz.m @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1991-2006 Jamie Zawinski +/* xscreensaver, Copyright (c) 1991-2008 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -1842,6 +1842,15 @@ copy_pixmap (Pixmap p) static void query_font (Font fid) { + if (!fid || !fid->nsfont) { + NSLog(@"no NSFont in fid"); + abort(); + } + if (![fid->nsfont fontName]) { + NSLog(@"broken NSFont in fid"); + abort(); + } + int first = 32; int last = 255; @@ -1993,7 +2002,7 @@ copy_font (Font fid) // copy the other pointers fid2->ps_name = strdup (fid->ps_name); - [fid2->nsfont retain]; +// [fid2->nsfont retain]; fid2->metrics.fid = fid2; return fid2; @@ -2004,6 +2013,7 @@ static NSFont * try_font (BOOL fixed, BOOL bold, BOOL ital, BOOL serif, float size, char **name_ret) { + Assert (size > 0, "zero font size"); const char *prefix = (fixed ? "Monaco" : (serif ? "Times" : "Helvetica")); const char *suffix = (bold && ital ? (serif ? "-BoldItalic" : "-BoldOblique") @@ -2251,7 +2261,14 @@ XUnloadFont (Display *dpy, Font fid) { free (fid->ps_name); free (fid->metrics.per_char); - [fid->nsfont release]; + + // #### DAMMIT! I can't tell what's going wrong here, but I keep getting + // crashes in [NSFont ascender] <- query_font, and it seems to go away + // if I never release the nsfont. So, fuck it, we'll just leak fonts. + // They're probably not very big... + // + // [fid->nsfont release]; + free (fid); return 0; } @@ -2290,15 +2307,10 @@ XSetFont (Display *dpy, GC gc, Font fid) if (gc->gcv.font) XUnloadFont (dpy, gc->gcv.font); gc->gcv.font = copy_font (fid); + [gc->gcv.font->nsfont retain]; return 0; } -Font // really GContext -XGContextFromGC (GC gc) // WTF is this actually supposed to do? -{ - return gc->gcv.font; -} - int XTextExtents (XFontStruct *f, const char *s, int length, int *dir_ret, int *ascent_ret, int *descent_ret, @@ -2341,8 +2353,11 @@ static void set_font (CGContextRef cgc, GC gc) { Font font = gc->gcv.font; - if (! font) - font = gc->gcv.font = XLoadFont (0, 0); + if (! font) { + font = XLoadFont (0, 0); + gc->gcv.font = font; + [gc->gcv.font->nsfont retain]; + } CGContextSelectFont (cgc, font->ps_name, font->size, kCGEncodingMacRoman); CGContextSetTextMatrix (cgc, CGAffineTransformIdentity); }