Mercurial > emacs
annotate src/image.c @ 55653:5b5102265ed8
(next_overlay_change, note_mouse_highlight): Use GET_OVERLAYS_AT.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Mon, 17 May 2004 22:48:56 +0000 |
parents | 30c03f9042b8 |
children | ae9227eb8392 |
rev | line source |
---|---|
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1 /* Functions for image support on window system. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2 Copyright (C) 1989, 92, 93, 94, 95, 96, 97, 98, 99, 2000,01,02,03,04 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3 Free Software Foundation. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5 This file is part of GNU Emacs. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7 GNU Emacs is free software; you can redistribute it and/or modify |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8 it under the terms of the GNU General Public License as published by |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
9 the Free Software Foundation; either version 2, or (at your option) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
10 any later version. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
11 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
12 GNU Emacs is distributed in the hope that it will be useful, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
13 but WITHOUT ANY WARRANTY; without even the implied warranty of |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
15 GNU General Public License for more details. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
16 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
17 You should have received a copy of the GNU General Public License |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
18 along with GNU Emacs; see the file COPYING. If not, write to |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
20 Boston, MA 02111-1307, USA. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
21 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
22 #include <config.h> |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
23 #include <signal.h> |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
24 #include <stdio.h> |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
25 #include <math.h> |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
26 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
27 #ifdef HAVE_UNISTD_H |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
28 #include <unistd.h> |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
29 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
30 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
31 /* This makes the fields of a Display accessible, in Xlib header files. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
32 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
33 #define XLIB_ILLEGAL_ACCESS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
34 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
35 #include "lisp.h" |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
36 #include "frame.h" |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
37 #include "window.h" |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
38 #include "dispextern.h" |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
39 #include "blockinput.h" |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
40 #include "systime.h" |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
41 #include <epaths.h> |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
42 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
43 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
44 #ifdef HAVE_X_WINDOWS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
45 #include "xterm.h" |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
46 #include <sys/types.h> |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
47 #include <sys/stat.h> |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
48 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
49 #define COLOR_TABLE_SUPPORT 1 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
50 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
51 typedef struct x_bitmap_record Bitmap_Record; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
52 #define GET_PIXEL(ximg, x, y) XGetPixel(ximg, x, y) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
53 #define NO_PIXMAP None |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
54 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
55 #define RGB_PIXEL_COLOR unsigned long |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
56 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
57 #define PIX_MASK_RETAIN(f) 0 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
58 #define PIX_MASK_DRAW(f) 1 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
59 #endif /* HAVE_X_WINDOWS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
60 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
61 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
62 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
63 #include "w32term.h" |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
64 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
65 /* W32_TODO : Color tables on W32. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
66 #undef COLOR_TABLE_SUPPORT |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
67 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
68 typedef struct w32_bitmap_record Bitmap_Record; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
69 #define GET_PIXEL(ximg, x, y) GetPixel(ximg, x, y) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
70 #define NO_PIXMAP 0 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
71 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
72 #define RGB_PIXEL_COLOR COLORREF |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
73 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
74 #define PIX_MASK_RETAIN(f) 0 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
75 #define PIX_MASK_DRAW(f) 1 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
76 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
77 #define FRAME_X_VISUAL(f) FRAME_X_DISPLAY_INFO (f)->visual |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
78 #define x_defined_color w32_defined_color |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
79 #define DefaultDepthOfScreen(screen) (one_w32_display_info.n_cbits) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
80 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
81 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
82 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
83 #ifdef MAC_OS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
84 #include "macterm.h" |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
85 #ifndef MAC_OSX |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
86 #include <alloca.h> |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
87 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
88 #ifdef MAC_OSX |
54349
e1815def2203
* image.c [MAC_OSX]: Include sys/stat.h
Steven Tamm <steventamm@mac.com>
parents:
54348
diff
changeset
|
89 #include <sys/stat.h> |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
90 #include <QuickTime/QuickTime.h> |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
91 #else /* not MAC_OSX */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
92 #include <Windows.h> |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
93 #include <Gestalt.h> |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
94 #include <TextUtils.h> |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
95 #endif /* not MAC_OSX */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
96 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
97 /* MAC_TODO : Color tables on Mac. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
98 #undef COLOR_TABLE_SUPPORT |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
99 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
100 #define ZPixmap 0 /* arbitrary */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
101 typedef struct mac_bitmap_record Bitmap_Record; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
102 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
103 #define GET_PIXEL(ximg, x, y) XGetPixel(ximg, x, y) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
104 #define NO_PIXMAP 0 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
105 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
106 #define RGB_PIXEL_COLOR unsigned long |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
107 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
108 #define FRAME_X_VISUAL(f) FRAME_X_DISPLAY_INFO (f)->visual |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
109 #define x_defined_color mac_defined_color |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
110 #define DefaultDepthOfScreen(screen) (one_mac_display_info.n_planes) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
111 #define XDrawLine(display, w, gc, x1, y1, x2, y2) \ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
112 mac_draw_line_to_pixmap(display, w, gc, x1, y1, x2, y2) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
113 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
114 #endif /* MAC_OS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
115 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
116 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
117 /* Search path for bitmap files. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
118 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
119 Lisp_Object Vx_bitmap_file_path; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
120 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
121 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
122 static void x_disable_image P_ ((struct frame *, struct image *)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
123 static void x_edge_detection P_ ((struct frame *, struct image *, Lisp_Object, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
124 Lisp_Object)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
125 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
126 static void init_color_table P_ ((void)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
127 static unsigned long lookup_rgb_color P_ ((struct frame *f, int r, int g, int b)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
128 #ifdef COLOR_TABLE_SUPPORT |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
129 static void free_color_table P_ ((void)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
130 static unsigned long *colors_in_color_table P_ ((int *n)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
131 static unsigned long lookup_pixel_color P_ ((struct frame *f, unsigned long p)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
132 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
133 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
134 /* Code to deal with bitmaps. Bitmaps are referenced by their bitmap |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
135 id, which is just an int that this section returns. Bitmaps are |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
136 reference counted so they can be shared among frames. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
137 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
138 Bitmap indices are guaranteed to be > 0, so a negative number can |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
139 be used to indicate no bitmap. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
140 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
141 If you use x_create_bitmap_from_data, then you must keep track of |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
142 the bitmaps yourself. That is, creating a bitmap from the same |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
143 data more than once will not be caught. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
144 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
145 #ifdef MAC_OS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
146 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
147 static XImagePtr |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
148 XGetImage (display, pixmap, x, y, width, height, plane_mask, format) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
149 Display *display; /* not used */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
150 Pixmap pixmap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
151 int x, y; /* not used */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
152 unsigned int width, height; /* not used */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
153 unsigned long plane_mask; /* not used */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
154 int format; /* not used */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
155 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
156 #if GLYPH_DEBUG |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
157 xassert (x == 0 && y == 0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
158 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
159 Rect ri, rp; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
160 SetRect (&ri, 0, 0, width, height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
161 xassert (EqualRect (&ri, GetPixBounds (GetGWorldPixMap (pixmap), &rp))); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
162 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
163 xassert (! (pixelsLocked & GetPixelsState (GetGWorldPixMap (pixmap)))); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
164 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
165 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
166 LockPixels (GetGWorldPixMap (pixmap)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
167 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
168 return pixmap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
169 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
170 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
171 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
172 XPutPixel (ximage, x, y, pixel) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
173 XImagePtr ximage; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
174 int x, y; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
175 unsigned long pixel; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
176 { |
55412
53a1a79a33f9
macterm.c (mac_check_for_quit_char): Adding BLOCK_INPUT
Steven Tamm <steventamm@mac.com>
parents:
55375
diff
changeset
|
177 CGrafPtr old_port; |
53a1a79a33f9
macterm.c (mac_check_for_quit_char): Adding BLOCK_INPUT
Steven Tamm <steventamm@mac.com>
parents:
55375
diff
changeset
|
178 GDHandle old_gdh; |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
179 RGBColor color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
180 |
55412
53a1a79a33f9
macterm.c (mac_check_for_quit_char): Adding BLOCK_INPUT
Steven Tamm <steventamm@mac.com>
parents:
55375
diff
changeset
|
181 GetGWorld (&old_port, &old_gdh); |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
182 SetGWorld (ximage, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
183 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
184 color.red = RED16_FROM_ULONG (pixel); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
185 color.green = GREEN16_FROM_ULONG (pixel); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
186 color.blue = BLUE16_FROM_ULONG (pixel); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
187 SetCPixel (x, y, &color); |
55412
53a1a79a33f9
macterm.c (mac_check_for_quit_char): Adding BLOCK_INPUT
Steven Tamm <steventamm@mac.com>
parents:
55375
diff
changeset
|
188 |
53a1a79a33f9
macterm.c (mac_check_for_quit_char): Adding BLOCK_INPUT
Steven Tamm <steventamm@mac.com>
parents:
55375
diff
changeset
|
189 SetGWorld (old_port, old_gdh); |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
190 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
191 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
192 static unsigned long |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
193 XGetPixel (ximage, x, y) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
194 XImagePtr ximage; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
195 int x, y; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
196 { |
55412
53a1a79a33f9
macterm.c (mac_check_for_quit_char): Adding BLOCK_INPUT
Steven Tamm <steventamm@mac.com>
parents:
55375
diff
changeset
|
197 CGrafPtr old_port; |
53a1a79a33f9
macterm.c (mac_check_for_quit_char): Adding BLOCK_INPUT
Steven Tamm <steventamm@mac.com>
parents:
55375
diff
changeset
|
198 GDHandle old_gdh; |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
199 RGBColor color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
200 |
55412
53a1a79a33f9
macterm.c (mac_check_for_quit_char): Adding BLOCK_INPUT
Steven Tamm <steventamm@mac.com>
parents:
55375
diff
changeset
|
201 GetGWorld (&old_port, &old_gdh); |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
202 SetGWorld (ximage, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
203 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
204 GetCPixel (x, y, &color); |
55412
53a1a79a33f9
macterm.c (mac_check_for_quit_char): Adding BLOCK_INPUT
Steven Tamm <steventamm@mac.com>
parents:
55375
diff
changeset
|
205 |
53a1a79a33f9
macterm.c (mac_check_for_quit_char): Adding BLOCK_INPUT
Steven Tamm <steventamm@mac.com>
parents:
55375
diff
changeset
|
206 SetGWorld (old_port, old_gdh); |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
207 return RGB_TO_ULONG (color.red >> 8, color.green >> 8, color.blue >> 8); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
208 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
209 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
210 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
211 XDestroyImage (ximg) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
212 XImagePtr ximg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
213 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
214 UnlockPixels (GetGWorldPixMap (ximg)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
215 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
216 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
217 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
218 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
219 /* Functions to access the contents of a bitmap, given an id. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
220 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
221 int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
222 x_bitmap_height (f, id) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
223 FRAME_PTR f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
224 int id; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
225 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
226 return FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
227 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
228 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
229 int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
230 x_bitmap_width (f, id) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
231 FRAME_PTR f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
232 int id; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
233 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
234 return FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].width; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
235 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
236 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
237 #if defined (HAVE_X_WINDOWS) || defined (HAVE_NTGUI) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
238 int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
239 x_bitmap_pixmap (f, id) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
240 FRAME_PTR f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
241 int id; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
242 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
243 return (int) FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].pixmap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
244 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
245 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
246 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
247 #ifdef HAVE_X_WINDOWS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
248 int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
249 x_bitmap_mask (f, id) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
250 FRAME_PTR f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
251 int id; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
252 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
253 return FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].mask; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
254 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
255 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
256 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
257 /* Allocate a new bitmap record. Returns index of new record. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
258 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
259 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
260 x_allocate_bitmap_record (f) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
261 FRAME_PTR f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
262 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
263 Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
264 int i; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
265 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
266 if (dpyinfo->bitmaps == NULL) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
267 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
268 dpyinfo->bitmaps_size = 10; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
269 dpyinfo->bitmaps |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
270 = (Bitmap_Record *) xmalloc (dpyinfo->bitmaps_size * sizeof (Bitmap_Record)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
271 dpyinfo->bitmaps_last = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
272 return 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
273 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
274 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
275 if (dpyinfo->bitmaps_last < dpyinfo->bitmaps_size) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
276 return ++dpyinfo->bitmaps_last; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
277 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
278 for (i = 0; i < dpyinfo->bitmaps_size; ++i) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
279 if (dpyinfo->bitmaps[i].refcount == 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
280 return i + 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
281 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
282 dpyinfo->bitmaps_size *= 2; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
283 dpyinfo->bitmaps |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
284 = (Bitmap_Record *) xrealloc (dpyinfo->bitmaps, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
285 dpyinfo->bitmaps_size * sizeof (Bitmap_Record)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
286 return ++dpyinfo->bitmaps_last; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
287 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
288 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
289 /* Add one reference to the reference count of the bitmap with id ID. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
290 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
291 void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
292 x_reference_bitmap (f, id) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
293 FRAME_PTR f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
294 int id; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
295 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
296 ++FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].refcount; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
297 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
298 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
299 /* Create a bitmap for frame F from a HEIGHT x WIDTH array of bits at BITS. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
300 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
301 int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
302 x_create_bitmap_from_data (f, bits, width, height) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
303 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
304 char *bits; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
305 unsigned int width, height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
306 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
307 Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
308 int id; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
309 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
310 #ifdef HAVE_X_WINDOWS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
311 Pixmap bitmap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
312 bitmap = XCreateBitmapFromData (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
313 bits, width, height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
314 if (! bitmap) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
315 return -1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
316 #endif /* HAVE_X_WINDOWS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
317 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
318 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
319 Pixmap bitmap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
320 bitmap = CreateBitmap (width, height, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
321 FRAME_X_DISPLAY_INFO (XFRAME (frame))->n_planes, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
322 FRAME_X_DISPLAY_INFO (XFRAME (frame))->n_cbits, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
323 bits); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
324 if (! bitmap) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
325 return -1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
326 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
327 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
328 #ifdef MAC_OS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
329 /* MAC_TODO: for now fail if width is not mod 16 (toolbox requires it) */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
330 if (width % 16 != 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
331 return -1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
332 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
333 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
334 id = x_allocate_bitmap_record (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
335 #ifdef MAC_OS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
336 dpyinfo->bitmaps[id - 1].bitmap_data = (char *) xmalloc (height * width); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
337 if (! dpyinfo->bitmaps[id - 1].bitmap_data) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
338 return -1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
339 bcopy (bits, dpyinfo->bitmaps[id - 1].bitmap_data, height * width); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
340 #endif /* MAC_OS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
341 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
342 dpyinfo->bitmaps[id - 1].file = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
343 dpyinfo->bitmaps[id - 1].height = height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
344 dpyinfo->bitmaps[id - 1].width = width; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
345 dpyinfo->bitmaps[id - 1].refcount = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
346 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
347 #ifdef HAVE_X_WINDOWS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
348 dpyinfo->bitmaps[id - 1].pixmap = bitmap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
349 dpyinfo->bitmaps[id - 1].have_mask = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
350 dpyinfo->bitmaps[id - 1].depth = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
351 #endif /* HAVE_X_WINDOWS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
352 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
353 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
354 dpyinfo->bitmaps[id - 1].pixmap = bitmap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
355 dpyinfo->bitmaps[id - 1].hinst = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
356 dpyinfo->bitmaps[id - 1].depth = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
357 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
358 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
359 return id; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
360 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
361 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
362 /* Create bitmap from file FILE for frame F. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
363 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
364 int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
365 x_create_bitmap_from_file (f, file) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
366 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
367 Lisp_Object file; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
368 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
369 #ifdef MAC_OS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
370 return -1; /* MAC_TODO : bitmap support */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
371 #endif /* MAC_OS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
372 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
373 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
374 return -1; /* W32_TODO : bitmap support */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
375 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
376 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
377 #ifdef HAVE_X_WINDOWS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
378 Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
379 unsigned int width, height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
380 Pixmap bitmap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
381 int xhot, yhot, result, id; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
382 Lisp_Object found; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
383 int fd; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
384 char *filename; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
385 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
386 /* Look for an existing bitmap with the same name. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
387 for (id = 0; id < dpyinfo->bitmaps_last; ++id) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
388 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
389 if (dpyinfo->bitmaps[id].refcount |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
390 && dpyinfo->bitmaps[id].file |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
391 && !strcmp (dpyinfo->bitmaps[id].file, (char *) SDATA (file))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
392 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
393 ++dpyinfo->bitmaps[id].refcount; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
394 return id + 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
395 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
396 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
397 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
398 /* Search bitmap-file-path for the file, if appropriate. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
399 fd = openp (Vx_bitmap_file_path, file, Qnil, &found, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
400 if (fd < 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
401 return -1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
402 emacs_close (fd); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
403 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
404 filename = (char *) SDATA (found); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
405 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
406 result = XReadBitmapFile (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
407 filename, &width, &height, &bitmap, &xhot, &yhot); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
408 if (result != BitmapSuccess) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
409 return -1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
410 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
411 id = x_allocate_bitmap_record (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
412 dpyinfo->bitmaps[id - 1].pixmap = bitmap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
413 dpyinfo->bitmaps[id - 1].have_mask = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
414 dpyinfo->bitmaps[id - 1].refcount = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
415 dpyinfo->bitmaps[id - 1].file = (char *) xmalloc (SBYTES (file) + 1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
416 dpyinfo->bitmaps[id - 1].depth = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
417 dpyinfo->bitmaps[id - 1].height = height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
418 dpyinfo->bitmaps[id - 1].width = width; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
419 strcpy (dpyinfo->bitmaps[id - 1].file, SDATA (file)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
420 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
421 return id; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
422 #endif /* HAVE_X_WINDOWS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
423 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
424 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
425 /* Free bitmap B. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
426 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
427 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
428 Free_Bitmap_Record (dpyinfo, bm) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
429 Display_Info *dpyinfo; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
430 Bitmap_Record *bm; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
431 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
432 #ifdef HAVE_X_WINDOWS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
433 XFreePixmap (dpyinfo->display, bm->pixmap); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
434 if (bm->have_mask) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
435 XFreePixmap (dpyinfo->display, bm->mask); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
436 #endif /* HAVE_X_WINDOWS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
437 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
438 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
439 DeleteObject (bm->pixmap); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
440 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
441 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
442 #ifdef MAC_OS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
443 xfree (bm->bitmap_data); /* Added ++kfs */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
444 bm->bitmap_data = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
445 #endif /* MAC_OS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
446 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
447 if (bm->file) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
448 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
449 xfree (bm->file); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
450 bm->file = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
451 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
452 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
453 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
454 /* Remove reference to bitmap with id number ID. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
455 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
456 void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
457 x_destroy_bitmap (f, id) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
458 FRAME_PTR f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
459 int id; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
460 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
461 Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
462 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
463 if (id > 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
464 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
465 Bitmap_Record *bm = &dpyinfo->bitmaps[id - 1]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
466 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
467 if (--bm->refcount == 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
468 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
469 BLOCK_INPUT; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
470 Free_Bitmap_Record (dpyinfo, bm); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
471 UNBLOCK_INPUT; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
472 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
473 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
474 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
475 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
476 /* Free all the bitmaps for the display specified by DPYINFO. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
477 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
478 void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
479 x_destroy_all_bitmaps (dpyinfo) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
480 Display_Info *dpyinfo; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
481 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
482 int i; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
483 Bitmap_Record *bm = dpyinfo->bitmaps; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
484 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
485 for (i = 0; i < dpyinfo->bitmaps_last; i++, bm++) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
486 if (bm->refcount > 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
487 Free_Bitmap_Record (dpyinfo, bm); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
488 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
489 dpyinfo->bitmaps_last = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
490 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
491 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
492 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
493 #ifdef HAVE_X_WINDOWS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
494 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
495 /* Useful functions defined in the section |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
496 `Image type independent image structures' below. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
497 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
498 static unsigned long four_corners_best P_ ((XImagePtr ximg, unsigned long width, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
499 unsigned long height)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
500 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
501 static int x_create_x_image_and_pixmap P_ ((struct frame *f, int width, int height, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
502 int depth, XImagePtr *ximg, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
503 Pixmap *pixmap)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
504 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
505 static void x_destroy_x_image P_ ((XImagePtr ximg)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
506 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
507 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
508 /* Create a mask of a bitmap. Note is this not a perfect mask. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
509 It's nicer with some borders in this context */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
510 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
511 int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
512 x_create_bitmap_mask (f, id) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
513 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
514 int id; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
515 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
516 Pixmap pixmap, mask; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
517 XImagePtr ximg, mask_img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
518 unsigned long width, height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
519 int result; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
520 unsigned long bg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
521 unsigned long x, y, xp, xm, yp, ym; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
522 GC gc; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
523 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
524 Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
525 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
526 if (!(id > 0)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
527 return -1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
528 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
529 pixmap = x_bitmap_pixmap (f, id); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
530 width = x_bitmap_width (f, id); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
531 height = x_bitmap_height (f, id); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
532 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
533 BLOCK_INPUT; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
534 ximg = XGetImage (FRAME_X_DISPLAY (f), pixmap, 0, 0, width, height, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
535 ~0, ZPixmap); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
536 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
537 if (!ximg) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
538 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
539 UNBLOCK_INPUT; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
540 return -1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
541 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
542 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
543 result = x_create_x_image_and_pixmap (f, width, height, 1, &mask_img, &mask); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
544 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
545 UNBLOCK_INPUT; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
546 if (!result) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
547 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
548 XDestroyImage (ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
549 return -1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
550 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
551 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
552 bg = four_corners_best (ximg, width, height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
553 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
554 for (y = 0; y < ximg->height; ++y) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
555 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
556 for (x = 0; x < ximg->width; ++x) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
557 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
558 xp = x != ximg->width - 1 ? x + 1 : 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
559 xm = x != 0 ? x - 1 : ximg->width - 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
560 yp = y != ximg->height - 1 ? y + 1 : 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
561 ym = y != 0 ? y - 1 : ximg->height - 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
562 if (XGetPixel (ximg, x, y) == bg |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
563 && XGetPixel (ximg, x, yp) == bg |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
564 && XGetPixel (ximg, x, ym) == bg |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
565 && XGetPixel (ximg, xp, y) == bg |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
566 && XGetPixel (ximg, xp, yp) == bg |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
567 && XGetPixel (ximg, xp, ym) == bg |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
568 && XGetPixel (ximg, xm, y) == bg |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
569 && XGetPixel (ximg, xm, yp) == bg |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
570 && XGetPixel (ximg, xm, ym) == bg) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
571 XPutPixel (mask_img, x, y, 0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
572 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
573 XPutPixel (mask_img, x, y, 1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
574 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
575 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
576 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
577 xassert (interrupt_input_blocked); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
578 gc = XCreateGC (FRAME_X_DISPLAY (f), mask, 0, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
579 XPutImage (FRAME_X_DISPLAY (f), mask, gc, mask_img, 0, 0, 0, 0, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
580 width, height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
581 XFreeGC (FRAME_X_DISPLAY (f), gc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
582 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
583 dpyinfo->bitmaps[id - 1].have_mask = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
584 dpyinfo->bitmaps[id - 1].mask = mask; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
585 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
586 XDestroyImage (ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
587 x_destroy_x_image (mask_img); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
588 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
589 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
590 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
591 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
592 #endif /* HAVE_X_WINDOWS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
593 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
594 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
595 /*********************************************************************** |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
596 Image types |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
597 ***********************************************************************/ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
598 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
599 /* Value is the number of elements of vector VECTOR. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
600 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
601 #define DIM(VECTOR) (sizeof (VECTOR) / sizeof *(VECTOR)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
602 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
603 /* List of supported image types. Use define_image_type to add new |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
604 types. Use lookup_image_type to find a type for a given symbol. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
605 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
606 static struct image_type *image_types; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
607 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
608 /* The symbol `xbm' which is used as the type symbol for XBM images. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
609 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
610 Lisp_Object Qxbm; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
611 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
612 /* Keywords. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
613 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
614 extern Lisp_Object QCwidth, QCheight, QCforeground, QCbackground, QCfile; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
615 extern Lisp_Object QCdata, QCtype; |
54427 | 616 extern Lisp_Object Qcenter; |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
617 Lisp_Object QCascent, QCmargin, QCrelief; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
618 Lisp_Object QCconversion, QCcolor_symbols, QCheuristic_mask; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
619 Lisp_Object QCindex, QCmatrix, QCcolor_adjustment, QCmask; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
620 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
621 /* Other symbols. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
622 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
623 Lisp_Object Qlaplace, Qemboss, Qedge_detection, Qheuristic; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
624 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
625 /* Time in seconds after which images should be removed from the cache |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
626 if not displayed. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
627 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
628 Lisp_Object Vimage_cache_eviction_delay; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
629 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
630 /* Function prototypes. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
631 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
632 static void define_image_type P_ ((struct image_type *type)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
633 static struct image_type *lookup_image_type P_ ((Lisp_Object symbol)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
634 static void image_error P_ ((char *format, Lisp_Object, Lisp_Object)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
635 static void x_laplace P_ ((struct frame *, struct image *)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
636 static void x_emboss P_ ((struct frame *, struct image *)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
637 static int x_build_heuristic_mask P_ ((struct frame *, struct image *, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
638 Lisp_Object)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
639 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
640 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
641 /* Define a new image type from TYPE. This adds a copy of TYPE to |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
642 image_types and adds the symbol *TYPE->type to Vimage_types. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
643 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
644 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
645 define_image_type (type) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
646 struct image_type *type; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
647 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
648 /* Make a copy of TYPE to avoid a bus error in a dumped Emacs. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
649 The initialized data segment is read-only. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
650 struct image_type *p = (struct image_type *) xmalloc (sizeof *p); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
651 bcopy (type, p, sizeof *p); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
652 p->next = image_types; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
653 image_types = p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
654 Vimage_types = Fcons (*p->type, Vimage_types); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
655 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
656 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
657 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
658 /* Look up image type SYMBOL, and return a pointer to its image_type |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
659 structure. Value is null if SYMBOL is not a known image type. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
660 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
661 static INLINE struct image_type * |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
662 lookup_image_type (symbol) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
663 Lisp_Object symbol; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
664 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
665 struct image_type *type; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
666 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
667 for (type = image_types; type; type = type->next) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
668 if (EQ (symbol, *type->type)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
669 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
670 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
671 return type; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
672 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
673 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
674 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
675 /* Value is non-zero if OBJECT is a valid Lisp image specification. A |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
676 valid image specification is a list whose car is the symbol |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
677 `image', and whose rest is a property list. The property list must |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
678 contain a value for key `:type'. That value must be the name of a |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
679 supported image type. The rest of the property list depends on the |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
680 image type. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
681 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
682 int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
683 valid_image_p (object) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
684 Lisp_Object object; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
685 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
686 int valid_p = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
687 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
688 if (IMAGEP (object)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
689 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
690 Lisp_Object tem; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
691 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
692 for (tem = XCDR (object); CONSP (tem); tem = XCDR (tem)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
693 if (EQ (XCAR (tem), QCtype)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
694 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
695 tem = XCDR (tem); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
696 if (CONSP (tem) && SYMBOLP (XCAR (tem))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
697 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
698 struct image_type *type; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
699 type = lookup_image_type (XCAR (tem)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
700 if (type) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
701 valid_p = type->valid_p (object); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
702 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
703 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
704 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
705 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
706 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
707 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
708 return valid_p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
709 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
710 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
711 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
712 /* Log error message with format string FORMAT and argument ARG. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
713 Signaling an error, e.g. when an image cannot be loaded, is not a |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
714 good idea because this would interrupt redisplay, and the error |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
715 message display would lead to another redisplay. This function |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
716 therefore simply displays a message. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
717 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
718 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
719 image_error (format, arg1, arg2) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
720 char *format; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
721 Lisp_Object arg1, arg2; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
722 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
723 add_to_log (format, arg1, arg2); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
724 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
725 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
726 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
727 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
728 /*********************************************************************** |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
729 Image specifications |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
730 ***********************************************************************/ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
731 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
732 enum image_value_type |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
733 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
734 IMAGE_DONT_CHECK_VALUE_TYPE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
735 IMAGE_STRING_VALUE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
736 IMAGE_STRING_OR_NIL_VALUE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
737 IMAGE_SYMBOL_VALUE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
738 IMAGE_POSITIVE_INTEGER_VALUE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
739 IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
740 IMAGE_NON_NEGATIVE_INTEGER_VALUE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
741 IMAGE_ASCENT_VALUE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
742 IMAGE_INTEGER_VALUE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
743 IMAGE_FUNCTION_VALUE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
744 IMAGE_NUMBER_VALUE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
745 IMAGE_BOOL_VALUE |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
746 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
747 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
748 /* Structure used when parsing image specifications. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
749 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
750 struct image_keyword |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
751 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
752 /* Name of keyword. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
753 char *name; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
754 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
755 /* The type of value allowed. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
756 enum image_value_type type; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
757 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
758 /* Non-zero means key must be present. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
759 int mandatory_p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
760 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
761 /* Used to recognize duplicate keywords in a property list. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
762 int count; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
763 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
764 /* The value that was found. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
765 Lisp_Object value; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
766 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
767 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
768 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
769 static int parse_image_spec P_ ((Lisp_Object, struct image_keyword *, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
770 int, Lisp_Object)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
771 static Lisp_Object image_spec_value P_ ((Lisp_Object, Lisp_Object, int *)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
772 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
773 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
774 /* Parse image spec SPEC according to KEYWORDS. A valid image spec |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
775 has the format (image KEYWORD VALUE ...). One of the keyword/ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
776 value pairs must be `:type TYPE'. KEYWORDS is a vector of |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
777 image_keywords structures of size NKEYWORDS describing other |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
778 allowed keyword/value pairs. Value is non-zero if SPEC is valid. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
779 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
780 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
781 parse_image_spec (spec, keywords, nkeywords, type) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
782 Lisp_Object spec; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
783 struct image_keyword *keywords; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
784 int nkeywords; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
785 Lisp_Object type; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
786 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
787 int i; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
788 Lisp_Object plist; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
789 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
790 if (!IMAGEP (spec)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
791 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
792 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
793 plist = XCDR (spec); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
794 while (CONSP (plist)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
795 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
796 Lisp_Object key, value; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
797 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
798 /* First element of a pair must be a symbol. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
799 key = XCAR (plist); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
800 plist = XCDR (plist); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
801 if (!SYMBOLP (key)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
802 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
803 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
804 /* There must follow a value. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
805 if (!CONSP (plist)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
806 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
807 value = XCAR (plist); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
808 plist = XCDR (plist); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
809 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
810 /* Find key in KEYWORDS. Error if not found. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
811 for (i = 0; i < nkeywords; ++i) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
812 if (strcmp (keywords[i].name, SDATA (SYMBOL_NAME (key))) == 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
813 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
814 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
815 if (i == nkeywords) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
816 continue; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
817 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
818 /* Record that we recognized the keyword. If a keywords |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
819 was found more than once, it's an error. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
820 keywords[i].value = value; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
821 ++keywords[i].count; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
822 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
823 if (keywords[i].count > 1) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
824 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
825 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
826 /* Check type of value against allowed type. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
827 switch (keywords[i].type) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
828 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
829 case IMAGE_STRING_VALUE: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
830 if (!STRINGP (value)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
831 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
832 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
833 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
834 case IMAGE_STRING_OR_NIL_VALUE: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
835 if (!STRINGP (value) && !NILP (value)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
836 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
837 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
838 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
839 case IMAGE_SYMBOL_VALUE: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
840 if (!SYMBOLP (value)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
841 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
842 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
843 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
844 case IMAGE_POSITIVE_INTEGER_VALUE: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
845 if (!INTEGERP (value) || XINT (value) <= 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
846 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
847 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
848 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
849 case IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
850 if (INTEGERP (value) && XINT (value) >= 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
851 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
852 if (CONSP (value) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
853 && INTEGERP (XCAR (value)) && INTEGERP (XCDR (value)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
854 && XINT (XCAR (value)) >= 0 && XINT (XCDR (value)) >= 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
855 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
856 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
857 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
858 case IMAGE_ASCENT_VALUE: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
859 if (SYMBOLP (value) && EQ (value, Qcenter)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
860 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
861 else if (INTEGERP (value) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
862 && XINT (value) >= 0 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
863 && XINT (value) <= 100) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
864 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
865 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
866 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
867 case IMAGE_NON_NEGATIVE_INTEGER_VALUE: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
868 if (!INTEGERP (value) || XINT (value) < 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
869 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
870 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
871 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
872 case IMAGE_DONT_CHECK_VALUE_TYPE: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
873 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
874 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
875 case IMAGE_FUNCTION_VALUE: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
876 value = indirect_function (value); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
877 if (SUBRP (value) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
878 || COMPILEDP (value) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
879 || (CONSP (value) && EQ (XCAR (value), Qlambda))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
880 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
881 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
882 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
883 case IMAGE_NUMBER_VALUE: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
884 if (!INTEGERP (value) && !FLOATP (value)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
885 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
886 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
887 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
888 case IMAGE_INTEGER_VALUE: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
889 if (!INTEGERP (value)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
890 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
891 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
892 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
893 case IMAGE_BOOL_VALUE: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
894 if (!NILP (value) && !EQ (value, Qt)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
895 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
896 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
897 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
898 default: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
899 abort (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
900 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
901 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
902 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
903 if (EQ (key, QCtype) && !EQ (type, value)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
904 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
905 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
906 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
907 /* Check that all mandatory fields are present. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
908 for (i = 0; i < nkeywords; ++i) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
909 if (keywords[i].mandatory_p && keywords[i].count == 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
910 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
911 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
912 return NILP (plist); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
913 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
914 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
915 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
916 /* Return the value of KEY in image specification SPEC. Value is nil |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
917 if KEY is not present in SPEC. if FOUND is not null, set *FOUND |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
918 to 1 if KEY was found in SPEC, set it to 0 otherwise. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
919 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
920 static Lisp_Object |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
921 image_spec_value (spec, key, found) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
922 Lisp_Object spec, key; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
923 int *found; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
924 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
925 Lisp_Object tail; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
926 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
927 xassert (valid_image_p (spec)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
928 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
929 for (tail = XCDR (spec); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
930 CONSP (tail) && CONSP (XCDR (tail)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
931 tail = XCDR (XCDR (tail))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
932 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
933 if (EQ (XCAR (tail), key)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
934 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
935 if (found) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
936 *found = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
937 return XCAR (XCDR (tail)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
938 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
939 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
940 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
941 if (found) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
942 *found = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
943 return Qnil; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
944 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
945 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
946 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
947 DEFUN ("image-size", Fimage_size, Simage_size, 1, 3, 0, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
948 doc: /* Return the size of image SPEC as pair (WIDTH . HEIGHT). |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
949 PIXELS non-nil means return the size in pixels, otherwise return the |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
950 size in canonical character units. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
951 FRAME is the frame on which the image will be displayed. FRAME nil |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
952 or omitted means use the selected frame. */) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
953 (spec, pixels, frame) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
954 Lisp_Object spec, pixels, frame; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
955 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
956 Lisp_Object size; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
957 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
958 size = Qnil; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
959 if (valid_image_p (spec)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
960 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
961 struct frame *f = check_x_frame (frame); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
962 int id = lookup_image (f, spec); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
963 struct image *img = IMAGE_FROM_ID (f, id); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
964 int width = img->width + 2 * img->hmargin; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
965 int height = img->height + 2 * img->vmargin; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
966 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
967 if (NILP (pixels)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
968 size = Fcons (make_float ((double) width / FRAME_COLUMN_WIDTH (f)), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
969 make_float ((double) height / FRAME_LINE_HEIGHT (f))); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
970 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
971 size = Fcons (make_number (width), make_number (height)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
972 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
973 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
974 error ("Invalid image specification"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
975 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
976 return size; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
977 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
978 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
979 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
980 DEFUN ("image-mask-p", Fimage_mask_p, Simage_mask_p, 1, 2, 0, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
981 doc: /* Return t if image SPEC has a mask bitmap. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
982 FRAME is the frame on which the image will be displayed. FRAME nil |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
983 or omitted means use the selected frame. */) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
984 (spec, frame) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
985 Lisp_Object spec, frame; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
986 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
987 Lisp_Object mask; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
988 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
989 mask = Qnil; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
990 if (valid_image_p (spec)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
991 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
992 struct frame *f = check_x_frame (frame); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
993 int id = lookup_image (f, spec); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
994 struct image *img = IMAGE_FROM_ID (f, id); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
995 if (img->mask) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
996 mask = Qt; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
997 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
998 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
999 error ("Invalid image specification"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1000 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1001 return mask; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1002 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1003 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1004 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1005 /*********************************************************************** |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1006 Image type independent image structures |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1007 ***********************************************************************/ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1008 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1009 static struct image *make_image P_ ((Lisp_Object spec, unsigned hash)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1010 static void free_image P_ ((struct frame *f, struct image *img)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1011 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1012 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1013 /* Allocate and return a new image structure for image specification |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1014 SPEC. SPEC has a hash value of HASH. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1015 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1016 static struct image * |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1017 make_image (spec, hash) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1018 Lisp_Object spec; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1019 unsigned hash; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1020 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1021 struct image *img = (struct image *) xmalloc (sizeof *img); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1022 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1023 xassert (valid_image_p (spec)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1024 bzero (img, sizeof *img); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1025 img->type = lookup_image_type (image_spec_value (spec, QCtype, NULL)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1026 xassert (img->type != NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1027 img->spec = spec; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1028 img->data.lisp_val = Qnil; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1029 img->ascent = DEFAULT_IMAGE_ASCENT; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1030 img->hash = hash; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1031 return img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1032 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1033 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1034 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1035 /* Free image IMG which was used on frame F, including its resources. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1036 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1037 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1038 free_image (f, img) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1039 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1040 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1041 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1042 if (img) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1043 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1044 struct image_cache *c = FRAME_X_IMAGE_CACHE (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1045 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1046 /* Remove IMG from the hash table of its cache. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1047 if (img->prev) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1048 img->prev->next = img->next; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1049 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1050 c->buckets[img->hash % IMAGE_CACHE_BUCKETS_SIZE] = img->next; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1051 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1052 if (img->next) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1053 img->next->prev = img->prev; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1054 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1055 c->images[img->id] = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1056 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1057 /* Free resources, then free IMG. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1058 img->type->free (f, img); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1059 xfree (img); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1060 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1061 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1062 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1063 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1064 /* Prepare image IMG for display on frame F. Must be called before |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1065 drawing an image. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1066 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1067 void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1068 prepare_image_for_display (f, img) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1069 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1070 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1071 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1072 EMACS_TIME t; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1073 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1074 /* We're about to display IMG, so set its timestamp to `now'. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1075 EMACS_GET_TIME (t); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1076 img->timestamp = EMACS_SECS (t); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1077 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1078 /* If IMG doesn't have a pixmap yet, load it now, using the image |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1079 type dependent loader function. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1080 if (img->pixmap == NO_PIXMAP && !img->load_failed_p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1081 img->load_failed_p = img->type->load (f, img) == 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1082 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1083 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1084 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1085 /* Value is the number of pixels for the ascent of image IMG when |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1086 drawn in face FACE. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1087 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1088 int |
55022
dda0bae93c73
(image_ascent): Add slice arg; calculate ascent for
Kim F. Storm <storm@cua.dk>
parents:
54920
diff
changeset
|
1089 image_ascent (img, face, slice) |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1090 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1091 struct face *face; |
55022
dda0bae93c73
(image_ascent): Add slice arg; calculate ascent for
Kim F. Storm <storm@cua.dk>
parents:
54920
diff
changeset
|
1092 struct glyph_slice *slice; |
dda0bae93c73
(image_ascent): Add slice arg; calculate ascent for
Kim F. Storm <storm@cua.dk>
parents:
54920
diff
changeset
|
1093 { |
dda0bae93c73
(image_ascent): Add slice arg; calculate ascent for
Kim F. Storm <storm@cua.dk>
parents:
54920
diff
changeset
|
1094 int height; |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1095 int ascent; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1096 |
55022
dda0bae93c73
(image_ascent): Add slice arg; calculate ascent for
Kim F. Storm <storm@cua.dk>
parents:
54920
diff
changeset
|
1097 if (slice->height == img->height) |
dda0bae93c73
(image_ascent): Add slice arg; calculate ascent for
Kim F. Storm <storm@cua.dk>
parents:
54920
diff
changeset
|
1098 height = img->height + img->vmargin; |
dda0bae93c73
(image_ascent): Add slice arg; calculate ascent for
Kim F. Storm <storm@cua.dk>
parents:
54920
diff
changeset
|
1099 else if (slice->y == 0) |
dda0bae93c73
(image_ascent): Add slice arg; calculate ascent for
Kim F. Storm <storm@cua.dk>
parents:
54920
diff
changeset
|
1100 height = slice->height + img->vmargin; |
dda0bae93c73
(image_ascent): Add slice arg; calculate ascent for
Kim F. Storm <storm@cua.dk>
parents:
54920
diff
changeset
|
1101 else |
dda0bae93c73
(image_ascent): Add slice arg; calculate ascent for
Kim F. Storm <storm@cua.dk>
parents:
54920
diff
changeset
|
1102 height = slice->height; |
dda0bae93c73
(image_ascent): Add slice arg; calculate ascent for
Kim F. Storm <storm@cua.dk>
parents:
54920
diff
changeset
|
1103 |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1104 if (img->ascent == CENTERED_IMAGE_ASCENT) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1105 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1106 if (face->font) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1107 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1108 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1109 /* W32 specific version. Why?. ++kfs */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1110 ascent = height / 2 - (FONT_DESCENT(face->font) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1111 - FONT_BASE(face->font)) / 2; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1112 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1113 /* This expression is arranged so that if the image can't be |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1114 exactly centered, it will be moved slightly up. This is |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1115 because a typical font is `top-heavy' (due to the presence |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1116 uppercase letters), so the image placement should err towards |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1117 being top-heavy too. It also just generally looks better. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1118 ascent = (height + face->font->ascent - face->font->descent + 1) / 2; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1119 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1120 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1121 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1122 ascent = height / 2; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1123 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1124 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1125 ascent = (int) (height * img->ascent / 100.0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1126 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1127 return ascent; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1128 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1129 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1130 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1131 /* Image background colors. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1132 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1133 /* Find the "best" corner color of a bitmap. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1134 On W32, XIMG is assumed to a device context with the bitmap selected. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1135 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1136 static RGB_PIXEL_COLOR |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1137 four_corners_best (ximg, width, height) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1138 XImagePtr_or_DC ximg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1139 unsigned long width, height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1140 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1141 RGB_PIXEL_COLOR corners[4], best; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1142 int i, best_count; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1143 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1144 /* Get the colors at the corners of ximg. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1145 corners[0] = GET_PIXEL (ximg, 0, 0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1146 corners[1] = GET_PIXEL (ximg, width - 1, 0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1147 corners[2] = GET_PIXEL (ximg, width - 1, height - 1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1148 corners[3] = GET_PIXEL (ximg, 0, height - 1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1149 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1150 /* Choose the most frequently found color as background. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1151 for (i = best_count = 0; i < 4; ++i) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1152 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1153 int j, n; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1154 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1155 for (j = n = 0; j < 4; ++j) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1156 if (corners[i] == corners[j]) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1157 ++n; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1158 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1159 if (n > best_count) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1160 best = corners[i], best_count = n; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1161 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1162 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1163 return best; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1164 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1165 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1166 /* Portability macros */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1167 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1168 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1169 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1170 #define Destroy_Image(img_dc, prev) \ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1171 do { SelectObject (img_dc, prev); DeleteDC (img_dc); } while (0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1172 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1173 #define Free_Pixmap(display, pixmap) \ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1174 DeleteObject (pixmap) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1175 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1176 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1177 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1178 #define Destroy_Image(ximg, dummy) \ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1179 XDestroyImage (ximg) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1180 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1181 #define Free_Pixmap(display, pixmap) \ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1182 XFreePixmap (display, pixmap) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1183 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1184 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1185 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1186 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1187 /* Return the `background' field of IMG. If IMG doesn't have one yet, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1188 it is guessed heuristically. If non-zero, XIMG is an existing |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1189 XImage object (or device context with the image selected on W32) to |
54920
38cb79e68369
(PNG_BG_COLOR_SHIFT): Remove.
Kim F. Storm <storm@cua.dk>
parents:
54427
diff
changeset
|
1190 use for the heuristic. */ |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1191 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1192 RGB_PIXEL_COLOR |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1193 image_background (img, f, ximg) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1194 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1195 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1196 XImagePtr_or_DC ximg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1197 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1198 if (! img->background_valid) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1199 /* IMG doesn't have a background yet, try to guess a reasonable value. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1200 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1201 int free_ximg = !ximg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1202 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1203 HGDIOBJ prev; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1204 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1205 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1206 if (free_ximg) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1207 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1208 #ifndef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1209 ximg = XGetImage (FRAME_X_DISPLAY (f), img->pixmap, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1210 0, 0, img->width, img->height, ~0, ZPixmap); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1211 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1212 HDC frame_dc = get_frame_dc (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1213 ximg = CreateCompatibleDC (frame_dc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1214 release_frame_dc (f, frame_dc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1215 prev = SelectObject (ximg, img->pixmap); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1216 #endif /* !HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1217 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1218 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1219 img->background = four_corners_best (ximg, img->width, img->height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1220 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1221 if (free_ximg) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1222 Destroy_Image (ximg, prev); |
54920
38cb79e68369
(PNG_BG_COLOR_SHIFT): Remove.
Kim F. Storm <storm@cua.dk>
parents:
54427
diff
changeset
|
1223 |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1224 img->background_valid = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1225 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1226 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1227 return img->background; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1228 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1229 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1230 /* Return the `background_transparent' field of IMG. If IMG doesn't |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1231 have one yet, it is guessed heuristically. If non-zero, MASK is an |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1232 existing XImage object to use for the heuristic. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1233 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1234 int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1235 image_background_transparent (img, f, mask) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1236 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1237 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1238 XImagePtr_or_DC mask; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1239 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1240 if (! img->background_transparent_valid) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1241 /* IMG doesn't have a background yet, try to guess a reasonable value. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1242 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1243 if (img->mask) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1244 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1245 int free_mask = !mask; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1246 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1247 HGDIOBJ prev; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1248 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1249 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1250 if (free_mask) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1251 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1252 #ifndef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1253 mask = XGetImage (FRAME_X_DISPLAY (f), img->mask, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1254 0, 0, img->width, img->height, ~0, ZPixmap); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1255 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1256 HDC frame_dc = get_frame_dc (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1257 mask = CreateCompatibleDC (frame_dc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1258 release_frame_dc (f, frame_dc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1259 prev = SelectObject (mask, img->mask); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1260 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1261 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1262 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1263 img->background_transparent |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1264 = (four_corners_best (mask, img->width, img->height) == PIX_MASK_RETAIN (f)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1265 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1266 if (free_mask) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1267 Destroy_Image (mask, prev); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1268 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1269 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1270 img->background_transparent = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1271 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1272 img->background_transparent_valid = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1273 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1274 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1275 return img->background_transparent; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1276 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1277 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1278 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1279 /*********************************************************************** |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1280 Helper functions for X image types |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1281 ***********************************************************************/ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1282 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1283 static void x_clear_image_1 P_ ((struct frame *, struct image *, int, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1284 int, int)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1285 static void x_clear_image P_ ((struct frame *f, struct image *img)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1286 static unsigned long x_alloc_image_color P_ ((struct frame *f, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1287 struct image *img, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1288 Lisp_Object color_name, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1289 unsigned long dflt)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1290 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1291 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1292 /* Clear X resources of image IMG on frame F. PIXMAP_P non-zero means |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1293 free the pixmap if any. MASK_P non-zero means clear the mask |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1294 pixmap if any. COLORS_P non-zero means free colors allocated for |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1295 the image, if any. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1296 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1297 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1298 x_clear_image_1 (f, img, pixmap_p, mask_p, colors_p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1299 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1300 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1301 int pixmap_p, mask_p, colors_p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1302 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1303 if (pixmap_p && img->pixmap) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1304 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1305 Free_Pixmap (FRAME_X_DISPLAY (f), img->pixmap); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1306 img->pixmap = NO_PIXMAP; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1307 img->background_valid = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1308 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1309 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1310 if (mask_p && img->mask) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1311 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1312 Free_Pixmap (FRAME_X_DISPLAY (f), img->mask); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1313 img->mask = NO_PIXMAP; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1314 img->background_transparent_valid = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1315 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1316 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1317 if (colors_p && img->ncolors) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1318 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1319 /* MAC_TODO: color table support. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1320 /* W32_TODO: color table support. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1321 #ifdef HAVE_X_WINDOWS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1322 x_free_colors (f, img->colors, img->ncolors); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1323 #endif /* HAVE_X_WINDOWS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1324 xfree (img->colors); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1325 img->colors = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1326 img->ncolors = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1327 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1328 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1329 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1330 /* Free X resources of image IMG which is used on frame F. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1331 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1332 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1333 x_clear_image (f, img) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1334 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1335 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1336 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1337 BLOCK_INPUT; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1338 x_clear_image_1 (f, img, 1, 1, 1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1339 UNBLOCK_INPUT; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1340 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1341 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1342 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1343 /* Allocate color COLOR_NAME for image IMG on frame F. If color |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1344 cannot be allocated, use DFLT. Add a newly allocated color to |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1345 IMG->colors, so that it can be freed again. Value is the pixel |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1346 color. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1347 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1348 static unsigned long |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1349 x_alloc_image_color (f, img, color_name, dflt) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1350 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1351 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1352 Lisp_Object color_name; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1353 unsigned long dflt; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1354 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1355 XColor color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1356 unsigned long result; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1357 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1358 xassert (STRINGP (color_name)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1359 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1360 if (x_defined_color (f, SDATA (color_name), &color, 1)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1361 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1362 /* This isn't called frequently so we get away with simply |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1363 reallocating the color vector to the needed size, here. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1364 ++img->ncolors; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1365 img->colors = |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1366 (unsigned long *) xrealloc (img->colors, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1367 img->ncolors * sizeof *img->colors); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1368 img->colors[img->ncolors - 1] = color.pixel; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1369 result = color.pixel; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1370 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1371 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1372 result = dflt; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1373 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1374 return result; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1375 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1376 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1377 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1378 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1379 /*********************************************************************** |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1380 Image Cache |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1381 ***********************************************************************/ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1382 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1383 static void cache_image P_ ((struct frame *f, struct image *img)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1384 static void postprocess_image P_ ((struct frame *, struct image *)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1385 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1386 /* Return a new, initialized image cache that is allocated from the |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1387 heap. Call free_image_cache to free an image cache. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1388 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1389 struct image_cache * |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1390 make_image_cache () |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1391 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1392 struct image_cache *c = (struct image_cache *) xmalloc (sizeof *c); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1393 int size; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1394 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1395 bzero (c, sizeof *c); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1396 c->size = 50; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1397 c->images = (struct image **) xmalloc (c->size * sizeof *c->images); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1398 size = IMAGE_CACHE_BUCKETS_SIZE * sizeof *c->buckets; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1399 c->buckets = (struct image **) xmalloc (size); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1400 bzero (c->buckets, size); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1401 return c; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1402 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1403 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1404 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1405 /* Free image cache of frame F. Be aware that X frames share images |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1406 caches. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1407 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1408 void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1409 free_image_cache (f) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1410 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1411 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1412 struct image_cache *c = FRAME_X_IMAGE_CACHE (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1413 if (c) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1414 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1415 int i; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1416 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1417 /* Cache should not be referenced by any frame when freed. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1418 xassert (c->refcount == 0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1419 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1420 for (i = 0; i < c->used; ++i) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1421 free_image (f, c->images[i]); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1422 xfree (c->images); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1423 xfree (c->buckets); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1424 xfree (c); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1425 FRAME_X_IMAGE_CACHE (f) = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1426 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1427 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1428 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1429 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1430 /* Clear image cache of frame F. FORCE_P non-zero means free all |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1431 images. FORCE_P zero means clear only images that haven't been |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1432 displayed for some time. Should be called from time to time to |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1433 reduce the number of loaded images. If image-eviction-seconds is |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1434 non-nil, this frees images in the cache which weren't displayed for |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1435 at least that many seconds. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1436 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1437 void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1438 clear_image_cache (f, force_p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1439 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1440 int force_p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1441 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1442 struct image_cache *c = FRAME_X_IMAGE_CACHE (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1443 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1444 if (c && INTEGERP (Vimage_cache_eviction_delay)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1445 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1446 EMACS_TIME t; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1447 unsigned long old; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1448 int i, nfreed; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1449 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1450 EMACS_GET_TIME (t); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1451 old = EMACS_SECS (t) - XFASTINT (Vimage_cache_eviction_delay); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1452 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1453 /* Block input so that we won't be interrupted by a SIGIO |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1454 while being in an inconsistent state. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1455 BLOCK_INPUT; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1456 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1457 for (i = nfreed = 0; i < c->used; ++i) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1458 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1459 struct image *img = c->images[i]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1460 if (img != NULL |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1461 && (force_p || img->timestamp < old)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1462 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1463 free_image (f, img); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1464 ++nfreed; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1465 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1466 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1467 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1468 /* We may be clearing the image cache because, for example, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1469 Emacs was iconified for a longer period of time. In that |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1470 case, current matrices may still contain references to |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1471 images freed above. So, clear these matrices. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1472 if (nfreed) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1473 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1474 Lisp_Object tail, frame; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1475 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1476 FOR_EACH_FRAME (tail, frame) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1477 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1478 struct frame *f = XFRAME (frame); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1479 if (FRAME_WINDOW_P (f) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1480 && FRAME_X_IMAGE_CACHE (f) == c) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1481 clear_current_matrices (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1482 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1483 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1484 ++windows_or_buffers_changed; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1485 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1486 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1487 UNBLOCK_INPUT; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1488 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1489 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1490 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1491 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1492 DEFUN ("clear-image-cache", Fclear_image_cache, Sclear_image_cache, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1493 0, 1, 0, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1494 doc: /* Clear the image cache of FRAME. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1495 FRAME nil or omitted means use the selected frame. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1496 FRAME t means clear the image caches of all frames. */) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1497 (frame) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1498 Lisp_Object frame; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1499 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1500 if (EQ (frame, Qt)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1501 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1502 Lisp_Object tail; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1503 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1504 FOR_EACH_FRAME (tail, frame) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1505 if (FRAME_WINDOW_P (XFRAME (frame))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1506 clear_image_cache (XFRAME (frame), 1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1507 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1508 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1509 clear_image_cache (check_x_frame (frame), 1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1510 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1511 return Qnil; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1512 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1513 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1514 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1515 /* Compute masks and transform image IMG on frame F, as specified |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1516 by the image's specification, */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1517 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1518 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1519 postprocess_image (f, img) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1520 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1521 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1522 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1523 /* Manipulation of the image's mask. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1524 if (img->pixmap) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1525 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1526 Lisp_Object conversion, spec; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1527 Lisp_Object mask; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1528 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1529 spec = img->spec; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1530 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1531 /* `:heuristic-mask t' |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1532 `:mask heuristic' |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1533 means build a mask heuristically. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1534 `:heuristic-mask (R G B)' |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1535 `:mask (heuristic (R G B))' |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1536 means build a mask from color (R G B) in the |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1537 image. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1538 `:mask nil' |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1539 means remove a mask, if any. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1540 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1541 mask = image_spec_value (spec, QCheuristic_mask, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1542 if (!NILP (mask)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1543 x_build_heuristic_mask (f, img, mask); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1544 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1545 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1546 int found_p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1547 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1548 mask = image_spec_value (spec, QCmask, &found_p); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1549 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1550 if (EQ (mask, Qheuristic)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1551 x_build_heuristic_mask (f, img, Qt); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1552 else if (CONSP (mask) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1553 && EQ (XCAR (mask), Qheuristic)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1554 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1555 if (CONSP (XCDR (mask))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1556 x_build_heuristic_mask (f, img, XCAR (XCDR (mask))); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1557 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1558 x_build_heuristic_mask (f, img, XCDR (mask)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1559 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1560 else if (NILP (mask) && found_p && img->mask) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1561 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1562 Free_Pixmap (FRAME_X_DISPLAY (f), img->mask); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1563 img->mask = NO_PIXMAP; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1564 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1565 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1566 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1567 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1568 /* Should we apply an image transformation algorithm? */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1569 conversion = image_spec_value (spec, QCconversion, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1570 if (EQ (conversion, Qdisabled)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1571 x_disable_image (f, img); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1572 else if (EQ (conversion, Qlaplace)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1573 x_laplace (f, img); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1574 else if (EQ (conversion, Qemboss)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1575 x_emboss (f, img); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1576 else if (CONSP (conversion) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1577 && EQ (XCAR (conversion), Qedge_detection)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1578 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1579 Lisp_Object tem; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1580 tem = XCDR (conversion); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1581 if (CONSP (tem)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1582 x_edge_detection (f, img, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1583 Fplist_get (tem, QCmatrix), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1584 Fplist_get (tem, QCcolor_adjustment)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1585 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1586 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1587 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1588 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1589 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1590 /* Return the id of image with Lisp specification SPEC on frame F. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1591 SPEC must be a valid Lisp image specification (see valid_image_p). */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1592 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1593 int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1594 lookup_image (f, spec) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1595 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1596 Lisp_Object spec; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1597 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1598 struct image_cache *c = FRAME_X_IMAGE_CACHE (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1599 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1600 int i; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1601 unsigned hash; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1602 struct gcpro gcpro1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1603 EMACS_TIME now; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1604 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1605 /* F must be a window-system frame, and SPEC must be a valid image |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1606 specification. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1607 xassert (FRAME_WINDOW_P (f)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1608 xassert (valid_image_p (spec)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1609 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1610 GCPRO1 (spec); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1611 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1612 /* Look up SPEC in the hash table of the image cache. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1613 hash = sxhash (spec, 0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1614 i = hash % IMAGE_CACHE_BUCKETS_SIZE; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1615 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1616 for (img = c->buckets[i]; img; img = img->next) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1617 if (img->hash == hash && !NILP (Fequal (img->spec, spec))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1618 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1619 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1620 /* If not found, create a new image and cache it. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1621 if (img == NULL) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1622 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1623 extern Lisp_Object Qpostscript; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1624 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1625 BLOCK_INPUT; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1626 img = make_image (spec, hash); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1627 cache_image (f, img); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1628 img->load_failed_p = img->type->load (f, img) == 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1629 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1630 /* If we can't load the image, and we don't have a width and |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1631 height, use some arbitrary width and height so that we can |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1632 draw a rectangle for it. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1633 if (img->load_failed_p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1634 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1635 Lisp_Object value; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1636 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1637 value = image_spec_value (spec, QCwidth, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1638 img->width = (INTEGERP (value) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1639 ? XFASTINT (value) : DEFAULT_IMAGE_WIDTH); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1640 value = image_spec_value (spec, QCheight, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1641 img->height = (INTEGERP (value) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1642 ? XFASTINT (value) : DEFAULT_IMAGE_HEIGHT); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1643 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1644 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1645 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1646 /* Handle image type independent image attributes |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1647 `:ascent ASCENT', `:margin MARGIN', `:relief RELIEF', |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1648 `:background COLOR'. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1649 Lisp_Object ascent, margin, relief, bg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1650 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1651 ascent = image_spec_value (spec, QCascent, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1652 if (INTEGERP (ascent)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1653 img->ascent = XFASTINT (ascent); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1654 else if (EQ (ascent, Qcenter)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1655 img->ascent = CENTERED_IMAGE_ASCENT; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1656 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1657 margin = image_spec_value (spec, QCmargin, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1658 if (INTEGERP (margin) && XINT (margin) >= 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1659 img->vmargin = img->hmargin = XFASTINT (margin); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1660 else if (CONSP (margin) && INTEGERP (XCAR (margin)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1661 && INTEGERP (XCDR (margin))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1662 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1663 if (XINT (XCAR (margin)) > 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1664 img->hmargin = XFASTINT (XCAR (margin)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1665 if (XINT (XCDR (margin)) > 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1666 img->vmargin = XFASTINT (XCDR (margin)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1667 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1668 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1669 relief = image_spec_value (spec, QCrelief, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1670 if (INTEGERP (relief)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1671 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1672 img->relief = XINT (relief); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1673 img->hmargin += abs (img->relief); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1674 img->vmargin += abs (img->relief); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1675 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1676 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1677 if (! img->background_valid) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1678 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1679 bg = image_spec_value (img->spec, QCbackground, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1680 if (!NILP (bg)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1681 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1682 img->background |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1683 = x_alloc_image_color (f, img, bg, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1684 FRAME_BACKGROUND_PIXEL (f)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1685 img->background_valid = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1686 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1687 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1688 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1689 /* Do image transformations and compute masks, unless we |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1690 don't have the image yet. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1691 if (!EQ (*img->type->type, Qpostscript)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1692 postprocess_image (f, img); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1693 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1694 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1695 UNBLOCK_INPUT; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1696 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1697 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1698 /* We're using IMG, so set its timestamp to `now'. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1699 EMACS_GET_TIME (now); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1700 img->timestamp = EMACS_SECS (now); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1701 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1702 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1703 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1704 /* Value is the image id. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1705 return img->id; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1706 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1707 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1708 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1709 /* Cache image IMG in the image cache of frame F. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1710 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1711 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1712 cache_image (f, img) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1713 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1714 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1715 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1716 struct image_cache *c = FRAME_X_IMAGE_CACHE (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1717 int i; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1718 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1719 /* Find a free slot in c->images. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1720 for (i = 0; i < c->used; ++i) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1721 if (c->images[i] == NULL) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1722 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1723 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1724 /* If no free slot found, maybe enlarge c->images. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1725 if (i == c->used && c->used == c->size) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1726 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1727 c->size *= 2; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1728 c->images = (struct image **) xrealloc (c->images, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1729 c->size * sizeof *c->images); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1730 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1731 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1732 /* Add IMG to c->images, and assign IMG an id. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1733 c->images[i] = img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1734 img->id = i; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1735 if (i == c->used) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1736 ++c->used; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1737 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1738 /* Add IMG to the cache's hash table. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1739 i = img->hash % IMAGE_CACHE_BUCKETS_SIZE; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1740 img->next = c->buckets[i]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1741 if (img->next) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1742 img->next->prev = img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1743 img->prev = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1744 c->buckets[i] = img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1745 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1746 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1747 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1748 /* Call FN on every image in the image cache of frame F. Used to mark |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1749 Lisp Objects in the image cache. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1750 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1751 void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1752 forall_images_in_image_cache (f, fn) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1753 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1754 void (*fn) P_ ((struct image *img)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1755 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1756 if (FRAME_LIVE_P (f) && FRAME_WINDOW_P (f)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1757 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1758 struct image_cache *c = FRAME_X_IMAGE_CACHE (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1759 if (c) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1760 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1761 int i; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1762 for (i = 0; i < c->used; ++i) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1763 if (c->images[i]) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1764 fn (c->images[i]); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1765 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1766 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1767 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1768 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1769 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1770 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1771 /*********************************************************************** |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1772 X / MAC / W32 support code |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1773 ***********************************************************************/ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1774 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1775 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1776 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1777 /* Macro for defining functions that will be loaded from image DLLs. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1778 #define DEF_IMGLIB_FN(func) FARPROC fn_##func |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1779 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1780 /* Macro for loading those image functions from the library. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1781 #define LOAD_IMGLIB_FN(lib,func) { \ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1782 fn_##func = (void *) GetProcAddress (lib, #func); \ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1783 if (!fn_##func) return 0; \ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1784 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1785 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1786 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1787 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1788 static int x_create_x_image_and_pixmap P_ ((struct frame *, int, int, int, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1789 XImagePtr *, Pixmap *)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1790 static void x_destroy_x_image P_ ((XImagePtr)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1791 static void x_put_x_image P_ ((struct frame *, XImagePtr, Pixmap, int, int)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1792 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1793 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1794 /* Create an XImage and a pixmap of size WIDTH x HEIGHT for use on |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1795 frame F. Set *XIMG and *PIXMAP to the XImage and Pixmap created. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1796 Set (*XIMG)->data to a raster of WIDTH x HEIGHT pixels allocated |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1797 via xmalloc. Print error messages via image_error if an error |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1798 occurs. Value is non-zero if successful. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1799 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1800 On W32, a DEPTH of zero signifies a 24 bit image, otherwise DEPTH |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1801 should indicate the bit depth of the image. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1802 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1803 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1804 x_create_x_image_and_pixmap (f, width, height, depth, ximg, pixmap) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1805 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1806 int width, height, depth; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1807 XImagePtr *ximg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1808 Pixmap *pixmap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1809 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1810 #ifdef HAVE_X_WINDOWS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1811 Display *display = FRAME_X_DISPLAY (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1812 Window window = FRAME_X_WINDOW (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1813 Screen *screen = FRAME_X_SCREEN (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1814 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1815 xassert (interrupt_input_blocked); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1816 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1817 if (depth <= 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1818 depth = DefaultDepthOfScreen (screen); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1819 *ximg = XCreateImage (display, DefaultVisualOfScreen (screen), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1820 depth, ZPixmap, 0, NULL, width, height, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1821 depth > 16 ? 32 : depth > 8 ? 16 : 8, 0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1822 if (*ximg == NULL) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1823 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1824 image_error ("Unable to allocate X image", Qnil, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1825 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1826 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1827 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1828 /* Allocate image raster. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1829 (*ximg)->data = (char *) xmalloc ((*ximg)->bytes_per_line * height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1830 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1831 /* Allocate a pixmap of the same size. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1832 *pixmap = XCreatePixmap (display, window, width, height, depth); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1833 if (*pixmap == NO_PIXMAP) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1834 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1835 x_destroy_x_image (*ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1836 *ximg = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1837 image_error ("Unable to create X pixmap", Qnil, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1838 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1839 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1840 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1841 return 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1842 #endif /* HAVE_X_WINDOWS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1843 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1844 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1845 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1846 BITMAPINFOHEADER *header; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1847 HDC hdc; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1848 int scanline_width_bits; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1849 int remainder; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1850 int palette_colors = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1851 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1852 if (depth == 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1853 depth = 24; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1854 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1855 if (depth != 1 && depth != 4 && depth != 8 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1856 && depth != 16 && depth != 24 && depth != 32) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1857 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1858 image_error ("Invalid image bit depth specified", Qnil, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1859 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1860 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1861 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1862 scanline_width_bits = width * depth; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1863 remainder = scanline_width_bits % 32; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1864 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1865 if (remainder) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1866 scanline_width_bits += 32 - remainder; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1867 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1868 /* Bitmaps with a depth less than 16 need a palette. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1869 /* BITMAPINFO structure already contains the first RGBQUAD. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1870 if (depth < 16) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1871 palette_colors = 1 << depth - 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1872 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1873 *ximg = xmalloc (sizeof (XImage) + palette_colors * sizeof (RGBQUAD)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1874 if (*ximg == NULL) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1875 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1876 image_error ("Unable to allocate memory for XImage", Qnil, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1877 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1878 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1879 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1880 header = &((*ximg)->info.bmiHeader); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1881 bzero (&((*ximg)->info), sizeof (BITMAPINFO)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1882 header->biSize = sizeof (*header); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1883 header->biWidth = width; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1884 header->biHeight = -height; /* negative indicates a top-down bitmap. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1885 header->biPlanes = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1886 header->biBitCount = depth; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1887 header->biCompression = BI_RGB; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1888 header->biClrUsed = palette_colors; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1889 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1890 /* TODO: fill in palette. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1891 if (depth == 1) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1892 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1893 (*ximg)->info.bmiColors[0].rgbBlue = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1894 (*ximg)->info.bmiColors[0].rgbGreen = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1895 (*ximg)->info.bmiColors[0].rgbRed = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1896 (*ximg)->info.bmiColors[0].rgbReserved = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1897 (*ximg)->info.bmiColors[1].rgbBlue = 255; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1898 (*ximg)->info.bmiColors[1].rgbGreen = 255; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1899 (*ximg)->info.bmiColors[1].rgbRed = 255; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1900 (*ximg)->info.bmiColors[1].rgbReserved = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1901 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1902 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1903 hdc = get_frame_dc (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1904 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1905 /* Create a DIBSection and raster array for the bitmap, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1906 and store its handle in *pixmap. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1907 *pixmap = CreateDIBSection (hdc, &((*ximg)->info), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1908 (depth < 16) ? DIB_PAL_COLORS : DIB_RGB_COLORS, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1909 &((*ximg)->data), NULL, 0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1910 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1911 /* Realize display palette and garbage all frames. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1912 release_frame_dc (f, hdc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1913 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1914 if (*pixmap == NULL) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1915 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1916 DWORD err = GetLastError(); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1917 Lisp_Object errcode; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1918 /* All system errors are < 10000, so the following is safe. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1919 XSETINT (errcode, (int) err); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1920 image_error ("Unable to create bitmap, error code %d", errcode, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1921 x_destroy_x_image (*ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1922 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1923 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1924 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1925 return 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1926 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1927 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1928 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1929 #ifdef MAC_OS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1930 Display *display = FRAME_X_DISPLAY (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1931 Window window = FRAME_X_WINDOW (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1932 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1933 xassert (interrupt_input_blocked); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1934 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1935 /* Allocate a pixmap of the same size. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1936 *pixmap = XCreatePixmap (display, window, width, height, depth); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1937 if (*pixmap == NO_PIXMAP) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1938 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1939 x_destroy_x_image (*ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1940 *ximg = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1941 image_error ("Unable to create X pixmap", Qnil, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1942 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1943 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1944 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1945 LockPixels (GetGWorldPixMap (*pixmap)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1946 *ximg = *pixmap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1947 return 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1948 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1949 #endif /* MAC_OS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1950 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1951 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1952 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1953 /* Destroy XImage XIMG. Free XIMG->data. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1954 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1955 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1956 x_destroy_x_image (ximg) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1957 XImagePtr ximg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1958 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1959 xassert (interrupt_input_blocked); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1960 if (ximg) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1961 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1962 #ifdef HAVE_X_WINDOWS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1963 xfree (ximg->data); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1964 ximg->data = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1965 XDestroyImage (ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1966 #endif /* HAVE_X_WINDOWS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1967 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1968 /* Data will be freed by DestroyObject. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1969 ximg->data = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1970 xfree (ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1971 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1972 #ifdef MAC_OS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1973 XDestroyImage (ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1974 #endif /* MAC_OS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1975 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1976 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1977 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1978 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1979 /* Put XImage XIMG into pixmap PIXMAP on frame F. WIDTH and HEIGHT |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1980 are width and height of both the image and pixmap. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1981 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1982 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1983 x_put_x_image (f, ximg, pixmap, width, height) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1984 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1985 XImagePtr ximg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1986 Pixmap pixmap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1987 int width, height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1988 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1989 #ifdef HAVE_X_WINDOWS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1990 GC gc; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1991 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1992 xassert (interrupt_input_blocked); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1993 gc = XCreateGC (FRAME_X_DISPLAY (f), pixmap, 0, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1994 XPutImage (FRAME_X_DISPLAY (f), pixmap, gc, ximg, 0, 0, 0, 0, width, height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1995 XFreeGC (FRAME_X_DISPLAY (f), gc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1996 #endif /* HAVE_X_WINDOWS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1997 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1998 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
1999 #if 0 /* I don't think this is necessary looking at where it is used. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2000 HDC hdc = get_frame_dc (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2001 SetDIBits (hdc, pixmap, 0, height, ximg->data, &(ximg->info), DIB_RGB_COLORS); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2002 release_frame_dc (f, hdc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2003 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2004 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2005 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2006 #ifdef MAC_OS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2007 xassert (ximg == pixmap); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2008 #endif /* MAC_OS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2009 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2010 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2011 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2012 /*********************************************************************** |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2013 File Handling |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2014 ***********************************************************************/ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2015 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2016 static unsigned char *slurp_file P_ ((char *, int *)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2017 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2018 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2019 /* Find image file FILE. Look in data-directory, then |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2020 x-bitmap-file-path. Value is the full name of the file found, or |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2021 nil if not found. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2022 |
54391
138155b7215e
(x_find_image_file): Make extern.
Kim F. Storm <storm@cua.dk>
parents:
54363
diff
changeset
|
2023 Lisp_Object |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2024 x_find_image_file (file) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2025 Lisp_Object file; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2026 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2027 Lisp_Object file_found, search_path; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2028 struct gcpro gcpro1, gcpro2; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2029 int fd; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2030 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2031 file_found = Qnil; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2032 search_path = Fcons (Vdata_directory, Vx_bitmap_file_path); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2033 GCPRO2 (file_found, search_path); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2034 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2035 /* Try to find FILE in data-directory, then x-bitmap-file-path. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2036 fd = openp (search_path, file, Qnil, &file_found, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2037 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2038 if (fd == -1) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2039 file_found = Qnil; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2040 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2041 close (fd); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2042 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2043 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2044 return file_found; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2045 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2046 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2047 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2048 /* Read FILE into memory. Value is a pointer to a buffer allocated |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2049 with xmalloc holding FILE's contents. Value is null if an error |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2050 occurred. *SIZE is set to the size of the file. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2051 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2052 static unsigned char * |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2053 slurp_file (file, size) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2054 char *file; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2055 int *size; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2056 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2057 FILE *fp = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2058 unsigned char *buf = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2059 struct stat st; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2060 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2061 if (stat (file, &st) == 0 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2062 && (fp = fopen (file, "rb")) != NULL |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2063 && (buf = (char *) xmalloc (st.st_size), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2064 fread (buf, 1, st.st_size, fp) == st.st_size)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2065 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2066 *size = st.st_size; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2067 fclose (fp); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2068 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2069 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2070 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2071 if (fp) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2072 fclose (fp); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2073 if (buf) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2074 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2075 xfree (buf); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2076 buf = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2077 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2078 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2079 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2080 return buf; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2081 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2082 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2083 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2084 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2085 #ifdef MAC_OS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2086 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2087 /*********************************************************************** |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2088 MAC Image Load Functions |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2089 ***********************************************************************/ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2090 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2091 static int image_load_quicktime P_ ((struct frame *, struct image *img, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2092 OSType)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2093 #ifdef MAC_OSX |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2094 static int image_load_quartz2d P_ ((struct frame *, struct image *img, int)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2095 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2096 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2097 static OSErr |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2098 find_image_fsspec (specified_file, file, fss) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2099 Lisp_Object specified_file, *file; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2100 FSSpec *fss; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2101 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2102 #if TARGET_API_MAC_CARBON |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2103 FSRef fsr; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2104 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2105 Str255 mac_pathname; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2106 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2107 OSErr err; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2108 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2109 *file = x_find_image_file (specified_file); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2110 if (!STRINGP (*file)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2111 return fnfErr; /* file or directory not found; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2112 incomplete pathname */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2113 /* Try to open the image file. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2114 #if TARGET_API_MAC_CARBON |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2115 err = FSPathMakeRef (SDATA (*file), &fsr, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2116 if (err == noErr) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2117 err = FSGetCatalogInfo (&fsr, kFSCatInfoNone, NULL, NULL, fss, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2118 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2119 if (posix_to_mac_pathname (SDATA (*file), mac_pathname, MAXPATHLEN+1) == 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2120 return fnfErr; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2121 c2pstr (mac_pathname); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2122 err = FSMakeFSSpec (0, 0, mac_pathname, fss); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2123 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2124 return err; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2125 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2126 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2127 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2128 image_load_qt_1 (f, img, type, fss, dh) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2129 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2130 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2131 OSType type; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2132 FSSpec *fss; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2133 Handle dh; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2134 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2135 OSErr err; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2136 GraphicsImportComponent gi; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2137 Rect rect; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2138 int width, height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2139 short draw_all_pixels; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2140 Lisp_Object specified_bg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2141 XColor color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2142 XImagePtr ximg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2143 RGBColor bg_color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2144 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2145 err = OpenADefaultComponent (GraphicsImporterComponentType, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2146 type, &gi); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2147 if (err != noErr) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2148 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2149 image_error ("Cannot get importer component for `%s'", img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2150 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2151 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2152 if (dh == NULL) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2153 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2154 /* read from file system spec */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2155 err = GraphicsImportSetDataFile (gi, fss); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2156 if (err != noErr) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2157 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2158 image_error ("Cannot set fsspec to graphics importer for '%s'", |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2159 img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2160 goto error; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2161 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2162 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2163 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2164 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2165 /* read from data handle */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2166 err = GraphicsImportSetDataHandle (gi, dh); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2167 if (err != noErr) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2168 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2169 image_error ("Cannot set data handle to graphics importer for `%s'", |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2170 img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2171 goto error; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2172 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2173 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2174 err = GraphicsImportGetNaturalBounds (gi, &rect); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2175 if (err != noErr) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2176 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2177 image_error ("Error reading `%s'", img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2178 goto error; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2179 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2180 width = img->width = rect.right - rect.left; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2181 height = img->height = rect.bottom - rect.top; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2182 err = GraphicsImportDoesDrawAllPixels (gi, &draw_all_pixels); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2183 #if 0 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2184 /* Don't check the error code here. It may have an undocumented |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2185 value -32766. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2186 if (err != noErr) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2187 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2188 image_error ("Error reading `%s'", img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2189 goto error; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2190 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2191 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2192 if (draw_all_pixels != graphicsImporterDrawsAllPixels) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2193 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2194 specified_bg = image_spec_value (img->spec, QCbackground, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2195 if (!STRINGP (specified_bg) || |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2196 !mac_defined_color (f, SDATA (specified_bg), &color, 0)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2197 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2198 color.pixel = FRAME_BACKGROUND_PIXEL (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2199 color.red = RED16_FROM_ULONG (color.pixel); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2200 color.green = GREEN16_FROM_ULONG (color.pixel); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2201 color.blue = BLUE16_FROM_ULONG (color.pixel); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2202 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2203 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2204 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2205 if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, &img->pixmap)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2206 goto error; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2207 if (draw_all_pixels != graphicsImporterDrawsAllPixels) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2208 { |
55412
53a1a79a33f9
macterm.c (mac_check_for_quit_char): Adding BLOCK_INPUT
Steven Tamm <steventamm@mac.com>
parents:
55375
diff
changeset
|
2209 CGrafPtr old_port; |
53a1a79a33f9
macterm.c (mac_check_for_quit_char): Adding BLOCK_INPUT
Steven Tamm <steventamm@mac.com>
parents:
55375
diff
changeset
|
2210 GDHandle old_gdh; |
53a1a79a33f9
macterm.c (mac_check_for_quit_char): Adding BLOCK_INPUT
Steven Tamm <steventamm@mac.com>
parents:
55375
diff
changeset
|
2211 |
53a1a79a33f9
macterm.c (mac_check_for_quit_char): Adding BLOCK_INPUT
Steven Tamm <steventamm@mac.com>
parents:
55375
diff
changeset
|
2212 GetGWorld (&old_port, &old_gdh); |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2213 SetGWorld (ximg, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2214 bg_color.red = color.red; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2215 bg_color.green = color.green; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2216 bg_color.blue = color.blue; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2217 RGBBackColor (&bg_color); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2218 #if TARGET_API_MAC_CARBON |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2219 GetPortBounds (ximg, &rect); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2220 EraseRect (&rect); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2221 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2222 EraseRect (&(ximg->portRect)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2223 #endif |
55412
53a1a79a33f9
macterm.c (mac_check_for_quit_char): Adding BLOCK_INPUT
Steven Tamm <steventamm@mac.com>
parents:
55375
diff
changeset
|
2224 SetGWorld (old_port, old_gdh); |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2225 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2226 GraphicsImportSetGWorld (gi, ximg, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2227 GraphicsImportDraw (gi); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2228 CloseComponent (gi); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2229 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2230 /* Maybe fill in the background field while we have ximg handy. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2231 if (NILP (image_spec_value (img->spec, QCbackground, NULL))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2232 IMAGE_BACKGROUND (img, f, ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2233 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2234 /* Put the image into the pixmap. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2235 x_put_x_image (f, ximg, img->pixmap, width, height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2236 x_destroy_x_image (ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2237 return 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2238 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2239 error: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2240 CloseComponent (gi); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2241 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2242 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2243 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2244 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2245 /* Load an image using the QuickTime Graphics Importer. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2246 Note: The alpha channel does not work for PNG images. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2247 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2248 image_load_quicktime (f, img, type) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2249 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2250 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2251 OSType type; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2252 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2253 Lisp_Object specified_file; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2254 Lisp_Object specified_data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2255 OSErr err; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2256 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2257 specified_file = image_spec_value (img->spec, QCfile, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2258 specified_data = image_spec_value (img->spec, QCdata, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2259 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2260 if (NILP (specified_data)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2261 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2262 /* Read from a file */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2263 Lisp_Object file; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2264 FSSpec fss; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2265 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2266 err = find_image_fsspec (specified_file, &file, &fss); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2267 if (err != noErr) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2268 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2269 if (err == fnfErr) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2270 image_error ("Cannot find image file `%s'", specified_file, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2271 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2272 image_error ("Cannot open `%s'", file, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2273 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2274 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2275 return image_load_qt_1 (f, img, type, &fss, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2276 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2277 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2278 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2279 /* Memory source! */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2280 int success_p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2281 Handle dh; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2282 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2283 err = PtrToHand (SDATA (specified_data), &dh, SBYTES (specified_data)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2284 if (err != noErr) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2285 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2286 image_error ("Cannot allocate data handle for `%s'", |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2287 img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2288 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2289 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2290 success_p = image_load_qt_1 (f, img, type, NULL, dh); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2291 DisposeHandle (dh); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2292 return success_p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2293 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2294 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2295 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2296 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2297 #ifdef MAC_OSX |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2298 /* Load a PNG/JPEG image using Quartz 2D decoding routines. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2299 CGImageCreateWithPNGDataProvider is provided after Mac OS X 10.2. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2300 So don't use this function directly but determine at runtime |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2301 whether it exists. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2302 typedef CGImageRef (*CGImageCreateWithPNGDataProviderProcType) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2303 (CGDataProviderRef, const float [], bool, CGColorRenderingIntent); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2304 static CGImageCreateWithPNGDataProviderProcType MyCGImageCreateWithPNGDataProvider; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2305 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2306 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2307 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2308 init_image_func_pointer () |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2309 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2310 if (NSIsSymbolNameDefined ("_CGImageCreateWithPNGDataProvider")) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2311 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2312 MyCGImageCreateWithPNGDataProvider |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2313 = (CGImageCreateWithPNGDataProviderProcType) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2314 NSAddressOfSymbol (NSLookupAndBindSymbol |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2315 ("_CGImageCreateWithPNGDataProvider")); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2316 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2317 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2318 MyCGImageCreateWithPNGDataProvider = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2319 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2320 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2321 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2322 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2323 image_load_quartz2d (f, img, png_p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2324 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2325 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2326 int png_p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2327 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2328 Lisp_Object file, specified_file; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2329 Lisp_Object specified_data, specified_bg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2330 struct gcpro gcpro1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2331 CGDataProviderRef source; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2332 CGImageRef image; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2333 int width, height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2334 XColor color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2335 XImagePtr ximg = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2336 CGContextRef context; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2337 CGRect rectangle; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2338 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2339 /* Open the file. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2340 specified_file = image_spec_value (img->spec, QCfile, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2341 specified_data = image_spec_value (img->spec, QCdata, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2342 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2343 file = Qnil; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2344 GCPRO1 (file); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2345 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2346 if (NILP (specified_data)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2347 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2348 CFStringRef path; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2349 CFURLRef url; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2350 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2351 file = x_find_image_file (specified_file); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2352 if (!STRINGP (file)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2353 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2354 image_error ("Cannot find image file `%s'", specified_file, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2355 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2356 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2357 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2358 path = CFStringCreateWithCString (NULL, SDATA (file), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2359 kCFStringEncodingUTF8); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2360 url = CFURLCreateWithFileSystemPath (NULL, path, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2361 kCFURLPOSIXPathStyle, 0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2362 CFRelease (path); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2363 source = CGDataProviderCreateWithURL (url); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2364 CFRelease (url); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2365 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2366 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2367 source = CGDataProviderCreateWithData (NULL, SDATA (specified_data), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2368 SBYTES (specified_data), NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2369 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2370 if (png_p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2371 image = (*MyCGImageCreateWithPNGDataProvider) (source, NULL, FALSE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2372 kCGRenderingIntentDefault); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2373 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2374 image = CGImageCreateWithJPEGDataProvider (source, NULL, FALSE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2375 kCGRenderingIntentDefault); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2376 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2377 CGDataProviderRelease (source); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2378 if (image == NULL) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2379 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2380 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2381 image_error ("Error reading image `%s'", img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2382 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2383 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2384 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2385 if (png_p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2386 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2387 specified_bg = image_spec_value (img->spec, QCbackground, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2388 if (!STRINGP (specified_bg) || |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2389 !mac_defined_color (f, SDATA (specified_bg), &color, 0)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2390 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2391 color.pixel = FRAME_BACKGROUND_PIXEL (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2392 color.red = RED16_FROM_ULONG (color.pixel); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2393 color.green = GREEN16_FROM_ULONG (color.pixel); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2394 color.blue = BLUE16_FROM_ULONG (color.pixel); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2395 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2396 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2397 width = img->width = CGImageGetWidth (image); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2398 height = img->height = CGImageGetHeight (image); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2399 if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, &img->pixmap)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2400 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2401 CGImageRelease (image); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2402 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2403 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2404 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2405 rectangle = CGRectMake (0, 0, width, height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2406 QDBeginCGContext (ximg, &context); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2407 if (png_p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2408 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2409 CGContextSetRGBFillColor (context, color.red / 65535.0, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2410 color.green / 65535.0, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2411 color.blue / 65535.0, 1.0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2412 CGContextFillRect (context, rectangle); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2413 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2414 CGContextDrawImage (context, rectangle, image); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2415 QDEndCGContext (ximg, &context); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2416 CGImageRelease (image); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2417 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2418 /* Maybe fill in the background field while we have ximg handy. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2419 if (NILP (image_spec_value (img->spec, QCbackground, NULL))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2420 IMAGE_BACKGROUND (img, f, ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2421 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2422 /* Put the image into the pixmap. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2423 x_put_x_image (f, ximg, img->pixmap, width, height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2424 x_destroy_x_image (ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2425 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2426 return 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2427 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2428 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2429 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2430 #endif /* MAC_OS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2431 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2432 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2433 /*********************************************************************** |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2434 XBM images |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2435 ***********************************************************************/ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2436 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2437 static int xbm_scan P_ ((unsigned char **, unsigned char *, char *, int *)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2438 static int xbm_load P_ ((struct frame *f, struct image *img)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2439 static int xbm_load_image P_ ((struct frame *f, struct image *img, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2440 unsigned char *, unsigned char *)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2441 static int xbm_image_p P_ ((Lisp_Object object)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2442 static int xbm_read_bitmap_data P_ ((unsigned char *, unsigned char *, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2443 int *, int *, unsigned char **)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2444 static int xbm_file_p P_ ((Lisp_Object)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2445 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2446 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2447 /* Indices of image specification fields in xbm_format, below. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2448 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2449 enum xbm_keyword_index |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2450 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2451 XBM_TYPE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2452 XBM_FILE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2453 XBM_WIDTH, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2454 XBM_HEIGHT, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2455 XBM_DATA, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2456 XBM_FOREGROUND, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2457 XBM_BACKGROUND, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2458 XBM_ASCENT, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2459 XBM_MARGIN, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2460 XBM_RELIEF, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2461 XBM_ALGORITHM, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2462 XBM_HEURISTIC_MASK, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2463 XBM_MASK, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2464 XBM_LAST |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2465 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2466 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2467 /* Vector of image_keyword structures describing the format |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2468 of valid XBM image specifications. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2469 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2470 static struct image_keyword xbm_format[XBM_LAST] = |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2471 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2472 {":type", IMAGE_SYMBOL_VALUE, 1}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2473 {":file", IMAGE_STRING_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2474 {":width", IMAGE_POSITIVE_INTEGER_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2475 {":height", IMAGE_POSITIVE_INTEGER_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2476 {":data", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2477 {":foreground", IMAGE_STRING_OR_NIL_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2478 {":background", IMAGE_STRING_OR_NIL_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2479 {":ascent", IMAGE_ASCENT_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2480 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2481 {":relief", IMAGE_INTEGER_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2482 {":conversion", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2483 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2484 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0} |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2485 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2486 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2487 /* Structure describing the image type XBM. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2488 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2489 static struct image_type xbm_type = |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2490 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2491 &Qxbm, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2492 xbm_image_p, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2493 xbm_load, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2494 x_clear_image, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2495 NULL |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2496 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2497 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2498 /* Tokens returned from xbm_scan. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2499 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2500 enum xbm_token |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2501 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2502 XBM_TK_IDENT = 256, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2503 XBM_TK_NUMBER |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2504 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2505 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2506 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2507 /* Return non-zero if OBJECT is a valid XBM-type image specification. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2508 A valid specification is a list starting with the symbol `image' |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2509 The rest of the list is a property list which must contain an |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2510 entry `:type xbm.. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2511 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2512 If the specification specifies a file to load, it must contain |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2513 an entry `:file FILENAME' where FILENAME is a string. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2514 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2515 If the specification is for a bitmap loaded from memory it must |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2516 contain `:width WIDTH', `:height HEIGHT', and `:data DATA', where |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2517 WIDTH and HEIGHT are integers > 0. DATA may be: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2518 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2519 1. a string large enough to hold the bitmap data, i.e. it must |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2520 have a size >= (WIDTH + 7) / 8 * HEIGHT |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2521 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2522 2. a bool-vector of size >= WIDTH * HEIGHT |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2523 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2524 3. a vector of strings or bool-vectors, one for each line of the |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2525 bitmap. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2526 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2527 4. A string containing an in-memory XBM file. WIDTH and HEIGHT |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2528 may not be specified in this case because they are defined in the |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2529 XBM file. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2530 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2531 Both the file and data forms may contain the additional entries |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2532 `:background COLOR' and `:foreground COLOR'. If not present, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2533 foreground and background of the frame on which the image is |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2534 displayed is used. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2535 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2536 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2537 xbm_image_p (object) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2538 Lisp_Object object; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2539 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2540 struct image_keyword kw[XBM_LAST]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2541 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2542 bcopy (xbm_format, kw, sizeof kw); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2543 if (!parse_image_spec (object, kw, XBM_LAST, Qxbm)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2544 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2545 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2546 xassert (EQ (kw[XBM_TYPE].value, Qxbm)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2547 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2548 if (kw[XBM_FILE].count) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2549 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2550 if (kw[XBM_WIDTH].count || kw[XBM_HEIGHT].count || kw[XBM_DATA].count) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2551 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2552 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2553 else if (kw[XBM_DATA].count && xbm_file_p (kw[XBM_DATA].value)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2554 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2555 /* In-memory XBM file. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2556 if (kw[XBM_WIDTH].count || kw[XBM_HEIGHT].count || kw[XBM_FILE].count) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2557 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2558 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2559 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2560 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2561 Lisp_Object data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2562 int width, height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2563 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2564 /* Entries for `:width', `:height' and `:data' must be present. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2565 if (!kw[XBM_WIDTH].count |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2566 || !kw[XBM_HEIGHT].count |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2567 || !kw[XBM_DATA].count) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2568 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2569 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2570 data = kw[XBM_DATA].value; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2571 width = XFASTINT (kw[XBM_WIDTH].value); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2572 height = XFASTINT (kw[XBM_HEIGHT].value); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2573 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2574 /* Check type of data, and width and height against contents of |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2575 data. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2576 if (VECTORP (data)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2577 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2578 int i; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2579 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2580 /* Number of elements of the vector must be >= height. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2581 if (XVECTOR (data)->size < height) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2582 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2583 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2584 /* Each string or bool-vector in data must be large enough |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2585 for one line of the image. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2586 for (i = 0; i < height; ++i) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2587 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2588 Lisp_Object elt = XVECTOR (data)->contents[i]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2589 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2590 if (STRINGP (elt)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2591 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2592 if (SCHARS (elt) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2593 < (width + BITS_PER_CHAR - 1) / BITS_PER_CHAR) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2594 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2595 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2596 else if (BOOL_VECTOR_P (elt)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2597 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2598 if (XBOOL_VECTOR (elt)->size < width) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2599 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2600 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2601 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2602 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2603 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2604 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2605 else if (STRINGP (data)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2606 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2607 if (SCHARS (data) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2608 < (width + BITS_PER_CHAR - 1) / BITS_PER_CHAR * height) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2609 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2610 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2611 else if (BOOL_VECTOR_P (data)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2612 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2613 if (XBOOL_VECTOR (data)->size < width * height) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2614 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2615 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2616 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2617 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2618 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2619 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2620 return 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2621 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2622 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2623 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2624 /* Scan a bitmap file. FP is the stream to read from. Value is |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2625 either an enumerator from enum xbm_token, or a character for a |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2626 single-character token, or 0 at end of file. If scanning an |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2627 identifier, store the lexeme of the identifier in SVAL. If |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2628 scanning a number, store its value in *IVAL. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2629 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2630 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2631 xbm_scan (s, end, sval, ival) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2632 unsigned char **s, *end; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2633 char *sval; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2634 int *ival; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2635 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2636 unsigned int c; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2637 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2638 loop: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2639 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2640 /* Skip white space. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2641 while (*s < end && (c = *(*s)++, isspace (c))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2642 ; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2643 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2644 if (*s >= end) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2645 c = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2646 else if (isdigit (c)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2647 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2648 int value = 0, digit; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2649 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2650 if (c == '0' && *s < end) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2651 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2652 c = *(*s)++; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2653 if (c == 'x' || c == 'X') |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2654 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2655 while (*s < end) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2656 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2657 c = *(*s)++; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2658 if (isdigit (c)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2659 digit = c - '0'; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2660 else if (c >= 'a' && c <= 'f') |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2661 digit = c - 'a' + 10; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2662 else if (c >= 'A' && c <= 'F') |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2663 digit = c - 'A' + 10; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2664 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2665 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2666 value = 16 * value + digit; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2667 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2668 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2669 else if (isdigit (c)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2670 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2671 value = c - '0'; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2672 while (*s < end |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2673 && (c = *(*s)++, isdigit (c))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2674 value = 8 * value + c - '0'; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2675 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2676 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2677 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2678 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2679 value = c - '0'; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2680 while (*s < end |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2681 && (c = *(*s)++, isdigit (c))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2682 value = 10 * value + c - '0'; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2683 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2684 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2685 if (*s < end) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2686 *s = *s - 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2687 *ival = value; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2688 c = XBM_TK_NUMBER; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2689 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2690 else if (isalpha (c) || c == '_') |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2691 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2692 *sval++ = c; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2693 while (*s < end |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2694 && (c = *(*s)++, (isalnum (c) || c == '_'))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2695 *sval++ = c; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2696 *sval = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2697 if (*s < end) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2698 *s = *s - 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2699 c = XBM_TK_IDENT; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2700 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2701 else if (c == '/' && **s == '*') |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2702 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2703 /* C-style comment. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2704 ++*s; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2705 while (**s && (**s != '*' || *(*s + 1) != '/')) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2706 ++*s; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2707 if (**s) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2708 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2709 *s += 2; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2710 goto loop; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2711 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2712 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2713 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2714 return c; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2715 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2716 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2717 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2718 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2719 /* Create a Windows bitmap from X bitmap data. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2720 static HBITMAP |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2721 w32_create_pixmap_from_bitmap_data (int width, int height, char *data) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2722 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2723 static unsigned char swap_nibble[16] |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2724 = { 0x0, 0x8, 0x4, 0xc, /* 0000 1000 0100 1100 */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2725 0x2, 0xa, 0x6, 0xe, /* 0010 1010 0110 1110 */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2726 0x1, 0x9, 0x5, 0xd, /* 0001 1001 0101 1101 */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2727 0x3, 0xb, 0x7, 0xf }; /* 0011 1011 0111 1111 */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2728 int i, j, w1, w2; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2729 unsigned char *bits, *p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2730 HBITMAP bmp; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2731 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2732 w1 = (width + 7) / 8; /* nb of 8bits elt in X bitmap */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2733 w2 = ((width + 15) / 16) * 2; /* nb of 16bits elt in W32 bitmap */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2734 bits = (unsigned char *) alloca (height * w2); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2735 bzero (bits, height * w2); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2736 for (i = 0; i < height; i++) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2737 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2738 p = bits + i*w2; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2739 for (j = 0; j < w1; j++) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2740 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2741 /* Bitswap XBM bytes to match how Windows does things. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2742 unsigned char c = *data++; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2743 *p++ = (unsigned char)((swap_nibble[c & 0xf] << 4) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2744 | (swap_nibble[(c>>4) & 0xf])); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2745 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2746 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2747 bmp = CreateBitmap (width, height, 1, 1, (char *) bits); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2748 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2749 return bmp; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2750 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2751 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2752 static void convert_mono_to_color_image (f, img, foreground, background) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2753 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2754 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2755 COLORREF foreground, background; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2756 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2757 HDC hdc, old_img_dc, new_img_dc; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2758 HGDIOBJ old_prev, new_prev; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2759 HBITMAP new_pixmap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2760 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2761 hdc = get_frame_dc (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2762 old_img_dc = CreateCompatibleDC (hdc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2763 new_img_dc = CreateCompatibleDC (hdc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2764 new_pixmap = CreateCompatibleBitmap (hdc, img->width, img->height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2765 release_frame_dc (f, hdc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2766 old_prev = SelectObject (old_img_dc, img->pixmap); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2767 new_prev = SelectObject (new_img_dc, new_pixmap); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2768 SetTextColor (new_img_dc, foreground); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2769 SetBkColor (new_img_dc, background); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2770 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2771 BitBlt (new_img_dc, 0, 0, img->width, img->height, old_img_dc, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2772 0, 0, SRCCOPY); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2773 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2774 SelectObject (old_img_dc, old_prev); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2775 SelectObject (new_img_dc, new_prev); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2776 DeleteDC (old_img_dc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2777 DeleteDC (new_img_dc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2778 DeleteObject (img->pixmap); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2779 if (new_pixmap == 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2780 fprintf (stderr, "Failed to convert image to color.\n"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2781 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2782 img->pixmap = new_pixmap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2783 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2784 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2785 #define XBM_BIT_SHUFFLE(b) (~(b)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2786 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2787 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2788 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2789 #define XBM_BIT_SHUFFLE(b) (b) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2790 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2791 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2792 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2793 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2794 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2795 Create_Pixmap_From_Bitmap_Data(f, img, data, fg, bg, non_default_colors) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2796 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2797 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2798 char *data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2799 RGB_PIXEL_COLOR fg, bg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2800 int non_default_colors; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2801 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2802 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2803 img->pixmap |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2804 = w32_create_pixmap_from_bitmap_data (img->width, img->height, data); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2805 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2806 /* If colors were specified, transfer the bitmap to a color one. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2807 if (non_default_colors) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2808 convert_mono_to_color_image (f, img, fg, bg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2809 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2810 img->pixmap |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2811 = XCreatePixmapFromBitmapData (FRAME_X_DISPLAY (f), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2812 FRAME_X_WINDOW (f), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2813 data, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2814 img->width, img->height, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2815 fg, bg, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2816 DefaultDepthOfScreen (FRAME_X_SCREEN (f))); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2817 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2818 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2819 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2820 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2821 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2822 /* Replacement for XReadBitmapFileData which isn't available under old |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2823 X versions. CONTENTS is a pointer to a buffer to parse; END is the |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2824 buffer's end. Set *WIDTH and *HEIGHT to the width and height of |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2825 the image. Return in *DATA the bitmap data allocated with xmalloc. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2826 Value is non-zero if successful. DATA null means just test if |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2827 CONTENTS looks like an in-memory XBM file. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2828 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2829 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2830 xbm_read_bitmap_data (contents, end, width, height, data) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2831 unsigned char *contents, *end; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2832 int *width, *height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2833 unsigned char **data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2834 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2835 unsigned char *s = contents; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2836 char buffer[BUFSIZ]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2837 int padding_p = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2838 int v10 = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2839 int bytes_per_line, i, nbytes; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2840 unsigned char *p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2841 int value; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2842 int LA1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2843 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2844 #define match() \ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2845 LA1 = xbm_scan (&s, end, buffer, &value) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2846 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2847 #define expect(TOKEN) \ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2848 if (LA1 != (TOKEN)) \ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2849 goto failure; \ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2850 else \ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2851 match () |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2852 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2853 #define expect_ident(IDENT) \ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2854 if (LA1 == XBM_TK_IDENT && strcmp (buffer, (IDENT)) == 0) \ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2855 match (); \ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2856 else \ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2857 goto failure |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2858 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2859 *width = *height = -1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2860 if (data) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2861 *data = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2862 LA1 = xbm_scan (&s, end, buffer, &value); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2863 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2864 /* Parse defines for width, height and hot-spots. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2865 while (LA1 == '#') |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2866 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2867 match (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2868 expect_ident ("define"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2869 expect (XBM_TK_IDENT); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2870 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2871 if (LA1 == XBM_TK_NUMBER); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2872 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2873 char *p = strrchr (buffer, '_'); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2874 p = p ? p + 1 : buffer; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2875 if (strcmp (p, "width") == 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2876 *width = value; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2877 else if (strcmp (p, "height") == 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2878 *height = value; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2879 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2880 expect (XBM_TK_NUMBER); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2881 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2882 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2883 if (*width < 0 || *height < 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2884 goto failure; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2885 else if (data == NULL) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2886 goto success; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2887 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2888 /* Parse bits. Must start with `static'. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2889 expect_ident ("static"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2890 if (LA1 == XBM_TK_IDENT) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2891 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2892 if (strcmp (buffer, "unsigned") == 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2893 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2894 match (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2895 expect_ident ("char"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2896 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2897 else if (strcmp (buffer, "short") == 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2898 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2899 match (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2900 v10 = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2901 if (*width % 16 && *width % 16 < 9) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2902 padding_p = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2903 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2904 else if (strcmp (buffer, "char") == 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2905 match (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2906 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2907 goto failure; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2908 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2909 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2910 goto failure; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2911 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2912 expect (XBM_TK_IDENT); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2913 expect ('['); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2914 expect (']'); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2915 expect ('='); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2916 expect ('{'); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2917 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2918 bytes_per_line = (*width + 7) / 8 + padding_p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2919 nbytes = bytes_per_line * *height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2920 p = *data = (char *) xmalloc (nbytes); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2921 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2922 if (v10) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2923 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2924 for (i = 0; i < nbytes; i += 2) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2925 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2926 int val = value; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2927 expect (XBM_TK_NUMBER); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2928 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2929 *p++ = XBM_BIT_SHUFFLE (val); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2930 if (!padding_p || ((i + 2) % bytes_per_line)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2931 *p++ = XBM_BIT_SHUFFLE (value >> 8); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2932 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2933 if (LA1 == ',' || LA1 == '}') |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2934 match (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2935 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2936 goto failure; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2937 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2938 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2939 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2940 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2941 for (i = 0; i < nbytes; ++i) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2942 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2943 int val = value; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2944 expect (XBM_TK_NUMBER); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2945 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2946 *p++ = XBM_BIT_SHUFFLE (val); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2947 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2948 if (LA1 == ',' || LA1 == '}') |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2949 match (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2950 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2951 goto failure; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2952 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2953 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2954 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2955 success: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2956 return 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2957 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2958 failure: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2959 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2960 if (data && *data) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2961 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2962 xfree (*data); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2963 *data = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2964 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2965 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2966 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2967 #undef match |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2968 #undef expect |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2969 #undef expect_ident |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2970 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2971 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2972 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2973 /* Load XBM image IMG which will be displayed on frame F from buffer |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2974 CONTENTS. END is the end of the buffer. Value is non-zero if |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2975 successful. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2976 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2977 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2978 xbm_load_image (f, img, contents, end) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2979 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2980 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2981 unsigned char *contents, *end; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2982 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2983 int rc; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2984 unsigned char *data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2985 int success_p = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2986 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2987 rc = xbm_read_bitmap_data (contents, end, &img->width, &img->height, &data); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2988 if (rc) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2989 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2990 unsigned long foreground = FRAME_FOREGROUND_PIXEL (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2991 unsigned long background = FRAME_BACKGROUND_PIXEL (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2992 int non_default_colors = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2993 Lisp_Object value; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2994 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2995 xassert (img->width > 0 && img->height > 0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2996 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2997 /* Get foreground and background colors, maybe allocate colors. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2998 value = image_spec_value (img->spec, QCforeground, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
2999 if (!NILP (value)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3000 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3001 foreground = x_alloc_image_color (f, img, value, foreground); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3002 non_default_colors = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3003 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3004 value = image_spec_value (img->spec, QCbackground, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3005 if (!NILP (value)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3006 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3007 background = x_alloc_image_color (f, img, value, background); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3008 img->background = background; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3009 img->background_valid = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3010 non_default_colors = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3011 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3012 |
54920
38cb79e68369
(PNG_BG_COLOR_SHIFT): Remove.
Kim F. Storm <storm@cua.dk>
parents:
54427
diff
changeset
|
3013 Create_Pixmap_From_Bitmap_Data (f, img, data, |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3014 foreground, background, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3015 non_default_colors); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3016 xfree (data); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3017 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3018 if (img->pixmap == NO_PIXMAP) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3019 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3020 x_clear_image (f, img); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3021 image_error ("Unable to create X pixmap for `%s'", img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3022 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3023 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3024 success_p = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3025 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3026 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3027 image_error ("Error loading XBM image `%s'", img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3028 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3029 return success_p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3030 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3031 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3032 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3033 /* Value is non-zero if DATA looks like an in-memory XBM file. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3034 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3035 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3036 xbm_file_p (data) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3037 Lisp_Object data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3038 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3039 int w, h; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3040 return (STRINGP (data) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3041 && xbm_read_bitmap_data (SDATA (data), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3042 (SDATA (data) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3043 + SBYTES (data)), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3044 &w, &h, NULL)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3045 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3046 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3047 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3048 /* Fill image IMG which is used on frame F with pixmap data. Value is |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3049 non-zero if successful. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3050 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3051 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3052 xbm_load (f, img) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3053 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3054 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3055 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3056 int success_p = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3057 Lisp_Object file_name; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3058 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3059 xassert (xbm_image_p (img->spec)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3060 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3061 /* If IMG->spec specifies a file name, create a non-file spec from it. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3062 file_name = image_spec_value (img->spec, QCfile, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3063 if (STRINGP (file_name)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3064 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3065 Lisp_Object file; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3066 unsigned char *contents; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3067 int size; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3068 struct gcpro gcpro1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3069 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3070 file = x_find_image_file (file_name); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3071 GCPRO1 (file); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3072 if (!STRINGP (file)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3073 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3074 image_error ("Cannot find image file `%s'", file_name, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3075 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3076 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3077 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3078 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3079 contents = slurp_file (SDATA (file), &size); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3080 if (contents == NULL) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3081 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3082 image_error ("Error loading XBM image `%s'", img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3083 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3084 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3085 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3086 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3087 success_p = xbm_load_image (f, img, contents, contents + size); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3088 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3089 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3090 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3091 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3092 struct image_keyword fmt[XBM_LAST]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3093 Lisp_Object data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3094 unsigned long foreground = FRAME_FOREGROUND_PIXEL (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3095 unsigned long background = FRAME_BACKGROUND_PIXEL (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3096 int non_default_colors = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3097 char *bits; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3098 int parsed_p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3099 int in_memory_file_p = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3100 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3101 /* See if data looks like an in-memory XBM file. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3102 data = image_spec_value (img->spec, QCdata, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3103 in_memory_file_p = xbm_file_p (data); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3104 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3105 /* Parse the image specification. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3106 bcopy (xbm_format, fmt, sizeof fmt); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3107 parsed_p = parse_image_spec (img->spec, fmt, XBM_LAST, Qxbm); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3108 xassert (parsed_p); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3109 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3110 /* Get specified width, and height. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3111 if (!in_memory_file_p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3112 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3113 img->width = XFASTINT (fmt[XBM_WIDTH].value); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3114 img->height = XFASTINT (fmt[XBM_HEIGHT].value); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3115 xassert (img->width > 0 && img->height > 0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3116 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3117 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3118 /* Get foreground and background colors, maybe allocate colors. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3119 if (fmt[XBM_FOREGROUND].count |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3120 && STRINGP (fmt[XBM_FOREGROUND].value)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3121 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3122 foreground = x_alloc_image_color (f, img, fmt[XBM_FOREGROUND].value, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3123 foreground); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3124 non_default_colors = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3125 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3126 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3127 if (fmt[XBM_BACKGROUND].count |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3128 && STRINGP (fmt[XBM_BACKGROUND].value)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3129 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3130 background = x_alloc_image_color (f, img, fmt[XBM_BACKGROUND].value, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3131 background); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3132 non_default_colors = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3133 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3134 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3135 if (in_memory_file_p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3136 success_p = xbm_load_image (f, img, SDATA (data), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3137 (SDATA (data) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3138 + SBYTES (data))); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3139 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3140 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3141 if (VECTORP (data)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3142 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3143 int i; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3144 char *p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3145 int nbytes = (img->width + BITS_PER_CHAR - 1) / BITS_PER_CHAR; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3146 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3147 p = bits = (char *) alloca (nbytes * img->height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3148 for (i = 0; i < img->height; ++i, p += nbytes) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3149 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3150 Lisp_Object line = XVECTOR (data)->contents[i]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3151 if (STRINGP (line)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3152 bcopy (SDATA (line), p, nbytes); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3153 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3154 bcopy (XBOOL_VECTOR (line)->data, p, nbytes); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3155 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3156 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3157 else if (STRINGP (data)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3158 bits = SDATA (data); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3159 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3160 bits = XBOOL_VECTOR (data)->data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3161 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3162 /* Create the pixmap. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3163 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3164 Create_Pixmap_From_Bitmap_Data (f, img, bits, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3165 foreground, background, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3166 non_default_colors); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3167 if (img->pixmap) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3168 success_p = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3169 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3170 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3171 image_error ("Unable to create pixmap for XBM image `%s'", |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3172 img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3173 x_clear_image (f, img); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3174 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3175 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3176 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3177 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3178 return success_p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3179 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3180 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3181 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3182 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3183 /*********************************************************************** |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3184 XPM images |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3185 ***********************************************************************/ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3186 |
55540
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3187 #if defined (HAVE_XPM) || defined (MAC_OS) |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3188 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3189 static int xpm_image_p P_ ((Lisp_Object object)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3190 static int xpm_load P_ ((struct frame *f, struct image *img)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3191 static int xpm_valid_color_symbols_p P_ ((Lisp_Object)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3192 |
55540
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3193 #endif /* HAVE_XPM || MAC_OS */ |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3194 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3195 #ifdef HAVE_XPM |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3196 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3197 /* Indicate to xpm.h that we don't have Xlib. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3198 #define FOR_MSW |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3199 /* simx.h in xpm defines XColor and XImage differently than Emacs. */ |
55375
b9215c2d57ad
(Display) [HAVE_NTGUI]: Redefine while loading xpm.h to avoid name clash.
Jason Rumney <jasonr@gnu.org>
parents:
55022
diff
changeset
|
3200 /* It also defines Display the same way as Emacs, but gcc 3.3 still barfs. */ |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3201 #define XColor xpm_XColor |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3202 #define XImage xpm_XImage |
55375
b9215c2d57ad
(Display) [HAVE_NTGUI]: Redefine while loading xpm.h to avoid name clash.
Jason Rumney <jasonr@gnu.org>
parents:
55022
diff
changeset
|
3203 #define Display xpm_Display |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3204 #define PIXEL_ALREADY_TYPEDEFED |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3205 #include "X11/xpm.h" |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3206 #undef FOR_MSW |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3207 #undef XColor |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3208 #undef XImage |
55375
b9215c2d57ad
(Display) [HAVE_NTGUI]: Redefine while loading xpm.h to avoid name clash.
Jason Rumney <jasonr@gnu.org>
parents:
55022
diff
changeset
|
3209 #undef Display |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3210 #undef PIXEL_ALREADY_TYPEDEFED |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3211 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3212 #include "X11/xpm.h" |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3213 #endif /* HAVE_NTGUI */ |
55540
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3214 #endif /* HAVE_XPM */ |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3215 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3216 #if defined (HAVE_XPM) || defined (MAC_OS) |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3217 /* The symbol `xpm' identifying XPM-format images. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3218 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3219 Lisp_Object Qxpm; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3220 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3221 /* Indices of image specification fields in xpm_format, below. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3222 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3223 enum xpm_keyword_index |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3224 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3225 XPM_TYPE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3226 XPM_FILE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3227 XPM_DATA, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3228 XPM_ASCENT, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3229 XPM_MARGIN, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3230 XPM_RELIEF, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3231 XPM_ALGORITHM, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3232 XPM_HEURISTIC_MASK, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3233 XPM_MASK, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3234 XPM_COLOR_SYMBOLS, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3235 XPM_BACKGROUND, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3236 XPM_LAST |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3237 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3238 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3239 /* Vector of image_keyword structures describing the format |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3240 of valid XPM image specifications. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3241 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3242 static struct image_keyword xpm_format[XPM_LAST] = |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3243 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3244 {":type", IMAGE_SYMBOL_VALUE, 1}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3245 {":file", IMAGE_STRING_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3246 {":data", IMAGE_STRING_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3247 {":ascent", IMAGE_ASCENT_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3248 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3249 {":relief", IMAGE_INTEGER_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3250 {":conversion", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3251 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3252 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3253 {":color-symbols", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3254 {":background", IMAGE_STRING_OR_NIL_VALUE, 0} |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3255 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3256 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3257 /* Structure describing the image type XPM. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3258 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3259 static struct image_type xpm_type = |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3260 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3261 &Qxpm, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3262 xpm_image_p, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3263 xpm_load, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3264 x_clear_image, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3265 NULL |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3266 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3267 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3268 #ifdef HAVE_X_WINDOWS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3269 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3270 /* Define ALLOC_XPM_COLORS if we can use Emacs' own color allocation |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3271 functions for allocating image colors. Our own functions handle |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3272 color allocation failures more gracefully than the ones on the XPM |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3273 lib. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3274 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3275 #if defined XpmAllocColor && defined XpmFreeColors && defined XpmColorClosure |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3276 #define ALLOC_XPM_COLORS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3277 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3278 #endif /* HAVE_X_WINDOWS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3279 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3280 #ifdef ALLOC_XPM_COLORS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3281 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3282 static void xpm_init_color_cache P_ ((struct frame *, XpmAttributes *)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3283 static void xpm_free_color_cache P_ ((void)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3284 static int xpm_lookup_color P_ ((struct frame *, char *, XColor *)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3285 static int xpm_color_bucket P_ ((char *)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3286 static struct xpm_cached_color *xpm_cache_color P_ ((struct frame *, char *, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3287 XColor *, int)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3288 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3289 /* An entry in a hash table used to cache color definitions of named |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3290 colors. This cache is necessary to speed up XPM image loading in |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3291 case we do color allocations ourselves. Without it, we would need |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3292 a call to XParseColor per pixel in the image. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3293 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3294 struct xpm_cached_color |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3295 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3296 /* Next in collision chain. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3297 struct xpm_cached_color *next; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3298 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3299 /* Color definition (RGB and pixel color). */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3300 XColor color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3301 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3302 /* Color name. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3303 char name[1]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3304 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3305 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3306 /* The hash table used for the color cache, and its bucket vector |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3307 size. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3308 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3309 #define XPM_COLOR_CACHE_BUCKETS 1001 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3310 struct xpm_cached_color **xpm_color_cache; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3311 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3312 /* Initialize the color cache. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3313 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3314 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3315 xpm_init_color_cache (f, attrs) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3316 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3317 XpmAttributes *attrs; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3318 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3319 size_t nbytes = XPM_COLOR_CACHE_BUCKETS * sizeof *xpm_color_cache; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3320 xpm_color_cache = (struct xpm_cached_color **) xmalloc (nbytes); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3321 memset (xpm_color_cache, 0, nbytes); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3322 init_color_table (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3323 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3324 if (attrs->valuemask & XpmColorSymbols) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3325 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3326 int i; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3327 XColor color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3328 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3329 for (i = 0; i < attrs->numsymbols; ++i) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3330 if (XParseColor (FRAME_X_DISPLAY (f), FRAME_X_COLORMAP (f), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3331 attrs->colorsymbols[i].value, &color)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3332 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3333 color.pixel = lookup_rgb_color (f, color.red, color.green, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3334 color.blue); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3335 xpm_cache_color (f, attrs->colorsymbols[i].name, &color, -1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3336 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3337 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3338 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3339 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3340 /* Free the color cache. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3341 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3342 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3343 xpm_free_color_cache () |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3344 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3345 struct xpm_cached_color *p, *next; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3346 int i; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3347 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3348 for (i = 0; i < XPM_COLOR_CACHE_BUCKETS; ++i) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3349 for (p = xpm_color_cache[i]; p; p = next) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3350 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3351 next = p->next; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3352 xfree (p); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3353 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3354 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3355 xfree (xpm_color_cache); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3356 xpm_color_cache = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3357 free_color_table (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3358 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3359 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3360 /* Return the bucket index for color named COLOR_NAME in the color |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3361 cache. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3362 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3363 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3364 xpm_color_bucket (color_name) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3365 char *color_name; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3366 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3367 unsigned h = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3368 char *s; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3369 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3370 for (s = color_name; *s; ++s) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3371 h = (h << 2) ^ *s; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3372 return h %= XPM_COLOR_CACHE_BUCKETS; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3373 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3374 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3375 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3376 /* On frame F, cache values COLOR for color with name COLOR_NAME. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3377 BUCKET, if >= 0, is a precomputed bucket index. Value is the cache |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3378 entry added. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3379 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3380 static struct xpm_cached_color * |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3381 xpm_cache_color (f, color_name, color, bucket) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3382 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3383 char *color_name; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3384 XColor *color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3385 int bucket; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3386 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3387 size_t nbytes; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3388 struct xpm_cached_color *p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3389 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3390 if (bucket < 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3391 bucket = xpm_color_bucket (color_name); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3392 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3393 nbytes = sizeof *p + strlen (color_name); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3394 p = (struct xpm_cached_color *) xmalloc (nbytes); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3395 strcpy (p->name, color_name); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3396 p->color = *color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3397 p->next = xpm_color_cache[bucket]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3398 xpm_color_cache[bucket] = p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3399 return p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3400 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3401 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3402 /* Look up color COLOR_NAME for frame F in the color cache. If found, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3403 return the cached definition in *COLOR. Otherwise, make a new |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3404 entry in the cache and allocate the color. Value is zero if color |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3405 allocation failed. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3406 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3407 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3408 xpm_lookup_color (f, color_name, color) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3409 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3410 char *color_name; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3411 XColor *color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3412 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3413 struct xpm_cached_color *p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3414 int h = xpm_color_bucket (color_name); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3415 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3416 for (p = xpm_color_cache[h]; p; p = p->next) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3417 if (strcmp (p->name, color_name) == 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3418 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3419 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3420 if (p != NULL) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3421 *color = p->color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3422 else if (XParseColor (FRAME_X_DISPLAY (f), FRAME_X_COLORMAP (f), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3423 color_name, color)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3424 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3425 color->pixel = lookup_rgb_color (f, color->red, color->green, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3426 color->blue); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3427 p = xpm_cache_color (f, color_name, color, h); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3428 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3429 /* You get `opaque' at least from ImageMagick converting pbm to xpm |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3430 with transparency, and it's useful. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3431 else if (strcmp ("opaque", color_name) == 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3432 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3433 bzero (color, sizeof (XColor)); /* Is this necessary/correct? */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3434 color->pixel = FRAME_FOREGROUND_PIXEL (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3435 p = xpm_cache_color (f, color_name, color, h); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3436 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3437 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3438 return p != NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3439 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3440 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3441 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3442 /* Callback for allocating color COLOR_NAME. Called from the XPM lib. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3443 CLOSURE is a pointer to the frame on which we allocate the |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3444 color. Return in *COLOR the allocated color. Value is non-zero |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3445 if successful. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3446 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3447 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3448 xpm_alloc_color (dpy, cmap, color_name, color, closure) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3449 Display *dpy; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3450 Colormap cmap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3451 char *color_name; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3452 XColor *color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3453 void *closure; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3454 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3455 return xpm_lookup_color ((struct frame *) closure, color_name, color); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3456 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3457 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3458 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3459 /* Callback for freeing NPIXELS colors contained in PIXELS. CLOSURE |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3460 is a pointer to the frame on which we allocate the color. Value is |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3461 non-zero if successful. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3462 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3463 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3464 xpm_free_colors (dpy, cmap, pixels, npixels, closure) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3465 Display *dpy; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3466 Colormap cmap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3467 Pixel *pixels; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3468 int npixels; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3469 void *closure; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3470 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3471 return 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3472 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3473 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3474 #endif /* ALLOC_XPM_COLORS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3475 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3476 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3477 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3478 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3479 /* XPM library details. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3480 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3481 DEF_IMGLIB_FN (XpmFreeAttributes); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3482 DEF_IMGLIB_FN (XpmCreateImageFromBuffer); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3483 DEF_IMGLIB_FN (XpmReadFileToImage); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3484 DEF_IMGLIB_FN (XImageFree); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3485 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3486 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3487 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3488 init_xpm_functions (void) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3489 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3490 HMODULE library; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3491 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3492 if (!(library = LoadLibrary ("libXpm.dll"))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3493 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3494 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3495 LOAD_IMGLIB_FN (library, XpmFreeAttributes); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3496 LOAD_IMGLIB_FN (library, XpmCreateImageFromBuffer); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3497 LOAD_IMGLIB_FN (library, XpmReadFileToImage); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3498 LOAD_IMGLIB_FN (library, XImageFree); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3499 return 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3500 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3501 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3502 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3503 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3504 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3505 /* Value is non-zero if COLOR_SYMBOLS is a valid color symbols list |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3506 for XPM images. Such a list must consist of conses whose car and |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3507 cdr are strings. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3508 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3509 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3510 xpm_valid_color_symbols_p (color_symbols) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3511 Lisp_Object color_symbols; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3512 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3513 while (CONSP (color_symbols)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3514 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3515 Lisp_Object sym = XCAR (color_symbols); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3516 if (!CONSP (sym) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3517 || !STRINGP (XCAR (sym)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3518 || !STRINGP (XCDR (sym))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3519 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3520 color_symbols = XCDR (color_symbols); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3521 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3522 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3523 return NILP (color_symbols); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3524 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3525 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3526 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3527 /* Value is non-zero if OBJECT is a valid XPM image specification. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3528 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3529 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3530 xpm_image_p (object) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3531 Lisp_Object object; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3532 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3533 struct image_keyword fmt[XPM_LAST]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3534 bcopy (xpm_format, fmt, sizeof fmt); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3535 return (parse_image_spec (object, fmt, XPM_LAST, Qxpm) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3536 /* Either `:file' or `:data' must be present. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3537 && fmt[XPM_FILE].count + fmt[XPM_DATA].count == 1 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3538 /* Either no `:color-symbols' or it's a list of conses |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3539 whose car and cdr are strings. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3540 && (fmt[XPM_COLOR_SYMBOLS].count == 0 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3541 || xpm_valid_color_symbols_p (fmt[XPM_COLOR_SYMBOLS].value))); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3542 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3543 |
55540
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3544 #endif /* HAVE_XPM || MAC_OS */ |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3545 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3546 /* Load image IMG which will be displayed on frame F. Value is |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3547 non-zero if successful. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3548 |
55540
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3549 #ifdef HAVE_XPM |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3550 |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3551 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3552 xpm_load (f, img) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3553 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3554 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3555 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3556 int rc; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3557 XpmAttributes attrs; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3558 Lisp_Object specified_file, color_symbols; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3559 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3560 HDC hdc; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3561 xpm_XImage * xpm_image = NULL, * xpm_mask = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3562 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3563 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3564 /* Configure the XPM lib. Use the visual of frame F. Allocate |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3565 close colors. Return colors allocated. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3566 bzero (&attrs, sizeof attrs); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3567 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3568 #ifndef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3569 attrs.visual = FRAME_X_VISUAL (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3570 attrs.colormap = FRAME_X_COLORMAP (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3571 attrs.valuemask |= XpmVisual; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3572 attrs.valuemask |= XpmColormap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3573 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3574 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3575 #ifdef ALLOC_XPM_COLORS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3576 /* Allocate colors with our own functions which handle |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3577 failing color allocation more gracefully. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3578 attrs.color_closure = f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3579 attrs.alloc_color = xpm_alloc_color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3580 attrs.free_colors = xpm_free_colors; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3581 attrs.valuemask |= XpmAllocColor | XpmFreeColors | XpmColorClosure; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3582 #else /* not ALLOC_XPM_COLORS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3583 /* Let the XPM lib allocate colors. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3584 attrs.valuemask |= XpmReturnAllocPixels; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3585 #ifdef XpmAllocCloseColors |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3586 attrs.alloc_close_colors = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3587 attrs.valuemask |= XpmAllocCloseColors; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3588 #else /* not XpmAllocCloseColors */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3589 attrs.closeness = 600; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3590 attrs.valuemask |= XpmCloseness; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3591 #endif /* not XpmAllocCloseColors */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3592 #endif /* ALLOC_XPM_COLORS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3593 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3594 /* If image specification contains symbolic color definitions, add |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3595 these to `attrs'. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3596 color_symbols = image_spec_value (img->spec, QCcolor_symbols, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3597 if (CONSP (color_symbols)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3598 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3599 Lisp_Object tail; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3600 XpmColorSymbol *xpm_syms; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3601 int i, size; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3602 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3603 attrs.valuemask |= XpmColorSymbols; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3604 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3605 /* Count number of symbols. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3606 attrs.numsymbols = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3607 for (tail = color_symbols; CONSP (tail); tail = XCDR (tail)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3608 ++attrs.numsymbols; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3609 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3610 /* Allocate an XpmColorSymbol array. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3611 size = attrs.numsymbols * sizeof *xpm_syms; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3612 xpm_syms = (XpmColorSymbol *) alloca (size); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3613 bzero (xpm_syms, size); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3614 attrs.colorsymbols = xpm_syms; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3615 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3616 /* Fill the color symbol array. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3617 for (tail = color_symbols, i = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3618 CONSP (tail); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3619 ++i, tail = XCDR (tail)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3620 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3621 Lisp_Object name = XCAR (XCAR (tail)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3622 Lisp_Object color = XCDR (XCAR (tail)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3623 xpm_syms[i].name = (char *) alloca (SCHARS (name) + 1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3624 strcpy (xpm_syms[i].name, SDATA (name)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3625 xpm_syms[i].value = (char *) alloca (SCHARS (color) + 1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3626 strcpy (xpm_syms[i].value, SDATA (color)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3627 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3628 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3629 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3630 /* Create a pixmap for the image, either from a file, or from a |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3631 string buffer containing data in the same format as an XPM file. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3632 #ifdef ALLOC_XPM_COLORS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3633 xpm_init_color_cache (f, &attrs); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3634 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3635 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3636 specified_file = image_spec_value (img->spec, QCfile, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3637 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3638 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3639 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3640 HDC frame_dc = get_frame_dc (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3641 hdc = CreateCompatibleDC (frame_dc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3642 release_frame_dc (f, frame_dc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3643 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3644 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3645 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3646 if (STRINGP (specified_file)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3647 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3648 Lisp_Object file = x_find_image_file (specified_file); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3649 if (!STRINGP (file)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3650 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3651 image_error ("Cannot find image file `%s'", specified_file, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3652 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3653 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3654 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3655 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3656 /* XpmReadFileToPixmap is not available in the Windows port of |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3657 libxpm. But XpmReadFileToImage almost does what we want. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3658 rc = fn_XpmReadFileToImage (&hdc, SDATA (file), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3659 &xpm_image, &xpm_mask, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3660 &attrs); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3661 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3662 rc = XpmReadFileToPixmap (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3663 SDATA (file), &img->pixmap, &img->mask, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3664 &attrs); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3665 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3666 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3667 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3668 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3669 Lisp_Object buffer = image_spec_value (img->spec, QCdata, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3670 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3671 /* XpmCreatePixmapFromBuffer is not available in the Windows port |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3672 of libxpm. But XpmCreateImageFromBuffer almost does what we want. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3673 rc = fn_XpmCreateImageFromBuffer (&hdc, SDATA (buffer), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3674 &xpm_image, &xpm_mask, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3675 &attrs); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3676 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3677 rc = XpmCreatePixmapFromBuffer (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3678 SDATA (buffer), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3679 &img->pixmap, &img->mask, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3680 &attrs); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3681 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3682 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3683 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3684 if (rc == XpmSuccess) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3685 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3686 #if defined (COLOR_TABLE_SUPPORT) && defined (ALLOC_XPM_COLORS) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3687 img->colors = colors_in_color_table (&img->ncolors); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3688 #else /* not ALLOC_XPM_COLORS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3689 int i; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3690 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3691 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3692 /* W32 XPM uses XImage to wrap what W32 Emacs calls a Pixmap, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3693 plus some duplicate attributes. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3694 if (xpm_image && xpm_image->bitmap) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3695 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3696 img->pixmap = xpm_image->bitmap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3697 /* XImageFree in libXpm frees XImage struct without destroying |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3698 the bitmap, which is what we want. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3699 fn_XImageFree (xpm_image); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3700 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3701 if (xpm_mask && xpm_mask->bitmap) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3702 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3703 /* The mask appears to be inverted compared with what we expect. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3704 TODO: invert our expectations. See other places where we |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3705 have to invert bits because our idea of masks is backwards. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3706 HGDIOBJ old_obj; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3707 old_obj = SelectObject (hdc, xpm_mask->bitmap); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3708 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3709 PatBlt (hdc, 0, 0, xpm_mask->width, xpm_mask->height, DSTINVERT); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3710 SelectObject (hdc, old_obj); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3711 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3712 img->mask = xpm_mask->bitmap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3713 fn_XImageFree (xpm_mask); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3714 DeleteDC (hdc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3715 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3716 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3717 DeleteDC (hdc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3718 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3719 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3720 /* Remember allocated colors. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3721 img->ncolors = attrs.nalloc_pixels; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3722 img->colors = (unsigned long *) xmalloc (img->ncolors |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3723 * sizeof *img->colors); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3724 for (i = 0; i < attrs.nalloc_pixels; ++i) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3725 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3726 img->colors[i] = attrs.alloc_pixels[i]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3727 #ifdef DEBUG_X_COLORS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3728 register_color (img->colors[i]); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3729 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3730 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3731 #endif /* not ALLOC_XPM_COLORS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3732 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3733 img->width = attrs.width; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3734 img->height = attrs.height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3735 xassert (img->width > 0 && img->height > 0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3736 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3737 /* The call to XpmFreeAttributes below frees attrs.alloc_pixels. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3738 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3739 fn_XpmFreeAttributes (&attrs); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3740 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3741 XpmFreeAttributes (&attrs); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3742 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3743 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3744 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3745 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3746 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3747 DeleteDC (hdc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3748 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3749 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3750 switch (rc) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3751 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3752 case XpmOpenFailed: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3753 image_error ("Error opening XPM file (%s)", img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3754 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3755 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3756 case XpmFileInvalid: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3757 image_error ("Invalid XPM file (%s)", img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3758 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3759 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3760 case XpmNoMemory: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3761 image_error ("Out of memory (%s)", img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3762 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3763 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3764 case XpmColorFailed: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3765 image_error ("Color allocation error (%s)", img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3766 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3767 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3768 default: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3769 image_error ("Unknown error (%s)", img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3770 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3771 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3772 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3773 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3774 #ifdef ALLOC_XPM_COLORS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3775 xpm_free_color_cache (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3776 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3777 return rc == XpmSuccess; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3778 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3779 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3780 #endif /* HAVE_XPM */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
3781 |
55540
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3782 #ifdef MAC_OS |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3783 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3784 /* XPM support functions for Mac OS where libxpm is not available. |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3785 Only XPM version 3 (without any extensions) is supported. */ |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3786 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3787 static int xpm_scan P_ ((unsigned char **, unsigned char *, |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3788 unsigned char **, int *)); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3789 static Lisp_Object xpm_make_color_table_v |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3790 P_ ((void (**) (Lisp_Object, unsigned char *, int, Lisp_Object), |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3791 Lisp_Object (**) (Lisp_Object, unsigned char *, int))); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3792 static void xpm_put_color_table_v P_ ((Lisp_Object, unsigned char *, |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3793 int, Lisp_Object)); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3794 static Lisp_Object xpm_get_color_table_v P_ ((Lisp_Object, |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3795 unsigned char *, int)); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3796 static Lisp_Object xpm_make_color_table_h |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3797 P_ ((void (**) (Lisp_Object, unsigned char *, int, Lisp_Object), |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3798 Lisp_Object (**) (Lisp_Object, unsigned char *, int))); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3799 static void xpm_put_color_table_h P_ ((Lisp_Object, unsigned char *, |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3800 int, Lisp_Object)); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3801 static Lisp_Object xpm_get_color_table_h P_ ((Lisp_Object, |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3802 unsigned char *, int)); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3803 static int xpm_str_to_color_key P_ ((char *)); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3804 static int xpm_load_image P_ ((struct frame *, struct image *, |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3805 unsigned char *, unsigned char *)); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3806 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3807 /* Tokens returned from xpm_scan. */ |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3808 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3809 enum xpm_token |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3810 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3811 XPM_TK_IDENT = 256, |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3812 XPM_TK_STRING, |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3813 XPM_TK_EOF |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3814 }; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3815 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3816 /* Scan an XPM data and return a character (< 256) or a token defined |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3817 by enum xpm_token above. *S and END are the start (inclusive) and |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3818 the end (exclusive) addresses of the data, respectively. Advance |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3819 *S while scanning. If token is either XPM_TK_IDENT or |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3820 XPM_TK_STRING, *BEG and *LEN are set to the start address and the |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3821 length of the corresponding token, respectively. */ |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3822 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3823 static int |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3824 xpm_scan (s, end, beg, len) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3825 unsigned char **s, *end, **beg; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3826 int *len; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3827 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3828 int c; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3829 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3830 while (*s < end) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3831 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3832 /* Skip white-space. */ |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3833 while (*s < end && (c = *(*s)++, isspace (c))) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3834 ; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3835 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3836 /* gnus-pointer.xpm uses '-' in its identifier. |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3837 sb-dir-plus.xpm uses '+' in its identifier. */ |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3838 if (isalpha (c) || c == '_' || c == '-' || c == '+') |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3839 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3840 *beg = *s - 1; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3841 while (*s < end && |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3842 (c = **s, isalnum (c) || c == '_' || c == '-' || c == '+')) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3843 ++*s; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3844 *len = *s - *beg; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3845 return XPM_TK_IDENT; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3846 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3847 else if (c == '"') |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3848 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3849 *beg = *s; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3850 while (*s < end && **s != '"') |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3851 ++*s; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3852 *len = *s - *beg; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3853 if (*s < end) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3854 ++*s; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3855 return XPM_TK_STRING; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3856 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3857 else if (c == '/') |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3858 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3859 if (*s < end && **s == '*') |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3860 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3861 /* C-style comment. */ |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3862 ++*s; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3863 do |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3864 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3865 while (*s < end && *(*s)++ != '*') |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3866 ; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3867 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3868 while (*s < end && **s != '/'); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3869 if (*s < end) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3870 ++*s; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3871 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3872 else |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3873 return c; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3874 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3875 else |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3876 return c; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3877 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3878 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3879 return XPM_TK_EOF; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3880 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3881 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3882 /* Functions for color table lookup in XPM data. A Key is a string |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3883 specifying the color of each pixel in XPM data. A value is either |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3884 an integer that specifies a pixel color, Qt that specifies |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3885 transparency, or Qnil for the unspecified color. If the length of |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3886 the key string is one, a vector is used as a table. Otherwise, a |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3887 hash table is used. */ |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3888 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3889 static Lisp_Object |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3890 xpm_make_color_table_v (put_func, get_func) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3891 void (**put_func) (Lisp_Object, unsigned char *, int, Lisp_Object); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3892 Lisp_Object (**get_func) (Lisp_Object, unsigned char *, int); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3893 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3894 *put_func = xpm_put_color_table_v; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3895 *get_func = xpm_get_color_table_v; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3896 return Fmake_vector (make_number (256), Qnil); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3897 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3898 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3899 static void |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3900 xpm_put_color_table_v (color_table, chars_start, chars_len, color) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3901 Lisp_Object color_table; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3902 unsigned char *chars_start; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3903 int chars_len; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3904 Lisp_Object color; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3905 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3906 XVECTOR (color_table)->contents[*chars_start] = color; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3907 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3908 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3909 static Lisp_Object |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3910 xpm_get_color_table_v (color_table, chars_start, chars_len) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3911 Lisp_Object color_table; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3912 unsigned char *chars_start; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3913 int chars_len; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3914 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3915 return XVECTOR (color_table)->contents[*chars_start]; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3916 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3917 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3918 static Lisp_Object |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3919 xpm_make_color_table_h (put_func, get_func) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3920 void (**put_func) (Lisp_Object, unsigned char *, int, Lisp_Object); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3921 Lisp_Object (**get_func) (Lisp_Object, unsigned char *, int); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3922 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3923 *put_func = xpm_put_color_table_h; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3924 *get_func = xpm_get_color_table_h; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3925 return make_hash_table (Qequal, make_number (DEFAULT_HASH_SIZE), |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3926 make_float (DEFAULT_REHASH_SIZE), |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3927 make_float (DEFAULT_REHASH_THRESHOLD), |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3928 Qnil, Qnil, Qnil); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3929 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3930 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3931 static void |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3932 xpm_put_color_table_h (color_table, chars_start, chars_len, color) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3933 Lisp_Object color_table; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3934 unsigned char *chars_start; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3935 int chars_len; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3936 Lisp_Object color; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3937 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3938 struct Lisp_Hash_Table *table = XHASH_TABLE (color_table); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3939 unsigned hash_code; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3940 Lisp_Object chars = make_unibyte_string (chars_start, chars_len); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3941 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3942 hash_lookup (table, chars, &hash_code); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3943 hash_put (table, chars, color, hash_code); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3944 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3945 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3946 static Lisp_Object |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3947 xpm_get_color_table_h (color_table, chars_start, chars_len) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3948 Lisp_Object color_table; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3949 unsigned char *chars_start; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3950 int chars_len; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3951 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3952 struct Lisp_Hash_Table *table = XHASH_TABLE (color_table); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3953 int i = hash_lookup (table, make_unibyte_string (chars_start, chars_len), |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3954 NULL); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3955 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3956 return i >= 0 ? HASH_VALUE (table, i) : Qnil; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3957 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3958 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3959 enum xpm_color_key { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3960 XPM_COLOR_KEY_S, |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3961 XPM_COLOR_KEY_M, |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3962 XPM_COLOR_KEY_G4, |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3963 XPM_COLOR_KEY_G, |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3964 XPM_COLOR_KEY_C |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3965 }; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3966 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3967 static char xpm_color_key_strings[][4] = {"s", "m", "g4", "g", "c"}; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3968 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3969 static int |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3970 xpm_str_to_color_key (s) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3971 char *s; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3972 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3973 int i; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3974 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3975 for (i = 0; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3976 i < sizeof xpm_color_key_strings / sizeof xpm_color_key_strings[0]; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3977 i++) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3978 if (strcmp (xpm_color_key_strings[i], s) == 0) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3979 return i; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3980 return -1; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3981 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3982 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3983 static int |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3984 xpm_load_image (f, img, contents, end) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3985 struct frame *f; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3986 struct image *img; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3987 unsigned char *contents, *end; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3988 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3989 unsigned char *s = contents, *beg, *str; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3990 unsigned char buffer[BUFSIZ]; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3991 int width, height, x, y; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3992 int num_colors, chars_per_pixel; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3993 int len, LA1; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3994 void (*put_color_table) (Lisp_Object, unsigned char *, int, Lisp_Object); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3995 Lisp_Object (*get_color_table) (Lisp_Object, unsigned char *, int); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3996 Lisp_Object frame, color_symbols, color_table; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3997 int best_key, have_mask = 0; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3998 XImagePtr ximg = NULL, mask_img = NULL; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
3999 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4000 #define match() \ |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4001 LA1 = xpm_scan (&s, end, &beg, &len) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4002 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4003 #define expect(TOKEN) \ |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4004 if (LA1 != (TOKEN)) \ |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4005 goto failure; \ |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4006 else \ |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4007 match () |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4008 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4009 #define expect_ident(IDENT) \ |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4010 if (LA1 == XPM_TK_IDENT \ |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4011 && strlen ((IDENT)) == len && memcmp ((IDENT), beg, len) == 0) \ |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4012 match (); \ |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4013 else \ |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4014 goto failure |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4015 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4016 if (!(end - s >= 9 && memcmp (s, "/* XPM */", 9) == 0)) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4017 goto failure; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4018 s += 9; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4019 match(); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4020 expect_ident ("static"); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4021 expect_ident ("char"); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4022 expect ('*'); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4023 expect (XPM_TK_IDENT); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4024 expect ('['); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4025 expect (']'); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4026 expect ('='); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4027 expect ('{'); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4028 expect (XPM_TK_STRING); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4029 if (len >= BUFSIZ) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4030 goto failure; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4031 memcpy (buffer, beg, len); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4032 buffer[len] = '\0'; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4033 if (sscanf (buffer, "%d %d %d %d", &width, &height, |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4034 &num_colors, &chars_per_pixel) != 4 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4035 || width <= 0 || height <= 0 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4036 || num_colors <= 0 || chars_per_pixel <= 0) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4037 goto failure; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4038 expect (','); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4039 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4040 XSETFRAME (frame, f); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4041 if (!NILP (Fxw_display_color_p (frame))) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4042 best_key = XPM_COLOR_KEY_C; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4043 else if (!NILP (Fx_display_grayscale_p (frame))) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4044 best_key = (XFASTINT (Fx_display_planes (frame)) > 2 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4045 ? XPM_COLOR_KEY_G : XPM_COLOR_KEY_G4); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4046 else |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4047 best_key = XPM_COLOR_KEY_M; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4048 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4049 color_symbols = image_spec_value (img->spec, QCcolor_symbols, NULL); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4050 if (chars_per_pixel == 1) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4051 color_table = xpm_make_color_table_v (&put_color_table, |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4052 &get_color_table); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4053 else |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4054 color_table = xpm_make_color_table_h (&put_color_table, |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4055 &get_color_table); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4056 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4057 while (num_colors-- > 0) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4058 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4059 unsigned char *color, *max_color; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4060 int key, next_key, max_key = 0; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4061 Lisp_Object symbol_color = Qnil, color_val; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4062 XColor cdef; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4063 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4064 expect (XPM_TK_STRING); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4065 if (len <= chars_per_pixel || len >= BUFSIZ + chars_per_pixel) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4066 goto failure; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4067 memcpy (buffer, beg + chars_per_pixel, len - chars_per_pixel); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4068 buffer[len - chars_per_pixel] = '\0'; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4069 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4070 str = strtok (buffer, " \t"); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4071 if (str == NULL) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4072 goto failure; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4073 key = xpm_str_to_color_key (str); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4074 if (key < 0) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4075 goto failure; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4076 do |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4077 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4078 color = strtok (NULL, " \t"); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4079 if (color == NULL) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4080 goto failure; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4081 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4082 while (str = strtok (NULL, " \t")) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4083 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4084 next_key = xpm_str_to_color_key (str); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4085 if (next_key >= 0) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4086 break; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4087 color[strlen (color)] = ' '; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4088 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4089 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4090 if (key == XPM_COLOR_KEY_S) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4091 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4092 if (NILP (symbol_color)) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4093 symbol_color = build_string (color); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4094 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4095 else if (max_key < key && key <= best_key) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4096 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4097 max_key = key; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4098 max_color = color; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4099 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4100 key = next_key; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4101 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4102 while (str); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4103 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4104 color_val = Qnil; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4105 if (!NILP (color_symbols) && !NILP (symbol_color)) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4106 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4107 Lisp_Object specified_color = Fassoc (symbol_color, color_symbols); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4108 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4109 if (CONSP (specified_color) && STRINGP (XCDR (specified_color))) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4110 if (xstricmp (SDATA (XCDR (specified_color)), "None") == 0) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4111 color_val = Qt; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4112 else if (x_defined_color (f, SDATA (XCDR (specified_color)), |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4113 &cdef, 0)) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4114 color_val = make_number (cdef.pixel); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4115 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4116 if (NILP (color_val) && max_key > 0) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4117 if (xstricmp (max_color, "None") == 0) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4118 color_val = Qt; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4119 else if (x_defined_color (f, max_color, &cdef, 0)) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4120 color_val = make_number (cdef.pixel); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4121 if (!NILP (color_val)) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4122 (*put_color_table) (color_table, beg, chars_per_pixel, color_val); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4123 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4124 expect (','); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4125 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4126 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4127 if (!x_create_x_image_and_pixmap (f, width, height, 0, |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4128 &ximg, &img->pixmap) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4129 || !x_create_x_image_and_pixmap (f, width, height, 1, |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4130 &mask_img, &img->mask)) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4131 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4132 image_error ("Out of memory (%s)", img->spec, Qnil); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4133 goto error; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4134 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4135 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4136 for (y = 0; y < height; y++) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4137 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4138 expect (XPM_TK_STRING); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4139 str = beg; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4140 if (len < width * chars_per_pixel) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4141 goto failure; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4142 for (x = 0; x < width; x++, str += chars_per_pixel) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4143 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4144 Lisp_Object color_val = |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4145 (*get_color_table) (color_table, str, chars_per_pixel); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4146 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4147 XPutPixel (ximg, x, y, |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4148 (INTEGERP (color_val) ? XINT (color_val) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4149 : FRAME_FOREGROUND_PIXEL (f))); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4150 XPutPixel (mask_img, x, y, |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4151 (!EQ (color_val, Qt) ? PIX_MASK_DRAW (f) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4152 : (have_mask = 1, PIX_MASK_RETAIN (f)))); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4153 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4154 if (y + 1 < height) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4155 expect (','); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4156 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4157 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4158 img->width = width; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4159 img->height = height; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4160 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4161 x_put_x_image (f, ximg, img->pixmap, width, height); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4162 x_destroy_x_image (ximg); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4163 if (have_mask) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4164 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4165 x_put_x_image (f, mask_img, img->mask, width, height); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4166 x_destroy_x_image (mask_img); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4167 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4168 else |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4169 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4170 x_destroy_x_image (mask_img); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4171 Free_Pixmap (FRAME_X_DISPLAY (f), img->mask); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4172 img->mask = NO_PIXMAP; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4173 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4174 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4175 return 1; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4176 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4177 failure: |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4178 image_error ("Invalid XPM file (%s)", img->spec, Qnil); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4179 error: |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4180 x_destroy_x_image (ximg); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4181 x_destroy_x_image (mask_img); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4182 x_clear_image (f, img); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4183 return 0; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4184 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4185 #undef match |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4186 #undef expect |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4187 #undef expect_ident |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4188 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4189 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4190 static int |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4191 xpm_load (f, img) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4192 struct frame *f; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4193 struct image *img; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4194 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4195 int success_p = 0; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4196 Lisp_Object file_name; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4197 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4198 /* If IMG->spec specifies a file name, create a non-file spec from it. */ |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4199 file_name = image_spec_value (img->spec, QCfile, NULL); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4200 if (STRINGP (file_name)) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4201 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4202 Lisp_Object file; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4203 unsigned char *contents; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4204 int size; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4205 struct gcpro gcpro1; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4206 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4207 file = x_find_image_file (file_name); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4208 GCPRO1 (file); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4209 if (!STRINGP (file)) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4210 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4211 image_error ("Cannot find image file `%s'", file_name, Qnil); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4212 UNGCPRO; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4213 return 0; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4214 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4215 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4216 contents = slurp_file (SDATA (file), &size); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4217 if (contents == NULL) |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4218 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4219 image_error ("Error loading XPM image `%s'", img->spec, Qnil); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4220 UNGCPRO; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4221 return 0; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4222 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4223 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4224 success_p = xpm_load_image (f, img, contents, contents + size); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4225 xfree (contents); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4226 UNGCPRO; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4227 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4228 else |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4229 { |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4230 Lisp_Object data; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4231 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4232 data = image_spec_value (img->spec, QCdata, NULL); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4233 success_p = xpm_load_image (f, img, SDATA (data), |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4234 SDATA (data) + SBYTES (data)); |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4235 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4236 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4237 return success_p; |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4238 } |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4239 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4240 #endif /* MAC_OS */ |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4241 |
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
4242 |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4243 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4244 /*********************************************************************** |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4245 Color table |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4246 ***********************************************************************/ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4247 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4248 #ifdef COLOR_TABLE_SUPPORT |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4249 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4250 /* An entry in the color table mapping an RGB color to a pixel color. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4251 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4252 struct ct_color |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4253 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4254 int r, g, b; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4255 unsigned long pixel; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4256 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4257 /* Next in color table collision list. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4258 struct ct_color *next; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4259 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4260 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4261 /* The bucket vector size to use. Must be prime. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4262 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4263 #define CT_SIZE 101 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4264 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4265 /* Value is a hash of the RGB color given by R, G, and B. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4266 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4267 #define CT_HASH_RGB(R, G, B) (((R) << 16) ^ ((G) << 8) ^ (B)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4268 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4269 /* The color hash table. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4270 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4271 struct ct_color **ct_table; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4272 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4273 /* Number of entries in the color table. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4274 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4275 int ct_colors_allocated; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4276 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4277 /* Initialize the color table. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4278 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4279 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4280 init_color_table () |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4281 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4282 int size = CT_SIZE * sizeof (*ct_table); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4283 ct_table = (struct ct_color **) xmalloc (size); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4284 bzero (ct_table, size); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4285 ct_colors_allocated = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4286 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4287 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4288 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4289 /* Free memory associated with the color table. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4290 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4291 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4292 free_color_table () |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4293 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4294 int i; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4295 struct ct_color *p, *next; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4296 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4297 for (i = 0; i < CT_SIZE; ++i) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4298 for (p = ct_table[i]; p; p = next) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4299 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4300 next = p->next; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4301 xfree (p); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4302 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4303 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4304 xfree (ct_table); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4305 ct_table = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4306 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4307 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4308 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4309 /* Value is a pixel color for RGB color R, G, B on frame F. If an |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4310 entry for that color already is in the color table, return the |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4311 pixel color of that entry. Otherwise, allocate a new color for R, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4312 G, B, and make an entry in the color table. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4313 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4314 static unsigned long |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4315 lookup_rgb_color (f, r, g, b) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4316 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4317 int r, g, b; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4318 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4319 unsigned hash = CT_HASH_RGB (r, g, b); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4320 int i = hash % CT_SIZE; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4321 struct ct_color *p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4322 Display_Info *dpyinfo; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4323 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4324 /* Handle TrueColor visuals specially, which improves performance by |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4325 two orders of magnitude. Freeing colors on TrueColor visuals is |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4326 a nop, and pixel colors specify RGB values directly. See also |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4327 the Xlib spec, chapter 3.1. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4328 dpyinfo = FRAME_X_DISPLAY_INFO (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4329 if (dpyinfo->red_bits > 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4330 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4331 unsigned long pr, pg, pb; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4332 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4333 /* Apply gamma-correction like normal color allocation does. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4334 if (f->gamma) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4335 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4336 XColor color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4337 color.red = r, color.green = g, color.blue = b; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4338 gamma_correct (f, &color); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4339 r = color.red, g = color.green, b = color.blue; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4340 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4341 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4342 /* Scale down RGB values to the visual's bits per RGB, and shift |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4343 them to the right position in the pixel color. Note that the |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4344 original RGB values are 16-bit values, as usual in X. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4345 pr = (r >> (16 - dpyinfo->red_bits)) << dpyinfo->red_offset; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4346 pg = (g >> (16 - dpyinfo->green_bits)) << dpyinfo->green_offset; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4347 pb = (b >> (16 - dpyinfo->blue_bits)) << dpyinfo->blue_offset; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4348 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4349 /* Assemble the pixel color. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4350 return pr | pg | pb; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4351 } |
54920
38cb79e68369
(PNG_BG_COLOR_SHIFT): Remove.
Kim F. Storm <storm@cua.dk>
parents:
54427
diff
changeset
|
4352 |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4353 for (p = ct_table[i]; p; p = p->next) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4354 if (p->r == r && p->g == g && p->b == b) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4355 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4356 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4357 if (p == NULL) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4358 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4359 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4360 #ifdef HAVE_X_WINDOWS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4361 XColor color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4362 Colormap cmap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4363 int rc; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4364 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4365 color.red = r; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4366 color.green = g; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4367 color.blue = b; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4368 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4369 cmap = FRAME_X_COLORMAP (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4370 rc = x_alloc_nearest_color (f, cmap, &color); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4371 if (rc) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4372 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4373 ++ct_colors_allocated; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4374 p = (struct ct_color *) xmalloc (sizeof *p); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4375 p->r = r; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4376 p->g = g; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4377 p->b = b; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4378 p->pixel = color.pixel; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4379 p->next = ct_table[i]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4380 ct_table[i] = p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4381 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4382 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4383 return FRAME_FOREGROUND_PIXEL (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4384 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4385 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4386 COLORREF color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4387 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4388 color = PALETTERGB (r, g, b); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4389 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4390 color = RGB_TO_ULONG (r, g, b); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4391 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4392 ++ct_colors_allocated; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4393 p = (struct ct_color *) xmalloc (sizeof *p); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4394 p->r = r; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4395 p->g = g; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4396 p->b = b; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4397 p->pixel = color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4398 p->next = ct_table[i]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4399 ct_table[i] = p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4400 #endif /* HAVE_X_WINDOWS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4401 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4402 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4403 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4404 return p->pixel; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4405 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4406 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4407 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4408 /* Look up pixel color PIXEL which is used on frame F in the color |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4409 table. If not already present, allocate it. Value is PIXEL. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4410 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4411 static unsigned long |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4412 lookup_pixel_color (f, pixel) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4413 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4414 unsigned long pixel; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4415 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4416 int i = pixel % CT_SIZE; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4417 struct ct_color *p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4418 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4419 for (p = ct_table[i]; p; p = p->next) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4420 if (p->pixel == pixel) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4421 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4422 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4423 if (p == NULL) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4424 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4425 XColor color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4426 Colormap cmap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4427 int rc; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4428 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4429 #ifdef HAVE_X_WINDOWS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4430 cmap = FRAME_X_COLORMAP (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4431 color.pixel = pixel; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4432 x_query_color (f, &color); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4433 rc = x_alloc_nearest_color (f, cmap, &color); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4434 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4435 BLOCK_INPUT; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4436 cmap = DefaultColormapOfScreen (FRAME_X_SCREEN (f)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4437 color.pixel = pixel; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4438 XQueryColor (NULL, cmap, &color); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4439 rc = x_alloc_nearest_color (f, cmap, &color); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4440 UNBLOCK_INPUT; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4441 #endif /* HAVE_X_WINDOWS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4442 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4443 if (rc) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4444 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4445 ++ct_colors_allocated; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4446 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4447 p = (struct ct_color *) xmalloc (sizeof *p); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4448 p->r = color.red; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4449 p->g = color.green; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4450 p->b = color.blue; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4451 p->pixel = pixel; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4452 p->next = ct_table[i]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4453 ct_table[i] = p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4454 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4455 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4456 return FRAME_FOREGROUND_PIXEL (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4457 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4458 return p->pixel; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4459 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4460 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4461 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4462 /* Value is a vector of all pixel colors contained in the color table, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4463 allocated via xmalloc. Set *N to the number of colors. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4464 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4465 static unsigned long * |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4466 colors_in_color_table (n) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4467 int *n; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4468 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4469 int i, j; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4470 struct ct_color *p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4471 unsigned long *colors; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4472 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4473 if (ct_colors_allocated == 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4474 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4475 *n = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4476 colors = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4477 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4478 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4479 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4480 colors = (unsigned long *) xmalloc (ct_colors_allocated |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4481 * sizeof *colors); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4482 *n = ct_colors_allocated; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4483 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4484 for (i = j = 0; i < CT_SIZE; ++i) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4485 for (p = ct_table[i]; p; p = p->next) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4486 colors[j++] = p->pixel; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4487 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4488 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4489 return colors; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4490 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4491 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4492 #else /* COLOR_TABLE_SUPPORT */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4493 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4494 static unsigned long |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4495 lookup_rgb_color (f, r, g, b) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4496 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4497 int r, g, b; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4498 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4499 unsigned long pixel; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4500 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4501 #ifdef MAC_OS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4502 pixel = RGB_TO_ULONG (r >> 8, g >> 8, b >> 8); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4503 gamma_correct (f, &pixel); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4504 #endif /* MAC_OS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4505 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4506 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4507 pixel = PALETTERGB (r >> 8, g >> 8, b >> 8); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4508 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4509 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4510 return pixel; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4511 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4512 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4513 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4514 init_color_table () |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4515 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4516 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4517 #endif /* COLOR_TABLE_SUPPORT */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4518 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4519 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4520 /*********************************************************************** |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4521 Algorithms |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4522 ***********************************************************************/ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4523 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4524 static XColor *x_to_xcolors P_ ((struct frame *, struct image *, int)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4525 static void x_from_xcolors P_ ((struct frame *, struct image *, XColor *)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4526 static void x_detect_edges P_ ((struct frame *, struct image *, int[9], int)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4527 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4528 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4529 static void XPutPixel (XImagePtr , int, int, COLORREF); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4530 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4531 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4532 /* Non-zero means draw a cross on images having `:conversion |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4533 disabled'. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4534 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4535 int cross_disabled_images; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4536 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4537 /* Edge detection matrices for different edge-detection |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4538 strategies. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4539 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4540 static int emboss_matrix[9] = { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4541 /* x - 1 x x + 1 */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4542 2, -1, 0, /* y - 1 */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4543 -1, 0, 1, /* y */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4544 0, 1, -2 /* y + 1 */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4545 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4546 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4547 static int laplace_matrix[9] = { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4548 /* x - 1 x x + 1 */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4549 1, 0, 0, /* y - 1 */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4550 0, 0, 0, /* y */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4551 0, 0, -1 /* y + 1 */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4552 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4553 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4554 /* Value is the intensity of the color whose red/green/blue values |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4555 are R, G, and B. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4556 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4557 #define COLOR_INTENSITY(R, G, B) ((2 * (R) + 3 * (G) + (B)) / 6) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4558 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4559 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4560 /* On frame F, return an array of XColor structures describing image |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4561 IMG->pixmap. Each XColor structure has its pixel color set. RGB_P |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4562 non-zero means also fill the red/green/blue members of the XColor |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4563 structures. Value is a pointer to the array of XColors structures, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4564 allocated with xmalloc; it must be freed by the caller. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4565 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4566 static XColor * |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4567 x_to_xcolors (f, img, rgb_p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4568 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4569 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4570 int rgb_p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4571 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4572 int x, y; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4573 XColor *colors, *p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4574 XImagePtr_or_DC ximg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4575 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4576 HDC hdc; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4577 HGDIOBJ prev; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4578 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4579 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4580 colors = (XColor *) xmalloc (img->width * img->height * sizeof *colors); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4581 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4582 #ifndef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4583 /* Get the X image IMG->pixmap. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4584 ximg = XGetImage (FRAME_X_DISPLAY (f), img->pixmap, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4585 0, 0, img->width, img->height, ~0, ZPixmap); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4586 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4587 /* Load the image into a memory device context. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4588 hdc = get_frame_dc (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4589 ximg = CreateCompatibleDC (hdc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4590 release_frame_dc (f, hdc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4591 prev = SelectObject (ximg, img->pixmap); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4592 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4593 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4594 /* Fill the `pixel' members of the XColor array. I wished there |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4595 were an easy and portable way to circumvent XGetPixel. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4596 p = colors; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4597 for (y = 0; y < img->height; ++y) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4598 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4599 XColor *row = p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4600 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4601 #ifdef HAVE_X_WINDOWS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4602 for (x = 0; x < img->width; ++x, ++p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4603 p->pixel = XGetPixel (ximg, x, y); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4604 if (rgb_p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4605 x_query_colors (f, row, img->width); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4606 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4607 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4608 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4609 for (x = 0; x < img->width; ++x, ++p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4610 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4611 /* W32_TODO: palette support needed here? */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4612 p->pixel = GET_PIXEL (ximg, x, y); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4613 if (rgb_p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4614 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4615 #ifdef MAC_OS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4616 p->red = RED16_FROM_ULONG (p->pixel); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4617 p->green = GREEN16_FROM_ULONG (p->pixel); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4618 p->blue = BLUE16_FROM_ULONG (p->pixel); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4619 #endif /* MAC_OS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4620 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4621 p->red = 256 * GetRValue (p->pixel); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4622 p->green = 256 * GetGValue (p->pixel); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4623 p->blue = 256 * GetBValue (p->pixel); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4624 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4625 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4626 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4627 #endif /* HAVE_X_WINDOWS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4628 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4629 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4630 Destroy_Image (ximg, prev); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4631 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4632 return colors; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4633 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4634 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4635 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4636 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4637 /* Put a pixel of COLOR at position X, Y in XIMG. XIMG must have been |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4638 created with CreateDIBSection, with the pointer to the bit values |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4639 stored in ximg->data. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4640 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4641 static void XPutPixel (ximg, x, y, color) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4642 XImagePtr ximg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4643 int x, y; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4644 COLORREF color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4645 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4646 int width = ximg->info.bmiHeader.biWidth; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4647 int height = ximg->info.bmiHeader.biHeight; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4648 unsigned char * pixel; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4649 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4650 /* True color images. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4651 if (ximg->info.bmiHeader.biBitCount == 24) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4652 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4653 int rowbytes = width * 3; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4654 /* Ensure scanlines are aligned on 4 byte boundaries. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4655 if (rowbytes % 4) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4656 rowbytes += 4 - (rowbytes % 4); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4657 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4658 pixel = ximg->data + y * rowbytes + x * 3; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4659 /* Windows bitmaps are in BGR order. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4660 *pixel = GetBValue (color); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4661 *(pixel + 1) = GetGValue (color); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4662 *(pixel + 2) = GetRValue (color); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4663 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4664 /* Monochrome images. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4665 else if (ximg->info.bmiHeader.biBitCount == 1) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4666 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4667 int rowbytes = width / 8; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4668 /* Ensure scanlines are aligned on 4 byte boundaries. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4669 if (rowbytes % 4) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4670 rowbytes += 4 - (rowbytes % 4); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4671 pixel = ximg->data + y * rowbytes + x / 8; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4672 /* Filter out palette info. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4673 if (color & 0x00ffffff) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4674 *pixel = *pixel | (1 << x % 8); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4675 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4676 *pixel = *pixel & ~(1 << x % 8); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4677 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4678 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4679 image_error ("XPutPixel: palette image not supported", Qnil, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4680 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4681 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4682 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4683 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4684 /* Create IMG->pixmap from an array COLORS of XColor structures, whose |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4685 RGB members are set. F is the frame on which this all happens. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4686 COLORS will be freed; an existing IMG->pixmap will be freed, too. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4687 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4688 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4689 x_from_xcolors (f, img, colors) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4690 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4691 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4692 XColor *colors; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4693 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4694 int x, y; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4695 XImagePtr oimg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4696 Pixmap pixmap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4697 XColor *p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4698 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4699 init_color_table (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4700 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4701 x_create_x_image_and_pixmap (f, img->width, img->height, 0, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4702 &oimg, &pixmap); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4703 p = colors; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4704 for (y = 0; y < img->height; ++y) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4705 for (x = 0; x < img->width; ++x, ++p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4706 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4707 unsigned long pixel; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4708 pixel = lookup_rgb_color (f, p->red, p->green, p->blue); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4709 XPutPixel (oimg, x, y, pixel); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4710 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4711 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4712 xfree (colors); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4713 x_clear_image_1 (f, img, 1, 0, 1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4714 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4715 x_put_x_image (f, oimg, pixmap, img->width, img->height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4716 x_destroy_x_image (oimg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4717 img->pixmap = pixmap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4718 #ifdef COLOR_TABLE_SUPPORT |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4719 img->colors = colors_in_color_table (&img->ncolors); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4720 free_color_table (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4721 #endif /* COLOR_TABLE_SUPPORT */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4722 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4723 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4724 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4725 /* On frame F, perform edge-detection on image IMG. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4726 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4727 MATRIX is a nine-element array specifying the transformation |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4728 matrix. See emboss_matrix for an example. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4729 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4730 COLOR_ADJUST is a color adjustment added to each pixel of the |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4731 outgoing image. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4732 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4733 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4734 x_detect_edges (f, img, matrix, color_adjust) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4735 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4736 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4737 int matrix[9], color_adjust; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4738 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4739 XColor *colors = x_to_xcolors (f, img, 1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4740 XColor *new, *p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4741 int x, y, i, sum; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4742 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4743 for (i = sum = 0; i < 9; ++i) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4744 sum += abs (matrix[i]); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4745 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4746 #define COLOR(A, X, Y) ((A) + (Y) * img->width + (X)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4747 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4748 new = (XColor *) xmalloc (img->width * img->height * sizeof *new); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4749 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4750 for (y = 0; y < img->height; ++y) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4751 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4752 p = COLOR (new, 0, y); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4753 p->red = p->green = p->blue = 0xffff/2; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4754 p = COLOR (new, img->width - 1, y); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4755 p->red = p->green = p->blue = 0xffff/2; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4756 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4757 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4758 for (x = 1; x < img->width - 1; ++x) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4759 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4760 p = COLOR (new, x, 0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4761 p->red = p->green = p->blue = 0xffff/2; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4762 p = COLOR (new, x, img->height - 1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4763 p->red = p->green = p->blue = 0xffff/2; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4764 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4765 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4766 for (y = 1; y < img->height - 1; ++y) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4767 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4768 p = COLOR (new, 1, y); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4769 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4770 for (x = 1; x < img->width - 1; ++x, ++p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4771 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4772 int r, g, b, y1, x1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4773 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4774 r = g = b = i = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4775 for (y1 = y - 1; y1 < y + 2; ++y1) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4776 for (x1 = x - 1; x1 < x + 2; ++x1, ++i) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4777 if (matrix[i]) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4778 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4779 XColor *t = COLOR (colors, x1, y1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4780 r += matrix[i] * t->red; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4781 g += matrix[i] * t->green; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4782 b += matrix[i] * t->blue; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4783 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4784 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4785 r = (r / sum + color_adjust) & 0xffff; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4786 g = (g / sum + color_adjust) & 0xffff; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4787 b = (b / sum + color_adjust) & 0xffff; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4788 p->red = p->green = p->blue = COLOR_INTENSITY (r, g, b); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4789 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4790 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4791 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4792 xfree (colors); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4793 x_from_xcolors (f, img, new); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4794 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4795 #undef COLOR |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4796 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4797 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4798 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4799 /* Perform the pre-defined `emboss' edge-detection on image IMG |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4800 on frame F. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4801 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4802 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4803 x_emboss (f, img) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4804 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4805 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4806 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4807 x_detect_edges (f, img, emboss_matrix, 0xffff / 2); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4808 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4809 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4810 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4811 /* Transform image IMG which is used on frame F with a Laplace |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4812 edge-detection algorithm. The result is an image that can be used |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4813 to draw disabled buttons, for example. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4814 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4815 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4816 x_laplace (f, img) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4817 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4818 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4819 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4820 x_detect_edges (f, img, laplace_matrix, 45000); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4821 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4822 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4823 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4824 /* Perform edge-detection on image IMG on frame F, with specified |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4825 transformation matrix MATRIX and color-adjustment COLOR_ADJUST. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4826 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4827 MATRIX must be either |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4828 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4829 - a list of at least 9 numbers in row-major form |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4830 - a vector of at least 9 numbers |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4831 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4832 COLOR_ADJUST nil means use a default; otherwise it must be a |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4833 number. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4834 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4835 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4836 x_edge_detection (f, img, matrix, color_adjust) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4837 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4838 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4839 Lisp_Object matrix, color_adjust; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4840 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4841 int i = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4842 int trans[9]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4843 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4844 if (CONSP (matrix)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4845 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4846 for (i = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4847 i < 9 && CONSP (matrix) && NUMBERP (XCAR (matrix)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4848 ++i, matrix = XCDR (matrix)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4849 trans[i] = XFLOATINT (XCAR (matrix)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4850 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4851 else if (VECTORP (matrix) && ASIZE (matrix) >= 9) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4852 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4853 for (i = 0; i < 9 && NUMBERP (AREF (matrix, i)); ++i) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4854 trans[i] = XFLOATINT (AREF (matrix, i)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4855 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4856 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4857 if (NILP (color_adjust)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4858 color_adjust = make_number (0xffff / 2); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4859 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4860 if (i == 9 && NUMBERP (color_adjust)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4861 x_detect_edges (f, img, trans, (int) XFLOATINT (color_adjust)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4862 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4863 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4864 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4865 /* Transform image IMG on frame F so that it looks disabled. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4866 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4867 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4868 x_disable_image (f, img) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4869 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4870 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4871 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4872 Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4873 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4874 int n_planes = dpyinfo->n_planes * dpyinfo->n_cbits; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4875 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4876 int n_planes = dpyinfo->n_planes; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4877 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4878 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4879 if (n_planes >= 2) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4880 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4881 /* Color (or grayscale). Convert to gray, and equalize. Just |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4882 drawing such images with a stipple can look very odd, so |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4883 we're using this method instead. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4884 XColor *colors = x_to_xcolors (f, img, 1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4885 XColor *p, *end; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4886 const int h = 15000; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4887 const int l = 30000; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4888 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4889 for (p = colors, end = colors + img->width * img->height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4890 p < end; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4891 ++p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4892 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4893 int i = COLOR_INTENSITY (p->red, p->green, p->blue); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4894 int i2 = (0xffff - h - l) * i / 0xffff + l; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4895 p->red = p->green = p->blue = i2; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4896 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4897 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4898 x_from_xcolors (f, img, colors); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4899 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4900 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4901 /* Draw a cross over the disabled image, if we must or if we |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4902 should. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4903 if (n_planes < 2 || cross_disabled_images) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4904 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4905 #ifndef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4906 Display *dpy = FRAME_X_DISPLAY (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4907 GC gc; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4908 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4909 #ifdef MAC_OS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4910 #define XCreateGC_pixmap(dpy, pixmap) XCreateGC (dpy, NULL, 0, NULL) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4911 #define MaskForeground(f) PIX_MASK_DRAW (f) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4912 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4913 #define XCreateGC_pixmap(dpy, pixmap) XCreateGC (dpy, pixmap, 0, NULL) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4914 #define MaskForeground(f) WHITE_PIX_DEFAULT (f) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4915 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4916 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4917 gc = XCreateGC_pixmap (dpy, img->pixmap); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4918 XSetForeground (dpy, gc, BLACK_PIX_DEFAULT (f)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4919 XDrawLine (dpy, img->pixmap, gc, 0, 0, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4920 img->width - 1, img->height - 1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4921 XDrawLine (dpy, img->pixmap, gc, 0, img->height - 1, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4922 img->width - 1, 0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4923 XFreeGC (dpy, gc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4924 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4925 if (img->mask) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4926 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4927 gc = XCreateGC_pixmap (dpy, img->mask); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4928 XSetForeground (dpy, gc, MaskForeground (f)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4929 XDrawLine (dpy, img->mask, gc, 0, 0, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4930 img->width - 1, img->height - 1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4931 XDrawLine (dpy, img->mask, gc, 0, img->height - 1, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4932 img->width - 1, 0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4933 XFreeGC (dpy, gc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4934 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4935 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4936 HDC hdc, bmpdc; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4937 HGDIOBJ prev; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4938 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4939 hdc = get_frame_dc (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4940 bmpdc = CreateCompatibleDC (hdc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4941 release_frame_dc (f, hdc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4942 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4943 prev = SelectObject (bmpdc, img->pixmap); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4944 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4945 SetTextColor (bmpdc, BLACK_PIX_DEFAULT (f)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4946 MoveToEx (bmpdc, 0, 0, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4947 LineTo (bmpdc, img->width - 1, img->height - 1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4948 MoveToEx (bmpdc, 0, img->height - 1, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4949 LineTo (bmpdc, img->width - 1, 0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4950 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4951 if (img->mask) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4952 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4953 SelectObject (bmpdc, img->mask); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4954 SetTextColor (bmpdc, WHITE_PIX_DEFAULT (f)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4955 MoveToEx (bmpdc, 0, 0, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4956 LineTo (bmpdc, img->width - 1, img->height - 1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4957 MoveToEx (bmpdc, 0, img->height - 1, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4958 LineTo (bmpdc, img->width - 1, 0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4959 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4960 SelectObject (bmpdc, prev); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4961 DeleteDC (bmpdc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4962 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4963 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4964 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4965 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4966 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4967 /* Build a mask for image IMG which is used on frame F. FILE is the |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4968 name of an image file, for error messages. HOW determines how to |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4969 determine the background color of IMG. If it is a list '(R G B)', |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4970 with R, G, and B being integers >= 0, take that as the color of the |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4971 background. Otherwise, determine the background color of IMG |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4972 heuristically. Value is non-zero if successful. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4973 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4974 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4975 x_build_heuristic_mask (f, img, how) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4976 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4977 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4978 Lisp_Object how; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4979 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4980 XImagePtr_or_DC ximg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4981 #ifndef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4982 XImagePtr mask_img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4983 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4984 HDC frame_dc; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4985 HGDIOBJ prev; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4986 char *mask_img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4987 int row_width; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4988 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4989 int x, y, rc, use_img_background; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4990 unsigned long bg = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4991 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4992 if (img->mask) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4993 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4994 Free_Pixmap (FRAME_X_DISPLAY (f), img->mask); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4995 img->mask = NO_PIXMAP; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4996 img->background_transparent_valid = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4997 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4998 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
4999 #ifndef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5000 /* Create an image and pixmap serving as mask. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5001 rc = x_create_x_image_and_pixmap (f, img->width, img->height, 1, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5002 &mask_img, &img->mask); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5003 if (!rc) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5004 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5005 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5006 /* Get the X image of IMG->pixmap. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5007 ximg = XGetImage (FRAME_X_DISPLAY (f), img->pixmap, 0, 0, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5008 img->width, img->height, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5009 ~0, ZPixmap); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5010 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5011 /* Create the bit array serving as mask. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5012 row_width = (img->width + 7) / 8; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5013 mask_img = xmalloc (row_width * img->height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5014 bzero (mask_img, row_width * img->height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5015 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5016 /* Create a memory device context for IMG->pixmap. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5017 frame_dc = get_frame_dc (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5018 ximg = CreateCompatibleDC (frame_dc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5019 release_frame_dc (f, frame_dc); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5020 prev = SelectObject (ximg, img->pixmap); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5021 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5022 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5023 /* Determine the background color of ximg. If HOW is `(R G B)' |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5024 take that as color. Otherwise, use the image's background color. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5025 use_img_background = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5026 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5027 if (CONSP (how)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5028 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5029 int rgb[3], i; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5030 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5031 for (i = 0; i < 3 && CONSP (how) && NATNUMP (XCAR (how)); ++i) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5032 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5033 rgb[i] = XFASTINT (XCAR (how)) & 0xffff; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5034 how = XCDR (how); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5035 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5036 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5037 if (i == 3 && NILP (how)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5038 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5039 char color_name[30]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5040 sprintf (color_name, "#%04x%04x%04x", rgb[0], rgb[1], rgb[2]); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5041 bg = ( |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5042 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5043 0x00ffffff & /* Filter out palette info. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5044 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5045 x_alloc_image_color (f, img, build_string (color_name), 0)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5046 use_img_background = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5047 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5048 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5049 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5050 if (use_img_background) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5051 bg = four_corners_best (ximg, img->width, img->height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5052 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5053 /* Set all bits in mask_img to 1 whose color in ximg is different |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5054 from the background color bg. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5055 #ifndef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5056 for (y = 0; y < img->height; ++y) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5057 for (x = 0; x < img->width; ++x) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5058 XPutPixel (mask_img, x, y, (XGetPixel (ximg, x, y) != bg |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5059 ? PIX_MASK_DRAW (f) : PIX_MASK_RETAIN (f))); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5060 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5061 /* Fill in the background_transparent field while we have the mask handy. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5062 image_background_transparent (img, f, mask_img); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5063 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5064 /* Put mask_img into img->mask. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5065 x_put_x_image (f, mask_img, img->mask, img->width, img->height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5066 x_destroy_x_image (mask_img); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5067 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5068 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5069 for (y = 0; y < img->height; ++y) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5070 for (x = 0; x < img->width; ++x) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5071 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5072 COLORREF p = GetPixel (ximg, x, y); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5073 if (p != bg) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5074 mask_img[y * row_width + x / 8] |= 1 << (x % 8); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5075 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5076 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5077 /* Create the mask image. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5078 img->mask = w32_create_pixmap_from_bitmap_data (img->width, img->height, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5079 mask_img); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5080 /* Fill in the background_transparent field while we have the mask handy. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5081 SelectObject (ximg, img->mask); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5082 image_background_transparent (img, f, ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5083 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5084 /* Was: x_destroy_x_image ((XImagePtr )mask_img); which seems bogus ++kfs */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5085 xfree (mask_img); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5086 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5087 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5088 Destroy_Image (ximg, prev); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5089 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5090 return 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5091 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5092 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5093 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5094 /*********************************************************************** |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5095 PBM (mono, gray, color) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5096 ***********************************************************************/ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5097 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5098 static int pbm_image_p P_ ((Lisp_Object object)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5099 static int pbm_load P_ ((struct frame *f, struct image *img)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5100 static int pbm_scan_number P_ ((unsigned char **, unsigned char *)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5101 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5102 /* The symbol `pbm' identifying images of this type. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5103 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5104 Lisp_Object Qpbm; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5105 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5106 /* Indices of image specification fields in gs_format, below. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5107 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5108 enum pbm_keyword_index |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5109 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5110 PBM_TYPE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5111 PBM_FILE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5112 PBM_DATA, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5113 PBM_ASCENT, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5114 PBM_MARGIN, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5115 PBM_RELIEF, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5116 PBM_ALGORITHM, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5117 PBM_HEURISTIC_MASK, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5118 PBM_MASK, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5119 PBM_FOREGROUND, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5120 PBM_BACKGROUND, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5121 PBM_LAST |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5122 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5123 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5124 /* Vector of image_keyword structures describing the format |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5125 of valid user-defined image specifications. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5126 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5127 static struct image_keyword pbm_format[PBM_LAST] = |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5128 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5129 {":type", IMAGE_SYMBOL_VALUE, 1}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5130 {":file", IMAGE_STRING_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5131 {":data", IMAGE_STRING_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5132 {":ascent", IMAGE_ASCENT_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5133 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5134 {":relief", IMAGE_INTEGER_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5135 {":conversion", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5136 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5137 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5138 {":foreground", IMAGE_STRING_OR_NIL_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5139 {":background", IMAGE_STRING_OR_NIL_VALUE, 0} |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5140 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5141 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5142 /* Structure describing the image type `pbm'. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5143 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5144 static struct image_type pbm_type = |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5145 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5146 &Qpbm, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5147 pbm_image_p, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5148 pbm_load, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5149 x_clear_image, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5150 NULL |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5151 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5152 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5153 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5154 /* Return non-zero if OBJECT is a valid PBM image specification. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5155 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5156 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5157 pbm_image_p (object) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5158 Lisp_Object object; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5159 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5160 struct image_keyword fmt[PBM_LAST]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5161 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5162 bcopy (pbm_format, fmt, sizeof fmt); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5163 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5164 if (!parse_image_spec (object, fmt, PBM_LAST, Qpbm)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5165 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5166 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5167 /* Must specify either :data or :file. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5168 return fmt[PBM_DATA].count + fmt[PBM_FILE].count == 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5169 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5170 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5171 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5172 /* Scan a decimal number from *S and return it. Advance *S while |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5173 reading the number. END is the end of the string. Value is -1 at |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5174 end of input. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5175 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5176 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5177 pbm_scan_number (s, end) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5178 unsigned char **s, *end; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5179 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5180 int c = 0, val = -1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5181 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5182 while (*s < end) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5183 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5184 /* Skip white-space. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5185 while (*s < end && (c = *(*s)++, isspace (c))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5186 ; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5187 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5188 if (c == '#') |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5189 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5190 /* Skip comment to end of line. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5191 while (*s < end && (c = *(*s)++, c != '\n')) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5192 ; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5193 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5194 else if (isdigit (c)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5195 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5196 /* Read decimal number. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5197 val = c - '0'; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5198 while (*s < end && (c = *(*s)++, isdigit (c))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5199 val = 10 * val + c - '0'; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5200 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5201 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5202 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5203 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5204 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5205 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5206 return val; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5207 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5208 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5209 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5210 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5211 #if 0 /* Unused. ++kfs */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5212 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5213 /* Read FILE into memory. Value is a pointer to a buffer allocated |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5214 with xmalloc holding FILE's contents. Value is null if an error |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5215 occurred. *SIZE is set to the size of the file. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5216 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5217 static char * |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5218 pbm_read_file (file, size) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5219 Lisp_Object file; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5220 int *size; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5221 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5222 FILE *fp = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5223 char *buf = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5224 struct stat st; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5225 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5226 if (stat (SDATA (file), &st) == 0 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5227 && (fp = fopen (SDATA (file), "rb")) != NULL |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5228 && (buf = (char *) xmalloc (st.st_size), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5229 fread (buf, 1, st.st_size, fp) == st.st_size)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5230 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5231 *size = st.st_size; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5232 fclose (fp); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5233 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5234 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5235 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5236 if (fp) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5237 fclose (fp); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5238 if (buf) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5239 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5240 xfree (buf); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5241 buf = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5242 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5243 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5244 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5245 return buf; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5246 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5247 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5248 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5249 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5250 /* Load PBM image IMG for use on frame F. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5251 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5252 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5253 pbm_load (f, img) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5254 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5255 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5256 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5257 int raw_p, x, y; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5258 int width, height, max_color_idx = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5259 XImagePtr ximg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5260 Lisp_Object file, specified_file; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5261 enum {PBM_MONO, PBM_GRAY, PBM_COLOR} type; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5262 struct gcpro gcpro1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5263 unsigned char *contents = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5264 unsigned char *end, *p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5265 int size; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5266 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5267 specified_file = image_spec_value (img->spec, QCfile, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5268 file = Qnil; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5269 GCPRO1 (file); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5270 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5271 if (STRINGP (specified_file)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5272 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5273 file = x_find_image_file (specified_file); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5274 if (!STRINGP (file)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5275 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5276 image_error ("Cannot find image file `%s'", specified_file, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5277 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5278 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5279 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5280 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5281 contents = slurp_file (SDATA (file), &size); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5282 if (contents == NULL) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5283 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5284 image_error ("Error reading `%s'", file, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5285 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5286 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5287 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5288 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5289 p = contents; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5290 end = contents + size; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5291 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5292 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5293 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5294 Lisp_Object data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5295 data = image_spec_value (img->spec, QCdata, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5296 p = SDATA (data); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5297 end = p + SBYTES (data); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5298 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5299 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5300 /* Check magic number. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5301 if (end - p < 2 || *p++ != 'P') |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5302 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5303 image_error ("Not a PBM image: `%s'", img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5304 error: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5305 xfree (contents); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5306 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5307 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5308 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5309 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5310 switch (*p++) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5311 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5312 case '1': |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5313 raw_p = 0, type = PBM_MONO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5314 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5315 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5316 case '2': |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5317 raw_p = 0, type = PBM_GRAY; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5318 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5319 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5320 case '3': |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5321 raw_p = 0, type = PBM_COLOR; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5322 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5323 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5324 case '4': |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5325 raw_p = 1, type = PBM_MONO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5326 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5327 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5328 case '5': |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5329 raw_p = 1, type = PBM_GRAY; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5330 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5331 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5332 case '6': |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5333 raw_p = 1, type = PBM_COLOR; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5334 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5335 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5336 default: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5337 image_error ("Not a PBM image: `%s'", img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5338 goto error; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5339 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5340 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5341 /* Read width, height, maximum color-component. Characters |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5342 starting with `#' up to the end of a line are ignored. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5343 width = pbm_scan_number (&p, end); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5344 height = pbm_scan_number (&p, end); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5345 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5346 if (type != PBM_MONO) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5347 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5348 max_color_idx = pbm_scan_number (&p, end); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5349 if (raw_p && max_color_idx > 255) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5350 max_color_idx = 255; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5351 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5352 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5353 if (width < 0 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5354 || height < 0 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5355 || (type != PBM_MONO && max_color_idx < 0)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5356 goto error; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5357 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5358 if (!x_create_x_image_and_pixmap (f, width, height, 0, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5359 &ximg, &img->pixmap)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5360 goto error; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5361 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5362 /* Initialize the color hash table. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5363 init_color_table (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5364 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5365 if (type == PBM_MONO) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5366 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5367 int c = 0, g; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5368 struct image_keyword fmt[PBM_LAST]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5369 unsigned long fg = FRAME_FOREGROUND_PIXEL (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5370 unsigned long bg = FRAME_BACKGROUND_PIXEL (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5371 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5372 /* Parse the image specification. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5373 bcopy (pbm_format, fmt, sizeof fmt); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5374 parse_image_spec (img->spec, fmt, PBM_LAST, Qpbm); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5375 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5376 /* Get foreground and background colors, maybe allocate colors. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5377 if (fmt[PBM_FOREGROUND].count |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5378 && STRINGP (fmt[PBM_FOREGROUND].value)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5379 fg = x_alloc_image_color (f, img, fmt[PBM_FOREGROUND].value, fg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5380 if (fmt[PBM_BACKGROUND].count |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5381 && STRINGP (fmt[PBM_BACKGROUND].value)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5382 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5383 bg = x_alloc_image_color (f, img, fmt[PBM_BACKGROUND].value, bg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5384 img->background = bg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5385 img->background_valid = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5386 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5387 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5388 for (y = 0; y < height; ++y) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5389 for (x = 0; x < width; ++x) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5390 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5391 if (raw_p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5392 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5393 if ((x & 7) == 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5394 c = *p++; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5395 g = c & 0x80; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5396 c <<= 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5397 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5398 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5399 g = pbm_scan_number (&p, end); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5400 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5401 XPutPixel (ximg, x, y, g ? fg : bg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5402 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5403 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5404 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5405 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5406 for (y = 0; y < height; ++y) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5407 for (x = 0; x < width; ++x) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5408 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5409 int r, g, b; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5410 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5411 if (type == PBM_GRAY) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5412 r = g = b = raw_p ? *p++ : pbm_scan_number (&p, end); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5413 else if (raw_p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5414 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5415 r = *p++; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5416 g = *p++; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5417 b = *p++; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5418 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5419 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5420 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5421 r = pbm_scan_number (&p, end); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5422 g = pbm_scan_number (&p, end); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5423 b = pbm_scan_number (&p, end); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5424 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5425 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5426 if (r < 0 || g < 0 || b < 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5427 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5428 x_destroy_x_image (ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5429 image_error ("Invalid pixel value in image `%s'", |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5430 img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5431 goto error; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5432 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5433 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5434 /* RGB values are now in the range 0..max_color_idx. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5435 Scale this to the range 0..0xffff supported by X. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5436 r = (double) r * 65535 / max_color_idx; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5437 g = (double) g * 65535 / max_color_idx; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5438 b = (double) b * 65535 / max_color_idx; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5439 XPutPixel (ximg, x, y, lookup_rgb_color (f, r, g, b)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5440 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5441 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5442 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5443 #ifdef COLOR_TABLE_SUPPORT |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5444 /* Store in IMG->colors the colors allocated for the image, and |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5445 free the color table. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5446 img->colors = colors_in_color_table (&img->ncolors); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5447 free_color_table (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5448 #endif /* COLOR_TABLE_SUPPORT */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5449 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5450 img->width = width; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5451 img->height = height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5452 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5453 /* Maybe fill in the background field while we have ximg handy. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5454 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5455 if (NILP (image_spec_value (img->spec, QCbackground, NULL))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5456 IMAGE_BACKGROUND (img, f, ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5457 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5458 /* Put the image into a pixmap. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5459 x_put_x_image (f, ximg, img->pixmap, width, height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5460 x_destroy_x_image (ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5461 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5462 /* X and W32 versions did it here, MAC version above. ++kfs |
54920
38cb79e68369
(PNG_BG_COLOR_SHIFT): Remove.
Kim F. Storm <storm@cua.dk>
parents:
54427
diff
changeset
|
5463 img->width = width; |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5464 img->height = height; */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5465 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5466 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5467 xfree (contents); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5468 return 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5469 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5470 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5471 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5472 /*********************************************************************** |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5473 PNG |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5474 ***********************************************************************/ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5475 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5476 #if defined (HAVE_PNG) || defined (MAC_OS) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5477 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5478 /* Function prototypes. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5479 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5480 static int png_image_p P_ ((Lisp_Object object)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5481 static int png_load P_ ((struct frame *f, struct image *img)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5482 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5483 /* The symbol `png' identifying images of this type. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5484 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5485 Lisp_Object Qpng; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5486 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5487 /* Indices of image specification fields in png_format, below. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5488 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5489 enum png_keyword_index |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5490 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5491 PNG_TYPE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5492 PNG_DATA, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5493 PNG_FILE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5494 PNG_ASCENT, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5495 PNG_MARGIN, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5496 PNG_RELIEF, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5497 PNG_ALGORITHM, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5498 PNG_HEURISTIC_MASK, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5499 PNG_MASK, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5500 PNG_BACKGROUND, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5501 PNG_LAST |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5502 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5503 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5504 /* Vector of image_keyword structures describing the format |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5505 of valid user-defined image specifications. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5506 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5507 static struct image_keyword png_format[PNG_LAST] = |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5508 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5509 {":type", IMAGE_SYMBOL_VALUE, 1}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5510 {":data", IMAGE_STRING_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5511 {":file", IMAGE_STRING_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5512 {":ascent", IMAGE_ASCENT_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5513 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5514 {":relief", IMAGE_INTEGER_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5515 {":conversion", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5516 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5517 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5518 {":background", IMAGE_STRING_OR_NIL_VALUE, 0} |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5519 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5520 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5521 /* Structure describing the image type `png'. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5522 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5523 static struct image_type png_type = |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5524 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5525 &Qpng, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5526 png_image_p, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5527 png_load, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5528 x_clear_image, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5529 NULL |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5530 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5531 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5532 /* Return non-zero if OBJECT is a valid PNG image specification. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5533 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5534 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5535 png_image_p (object) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5536 Lisp_Object object; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5537 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5538 struct image_keyword fmt[PNG_LAST]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5539 bcopy (png_format, fmt, sizeof fmt); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5540 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5541 if (!parse_image_spec (object, fmt, PNG_LAST, Qpng)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5542 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5543 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5544 /* Must specify either the :data or :file keyword. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5545 return fmt[PNG_FILE].count + fmt[PNG_DATA].count == 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5546 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5547 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5548 #endif /* HAVE_PNG || MAC_OS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5549 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5550 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5551 #ifdef HAVE_PNG |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5552 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5553 #if defined HAVE_LIBPNG_PNG_H |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5554 # include <libpng/png.h> |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5555 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5556 # include <png.h> |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5557 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5558 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5559 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5560 /* PNG library details. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5561 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5562 DEF_IMGLIB_FN (png_get_io_ptr); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5563 DEF_IMGLIB_FN (png_check_sig); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5564 DEF_IMGLIB_FN (png_create_read_struct); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5565 DEF_IMGLIB_FN (png_create_info_struct); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5566 DEF_IMGLIB_FN (png_destroy_read_struct); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5567 DEF_IMGLIB_FN (png_set_read_fn); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5568 DEF_IMGLIB_FN (png_init_io); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5569 DEF_IMGLIB_FN (png_set_sig_bytes); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5570 DEF_IMGLIB_FN (png_read_info); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5571 DEF_IMGLIB_FN (png_get_IHDR); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5572 DEF_IMGLIB_FN (png_get_valid); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5573 DEF_IMGLIB_FN (png_set_strip_16); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5574 DEF_IMGLIB_FN (png_set_expand); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5575 DEF_IMGLIB_FN (png_set_gray_to_rgb); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5576 DEF_IMGLIB_FN (png_set_background); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5577 DEF_IMGLIB_FN (png_get_bKGD); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5578 DEF_IMGLIB_FN (png_read_update_info); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5579 DEF_IMGLIB_FN (png_get_channels); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5580 DEF_IMGLIB_FN (png_get_rowbytes); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5581 DEF_IMGLIB_FN (png_read_image); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5582 DEF_IMGLIB_FN (png_read_end); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5583 DEF_IMGLIB_FN (png_error); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5584 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5585 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5586 init_png_functions (void) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5587 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5588 HMODULE library; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5589 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5590 /* Ensure zlib is loaded. Try debug version first. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5591 if (!LoadLibrary ("zlibd.dll") |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5592 && !LoadLibrary ("zlib.dll")) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5593 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5594 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5595 /* Try loading libpng under probable names. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5596 if (!(library = LoadLibrary ("libpng13d.dll")) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5597 && !(library = LoadLibrary ("libpng13.dll")) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5598 && !(library = LoadLibrary ("libpng12d.dll")) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5599 && !(library = LoadLibrary ("libpng12.dll")) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5600 && !(library = LoadLibrary ("libpng.dll"))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5601 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5602 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5603 LOAD_IMGLIB_FN (library, png_get_io_ptr); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5604 LOAD_IMGLIB_FN (library, png_check_sig); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5605 LOAD_IMGLIB_FN (library, png_create_read_struct); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5606 LOAD_IMGLIB_FN (library, png_create_info_struct); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5607 LOAD_IMGLIB_FN (library, png_destroy_read_struct); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5608 LOAD_IMGLIB_FN (library, png_set_read_fn); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5609 LOAD_IMGLIB_FN (library, png_init_io); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5610 LOAD_IMGLIB_FN (library, png_set_sig_bytes); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5611 LOAD_IMGLIB_FN (library, png_read_info); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5612 LOAD_IMGLIB_FN (library, png_get_IHDR); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5613 LOAD_IMGLIB_FN (library, png_get_valid); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5614 LOAD_IMGLIB_FN (library, png_set_strip_16); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5615 LOAD_IMGLIB_FN (library, png_set_expand); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5616 LOAD_IMGLIB_FN (library, png_set_gray_to_rgb); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5617 LOAD_IMGLIB_FN (library, png_set_background); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5618 LOAD_IMGLIB_FN (library, png_get_bKGD); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5619 LOAD_IMGLIB_FN (library, png_read_update_info); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5620 LOAD_IMGLIB_FN (library, png_get_channels); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5621 LOAD_IMGLIB_FN (library, png_get_rowbytes); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5622 LOAD_IMGLIB_FN (library, png_read_image); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5623 LOAD_IMGLIB_FN (library, png_read_end); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5624 LOAD_IMGLIB_FN (library, png_error); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5625 return 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5626 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5627 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5628 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5629 #define fn_png_get_io_ptr png_get_io_ptr |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5630 #define fn_png_check_sig png_check_sig |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5631 #define fn_png_create_read_struct png_create_read_struct |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5632 #define fn_png_create_info_struct png_create_info_struct |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5633 #define fn_png_destroy_read_struct png_destroy_read_struct |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5634 #define fn_png_set_read_fn png_set_read_fn |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5635 #define fn_png_init_io png_init_io |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5636 #define fn_png_set_sig_bytes png_set_sig_bytes |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5637 #define fn_png_read_info png_read_info |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5638 #define fn_png_get_IHDR png_get_IHDR |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5639 #define fn_png_get_valid png_get_valid |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5640 #define fn_png_set_strip_16 png_set_strip_16 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5641 #define fn_png_set_expand png_set_expand |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5642 #define fn_png_set_gray_to_rgb png_set_gray_to_rgb |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5643 #define fn_png_set_background png_set_background |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5644 #define fn_png_get_bKGD png_get_bKGD |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5645 #define fn_png_read_update_info png_read_update_info |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5646 #define fn_png_get_channels png_get_channels |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5647 #define fn_png_get_rowbytes png_get_rowbytes |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5648 #define fn_png_read_image png_read_image |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5649 #define fn_png_read_end png_read_end |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5650 #define fn_png_error png_error |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5651 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5652 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5653 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5654 /* Error and warning handlers installed when the PNG library |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5655 is initialized. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5656 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5657 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5658 my_png_error (png_ptr, msg) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5659 png_struct *png_ptr; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5660 char *msg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5661 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5662 xassert (png_ptr != NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5663 image_error ("PNG error: %s", build_string (msg), Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5664 longjmp (png_ptr->jmpbuf, 1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5665 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5666 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5667 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5668 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5669 my_png_warning (png_ptr, msg) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5670 png_struct *png_ptr; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5671 char *msg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5672 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5673 xassert (png_ptr != NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5674 image_error ("PNG warning: %s", build_string (msg), Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5675 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5676 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5677 /* Memory source for PNG decoding. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5678 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5679 struct png_memory_storage |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5680 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5681 unsigned char *bytes; /* The data */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5682 size_t len; /* How big is it? */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5683 int index; /* Where are we? */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5684 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5685 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5686 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5687 /* Function set as reader function when reading PNG image from memory. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5688 PNG_PTR is a pointer to the PNG control structure. Copy LENGTH |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5689 bytes from the input to DATA. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5690 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5691 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5692 png_read_from_memory (png_ptr, data, length) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5693 png_structp png_ptr; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5694 png_bytep data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5695 png_size_t length; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5696 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5697 struct png_memory_storage *tbr |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5698 = (struct png_memory_storage *) fn_png_get_io_ptr (png_ptr); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5699 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5700 if (length > tbr->len - tbr->index) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5701 fn_png_error (png_ptr, "Read error"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5702 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5703 bcopy (tbr->bytes + tbr->index, data, length); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5704 tbr->index = tbr->index + length; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5705 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5706 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5707 /* Load PNG image IMG for use on frame F. Value is non-zero if |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5708 successful. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5709 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5710 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5711 png_load (f, img) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5712 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5713 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5714 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5715 Lisp_Object file, specified_file; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5716 Lisp_Object specified_data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5717 int x, y, i; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5718 XImagePtr ximg, mask_img = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5719 struct gcpro gcpro1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5720 png_struct *png_ptr = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5721 png_info *info_ptr = NULL, *end_info = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5722 FILE *volatile fp = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5723 png_byte sig[8]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5724 png_byte * volatile pixels = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5725 png_byte ** volatile rows = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5726 png_uint_32 width, height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5727 int bit_depth, color_type, interlace_type; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5728 png_byte channels; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5729 png_uint_32 row_bytes; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5730 int transparent_p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5731 double screen_gamma; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5732 struct png_memory_storage tbr; /* Data to be read */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5733 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5734 /* Find out what file to load. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5735 specified_file = image_spec_value (img->spec, QCfile, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5736 specified_data = image_spec_value (img->spec, QCdata, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5737 file = Qnil; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5738 GCPRO1 (file); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5739 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5740 if (NILP (specified_data)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5741 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5742 file = x_find_image_file (specified_file); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5743 if (!STRINGP (file)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5744 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5745 image_error ("Cannot find image file `%s'", specified_file, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5746 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5747 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5748 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5749 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5750 /* Open the image file. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5751 fp = fopen (SDATA (file), "rb"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5752 if (!fp) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5753 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5754 image_error ("Cannot open image file `%s'", file, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5755 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5756 fclose (fp); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5757 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5758 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5759 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5760 /* Check PNG signature. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5761 if (fread (sig, 1, sizeof sig, fp) != sizeof sig |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5762 || !fn_png_check_sig (sig, sizeof sig)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5763 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5764 image_error ("Not a PNG file: `%s'", file, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5765 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5766 fclose (fp); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5767 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5768 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5769 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5770 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5771 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5772 /* Read from memory. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5773 tbr.bytes = SDATA (specified_data); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5774 tbr.len = SBYTES (specified_data); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5775 tbr.index = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5776 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5777 /* Check PNG signature. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5778 if (tbr.len < sizeof sig |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5779 || !fn_png_check_sig (tbr.bytes, sizeof sig)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5780 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5781 image_error ("Not a PNG image: `%s'", img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5782 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5783 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5784 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5785 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5786 /* Need to skip past the signature. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5787 tbr.bytes += sizeof (sig); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5788 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5789 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5790 /* Initialize read and info structs for PNG lib. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5791 png_ptr = fn_png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5792 my_png_error, my_png_warning); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5793 if (!png_ptr) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5794 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5795 if (fp) fclose (fp); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5796 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5797 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5798 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5799 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5800 info_ptr = fn_png_create_info_struct (png_ptr); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5801 if (!info_ptr) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5802 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5803 fn_png_destroy_read_struct (&png_ptr, NULL, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5804 if (fp) fclose (fp); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5805 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5806 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5807 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5808 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5809 end_info = fn_png_create_info_struct (png_ptr); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5810 if (!end_info) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5811 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5812 fn_png_destroy_read_struct (&png_ptr, &info_ptr, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5813 if (fp) fclose (fp); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5814 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5815 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5816 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5817 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5818 /* Set error jump-back. We come back here when the PNG library |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5819 detects an error. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5820 if (setjmp (png_ptr->jmpbuf)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5821 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5822 error: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5823 if (png_ptr) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5824 fn_png_destroy_read_struct (&png_ptr, &info_ptr, &end_info); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5825 xfree (pixels); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5826 xfree (rows); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5827 if (fp) fclose (fp); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5828 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5829 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5830 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5831 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5832 /* Read image info. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5833 if (!NILP (specified_data)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5834 fn_png_set_read_fn (png_ptr, (void *) &tbr, png_read_from_memory); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5835 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5836 fn_png_init_io (png_ptr, fp); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5837 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5838 fn_png_set_sig_bytes (png_ptr, sizeof sig); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5839 fn_png_read_info (png_ptr, info_ptr); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5840 fn_png_get_IHDR (png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5841 &interlace_type, NULL, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5842 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5843 /* If image contains simply transparency data, we prefer to |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5844 construct a clipping mask. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5845 if (fn_png_get_valid (png_ptr, info_ptr, PNG_INFO_tRNS)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5846 transparent_p = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5847 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5848 transparent_p = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5849 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5850 /* This function is easier to write if we only have to handle |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5851 one data format: RGB or RGBA with 8 bits per channel. Let's |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5852 transform other formats into that format. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5853 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5854 /* Strip more than 8 bits per channel. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5855 if (bit_depth == 16) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5856 fn_png_set_strip_16 (png_ptr); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5857 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5858 /* Expand data to 24 bit RGB, or 8 bit grayscale, with alpha channel |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5859 if available. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5860 fn_png_set_expand (png_ptr); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5861 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5862 /* Convert grayscale images to RGB. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5863 if (color_type == PNG_COLOR_TYPE_GRAY |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5864 || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5865 fn_png_set_gray_to_rgb (png_ptr); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5866 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5867 screen_gamma = (f->gamma ? 1 / f->gamma / 0.45455 : 2.2); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5868 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5869 #if 0 /* Avoid double gamma correction for PNG images. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5870 { /* Tell the PNG lib to handle gamma correction for us. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5871 int intent; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5872 double image_gamma; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5873 #if defined(PNG_READ_sRGB_SUPPORTED) || defined(PNG_WRITE_sRGB_SUPPORTED) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5874 if (png_get_sRGB (png_ptr, info_ptr, &intent)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5875 /* The libpng documentation says this is right in this case. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5876 png_set_gamma (png_ptr, screen_gamma, 0.45455); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5877 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5878 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5879 if (png_get_gAMA (png_ptr, info_ptr, &image_gamma)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5880 /* Image contains gamma information. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5881 png_set_gamma (png_ptr, screen_gamma, image_gamma); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5882 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5883 /* Use the standard default for the image gamma. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5884 png_set_gamma (png_ptr, screen_gamma, 0.45455); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5885 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5886 #endif /* if 0 */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5887 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5888 /* Handle alpha channel by combining the image with a background |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5889 color. Do this only if a real alpha channel is supplied. For |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5890 simple transparency, we prefer a clipping mask. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5891 if (!transparent_p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5892 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5893 png_color_16 *image_bg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5894 Lisp_Object specified_bg |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5895 = image_spec_value (img->spec, QCbackground, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5896 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5897 if (STRINGP (specified_bg)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5898 /* The user specified `:background', use that. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5899 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5900 /* W32 version incorrectly used COLORREF here!! ++kfs */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5901 XColor color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5902 if (x_defined_color (f, SDATA (specified_bg), &color, 0)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5903 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5904 png_color_16 user_bg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5905 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5906 bzero (&user_bg, sizeof user_bg); |
54920
38cb79e68369
(PNG_BG_COLOR_SHIFT): Remove.
Kim F. Storm <storm@cua.dk>
parents:
54427
diff
changeset
|
5907 user_bg.red = color.red >> 8; |
38cb79e68369
(PNG_BG_COLOR_SHIFT): Remove.
Kim F. Storm <storm@cua.dk>
parents:
54427
diff
changeset
|
5908 user_bg.green = color.green >> 8; |
38cb79e68369
(PNG_BG_COLOR_SHIFT): Remove.
Kim F. Storm <storm@cua.dk>
parents:
54427
diff
changeset
|
5909 user_bg.blue = color.blue >> 8; |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5910 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5911 fn_png_set_background (png_ptr, &user_bg, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5912 PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5913 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5914 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5915 else if (fn_png_get_bKGD (png_ptr, info_ptr, &image_bg)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5916 /* Image contains a background color with which to |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5917 combine the image. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5918 fn_png_set_background (png_ptr, image_bg, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5919 PNG_BACKGROUND_GAMMA_FILE, 1, 1.0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5920 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5921 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5922 /* Image does not contain a background color with which |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5923 to combine the image data via an alpha channel. Use |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5924 the frame's background instead. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5925 #ifdef HAVE_X_WINDOWS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5926 XColor color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5927 png_color_16 frame_background; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5928 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5929 color.pixel = FRAME_BACKGROUND_PIXEL (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5930 x_query_color (f, &color); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5931 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5932 bzero (&frame_background, sizeof frame_background); |
54920
38cb79e68369
(PNG_BG_COLOR_SHIFT): Remove.
Kim F. Storm <storm@cua.dk>
parents:
54427
diff
changeset
|
5933 frame_background.red = color.red >> 8; |
38cb79e68369
(PNG_BG_COLOR_SHIFT): Remove.
Kim F. Storm <storm@cua.dk>
parents:
54427
diff
changeset
|
5934 frame_background.green = color.green >> 8; |
38cb79e68369
(PNG_BG_COLOR_SHIFT): Remove.
Kim F. Storm <storm@cua.dk>
parents:
54427
diff
changeset
|
5935 frame_background.blue = color.blue >> 8; |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5936 #endif /* HAVE_X_WINDOWS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5937 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5938 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5939 COLORREF color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5940 png_color_16 frame_background; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5941 color = FRAME_BACKGROUND_PIXEL (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5942 #if 0 /* W32 TODO : Colormap support. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5943 x_query_color (f, &color); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5944 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5945 bzero (&frame_background, sizeof frame_background); |
54920
38cb79e68369
(PNG_BG_COLOR_SHIFT): Remove.
Kim F. Storm <storm@cua.dk>
parents:
54427
diff
changeset
|
5946 frame_background.red = GetRValue (color); |
38cb79e68369
(PNG_BG_COLOR_SHIFT): Remove.
Kim F. Storm <storm@cua.dk>
parents:
54427
diff
changeset
|
5947 frame_background.green = GetGValue (color); |
38cb79e68369
(PNG_BG_COLOR_SHIFT): Remove.
Kim F. Storm <storm@cua.dk>
parents:
54427
diff
changeset
|
5948 frame_background.blue = GetBValue (color); |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5949 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5950 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5951 #ifdef MAC_OS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5952 unsigned long color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5953 png_color_16 frame_background; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5954 color = FRAME_BACKGROUND_PIXEL (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5955 #if 0 /* MAC/W32 TODO : Colormap support. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5956 x_query_color (f, &color); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5957 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5958 bzero (&frame_background, sizeof frame_background); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5959 frame_background.red = RED_FROM_ULONG (color); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5960 frame_background.green = GREEN_FROM_ULONG (color); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5961 frame_background.blue = BLUE_FROM_ULONG (color); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5962 #endif /* MAC_OS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5963 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5964 fn_png_set_background (png_ptr, &frame_background, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5965 PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5966 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5967 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5968 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5969 /* Update info structure. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5970 fn_png_read_update_info (png_ptr, info_ptr); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5971 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5972 /* Get number of channels. Valid values are 1 for grayscale images |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5973 and images with a palette, 2 for grayscale images with transparency |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5974 information (alpha channel), 3 for RGB images, and 4 for RGB |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5975 images with alpha channel, i.e. RGBA. If conversions above were |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5976 sufficient we should only have 3 or 4 channels here. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5977 channels = fn_png_get_channels (png_ptr, info_ptr); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5978 xassert (channels == 3 || channels == 4); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5979 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5980 /* Number of bytes needed for one row of the image. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5981 row_bytes = fn_png_get_rowbytes (png_ptr, info_ptr); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5982 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5983 /* Allocate memory for the image. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5984 pixels = (png_byte *) xmalloc (row_bytes * height * sizeof *pixels); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5985 rows = (png_byte **) xmalloc (height * sizeof *rows); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5986 for (i = 0; i < height; ++i) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5987 rows[i] = pixels + i * row_bytes; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5988 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5989 /* Read the entire image. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5990 fn_png_read_image (png_ptr, rows); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5991 fn_png_read_end (png_ptr, info_ptr); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5992 if (fp) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5993 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5994 fclose (fp); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5995 fp = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5996 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5997 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5998 /* Create the X image and pixmap. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
5999 if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6000 &img->pixmap)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6001 goto error; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6002 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6003 /* Create an image and pixmap serving as mask if the PNG image |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6004 contains an alpha channel. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6005 if (channels == 4 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6006 && !transparent_p |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6007 && !x_create_x_image_and_pixmap (f, width, height, 1, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6008 &mask_img, &img->mask)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6009 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6010 x_destroy_x_image (ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6011 Free_Pixmap (FRAME_X_DISPLAY (f), img->pixmap); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6012 img->pixmap = NO_PIXMAP; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6013 goto error; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6014 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6015 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6016 /* Fill the X image and mask from PNG data. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6017 init_color_table (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6018 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6019 for (y = 0; y < height; ++y) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6020 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6021 png_byte *p = rows[y]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6022 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6023 for (x = 0; x < width; ++x) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6024 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6025 unsigned r, g, b; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6026 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6027 r = *p++ << 8; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6028 g = *p++ << 8; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6029 b = *p++ << 8; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6030 XPutPixel (ximg, x, y, lookup_rgb_color (f, r, g, b)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6031 /* An alpha channel, aka mask channel, associates variable |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6032 transparency with an image. Where other image formats |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6033 support binary transparency---fully transparent or fully |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6034 opaque---PNG allows up to 254 levels of partial transparency. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6035 The PNG library implements partial transparency by combining |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6036 the image with a specified background color. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6037 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6038 I'm not sure how to handle this here nicely: because the |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6039 background on which the image is displayed may change, for |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6040 real alpha channel support, it would be necessary to create |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6041 a new image for each possible background. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6042 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6043 What I'm doing now is that a mask is created if we have |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6044 boolean transparency information. Otherwise I'm using |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6045 the frame's background color to combine the image with. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6046 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6047 if (channels == 4) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6048 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6049 if (mask_img) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6050 XPutPixel (mask_img, x, y, *p > 0 ? PIX_MASK_DRAW (f) : PIX_MASK_RETAIN (f)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6051 ++p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6052 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6053 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6054 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6055 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6056 if (NILP (image_spec_value (img->spec, QCbackground, NULL))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6057 /* Set IMG's background color from the PNG image, unless the user |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6058 overrode it. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6059 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6060 png_color_16 *bg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6061 if (fn_png_get_bKGD (png_ptr, info_ptr, &bg)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6062 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6063 img->background = lookup_rgb_color (f, bg->red, bg->green, bg->blue); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6064 img->background_valid = 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6065 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6066 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6067 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6068 #ifdef COLOR_TABLE_SUPPORT |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6069 /* Remember colors allocated for this image. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6070 img->colors = colors_in_color_table (&img->ncolors); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6071 free_color_table (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6072 #endif /* COLOR_TABLE_SUPPORT */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6073 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6074 /* Clean up. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6075 fn_png_destroy_read_struct (&png_ptr, &info_ptr, &end_info); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6076 xfree (rows); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6077 xfree (pixels); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6078 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6079 img->width = width; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6080 img->height = height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6081 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6082 /* Maybe fill in the background field while we have ximg handy. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6083 IMAGE_BACKGROUND (img, f, ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6084 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6085 /* Put the image into the pixmap, then free the X image and its buffer. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6086 x_put_x_image (f, ximg, img->pixmap, width, height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6087 x_destroy_x_image (ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6088 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6089 /* Same for the mask. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6090 if (mask_img) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6091 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6092 /* Fill in the background_transparent field while we have the mask |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6093 handy. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6094 image_background_transparent (img, f, mask_img); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6095 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6096 x_put_x_image (f, mask_img, img->mask, img->width, img->height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6097 x_destroy_x_image (mask_img); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6098 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6099 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6100 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6101 return 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6102 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6103 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6104 #else /* HAVE_PNG */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6105 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6106 #ifdef MAC_OS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6107 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6108 png_load (f, img) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6109 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6110 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6111 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6112 #ifdef MAC_OSX |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6113 if (MyCGImageCreateWithPNGDataProvider) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6114 return image_load_quartz2d (f, img, 1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6115 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6116 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6117 return image_load_quicktime (f, img, kQTFileTypePNG); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6118 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6119 #endif /* MAC_OS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6120 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6121 #endif /* !HAVE_PNG */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6122 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6123 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6124 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6125 /*********************************************************************** |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6126 JPEG |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6127 ***********************************************************************/ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6128 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6129 #if defined (HAVE_JPEG) || defined (MAC_OS) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6130 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6131 static int jpeg_image_p P_ ((Lisp_Object object)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6132 static int jpeg_load P_ ((struct frame *f, struct image *img)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6133 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6134 /* The symbol `jpeg' identifying images of this type. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6135 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6136 Lisp_Object Qjpeg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6137 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6138 /* Indices of image specification fields in gs_format, below. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6139 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6140 enum jpeg_keyword_index |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6141 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6142 JPEG_TYPE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6143 JPEG_DATA, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6144 JPEG_FILE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6145 JPEG_ASCENT, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6146 JPEG_MARGIN, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6147 JPEG_RELIEF, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6148 JPEG_ALGORITHM, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6149 JPEG_HEURISTIC_MASK, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6150 JPEG_MASK, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6151 JPEG_BACKGROUND, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6152 JPEG_LAST |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6153 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6154 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6155 /* Vector of image_keyword structures describing the format |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6156 of valid user-defined image specifications. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6157 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6158 static struct image_keyword jpeg_format[JPEG_LAST] = |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6159 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6160 {":type", IMAGE_SYMBOL_VALUE, 1}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6161 {":data", IMAGE_STRING_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6162 {":file", IMAGE_STRING_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6163 {":ascent", IMAGE_ASCENT_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6164 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6165 {":relief", IMAGE_INTEGER_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6166 {":conversions", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6167 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6168 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6169 {":background", IMAGE_STRING_OR_NIL_VALUE, 0} |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6170 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6171 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6172 /* Structure describing the image type `jpeg'. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6173 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6174 static struct image_type jpeg_type = |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6175 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6176 &Qjpeg, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6177 jpeg_image_p, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6178 jpeg_load, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6179 x_clear_image, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6180 NULL |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6181 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6182 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6183 /* Return non-zero if OBJECT is a valid JPEG image specification. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6184 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6185 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6186 jpeg_image_p (object) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6187 Lisp_Object object; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6188 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6189 struct image_keyword fmt[JPEG_LAST]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6190 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6191 bcopy (jpeg_format, fmt, sizeof fmt); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6192 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6193 if (!parse_image_spec (object, fmt, JPEG_LAST, Qjpeg)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6194 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6195 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6196 /* Must specify either the :data or :file keyword. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6197 return fmt[JPEG_FILE].count + fmt[JPEG_DATA].count == 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6198 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6199 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6200 #endif /* HAVE_JPEG || MAC_OS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6201 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6202 #ifdef HAVE_JPEG |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6203 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6204 /* Work around a warning about HAVE_STDLIB_H being redefined in |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6205 jconfig.h. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6206 #ifdef HAVE_STDLIB_H |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6207 #define HAVE_STDLIB_H_1 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6208 #undef HAVE_STDLIB_H |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6209 #endif /* HAVE_STLIB_H */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6210 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6211 #include <jpeglib.h> |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6212 #include <jerror.h> |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6213 #include <setjmp.h> |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6214 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6215 #ifdef HAVE_STLIB_H_1 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6216 #define HAVE_STDLIB_H 1 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6217 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6218 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6219 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6220 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6221 /* JPEG library details. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6222 DEF_IMGLIB_FN (jpeg_CreateDecompress); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6223 DEF_IMGLIB_FN (jpeg_start_decompress); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6224 DEF_IMGLIB_FN (jpeg_finish_decompress); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6225 DEF_IMGLIB_FN (jpeg_destroy_decompress); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6226 DEF_IMGLIB_FN (jpeg_read_header); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6227 DEF_IMGLIB_FN (jpeg_read_scanlines); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6228 DEF_IMGLIB_FN (jpeg_stdio_src); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6229 DEF_IMGLIB_FN (jpeg_std_error); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6230 DEF_IMGLIB_FN (jpeg_resync_to_restart); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6231 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6232 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6233 init_jpeg_functions (void) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6234 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6235 HMODULE library; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6236 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6237 if (!(library = LoadLibrary ("libjpeg.dll")) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6238 && !(library = LoadLibrary ("jpeg-62.dll")) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6239 && !(library = LoadLibrary ("jpeg.dll"))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6240 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6241 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6242 LOAD_IMGLIB_FN (library, jpeg_finish_decompress); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6243 LOAD_IMGLIB_FN (library, jpeg_read_scanlines); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6244 LOAD_IMGLIB_FN (library, jpeg_start_decompress); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6245 LOAD_IMGLIB_FN (library, jpeg_read_header); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6246 LOAD_IMGLIB_FN (library, jpeg_stdio_src); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6247 LOAD_IMGLIB_FN (library, jpeg_CreateDecompress); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6248 LOAD_IMGLIB_FN (library, jpeg_destroy_decompress); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6249 LOAD_IMGLIB_FN (library, jpeg_std_error); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6250 LOAD_IMGLIB_FN (library, jpeg_resync_to_restart); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6251 return 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6252 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6253 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6254 /* Wrapper since we can't directly assign the function pointer |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6255 to another function pointer that was declared more completely easily. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6256 static boolean |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6257 jpeg_resync_to_restart_wrapper(cinfo, desired) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6258 j_decompress_ptr cinfo; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6259 int desired; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6260 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6261 return fn_jpeg_resync_to_restart (cinfo, desired); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6262 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6263 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6264 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6265 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6266 #define fn_jpeg_CreateDecompress(a,b,c) jpeg_create_decompress(a) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6267 #define fn_jpeg_start_decompress jpeg_start_decompress |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6268 #define fn_jpeg_finish_decompress jpeg_finish_decompress |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6269 #define fn_jpeg_destroy_decompress jpeg_destroy_decompress |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6270 #define fn_jpeg_read_header jpeg_read_header |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6271 #define fn_jpeg_read_scanlines jpeg_read_scanlines |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6272 #define fn_jpeg_stdio_src jpeg_stdio_src |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6273 #define fn_jpeg_std_error jpeg_std_error |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6274 #define jpeg_resync_to_restart_wrapper jpeg_resync_to_restart |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6275 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6276 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6277 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6278 struct my_jpeg_error_mgr |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6279 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6280 struct jpeg_error_mgr pub; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6281 jmp_buf setjmp_buffer; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6282 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6283 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6284 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6285 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6286 my_error_exit (cinfo) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6287 j_common_ptr cinfo; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6288 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6289 struct my_jpeg_error_mgr *mgr = (struct my_jpeg_error_mgr *) cinfo->err; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6290 longjmp (mgr->setjmp_buffer, 1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6291 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6292 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6293 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6294 /* Init source method for JPEG data source manager. Called by |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6295 jpeg_read_header() before any data is actually read. See |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6296 libjpeg.doc from the JPEG lib distribution. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6297 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6298 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6299 our_init_source (cinfo) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6300 j_decompress_ptr cinfo; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6301 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6302 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6303 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6304 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6305 /* Fill input buffer method for JPEG data source manager. Called |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6306 whenever more data is needed. We read the whole image in one step, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6307 so this only adds a fake end of input marker at the end. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6308 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6309 static boolean |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6310 our_fill_input_buffer (cinfo) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6311 j_decompress_ptr cinfo; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6312 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6313 /* Insert a fake EOI marker. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6314 struct jpeg_source_mgr *src = cinfo->src; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6315 static JOCTET buffer[2]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6316 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6317 buffer[0] = (JOCTET) 0xFF; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6318 buffer[1] = (JOCTET) JPEG_EOI; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6319 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6320 src->next_input_byte = buffer; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6321 src->bytes_in_buffer = 2; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6322 return TRUE; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6323 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6324 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6325 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6326 /* Method to skip over NUM_BYTES bytes in the image data. CINFO->src |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6327 is the JPEG data source manager. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6328 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6329 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6330 our_skip_input_data (cinfo, num_bytes) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6331 j_decompress_ptr cinfo; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6332 long num_bytes; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6333 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6334 struct jpeg_source_mgr *src = (struct jpeg_source_mgr *) cinfo->src; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6335 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6336 if (src) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6337 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6338 if (num_bytes > src->bytes_in_buffer) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6339 ERREXIT (cinfo, JERR_INPUT_EOF); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6340 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6341 src->bytes_in_buffer -= num_bytes; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6342 src->next_input_byte += num_bytes; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6343 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6344 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6345 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6346 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6347 /* Method to terminate data source. Called by |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6348 jpeg_finish_decompress() after all data has been processed. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6349 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6350 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6351 our_term_source (cinfo) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6352 j_decompress_ptr cinfo; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6353 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6354 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6355 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6356 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6357 /* Set up the JPEG lib for reading an image from DATA which contains |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6358 LEN bytes. CINFO is the decompression info structure created for |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6359 reading the image. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6360 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6361 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6362 jpeg_memory_src (cinfo, data, len) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6363 j_decompress_ptr cinfo; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6364 JOCTET *data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6365 unsigned int len; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6366 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6367 struct jpeg_source_mgr *src; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6368 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6369 if (cinfo->src == NULL) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6370 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6371 /* First time for this JPEG object? */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6372 cinfo->src = (struct jpeg_source_mgr *) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6373 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6374 sizeof (struct jpeg_source_mgr)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6375 src = (struct jpeg_source_mgr *) cinfo->src; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6376 src->next_input_byte = data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6377 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6378 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6379 src = (struct jpeg_source_mgr *) cinfo->src; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6380 src->init_source = our_init_source; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6381 src->fill_input_buffer = our_fill_input_buffer; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6382 src->skip_input_data = our_skip_input_data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6383 src->resync_to_restart = jpeg_resync_to_restart_wrapper; /* Use default method. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6384 src->term_source = our_term_source; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6385 src->bytes_in_buffer = len; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6386 src->next_input_byte = data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6387 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6388 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6389 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6390 /* Load image IMG for use on frame F. Patterned after example.c |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6391 from the JPEG lib. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6392 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6393 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6394 jpeg_load (f, img) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6395 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6396 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6397 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6398 struct jpeg_decompress_struct cinfo; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6399 struct my_jpeg_error_mgr mgr; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6400 Lisp_Object file, specified_file; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6401 Lisp_Object specified_data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6402 FILE * volatile fp = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6403 JSAMPARRAY buffer; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6404 int row_stride, x, y; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6405 XImagePtr ximg = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6406 int rc; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6407 unsigned long *colors; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6408 int width, height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6409 struct gcpro gcpro1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6410 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6411 /* Open the JPEG file. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6412 specified_file = image_spec_value (img->spec, QCfile, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6413 specified_data = image_spec_value (img->spec, QCdata, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6414 file = Qnil; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6415 GCPRO1 (file); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6416 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6417 if (NILP (specified_data)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6418 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6419 file = x_find_image_file (specified_file); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6420 if (!STRINGP (file)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6421 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6422 image_error ("Cannot find image file `%s'", specified_file, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6423 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6424 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6425 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6426 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6427 fp = fopen (SDATA (file), "rb"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6428 if (fp == NULL) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6429 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6430 image_error ("Cannot open `%s'", file, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6431 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6432 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6433 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6434 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6435 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6436 /* Customize libjpeg's error handling to call my_error_exit when an |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6437 error is detected. This function will perform a longjmp. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6438 cinfo.err = fn_jpeg_std_error (&mgr.pub); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6439 mgr.pub.error_exit = my_error_exit; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6440 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6441 if ((rc = setjmp (mgr.setjmp_buffer)) != 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6442 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6443 if (rc == 1) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6444 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6445 /* Called from my_error_exit. Display a JPEG error. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6446 char buffer[JMSG_LENGTH_MAX]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6447 cinfo.err->format_message ((j_common_ptr) &cinfo, buffer); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6448 image_error ("Error reading JPEG image `%s': %s", img->spec, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6449 build_string (buffer)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6450 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6451 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6452 /* Close the input file and destroy the JPEG object. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6453 if (fp) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6454 fclose ((FILE *) fp); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6455 fn_jpeg_destroy_decompress (&cinfo); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6456 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6457 /* If we already have an XImage, free that. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6458 x_destroy_x_image (ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6459 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6460 /* Free pixmap and colors. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6461 x_clear_image (f, img); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6462 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6463 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6464 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6465 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6466 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6467 /* Create the JPEG decompression object. Let it read from fp. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6468 Read the JPEG image header. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6469 fn_jpeg_CreateDecompress (&cinfo, JPEG_LIB_VERSION, sizeof (cinfo)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6470 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6471 if (NILP (specified_data)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6472 fn_jpeg_stdio_src (&cinfo, (FILE *) fp); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6473 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6474 jpeg_memory_src (&cinfo, SDATA (specified_data), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6475 SBYTES (specified_data)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6476 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6477 fn_jpeg_read_header (&cinfo, TRUE); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6478 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6479 /* Customize decompression so that color quantization will be used. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6480 Start decompression. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6481 cinfo.quantize_colors = TRUE; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6482 fn_jpeg_start_decompress (&cinfo); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6483 width = img->width = cinfo.output_width; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6484 height = img->height = cinfo.output_height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6485 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6486 /* Create X image and pixmap. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6487 if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, &img->pixmap)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6488 longjmp (mgr.setjmp_buffer, 2); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6489 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6490 /* Allocate colors. When color quantization is used, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6491 cinfo.actual_number_of_colors has been set with the number of |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6492 colors generated, and cinfo.colormap is a two-dimensional array |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6493 of color indices in the range 0..cinfo.actual_number_of_colors. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6494 No more than 255 colors will be generated. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6495 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6496 int i, ir, ig, ib; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6497 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6498 if (cinfo.out_color_components > 2) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6499 ir = 0, ig = 1, ib = 2; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6500 else if (cinfo.out_color_components > 1) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6501 ir = 0, ig = 1, ib = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6502 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6503 ir = 0, ig = 0, ib = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6504 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6505 /* Use the color table mechanism because it handles colors that |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6506 cannot be allocated nicely. Such colors will be replaced with |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6507 a default color, and we don't have to care about which colors |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6508 can be freed safely, and which can't. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6509 init_color_table (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6510 colors = (unsigned long *) alloca (cinfo.actual_number_of_colors |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6511 * sizeof *colors); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6512 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6513 for (i = 0; i < cinfo.actual_number_of_colors; ++i) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6514 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6515 /* Multiply RGB values with 255 because X expects RGB values |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6516 in the range 0..0xffff. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6517 int r = cinfo.colormap[ir][i] << 8; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6518 int g = cinfo.colormap[ig][i] << 8; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6519 int b = cinfo.colormap[ib][i] << 8; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6520 colors[i] = lookup_rgb_color (f, r, g, b); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6521 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6522 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6523 #ifdef COLOR_TABLE_SUPPORT |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6524 /* Remember those colors actually allocated. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6525 img->colors = colors_in_color_table (&img->ncolors); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6526 free_color_table (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6527 #endif /* COLOR_TABLE_SUPPORT */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6528 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6529 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6530 /* Read pixels. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6531 row_stride = width * cinfo.output_components; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6532 buffer = cinfo.mem->alloc_sarray ((j_common_ptr) &cinfo, JPOOL_IMAGE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6533 row_stride, 1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6534 for (y = 0; y < height; ++y) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6535 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6536 fn_jpeg_read_scanlines (&cinfo, buffer, 1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6537 for (x = 0; x < cinfo.output_width; ++x) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6538 XPutPixel (ximg, x, y, colors[buffer[0][x]]); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6539 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6540 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6541 /* Clean up. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6542 fn_jpeg_finish_decompress (&cinfo); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6543 fn_jpeg_destroy_decompress (&cinfo); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6544 if (fp) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6545 fclose ((FILE *) fp); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6546 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6547 /* Maybe fill in the background field while we have ximg handy. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6548 if (NILP (image_spec_value (img->spec, QCbackground, NULL))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6549 IMAGE_BACKGROUND (img, f, ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6550 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6551 /* Put the image into the pixmap. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6552 x_put_x_image (f, ximg, img->pixmap, width, height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6553 x_destroy_x_image (ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6554 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6555 return 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6556 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6557 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6558 #else /* HAVE_JPEG */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6559 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6560 #ifdef MAC_OS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6561 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6562 jpeg_load (f, img) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6563 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6564 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6565 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6566 #ifdef MAC_OSX |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6567 return image_load_quartz2d (f, img, 0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6568 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6569 return image_load_quicktime (f, img, kQTFileTypeJPEG); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6570 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6571 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6572 #endif /* MAC_OS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6573 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6574 #endif /* !HAVE_JPEG */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6575 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6576 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6577 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6578 /*********************************************************************** |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6579 TIFF |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6580 ***********************************************************************/ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6581 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6582 #if defined (HAVE_TIFF) || defined (MAC_OS) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6583 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6584 static int tiff_image_p P_ ((Lisp_Object object)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6585 static int tiff_load P_ ((struct frame *f, struct image *img)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6586 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6587 /* The symbol `tiff' identifying images of this type. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6588 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6589 Lisp_Object Qtiff; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6590 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6591 /* Indices of image specification fields in tiff_format, below. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6592 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6593 enum tiff_keyword_index |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6594 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6595 TIFF_TYPE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6596 TIFF_DATA, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6597 TIFF_FILE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6598 TIFF_ASCENT, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6599 TIFF_MARGIN, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6600 TIFF_RELIEF, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6601 TIFF_ALGORITHM, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6602 TIFF_HEURISTIC_MASK, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6603 TIFF_MASK, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6604 TIFF_BACKGROUND, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6605 TIFF_LAST |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6606 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6607 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6608 /* Vector of image_keyword structures describing the format |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6609 of valid user-defined image specifications. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6610 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6611 static struct image_keyword tiff_format[TIFF_LAST] = |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6612 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6613 {":type", IMAGE_SYMBOL_VALUE, 1}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6614 {":data", IMAGE_STRING_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6615 {":file", IMAGE_STRING_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6616 {":ascent", IMAGE_ASCENT_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6617 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6618 {":relief", IMAGE_INTEGER_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6619 {":conversions", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6620 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6621 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6622 {":background", IMAGE_STRING_OR_NIL_VALUE, 0} |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6623 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6624 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6625 /* Structure describing the image type `tiff'. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6626 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6627 static struct image_type tiff_type = |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6628 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6629 &Qtiff, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6630 tiff_image_p, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6631 tiff_load, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6632 x_clear_image, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6633 NULL |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6634 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6635 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6636 /* Return non-zero if OBJECT is a valid TIFF image specification. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6637 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6638 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6639 tiff_image_p (object) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6640 Lisp_Object object; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6641 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6642 struct image_keyword fmt[TIFF_LAST]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6643 bcopy (tiff_format, fmt, sizeof fmt); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6644 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6645 if (!parse_image_spec (object, fmt, TIFF_LAST, Qtiff)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6646 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6647 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6648 /* Must specify either the :data or :file keyword. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6649 return fmt[TIFF_FILE].count + fmt[TIFF_DATA].count == 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6650 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6651 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6652 #endif /* HAVE_TIFF || MAC_OS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6653 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6654 #ifdef HAVE_TIFF |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6655 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6656 #include <tiffio.h> |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6657 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6658 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6659 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6660 /* TIFF library details. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6661 DEF_IMGLIB_FN (TIFFSetErrorHandler); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6662 DEF_IMGLIB_FN (TIFFSetWarningHandler); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6663 DEF_IMGLIB_FN (TIFFOpen); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6664 DEF_IMGLIB_FN (TIFFClientOpen); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6665 DEF_IMGLIB_FN (TIFFGetField); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6666 DEF_IMGLIB_FN (TIFFReadRGBAImage); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6667 DEF_IMGLIB_FN (TIFFClose); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6668 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6669 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6670 init_tiff_functions (void) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6671 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6672 HMODULE library; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6673 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6674 if (!(library = LoadLibrary ("libtiff.dll"))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6675 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6676 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6677 LOAD_IMGLIB_FN (library, TIFFSetErrorHandler); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6678 LOAD_IMGLIB_FN (library, TIFFSetWarningHandler); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6679 LOAD_IMGLIB_FN (library, TIFFOpen); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6680 LOAD_IMGLIB_FN (library, TIFFClientOpen); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6681 LOAD_IMGLIB_FN (library, TIFFGetField); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6682 LOAD_IMGLIB_FN (library, TIFFReadRGBAImage); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6683 LOAD_IMGLIB_FN (library, TIFFClose); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6684 return 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6685 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6686 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6687 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6688 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6689 #define fn_TIFFSetErrorHandler TIFFSetErrorHandler |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6690 #define fn_TIFFSetWarningHandler TIFFSetWarningHandler |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6691 #define fn_TIFFOpen TIFFOpen |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6692 #define fn_TIFFClientOpen TIFFClientOpen |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6693 #define fn_TIFFGetField TIFFGetField |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6694 #define fn_TIFFReadRGBAImage TIFFReadRGBAImage |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6695 #define fn_TIFFClose TIFFClose |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6696 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6697 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6698 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6699 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6700 /* Reading from a memory buffer for TIFF images Based on the PNG |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6701 memory source, but we have to provide a lot of extra functions. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6702 Blah. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6703 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6704 We really only need to implement read and seek, but I am not |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6705 convinced that the TIFF library is smart enough not to destroy |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6706 itself if we only hand it the function pointers we need to |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6707 override. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6708 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6709 typedef struct |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6710 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6711 unsigned char *bytes; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6712 size_t len; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6713 int index; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6714 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6715 tiff_memory_source; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6716 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6717 static size_t |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6718 tiff_read_from_memory (data, buf, size) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6719 thandle_t data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6720 tdata_t buf; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6721 tsize_t size; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6722 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6723 tiff_memory_source *src = (tiff_memory_source *) data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6724 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6725 if (size > src->len - src->index) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6726 return (size_t) -1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6727 bcopy (src->bytes + src->index, buf, size); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6728 src->index += size; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6729 return size; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6730 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6731 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6732 static size_t |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6733 tiff_write_from_memory (data, buf, size) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6734 thandle_t data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6735 tdata_t buf; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6736 tsize_t size; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6737 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6738 return (size_t) -1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6739 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6740 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6741 static toff_t |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6742 tiff_seek_in_memory (data, off, whence) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6743 thandle_t data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6744 toff_t off; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6745 int whence; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6746 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6747 tiff_memory_source *src = (tiff_memory_source *) data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6748 int idx; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6749 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6750 switch (whence) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6751 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6752 case SEEK_SET: /* Go from beginning of source. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6753 idx = off; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6754 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6755 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6756 case SEEK_END: /* Go from end of source. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6757 idx = src->len + off; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6758 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6759 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6760 case SEEK_CUR: /* Go from current position. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6761 idx = src->index + off; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6762 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6763 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6764 default: /* Invalid `whence'. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6765 return -1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6766 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6767 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6768 if (idx > src->len || idx < 0) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6769 return -1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6770 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6771 src->index = idx; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6772 return src->index; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6773 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6774 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6775 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6776 tiff_close_memory (data) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6777 thandle_t data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6778 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6779 /* NOOP */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6780 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6781 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6782 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6783 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6784 tiff_mmap_memory (data, pbase, psize) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6785 thandle_t data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6786 tdata_t *pbase; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6787 toff_t *psize; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6788 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6789 /* It is already _IN_ memory. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6790 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6791 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6792 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6793 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6794 tiff_unmap_memory (data, base, size) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6795 thandle_t data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6796 tdata_t base; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6797 toff_t size; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6798 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6799 /* We don't need to do this. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6800 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6801 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6802 static toff_t |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6803 tiff_size_of_memory (data) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6804 thandle_t data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6805 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6806 return ((tiff_memory_source *) data)->len; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6807 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6808 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6809 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6810 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6811 tiff_error_handler (title, format, ap) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6812 const char *title, *format; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6813 va_list ap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6814 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6815 char buf[512]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6816 int len; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6817 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6818 len = sprintf (buf, "TIFF error: %s ", title); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6819 vsprintf (buf + len, format, ap); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6820 add_to_log (buf, Qnil, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6821 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6822 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6823 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6824 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6825 tiff_warning_handler (title, format, ap) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6826 const char *title, *format; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6827 va_list ap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6828 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6829 char buf[512]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6830 int len; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6831 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6832 len = sprintf (buf, "TIFF warning: %s ", title); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6833 vsprintf (buf + len, format, ap); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6834 add_to_log (buf, Qnil, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6835 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6836 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6837 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6838 /* Load TIFF image IMG for use on frame F. Value is non-zero if |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6839 successful. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6840 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6841 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6842 tiff_load (f, img) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6843 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6844 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6845 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6846 Lisp_Object file, specified_file; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6847 Lisp_Object specified_data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6848 TIFF *tiff; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6849 int width, height, x, y; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6850 uint32 *buf; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6851 int rc; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6852 XImagePtr ximg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6853 struct gcpro gcpro1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6854 tiff_memory_source memsrc; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6855 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6856 specified_file = image_spec_value (img->spec, QCfile, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6857 specified_data = image_spec_value (img->spec, QCdata, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6858 file = Qnil; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6859 GCPRO1 (file); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6860 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6861 fn_TIFFSetErrorHandler (tiff_error_handler); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6862 fn_TIFFSetWarningHandler (tiff_warning_handler); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6863 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6864 if (NILP (specified_data)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6865 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6866 /* Read from a file */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6867 file = x_find_image_file (specified_file); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6868 if (!STRINGP (file)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6869 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6870 image_error ("Cannot find image file `%s'", specified_file, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6871 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6872 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6873 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6874 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6875 /* Try to open the image file. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6876 tiff = fn_TIFFOpen (SDATA (file), "r"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6877 if (tiff == NULL) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6878 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6879 image_error ("Cannot open `%s'", file, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6880 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6881 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6882 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6883 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6884 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6885 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6886 /* Memory source! */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6887 memsrc.bytes = SDATA (specified_data); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6888 memsrc.len = SBYTES (specified_data); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6889 memsrc.index = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6890 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6891 tiff = fn_TIFFClientOpen ("memory_source", "r", &memsrc, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6892 (TIFFReadWriteProc) tiff_read_from_memory, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6893 (TIFFReadWriteProc) tiff_write_from_memory, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6894 tiff_seek_in_memory, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6895 tiff_close_memory, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6896 tiff_size_of_memory, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6897 tiff_mmap_memory, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6898 tiff_unmap_memory); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6899 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6900 if (!tiff) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6901 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6902 image_error ("Cannot open memory source for `%s'", img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6903 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6904 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6905 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6906 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6907 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6908 /* Get width and height of the image, and allocate a raster buffer |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6909 of width x height 32-bit values. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6910 fn_TIFFGetField (tiff, TIFFTAG_IMAGEWIDTH, &width); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6911 fn_TIFFGetField (tiff, TIFFTAG_IMAGELENGTH, &height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6912 buf = (uint32 *) xmalloc (width * height * sizeof *buf); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6913 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6914 rc = fn_TIFFReadRGBAImage (tiff, width, height, buf, 0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6915 fn_TIFFClose (tiff); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6916 if (!rc) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6917 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6918 image_error ("Error reading TIFF image `%s'", img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6919 xfree (buf); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6920 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6921 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6922 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6923 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6924 /* Create the X image and pixmap. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6925 if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, &img->pixmap)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6926 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6927 xfree (buf); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6928 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6929 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6930 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6931 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6932 /* Initialize the color table. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6933 init_color_table (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6934 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6935 /* Process the pixel raster. Origin is in the lower-left corner. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6936 for (y = 0; y < height; ++y) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6937 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6938 uint32 *row = buf + y * width; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6939 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6940 for (x = 0; x < width; ++x) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6941 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6942 uint32 abgr = row[x]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6943 int r = TIFFGetR (abgr) << 8; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6944 int g = TIFFGetG (abgr) << 8; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6945 int b = TIFFGetB (abgr) << 8; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6946 XPutPixel (ximg, x, height - 1 - y, lookup_rgb_color (f, r, g, b)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6947 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6948 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6949 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6950 #ifdef COLOR_TABLE_SUPPORT |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6951 /* Remember the colors allocated for the image. Free the color table. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6952 img->colors = colors_in_color_table (&img->ncolors); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6953 free_color_table (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6954 #endif /* COLOR_TABLE_SUPPORT */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6955 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6956 img->width = width; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6957 img->height = height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6958 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6959 /* Maybe fill in the background field while we have ximg handy. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6960 if (NILP (image_spec_value (img->spec, QCbackground, NULL))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6961 IMAGE_BACKGROUND (img, f, ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6962 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6963 /* Put the image into the pixmap, then free the X image and its buffer. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6964 x_put_x_image (f, ximg, img->pixmap, width, height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6965 x_destroy_x_image (ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6966 xfree (buf); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6967 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6968 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6969 return 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6970 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6971 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6972 #else /* HAVE_TIFF */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6973 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6974 #ifdef MAC_OS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6975 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6976 tiff_load (f, img) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6977 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6978 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6979 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6980 return image_load_quicktime (f, img, kQTFileTypeTIFF); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6981 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6982 #endif /* MAC_OS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6983 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6984 #endif /* !HAVE_TIFF */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6985 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6986 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6987 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6988 /*********************************************************************** |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6989 GIF |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6990 ***********************************************************************/ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6991 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6992 #if defined (HAVE_GIF) || defined (MAC_OS) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6993 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6994 static int gif_image_p P_ ((Lisp_Object object)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6995 static int gif_load P_ ((struct frame *f, struct image *img)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6996 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6997 /* The symbol `gif' identifying images of this type. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6998 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
6999 Lisp_Object Qgif; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7000 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7001 /* Indices of image specification fields in gif_format, below. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7002 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7003 enum gif_keyword_index |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7004 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7005 GIF_TYPE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7006 GIF_DATA, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7007 GIF_FILE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7008 GIF_ASCENT, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7009 GIF_MARGIN, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7010 GIF_RELIEF, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7011 GIF_ALGORITHM, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7012 GIF_HEURISTIC_MASK, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7013 GIF_MASK, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7014 GIF_IMAGE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7015 GIF_BACKGROUND, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7016 GIF_LAST |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7017 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7018 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7019 /* Vector of image_keyword structures describing the format |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7020 of valid user-defined image specifications. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7021 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7022 static struct image_keyword gif_format[GIF_LAST] = |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7023 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7024 {":type", IMAGE_SYMBOL_VALUE, 1}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7025 {":data", IMAGE_STRING_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7026 {":file", IMAGE_STRING_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7027 {":ascent", IMAGE_ASCENT_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7028 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7029 {":relief", IMAGE_INTEGER_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7030 {":conversion", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7031 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7032 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7033 {":image", IMAGE_NON_NEGATIVE_INTEGER_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7034 {":background", IMAGE_STRING_OR_NIL_VALUE, 0} |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7035 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7036 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7037 /* Structure describing the image type `gif'. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7038 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7039 static struct image_type gif_type = |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7040 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7041 &Qgif, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7042 gif_image_p, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7043 gif_load, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7044 x_clear_image, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7045 NULL |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7046 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7047 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7048 /* Return non-zero if OBJECT is a valid GIF image specification. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7049 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7050 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7051 gif_image_p (object) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7052 Lisp_Object object; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7053 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7054 struct image_keyword fmt[GIF_LAST]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7055 bcopy (gif_format, fmt, sizeof fmt); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7056 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7057 if (!parse_image_spec (object, fmt, GIF_LAST, Qgif)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7058 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7059 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7060 /* Must specify either the :data or :file keyword. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7061 return fmt[GIF_FILE].count + fmt[GIF_DATA].count == 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7062 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7063 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7064 #endif /* HAVE_GIF || MAC_OS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7065 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7066 #ifdef HAVE_GIF |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7067 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7068 #if defined (HAVE_NTGUI) || defined (MAC_OS) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7069 /* avoid conflict with QuickdrawText.h */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7070 #define DrawText gif_DrawText |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7071 #include <gif_lib.h> |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7072 #undef DrawText |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7073 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7074 #else /* HAVE_NTGUI || MAC_OS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7075 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7076 #include <gif_lib.h> |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7077 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7078 #endif /* HAVE_NTGUI || MAC_OS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7079 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7080 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7081 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7082 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7083 /* GIF library details. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7084 DEF_IMGLIB_FN (DGifCloseFile); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7085 DEF_IMGLIB_FN (DGifSlurp); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7086 DEF_IMGLIB_FN (DGifOpen); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7087 DEF_IMGLIB_FN (DGifOpenFileName); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7088 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7089 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7090 init_gif_functions (void) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7091 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7092 HMODULE library; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7093 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7094 if (!(library = LoadLibrary ("libungif.dll"))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7095 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7096 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7097 LOAD_IMGLIB_FN (library, DGifCloseFile); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7098 LOAD_IMGLIB_FN (library, DGifSlurp); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7099 LOAD_IMGLIB_FN (library, DGifOpen); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7100 LOAD_IMGLIB_FN (library, DGifOpenFileName); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7101 return 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7102 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7103 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7104 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7105 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7106 #define fn_DGifCloseFile DGifCloseFile |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7107 #define fn_DGifSlurp DGifSlurp |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7108 #define fn_DGifOpen DGifOpen |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7109 #define fn_DGifOpenFileName DGifOpenFileName |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7110 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7111 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7112 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7113 /* Reading a GIF image from memory |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7114 Based on the PNG memory stuff to a certain extent. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7115 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7116 typedef struct |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7117 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7118 unsigned char *bytes; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7119 size_t len; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7120 int index; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7121 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7122 gif_memory_source; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7123 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7124 /* Make the current memory source available to gif_read_from_memory. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7125 It's done this way because not all versions of libungif support |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7126 a UserData field in the GifFileType structure. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7127 static gif_memory_source *current_gif_memory_src; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7128 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7129 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7130 gif_read_from_memory (file, buf, len) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7131 GifFileType *file; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7132 GifByteType *buf; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7133 int len; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7134 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7135 gif_memory_source *src = current_gif_memory_src; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7136 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7137 if (len > src->len - src->index) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7138 return -1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7139 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7140 bcopy (src->bytes + src->index, buf, len); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7141 src->index += len; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7142 return len; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7143 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7144 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7145 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7146 /* Load GIF image IMG for use on frame F. Value is non-zero if |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7147 successful. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7148 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7149 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7150 gif_load (f, img) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7151 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7152 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7153 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7154 Lisp_Object file, specified_file; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7155 Lisp_Object specified_data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7156 int rc, width, height, x, y, i; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7157 XImagePtr ximg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7158 ColorMapObject *gif_color_map; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7159 unsigned long pixel_colors[256]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7160 GifFileType *gif; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7161 struct gcpro gcpro1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7162 Lisp_Object image; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7163 int ino, image_left, image_top, image_width, image_height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7164 gif_memory_source memsrc; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7165 unsigned char *raster; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7166 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7167 specified_file = image_spec_value (img->spec, QCfile, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7168 specified_data = image_spec_value (img->spec, QCdata, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7169 file = Qnil; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7170 GCPRO1 (file); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7171 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7172 if (NILP (specified_data)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7173 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7174 file = x_find_image_file (specified_file); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7175 if (!STRINGP (file)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7176 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7177 image_error ("Cannot find image file `%s'", specified_file, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7178 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7179 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7180 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7181 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7182 /* Open the GIF file. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7183 gif = fn_DGifOpenFileName (SDATA (file)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7184 if (gif == NULL) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7185 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7186 image_error ("Cannot open `%s'", file, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7187 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7188 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7189 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7190 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7191 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7192 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7193 /* Read from memory! */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7194 current_gif_memory_src = &memsrc; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7195 memsrc.bytes = SDATA (specified_data); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7196 memsrc.len = SBYTES (specified_data); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7197 memsrc.index = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7198 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7199 gif = fn_DGifOpen(&memsrc, gif_read_from_memory); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7200 if (!gif) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7201 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7202 image_error ("Cannot open memory source `%s'", img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7203 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7204 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7205 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7206 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7207 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7208 /* Read entire contents. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7209 rc = fn_DGifSlurp (gif); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7210 if (rc == GIF_ERROR) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7211 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7212 image_error ("Error reading `%s'", img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7213 fn_DGifCloseFile (gif); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7214 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7215 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7216 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7217 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7218 image = image_spec_value (img->spec, QCindex, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7219 ino = INTEGERP (image) ? XFASTINT (image) : 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7220 if (ino >= gif->ImageCount) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7221 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7222 image_error ("Invalid image number `%s' in image `%s'", |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7223 image, img->spec); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7224 fn_DGifCloseFile (gif); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7225 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7226 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7227 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7228 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7229 width = img->width = max (gif->SWidth, gif->Image.Left + gif->Image.Width); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7230 height = img->height = max (gif->SHeight, gif->Image.Top + gif->Image.Height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7231 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7232 /* Create the X image and pixmap. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7233 if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, &img->pixmap)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7234 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7235 fn_DGifCloseFile (gif); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7236 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7237 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7238 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7239 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7240 /* Allocate colors. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7241 gif_color_map = gif->SavedImages[ino].ImageDesc.ColorMap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7242 if (!gif_color_map) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7243 gif_color_map = gif->SColorMap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7244 init_color_table (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7245 bzero (pixel_colors, sizeof pixel_colors); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7246 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7247 for (i = 0; i < gif_color_map->ColorCount; ++i) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7248 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7249 int r = gif_color_map->Colors[i].Red << 8; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7250 int g = gif_color_map->Colors[i].Green << 8; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7251 int b = gif_color_map->Colors[i].Blue << 8; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7252 pixel_colors[i] = lookup_rgb_color (f, r, g, b); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7253 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7254 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7255 #ifdef COLOR_TABLE_SUPPORT |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7256 img->colors = colors_in_color_table (&img->ncolors); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7257 free_color_table (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7258 #endif /* COLOR_TABLE_SUPPORT */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7259 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7260 /* Clear the part of the screen image that are not covered by |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7261 the image from the GIF file. Full animated GIF support |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7262 requires more than can be done here (see the gif89 spec, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7263 disposal methods). Let's simply assume that the part |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7264 not covered by a sub-image is in the frame's background color. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7265 image_top = gif->SavedImages[ino].ImageDesc.Top; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7266 image_left = gif->SavedImages[ino].ImageDesc.Left; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7267 image_width = gif->SavedImages[ino].ImageDesc.Width; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7268 image_height = gif->SavedImages[ino].ImageDesc.Height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7269 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7270 for (y = 0; y < image_top; ++y) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7271 for (x = 0; x < width; ++x) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7272 XPutPixel (ximg, x, y, FRAME_BACKGROUND_PIXEL (f)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7273 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7274 for (y = image_top + image_height; y < height; ++y) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7275 for (x = 0; x < width; ++x) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7276 XPutPixel (ximg, x, y, FRAME_BACKGROUND_PIXEL (f)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7277 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7278 for (y = image_top; y < image_top + image_height; ++y) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7279 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7280 for (x = 0; x < image_left; ++x) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7281 XPutPixel (ximg, x, y, FRAME_BACKGROUND_PIXEL (f)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7282 for (x = image_left + image_width; x < width; ++x) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7283 XPutPixel (ximg, x, y, FRAME_BACKGROUND_PIXEL (f)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7284 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7285 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7286 /* Read the GIF image into the X image. We use a local variable |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7287 `raster' here because RasterBits below is a char *, and invites |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7288 problems with bytes >= 0x80. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7289 raster = (unsigned char *) gif->SavedImages[ino].RasterBits; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7290 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7291 if (gif->SavedImages[ino].ImageDesc.Interlace) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7292 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7293 static int interlace_start[] = {0, 4, 2, 1}; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7294 static int interlace_increment[] = {8, 8, 4, 2}; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7295 int pass; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7296 int row = interlace_start[0]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7297 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7298 pass = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7299 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7300 for (y = 0; y < image_height; y++) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7301 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7302 if (row >= image_height) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7303 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7304 row = interlace_start[++pass]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7305 while (row >= image_height) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7306 row = interlace_start[++pass]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7307 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7308 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7309 for (x = 0; x < image_width; x++) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7310 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7311 int i = raster[(y * image_width) + x]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7312 XPutPixel (ximg, x + image_left, row + image_top, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7313 pixel_colors[i]); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7314 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7315 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7316 row += interlace_increment[pass]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7317 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7318 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7319 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7320 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7321 for (y = 0; y < image_height; ++y) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7322 for (x = 0; x < image_width; ++x) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7323 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7324 int i = raster[y * image_width + x]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7325 XPutPixel (ximg, x + image_left, y + image_top, pixel_colors[i]); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7326 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7327 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7328 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7329 fn_DGifCloseFile (gif); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7330 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7331 /* Maybe fill in the background field while we have ximg handy. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7332 if (NILP (image_spec_value (img->spec, QCbackground, NULL))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7333 IMAGE_BACKGROUND (img, f, ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7334 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7335 /* Put the image into the pixmap, then free the X image and its buffer. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7336 x_put_x_image (f, ximg, img->pixmap, width, height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7337 x_destroy_x_image (ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7338 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7339 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7340 return 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7341 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7342 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7343 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7344 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7345 #ifdef MAC_OS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7346 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7347 gif_load (f, img) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7348 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7349 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7350 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7351 Lisp_Object specified_file, file; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7352 Lisp_Object specified_data; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7353 OSErr err; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7354 Boolean graphic_p, movie_p, prefer_graphic_p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7355 Handle dh = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7356 Movie movie = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7357 Lisp_Object image; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7358 Track track = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7359 Media media = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7360 long nsamples; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7361 Rect rect; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7362 Lisp_Object specified_bg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7363 XColor color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7364 RGBColor bg_color; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7365 int width, height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7366 XImagePtr ximg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7367 TimeValue time; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7368 struct gcpro gcpro1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7369 int ino; |
55412
53a1a79a33f9
macterm.c (mac_check_for_quit_char): Adding BLOCK_INPUT
Steven Tamm <steventamm@mac.com>
parents:
55375
diff
changeset
|
7370 CGrafPtr old_port; |
53a1a79a33f9
macterm.c (mac_check_for_quit_char): Adding BLOCK_INPUT
Steven Tamm <steventamm@mac.com>
parents:
55375
diff
changeset
|
7371 GDHandle old_gdh; |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7372 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7373 specified_file = image_spec_value (img->spec, QCfile, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7374 specified_data = image_spec_value (img->spec, QCdata, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7375 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7376 if (NILP (specified_data)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7377 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7378 /* Read from a file */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7379 FSSpec fss; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7380 short refnum; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7381 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7382 err = find_image_fsspec (specified_file, &file, &fss); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7383 if (err != noErr) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7384 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7385 if (err == fnfErr) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7386 image_error ("Cannot find image file `%s'", specified_file, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7387 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7388 goto open_error; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7389 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7390 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7391 err = CanQuickTimeOpenFile (&fss, kQTFileTypeGIF, 0, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7392 &graphic_p, &movie_p, &prefer_graphic_p, 0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7393 if (err != noErr) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7394 goto open_error; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7395 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7396 if (!graphic_p && !movie_p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7397 goto open_error; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7398 if (prefer_graphic_p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7399 return image_load_qt_1 (f, img, kQTFileTypeGIF, &fss, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7400 err = OpenMovieFile (&fss, &refnum, fsRdPerm); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7401 if (err != noErr) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7402 goto open_error; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7403 err = NewMovieFromFile (&movie, refnum, NULL, NULL, 0, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7404 CloseMovieFile (refnum); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7405 if (err != noErr) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7406 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7407 image_error ("Error reading `%s'", file, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7408 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7409 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7410 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7411 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7412 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7413 /* Memory source! */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7414 Handle dref = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7415 long file_type_atom[3]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7416 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7417 err = PtrToHand (SDATA (specified_data), &dh, SBYTES (specified_data)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7418 if (err != noErr) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7419 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7420 image_error ("Cannot allocate data handle for `%s'", |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7421 img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7422 goto error; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7423 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7424 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7425 file_type_atom[0] = EndianU32_NtoB (sizeof (long) * 3); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7426 file_type_atom[1] = EndianU32_NtoB (kDataRefExtensionMacOSFileType); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7427 file_type_atom[2] = EndianU32_NtoB (kQTFileTypeGIF); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7428 err = PtrToHand (&dh, &dref, sizeof (Handle)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7429 if (err == noErr) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7430 /* no file name */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7431 err = PtrAndHand ("\p", dref, 1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7432 if (err == noErr) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7433 err = PtrAndHand (file_type_atom, dref, sizeof (long) * 3); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7434 if (err != noErr) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7435 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7436 image_error ("Cannot allocate handle data ref for `%s'", img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7437 goto error; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7438 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7439 err = CanQuickTimeOpenDataRef (dref, HandleDataHandlerSubType, &graphic_p, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7440 &movie_p, &prefer_graphic_p, 0); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7441 if (err != noErr) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7442 goto open_error; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7443 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7444 if (!graphic_p && !movie_p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7445 goto open_error; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7446 if (prefer_graphic_p) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7447 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7448 int success_p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7449 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7450 DisposeHandle (dref); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7451 success_p = image_load_qt_1 (f, img, kQTFileTypeGIF, NULL, dh); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7452 DisposeHandle (dh); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7453 return success_p; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7454 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7455 err = NewMovieFromDataRef (&movie, 0, NULL, dref, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7456 HandleDataHandlerSubType); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7457 DisposeHandle (dref); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7458 if (err != noErr) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7459 goto open_error; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7460 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7461 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7462 image = image_spec_value (img->spec, QCindex, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7463 ino = INTEGERP (image) ? XFASTINT (image) : 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7464 track = GetMovieIndTrack (movie, 1); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7465 media = GetTrackMedia (track); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7466 nsamples = GetMediaSampleCount (media); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7467 if (ino >= nsamples) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7468 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7469 image_error ("Invalid image number `%s' in image `%s'", |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7470 image, img->spec); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7471 goto error; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7472 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7473 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7474 specified_bg = image_spec_value (img->spec, QCbackground, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7475 if (!STRINGP (specified_bg) || |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7476 !mac_defined_color (f, SDATA (specified_bg), &color, 0)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7477 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7478 color.pixel = FRAME_BACKGROUND_PIXEL (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7479 color.red = RED16_FROM_ULONG (color.pixel); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7480 color.green = GREEN16_FROM_ULONG (color.pixel); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7481 color.blue = BLUE16_FROM_ULONG (color.pixel); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7482 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7483 GetMovieBox (movie, &rect); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7484 width = img->width = rect.right - rect.left; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7485 height = img->height = rect.bottom - rect.top; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7486 if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, &img->pixmap)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7487 goto error; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7488 |
55412
53a1a79a33f9
macterm.c (mac_check_for_quit_char): Adding BLOCK_INPUT
Steven Tamm <steventamm@mac.com>
parents:
55375
diff
changeset
|
7489 GetGWorld (&old_port, &old_gdh); |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7490 SetGWorld (ximg, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7491 bg_color.red = color.red; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7492 bg_color.green = color.green; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7493 bg_color.blue = color.blue; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7494 RGBBackColor (&bg_color); |
55412
53a1a79a33f9
macterm.c (mac_check_for_quit_char): Adding BLOCK_INPUT
Steven Tamm <steventamm@mac.com>
parents:
55375
diff
changeset
|
7495 SetGWorld (old_port, old_gdh); |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7496 SetMovieActive (movie, TRUE); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7497 SetMovieGWorld (movie, ximg, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7498 SampleNumToMediaTime (media, ino + 1, &time, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7499 SetMovieTimeValue (movie, time); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7500 MoviesTask (movie, 0L); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7501 DisposeTrackMedia (media); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7502 DisposeMovieTrack (track); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7503 DisposeMovie (movie); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7504 if (dh) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7505 DisposeHandle (dh); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7506 /* Maybe fill in the background field while we have ximg handy. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7507 if (NILP (image_spec_value (img->spec, QCbackground, NULL))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7508 IMAGE_BACKGROUND (img, f, ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7509 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7510 /* Put the image into the pixmap. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7511 x_put_x_image (f, ximg, img->pixmap, width, height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7512 x_destroy_x_image (ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7513 return 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7514 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7515 open_error: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7516 image_error ("Cannot open `%s'", file, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7517 error: |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7518 if (media) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7519 DisposeTrackMedia (media); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7520 if (track) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7521 DisposeMovieTrack (track); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7522 if (movie) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7523 DisposeMovie (movie); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7524 if (dh) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7525 DisposeHandle (dh); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7526 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7527 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7528 #endif /* MAC_OS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7529 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7530 #endif /* HAVE_GIF */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7531 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7532 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7533 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7534 /*********************************************************************** |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7535 Ghostscript |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7536 ***********************************************************************/ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7537 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7538 #ifdef HAVE_X_WINDOWS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7539 #define HAVE_GHOSTSCRIPT 1 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7540 #endif /* HAVE_X_WINDOWS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7541 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7542 /* The symbol `postscript' identifying images of this type. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7543 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7544 Lisp_Object Qpostscript; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7545 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7546 #ifdef HAVE_GHOSTSCRIPT |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7547 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7548 static int gs_image_p P_ ((Lisp_Object object)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7549 static int gs_load P_ ((struct frame *f, struct image *img)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7550 static void gs_clear_image P_ ((struct frame *f, struct image *img)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7551 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7552 /* Keyword symbols. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7553 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7554 Lisp_Object QCloader, QCbounding_box, QCpt_width, QCpt_height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7555 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7556 /* Indices of image specification fields in gs_format, below. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7557 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7558 enum gs_keyword_index |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7559 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7560 GS_TYPE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7561 GS_PT_WIDTH, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7562 GS_PT_HEIGHT, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7563 GS_FILE, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7564 GS_LOADER, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7565 GS_BOUNDING_BOX, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7566 GS_ASCENT, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7567 GS_MARGIN, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7568 GS_RELIEF, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7569 GS_ALGORITHM, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7570 GS_HEURISTIC_MASK, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7571 GS_MASK, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7572 GS_BACKGROUND, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7573 GS_LAST |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7574 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7575 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7576 /* Vector of image_keyword structures describing the format |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7577 of valid user-defined image specifications. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7578 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7579 static struct image_keyword gs_format[GS_LAST] = |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7580 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7581 {":type", IMAGE_SYMBOL_VALUE, 1}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7582 {":pt-width", IMAGE_POSITIVE_INTEGER_VALUE, 1}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7583 {":pt-height", IMAGE_POSITIVE_INTEGER_VALUE, 1}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7584 {":file", IMAGE_STRING_VALUE, 1}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7585 {":loader", IMAGE_FUNCTION_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7586 {":bounding-box", IMAGE_DONT_CHECK_VALUE_TYPE, 1}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7587 {":ascent", IMAGE_ASCENT_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7588 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7589 {":relief", IMAGE_INTEGER_VALUE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7590 {":conversion", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7591 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7592 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7593 {":background", IMAGE_STRING_OR_NIL_VALUE, 0} |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7594 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7595 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7596 /* Structure describing the image type `ghostscript'. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7597 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7598 static struct image_type gs_type = |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7599 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7600 &Qpostscript, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7601 gs_image_p, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7602 gs_load, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7603 gs_clear_image, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7604 NULL |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7605 }; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7606 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7607 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7608 /* Free X resources of Ghostscript image IMG which is used on frame F. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7609 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7610 static void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7611 gs_clear_image (f, img) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7612 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7613 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7614 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7615 /* IMG->data.ptr_val may contain a recorded colormap. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7616 xfree (img->data.ptr_val); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7617 x_clear_image (f, img); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7618 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7619 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7620 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7621 /* Return non-zero if OBJECT is a valid Ghostscript image |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7622 specification. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7623 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7624 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7625 gs_image_p (object) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7626 Lisp_Object object; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7627 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7628 struct image_keyword fmt[GS_LAST]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7629 Lisp_Object tem; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7630 int i; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7631 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7632 bcopy (gs_format, fmt, sizeof fmt); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7633 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7634 if (!parse_image_spec (object, fmt, GS_LAST, Qpostscript)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7635 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7636 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7637 /* Bounding box must be a list or vector containing 4 integers. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7638 tem = fmt[GS_BOUNDING_BOX].value; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7639 if (CONSP (tem)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7640 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7641 for (i = 0; i < 4; ++i, tem = XCDR (tem)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7642 if (!CONSP (tem) || !INTEGERP (XCAR (tem))) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7643 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7644 if (!NILP (tem)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7645 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7646 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7647 else if (VECTORP (tem)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7648 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7649 if (XVECTOR (tem)->size != 4) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7650 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7651 for (i = 0; i < 4; ++i) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7652 if (!INTEGERP (XVECTOR (tem)->contents[i])) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7653 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7654 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7655 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7656 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7657 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7658 return 1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7659 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7660 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7661 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7662 /* Load Ghostscript image IMG for use on frame F. Value is non-zero |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7663 if successful. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7664 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7665 static int |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7666 gs_load (f, img) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7667 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7668 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7669 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7670 char buffer[100]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7671 Lisp_Object window_and_pixmap_id = Qnil, loader, pt_height, pt_width; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7672 struct gcpro gcpro1, gcpro2; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7673 Lisp_Object frame; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7674 double in_width, in_height; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7675 Lisp_Object pixel_colors = Qnil; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7676 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7677 /* Compute pixel size of pixmap needed from the given size in the |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7678 image specification. Sizes in the specification are in pt. 1 pt |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7679 = 1/72 in, xdpi and ydpi are stored in the frame's X display |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7680 info. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7681 pt_width = image_spec_value (img->spec, QCpt_width, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7682 in_width = XFASTINT (pt_width) / 72.0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7683 img->width = in_width * FRAME_X_DISPLAY_INFO (f)->resx; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7684 pt_height = image_spec_value (img->spec, QCpt_height, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7685 in_height = XFASTINT (pt_height) / 72.0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7686 img->height = in_height * FRAME_X_DISPLAY_INFO (f)->resy; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7687 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7688 /* Create the pixmap. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7689 xassert (img->pixmap == NO_PIXMAP); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7690 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7691 /* Only W32 version did BLOCK_INPUT here. ++kfs */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7692 BLOCK_INPUT; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7693 img->pixmap = XCreatePixmap (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7694 img->width, img->height, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7695 DefaultDepthOfScreen (FRAME_X_SCREEN (f))); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7696 UNBLOCK_INPUT; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7697 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7698 if (!img->pixmap) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7699 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7700 image_error ("Unable to create pixmap for `%s'", img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7701 return 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7702 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7703 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7704 /* Call the loader to fill the pixmap. It returns a process object |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7705 if successful. We do not record_unwind_protect here because |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7706 other places in redisplay like calling window scroll functions |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7707 don't either. Let the Lisp loader use `unwind-protect' instead. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7708 GCPRO2 (window_and_pixmap_id, pixel_colors); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7709 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7710 sprintf (buffer, "%lu %lu", |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7711 (unsigned long) FRAME_X_WINDOW (f), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7712 (unsigned long) img->pixmap); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7713 window_and_pixmap_id = build_string (buffer); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7714 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7715 sprintf (buffer, "%lu %lu", |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7716 FRAME_FOREGROUND_PIXEL (f), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7717 FRAME_BACKGROUND_PIXEL (f)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7718 pixel_colors = build_string (buffer); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7719 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7720 XSETFRAME (frame, f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7721 loader = image_spec_value (img->spec, QCloader, NULL); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7722 if (NILP (loader)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7723 loader = intern ("gs-load-image"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7724 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7725 img->data.lisp_val = call6 (loader, frame, img->spec, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7726 make_number (img->width), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7727 make_number (img->height), |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7728 window_and_pixmap_id, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7729 pixel_colors); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7730 UNGCPRO; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7731 return PROCESSP (img->data.lisp_val); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7732 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7733 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7734 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7735 /* Kill the Ghostscript process that was started to fill PIXMAP on |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7736 frame F. Called from XTread_socket when receiving an event |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7737 telling Emacs that Ghostscript has finished drawing. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7738 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7739 void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7740 x_kill_gs_process (pixmap, f) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7741 Pixmap pixmap; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7742 struct frame *f; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7743 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7744 struct image_cache *c = FRAME_X_IMAGE_CACHE (f); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7745 int class, i; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7746 struct image *img; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7747 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7748 /* Find the image containing PIXMAP. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7749 for (i = 0; i < c->used; ++i) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7750 if (c->images[i]->pixmap == pixmap) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7751 break; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7752 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7753 /* Should someone in between have cleared the image cache, for |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7754 instance, give up. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7755 if (i == c->used) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7756 return; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7757 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7758 /* Kill the GS process. We should have found PIXMAP in the image |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7759 cache and its image should contain a process object. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7760 img = c->images[i]; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7761 xassert (PROCESSP (img->data.lisp_val)); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7762 Fkill_process (img->data.lisp_val, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7763 img->data.lisp_val = Qnil; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7764 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7765 #if defined (HAVE_X_WINDOWS) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7766 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7767 /* On displays with a mutable colormap, figure out the colors |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7768 allocated for the image by looking at the pixels of an XImage for |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7769 img->pixmap. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7770 class = FRAME_X_VISUAL (f)->class; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7771 if (class != StaticColor && class != StaticGray && class != TrueColor) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7772 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7773 XImagePtr ximg; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7774 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7775 BLOCK_INPUT; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7776 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7777 /* Try to get an XImage for img->pixmep. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7778 ximg = XGetImage (FRAME_X_DISPLAY (f), img->pixmap, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7779 0, 0, img->width, img->height, ~0, ZPixmap); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7780 if (ximg) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7781 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7782 int x, y; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7783 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7784 /* Initialize the color table. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7785 init_color_table (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7786 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7787 /* For each pixel of the image, look its color up in the |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7788 color table. After having done so, the color table will |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7789 contain an entry for each color used by the image. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7790 for (y = 0; y < img->height; ++y) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7791 for (x = 0; x < img->width; ++x) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7792 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7793 unsigned long pixel = XGetPixel (ximg, x, y); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7794 lookup_pixel_color (f, pixel); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7795 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7796 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7797 /* Record colors in the image. Free color table and XImage. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7798 #ifdef COLOR_TABLE_SUPPORT |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7799 img->colors = colors_in_color_table (&img->ncolors); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7800 free_color_table (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7801 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7802 XDestroyImage (ximg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7803 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7804 #if 0 /* This doesn't seem to be the case. If we free the colors |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7805 here, we get a BadAccess later in x_clear_image when |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7806 freeing the colors. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7807 /* We have allocated colors once, but Ghostscript has also |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7808 allocated colors on behalf of us. So, to get the |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7809 reference counts right, free them once. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7810 if (img->ncolors) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7811 x_free_colors (f, img->colors, img->ncolors); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7812 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7813 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7814 else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7815 image_error ("Cannot get X image of `%s'; colors will not be freed", |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7816 img->spec, Qnil); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7817 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7818 UNBLOCK_INPUT; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7819 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7820 #endif /* HAVE_X_WINDOWS */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7821 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7822 /* Now that we have the pixmap, compute mask and transform the |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7823 image if requested. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7824 BLOCK_INPUT; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7825 postprocess_image (f, img); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7826 UNBLOCK_INPUT; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7827 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7828 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7829 #endif /* HAVE_GHOSTSCRIPT */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7830 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7831 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7832 /*********************************************************************** |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7833 Tests |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7834 ***********************************************************************/ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7835 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7836 #if GLYPH_DEBUG |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7837 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7838 DEFUN ("imagep", Fimagep, Simagep, 1, 1, 0, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7839 doc: /* Value is non-nil if SPEC is a valid image specification. */) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7840 (spec) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7841 Lisp_Object spec; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7842 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7843 return valid_image_p (spec) ? Qt : Qnil; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7844 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7845 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7846 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7847 DEFUN ("lookup-image", Flookup_image, Slookup_image, 1, 1, 0, "") |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7848 (spec) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7849 Lisp_Object spec; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7850 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7851 int id = -1; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7852 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7853 if (valid_image_p (spec)) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7854 id = lookup_image (SELECTED_FRAME (), spec); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7855 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7856 debug_print (spec); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7857 return make_number (id); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7858 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7859 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7860 #endif /* GLYPH_DEBUG != 0 */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7861 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7862 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7863 /*********************************************************************** |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7864 Initialization |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7865 ***********************************************************************/ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7866 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7867 void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7868 syms_of_image () |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7869 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7870 QCascent = intern (":ascent"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7871 staticpro (&QCascent); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7872 QCmargin = intern (":margin"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7873 staticpro (&QCmargin); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7874 QCrelief = intern (":relief"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7875 staticpro (&QCrelief); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7876 QCconversion = intern (":conversion"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7877 staticpro (&QCconversion); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7878 QCcolor_symbols = intern (":color-symbols"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7879 staticpro (&QCcolor_symbols); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7880 QCheuristic_mask = intern (":heuristic-mask"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7881 staticpro (&QCheuristic_mask); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7882 QCindex = intern (":index"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7883 staticpro (&QCindex); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7884 QCmatrix = intern (":matrix"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7885 staticpro (&QCmatrix); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7886 QCcolor_adjustment = intern (":color-adjustment"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7887 staticpro (&QCcolor_adjustment); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7888 QCmask = intern (":mask"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7889 staticpro (&QCmask); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7890 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7891 Qlaplace = intern ("laplace"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7892 staticpro (&Qlaplace); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7893 Qemboss = intern ("emboss"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7894 staticpro (&Qemboss); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7895 Qedge_detection = intern ("edge-detection"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7896 staticpro (&Qedge_detection); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7897 Qheuristic = intern ("heuristic"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7898 staticpro (&Qheuristic); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7899 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7900 Qpostscript = intern ("postscript"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7901 staticpro (&Qpostscript); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7902 #ifdef HAVE_GHOSTSCRIPT |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7903 QCloader = intern (":loader"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7904 staticpro (&QCloader); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7905 QCbounding_box = intern (":bounding-box"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7906 staticpro (&QCbounding_box); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7907 QCpt_width = intern (":pt-width"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7908 staticpro (&QCpt_width); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7909 QCpt_height = intern (":pt-height"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7910 staticpro (&QCpt_height); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7911 #endif /* HAVE_GHOSTSCRIPT */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7912 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7913 Qpbm = intern ("pbm"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7914 staticpro (&Qpbm); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7915 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7916 Qxbm = intern ("xbm"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7917 staticpro (&Qxbm); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7918 |
55540
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
7919 #if defined (HAVE_XPM) || defined (MAC_OS) |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7920 Qxpm = intern ("xpm"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7921 staticpro (&Qxpm); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7922 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7923 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7924 #if defined (HAVE_JPEG) || defined (MAC_OS) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7925 Qjpeg = intern ("jpeg"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7926 staticpro (&Qjpeg); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7927 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7928 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7929 #if defined (HAVE_TIFF) || defined (MAC_OS) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7930 Qtiff = intern ("tiff"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7931 staticpro (&Qtiff); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7932 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7933 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7934 #if defined (HAVE_GIF) || defined (MAC_OS) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7935 Qgif = intern ("gif"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7936 staticpro (&Qgif); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7937 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7938 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7939 #if defined (HAVE_PNG) || defined (MAC_OS) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7940 Qpng = intern ("png"); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7941 staticpro (&Qpng); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7942 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7943 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7944 defsubr (&Sclear_image_cache); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7945 defsubr (&Simage_size); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7946 defsubr (&Simage_mask_p); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7947 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7948 #if GLYPH_DEBUG |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7949 defsubr (&Simagep); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7950 defsubr (&Slookup_image); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7951 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7952 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7953 DEFVAR_BOOL ("cross-disabled-images", &cross_disabled_images, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7954 doc: /* Non-nil means always draw a cross over disabled images. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7955 Disabled images are those having an `:conversion disabled' property. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7956 A cross is always drawn on black & white displays. */); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7957 cross_disabled_images = 0; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7958 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7959 DEFVAR_LISP ("x-bitmap-file-path", &Vx_bitmap_file_path, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7960 doc: /* List of directories to search for window system bitmap files. */); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7961 Vx_bitmap_file_path = decode_env_path ((char *) 0, PATH_BITMAPS); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7962 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7963 DEFVAR_LISP ("image-cache-eviction-delay", &Vimage_cache_eviction_delay, |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7964 doc: /* Time after which cached images are removed from the cache. |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7965 When an image has not been displayed this many seconds, remove it |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7966 from the image cache. Value must be an integer or nil with nil |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7967 meaning don't clear the cache. */); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7968 Vimage_cache_eviction_delay = make_number (30 * 60); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7969 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7970 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7971 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7972 #ifdef HAVE_NTGUI |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7973 /* Image types that rely on external libraries are loaded dynamically |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7974 if the library is available. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7975 #define IF_LIB_AVAILABLE(init_lib_fn) if (init_lib_fn()) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7976 #else |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7977 #define IF_LIB_AVAILABLE(init_func) /* Load unconditionally */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7978 #endif /* HAVE_NTGUI */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7979 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7980 void |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7981 init_image () |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7982 { |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7983 image_types = NULL; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7984 Vimage_types = Qnil; |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7985 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7986 define_image_type (&xbm_type); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7987 define_image_type (&pbm_type); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7988 |
55540
30c03f9042b8
Support XPM on Carbon Emacs. Does not
Steven Tamm <steventamm@mac.com>
parents:
55412
diff
changeset
|
7989 #if defined (HAVE_XPM) || defined (MAC_OS) |
54341
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7990 IF_LIB_AVAILABLE(init_xpm_functions) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7991 define_image_type (&xpm_type); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7992 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7993 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7994 #if defined (HAVE_JPEG) || defined (MAC_OS) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7995 IF_LIB_AVAILABLE(init_jpeg_functions) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7996 define_image_type (&jpeg_type); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7997 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7998 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
7999 #if defined (HAVE_TIFF) || defined (MAC_OS) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8000 IF_LIB_AVAILABLE(init_tiff_functions) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8001 define_image_type (&tiff_type); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8002 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8003 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8004 #if defined (HAVE_GIF) || defined (MAC_OS) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8005 IF_LIB_AVAILABLE(init_gif_functions) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8006 define_image_type (&gif_type); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8007 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8008 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8009 #if defined (HAVE_PNG) || defined (MAC_OS) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8010 IF_LIB_AVAILABLE(init_png_functions) |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8011 define_image_type (&png_type); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8012 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8013 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8014 #ifdef HAVE_GHOSTSCRIPT |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8015 define_image_type (&gs_type); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8016 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8017 |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8018 #ifdef MAC_OS |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8019 /* Animated gifs use QuickTime Movie Toolbox. So initialize it here. */ |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8020 EnterMovies (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8021 #ifdef MAC_OSX |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8022 init_image_func_pointer (); |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8023 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8024 #endif |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8025 } |
80dfe07a1d65
New file (image.c) for Image consolidation:
Kim F. Storm <storm@cua.dk>
parents:
diff
changeset
|
8026 |
54348 | 8027 /* arch-tag: 123c2a5e-14a8-4c53-ab95-af47d7db49b9 |
8028 (do not change this comment) */ |