/* Image support for the NeXT/Open/GNUstep and MacOSX window system.
- Copyright (C) 1989, 1992-1994, 2005-2006, 2008-2015 Free Software
+ Copyright (C) 1989, 1992-1994, 2005-2006, 2008-2016 Free Software
Foundation, Inc.
This file is part of GNU Emacs.
GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
+the Free Software Foundation, either version 3 of the License, or (at
+your option) any later version.
GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
#include "dispextern.h"
#include "nsterm.h"
#include "frame.h"
+#include "coding.h"
-/* call tracing */
-#if 0
-int image_trace_num = 0;
-#define NSTRACE(x) fprintf (stderr, "%s:%d: [%d] " #x "\n", \
- __FILE__, __LINE__, ++image_trace_num)
-#else
-#define NSTRACE(x)
-#endif
/* ==========================================================================
ns_image_from_XBM (unsigned char *bits, int width, int height,
unsigned long fg, unsigned long bg)
{
- NSTRACE (ns_image_from_XBM);
+ NSTRACE ("ns_image_from_XBM");
return [[EmacsImage alloc] initFromXBM: bits
width: width height: height
fg: fg bg: bg];
void *
ns_image_for_XPM (int width, int height, int depth)
{
- NSTRACE (ns_image_for_XPM);
+ NSTRACE ("ns_image_for_XPM");
return [[EmacsImage alloc] initForXPMWithDepth: depth
width: width height: height];
}
void *
ns_image_from_file (Lisp_Object file)
{
- NSTRACE (ns_image_from_bitmap_file);
+ NSTRACE ("ns_image_from_file");
return [EmacsImage allocInitFromFile: file];
}
EmacsImage *eImg = nil;
NSSize size;
- NSTRACE (ns_load_image);
+ NSTRACE ("ns_load_image");
if (STRINGP (spec_file))
{
if (eImg == nil)
{
- add_to_log ("Unable to load image %s", img->spec, Qnil);
+ add_to_log ("Unable to load image %s", img->spec);
return 0;
}
found = x_find_image_file (file);
if (!STRINGP (found))
return nil;
+ found = ENCODE_FILE (found);
image = [[EmacsImage alloc] initByReferencingFile:
[NSString stringWithUTF8String: SSDATA (found)]];
}
+/* Create image from monochrome bitmap. If both FG and BG are 0
+ (black), set the background to white and make it transparent. */
- initFromXBM: (unsigned char *)bits width: (int)w height: (int)h
fg: (unsigned long)fg bg: (unsigned long)bg
{
- int bpr = (w + 7) / 8;
unsigned char *planes[5];
+ unsigned char bg_alpha = 0xff;
[self initWithSize: NSMakeSize (w, h)];
[bmRep getBitmapDataPlanes: planes];
if (fg == 0 && bg == 0)
- bg = 0xffffff;
+ {
+ bg = 0xffffff;
+ bg_alpha = 0;
+ }
{
/* pull bits out to set the (bytewise) alpha mask */
c = *s++;
for (k = 0; i < w && k < 8; ++k, ++i)
{
- *alpha++ = 0xff;
- if (c & 1)
+ if (c & 0x80)
{
*rr++ = fgr;
*gg++ = fgg;
*bb++ = fgb;
+ *alpha++ = 0xff;
}
else
{
*rr++ = bgr;
*gg++ = bgg;
*bb++ = bgb;
+ *alpha++ = bg_alpha;
}
idx++;
- c >>= 1;
+ c <<= 1;
}
}
}