X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/09d9db2c4921cb2eb0974892164dd03d6bffdd80..3f13130005dfc51fa4982659aa289cb8753cfd26:/src/nsimage.m diff --git a/src/nsimage.m b/src/nsimage.m index c38cefdc5d..6b68072b87 100644 --- a/src/nsimage.m +++ b/src/nsimage.m @@ -1,6 +1,6 @@ /* Image support for the NeXT/Open/GNUstep and MacOSX window system. - Copyright (C) 1989, 1992-1994, 2005-2006, 2008-2011 - Free Software Foundation, Inc. + Copyright (C) 1989, 1992-1994, 2005-2006, 2008-2014 Free Software + Foundation, Inc. This file is part of GNU Emacs. @@ -28,7 +28,6 @@ GNUstep port and post-20 update by Adrian Robert (arobert@cogsci.ucsd.edu) /* This should be the first include, as it may set up #defines affecting interpretation of even the system includes. */ #include -#include #include "lisp.h" #include "dispextern.h" @@ -79,7 +78,7 @@ ns_image_from_file (Lisp_Object file) return [EmacsImage allocInitFromFile: file]; } -int +bool ns_load_image (struct frame *f, struct image *img, Lisp_Object spec_file, Lisp_Object spec_data) { @@ -96,7 +95,7 @@ ns_load_image (struct frame *f, struct image *img, { NSData *data; - data = [NSData dataWithBytes: SDATA (spec_data) + data = [NSData dataWithBytes: SSDATA (spec_data) length: SBYTES (spec_data)]; eImg = [[EmacsImage alloc] initWithData: data]; [eImg setPixmapData]; @@ -171,7 +170,7 @@ static EmacsImage *ImageList = nil; /* look for an existing image of the same name */ while (image != nil && - [[image name] compare: [NSString stringWithUTF8String: SDATA (file)]] + [[image name] compare: [NSString stringWithUTF8String: SSDATA (file)]] != NSOrderedSame) image = [image imageListNext]; @@ -187,9 +186,13 @@ static EmacsImage *ImageList = nil; return nil; image = [[EmacsImage alloc] initByReferencingFile: - [NSString stringWithUTF8String: SDATA (found)]]; + [NSString stringWithUTF8String: SSDATA (found)]]; +#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 + imgRep = [NSBitmapImageRep imageRepWithData:[image TIFFRepresentation]]; +#else imgRep = [image bestRepresentationForDevice: nil]; +#endif if (imgRep == nil) { [image release]; @@ -201,7 +204,7 @@ static EmacsImage *ImageList = nil; [image setScalesWhenResized: YES]; [image setSize: NSMakeSize([imgRep pixelsWide], [imgRep pixelsHigh])]; - [image setName: [NSString stringWithUTF8String: SDATA (file)]]; + [image setName: [NSString stringWithUTF8String: SSDATA (file)]]; [image reference]; ImageList = [image imageListSetNext: ImageList]; @@ -298,7 +301,7 @@ static EmacsImage *ImageList = nil; [bmRep release]; return nil; } -#define hexchar(x) (isdigit (x) ? x - '0' : x - 'a' + 10) +#define hexchar(x) ('0' <= (x) && (x) <= '9' ? (x) - '0' : (x) - 'a' + 10) s1 = *s++; s2 = *s++; c = hexchar (s1) * 0x10 + hexchar (s2); @@ -330,9 +333,8 @@ static EmacsImage *ImageList = nil; - setXBMColor: (NSColor *)color { NSSize s = [self size]; - int len = (int) s.width * s.height; unsigned char *planes[5]; - CGFloat r, g, b, a; + EmacsCGFloat r, g, b, a; NSColor *rgbColor; if (bmRep == nil || color == nil) @@ -396,12 +398,11 @@ static EmacsImage *ImageList = nil; NSImageRep *rep; reps = [[self representations] objectEnumerator]; - while (rep = (NSImageRep *) [reps nextObject]) + while ((rep = (NSImageRep *) [reps nextObject])) { if ([rep respondsToSelector: @selector (getBitmapDataPlanes:)]) { bmRep = (NSBitmapImageRep *) rep; - onTiger = [bmRep respondsToSelector: @selector (colorAtX:y:)]; if ([bmRep numberOfPlanes] >= 3) [bmRep getBitmapDataPlanes: pixmapData]; @@ -433,17 +434,16 @@ static EmacsImage *ImageList = nil; | (pixmapData[0][loc] << 16) | (pixmapData[1][loc] << 8) | (pixmapData[2][loc]); } - else if (onTiger) + else { NSColor *color = [bmRep colorAtX: x y: y]; - CGFloat r, g, b, a; + EmacsCGFloat r, g, b, a; [color getRed: &r green: &g blue: &b alpha: &a]; return ((int)(a * 255.0) << 24) | ((int)(r * 255.0) << 16) | ((int)(g * 255.0) << 8) | ((int)(b * 255.0)); } - return 0; } - (void) setPixelAtX: (int)x Y: (int)y toRed: (unsigned char)r @@ -461,7 +461,7 @@ static EmacsImage *ImageList = nil; pixmapData[2][loc] = b; pixmapData[3][loc] = a; } - else if (onTiger) + else { [bmRep setColor: [NSColor colorWithCalibratedRed: (r/255.0) green: (g/255.0) @@ -481,7 +481,7 @@ static EmacsImage *ImageList = nil; pixmapData[3][loc] = a; } - else if (onTiger) + else { NSColor *color = [bmRep colorAtX: x y: y]; color = [color colorWithAlphaComponent: (a / 255.0)]; @@ -498,4 +498,3 @@ static EmacsImage *ImageList = nil; } @end -