annotate src/glyphs-msw.c @ 286:57709be46d1b r21-0b41

Import from CVS: tag r21-0b41
author cvs
date Mon, 13 Aug 2007 10:35:03 +0200
parents 558f606b08ae
children e11d67e05968
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1 /* mswindows-specific Lisp objects.
280
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
2 Copyright (C) 1998 Andy Piper.
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
3
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
4 This file is part of XEmacs.
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
5
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
6 XEmacs is free software; you can redistribute it and/or modify it
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
7 under the terms of the GNU General Public License as published by the
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
8 Free Software Foundation; either version 2, or (at your option) any
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
9 later version.
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
10
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
14 for more details.
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
15
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
17 along with XEmacs; see the file COPYING. If not, write to
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
19 Boston, MA 02111-1307, USA. */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
20
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
21 /* Synched up with: Not in FSF. */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
22
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
23 /* written by Andy Piper <andyp@parallax.co.uk> plagerising buts from
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
24 glyphs-x.c */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
25
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
26 #include <config.h>
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
27 #include "lisp.h"
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
28 #include "lstream.h"
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
29
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
30 #define OEMRESOURCE /* Define OCR_ and friend constants */
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
31 #include "console-msw.h"
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
32 #include "glyphs-msw.h"
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
33 #include "objects-msw.h"
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
34
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
35 #include "buffer.h"
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
36 #include "frame.h"
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
37 #include "insdel.h"
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
38 #include "opaque.h"
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
39 #include "sysfile.h"
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
40 #include "faces.h"
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
41 #include "imgproc.h"
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
42
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
43 #ifdef FILE_CODING
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
44 #include "file-coding.h"
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
45 #endif
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
46
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
47 DEFINE_IMAGE_INSTANTIATOR_FORMAT (bmp);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
48 Lisp_Object Qbmp;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
49 Lisp_Object Vmswindows_bitmap_file_path;
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
50 static COLORREF transparent_color = RGB (1,1,1);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
51
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
52 DEFINE_IMAGE_INSTANTIATOR_FORMAT (resource);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
53 Lisp_Object Qresource;
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
54 Lisp_Object Q_resource_type, Q_resource_id;
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
55
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
56 static void
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
57 mswindows_initialize_dibitmap_image_instance (struct Lisp_Image_Instance *ii,
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
58 enum image_instance_type type);
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
59 static void
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
60 mswindows_initialize_image_instance_mask (struct Lisp_Image_Instance* image,
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
61 struct frame* f);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
62
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
63 COLORREF mswindows_string_to_color (CONST char *name);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
64
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
65 /************************************************************************/
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
66 /* convert from a series of RGB triples to a BITMAPINFO formated for the*/
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
67 /* proper display */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
68 /************************************************************************/
278
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
69 static BITMAPINFO* convert_EImage_to_DIBitmap (Lisp_Object device,
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
70 int width, int height,
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
71 unsigned char *pic,
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
72 int *bit_count,
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
73 unsigned char** bmp_data)
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
74 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
75 struct device *d = XDEVICE (device);
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
76 int i,j;
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
77 RGBQUAD* colortbl;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
78 int ncolors;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
79 BITMAPINFO* bmp_info;
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
80 unsigned char *ip, *dp;
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
81
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
82 if (DEVICE_MSWINDOWS_BITSPIXEL (d) > 0)
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
83 {
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
84 int bpline=(int)(~3UL & (unsigned long)((width*3) +3));
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
85 /* FIXME: we can do this because 24bpp implies no colour table, once
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
86 * we start paletizing this is no longer true. The X versions of
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
87 * this function quantises to 256 colours or bit masks down to a
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
88 * long. Windows can actually handle rgb triples in the raw so I
272
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
89 * don't see much point trying to optimize down to the best
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
90 * structure - unless it has memory / color allocation implications
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
91 * .... */
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
92 bmp_info=xnew_and_zero (BITMAPINFO);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
93
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
94 if (!bmp_info)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
95 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
96 return NULL;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
97 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
98
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
99 bmp_info->bmiHeader.biBitCount=24; /* just RGB triples for now */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
100 bmp_info->bmiHeader.biCompression=BI_RGB; /* just RGB triples for now */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
101 bmp_info->bmiHeader.biSizeImage=width*height*3;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
102
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
103 /* bitmap data needs to be in blue, green, red triples - in that
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
104 order, eimage is in RGB format so we need to convert */
272
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
105 *bmp_data = xnew_array_and_zero (unsigned char, bpline * height);
278
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
106 *bit_count = bpline * height;
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
107
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
108 if (!bmp_data)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
109 {
272
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
110 xfree (bmp_info);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
111 return NULL;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
112 }
272
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
113
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
114 ip = pic;
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
115 for (i = height-1; i >= 0; i--) {
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
116 dp = (*bmp_data) + (i * bpline);
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
117 for (j = 0; j < width; j++) {
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
118 dp[2] =*ip++;
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
119 dp[1] =*ip++;
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
120 *dp =*ip++;
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
121 dp += 3;
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
122 }
272
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
123 }
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
124 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
125 else /* scale to 256 colors */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
126 {
272
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
127 int rd,gr,bl;
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
128 quant_table *qtable;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
129 int bpline= (int)(~3UL & (unsigned long)(width +3));
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
130 /* Quantize the image and get a histogram while we're at it.
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
131 Do this first to save memory */
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
132 qtable = build_EImage_quantable(pic, width, height, 256);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
133 if (qtable == NULL) return NULL;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
134
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
135 /* use our quantize table to allocate the colors */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
136 ncolors = qtable->num_active_colors;
272
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
137 bmp_info=(BITMAPINFO*)xmalloc_and_zero (sizeof(BITMAPINFOHEADER) +
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
138 sizeof(RGBQUAD) * ncolors);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
139 if (!bmp_info)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
140 {
272
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
141 xfree (qtable);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
142 return NULL;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
143 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
144
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
145 colortbl=(RGBQUAD*)(((unsigned char*)bmp_info)+sizeof(BITMAPINFOHEADER));
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
146
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
147 bmp_info->bmiHeader.biBitCount=8;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
148 bmp_info->bmiHeader.biCompression=BI_RGB;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
149 bmp_info->bmiHeader.biSizeImage=bpline*height;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
150 bmp_info->bmiHeader.biClrUsed=ncolors;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
151 bmp_info->bmiHeader.biClrImportant=ncolors;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
152
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
153 *bmp_data = (unsigned char *) xmalloc_and_zero (bpline * height);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
154 *bit_count = bpline * height;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
155
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
156 if (!*bmp_data)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
157 {
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
158 xfree (qtable);
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
159 xfree (bmp_info);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
160 return NULL;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
161 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
162
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
163 /* build up an RGBQUAD colortable */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
164 for (i = 0; i < qtable->num_active_colors; i++) {
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
165 colortbl[i].rgbRed = (BYTE) qtable->rm[i];
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
166 colortbl[i].rgbGreen = (BYTE) qtable->gm[i];
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
167 colortbl[i].rgbBlue = (BYTE) qtable->bm[i];
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
168 colortbl[i].rgbReserved = 0;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
169 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
170
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
171 /* now build up the data. picture has to be upside-down and
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
172 back-to-front for msw bitmaps */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
173 ip = pic;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
174 for (i = height-1; i >= 0; i--) {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
175 dp = (*bmp_data) + (i * bpline);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
176 for (j = 0; j < width; j++) {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
177 rd = *ip++;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
178 gr = *ip++;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
179 bl = *ip++;
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
180 *dp++ = QUANT_GET_COLOR (qtable,rd,gr,bl);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
181 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
182 }
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
183 xfree (qtable);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
184 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
185 /* fix up the standard stuff */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
186 bmp_info->bmiHeader.biWidth=width;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
187 bmp_info->bmiHeader.biHeight=height;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
188 bmp_info->bmiHeader.biPlanes=1;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
189 bmp_info->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
190 bmp_info->bmiHeader.biXPelsPerMeter=0; /* unless you know better */
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
191 bmp_info->bmiHeader.biYPelsPerMeter=0;
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
192
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
193 return bmp_info;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
194 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
195
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
196 /* Given a pixmap filename, look through all of the "standard" places
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
197 where the file might be located. Return a full pathname if found;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
198 otherwise, return Qnil. */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
199
280
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
200 static Lisp_Object
278
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
201 mswindows_locate_pixmap_file (Lisp_Object name)
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
202 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
203 /* This function can GC if IN_REDISPLAY is false */
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
204 Lisp_Object found;
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
205
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
206 /* Check non-absolute pathnames with a directory component relative to
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
207 the search path; that's the way Xt does it. */
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
208 if (IS_DIRECTORY_SEP(XSTRING_BYTE (name, 0)) ||
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
209 (XSTRING_BYTE (name, 0) == '.' &&
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
210 (IS_DIRECTORY_SEP(XSTRING_BYTE (name, 1)) ||
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
211 (XSTRING_BYTE (name, 1) == '.' &&
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
212 (IS_DIRECTORY_SEP(XSTRING_BYTE (name, 2)))))))
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
213 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
214 if (!NILP (Ffile_readable_p (name)))
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
215 return name;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
216 else
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
217 return Qnil;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
218 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
219
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
220 if (locate_file (Vmswindows_bitmap_file_path, name, "", &found, R_OK) < 0)
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
221 {
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
222 Lisp_Object temp = list1 (Vdata_directory);
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
223 struct gcpro gcpro1;
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
224
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
225 GCPRO1 (temp);
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
226 locate_file (temp, name, "", &found, R_OK);
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
227 UNGCPRO;
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
228 }
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
229
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
230 return found;
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
231 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
232
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
233
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
234 /* Initialize an image instance from a bitmap
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
235
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
236 DEST_MASK specifies the mask of allowed image types.
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
237
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
238 If this fails, signal an error. INSTANTIATOR is only used
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
239 in the error message. */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
240
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
241 static void
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
242 init_image_instance_from_dibitmap (struct Lisp_Image_Instance *ii,
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
243 BITMAPINFO *bmp_info,
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
244 int dest_mask,
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
245 void *bmp_data,
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
246 int bmp_bits,
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
247 Lisp_Object instantiator,
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
248 int x_hot, int y_hot,
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
249 int create_mask)
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
250 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
251 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
252 struct device *d = XDEVICE (device);
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
253 struct frame *f = XFRAME (DEVICE_SELECTED_FRAME (d));
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
254 void* bmp_buf=0;
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
255 int type;
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
256 HBITMAP bitmap;
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
257 HDC hdc;
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
258
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
259 if (!DEVICE_MSWINDOWS_P (d))
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
260 signal_simple_error ("Not an mswindows device", device);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
261
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
262 if (NILP (DEVICE_SELECTED_FRAME (d)))
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
263 signal_simple_error ("No selected frame on mswindows device", device);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
264
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
265 if (dest_mask & IMAGE_COLOR_PIXMAP_MASK)
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
266 type = IMAGE_COLOR_PIXMAP;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
267 else if (dest_mask & IMAGE_POINTER_MASK)
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
268 type = IMAGE_POINTER;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
269 else
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
270 incompatible_image_types (instantiator, dest_mask,
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
271 IMAGE_COLOR_PIXMAP_MASK | IMAGE_POINTER_MASK);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
272 hdc = FRAME_MSWINDOWS_DC (f);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
273
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
274 bitmap=CreateDIBSection (hdc,
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
275 bmp_info,
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
276 DIB_RGB_COLORS,
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
277 &bmp_buf,
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
278 0,0);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
279
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
280 if (!bitmap || !bmp_buf)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
281 signal_simple_error ("Unable to create bitmap", instantiator);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
282
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
283 /* copy in the actual bitmap */
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
284 memcpy (bmp_buf, bmp_data, bmp_bits);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
285
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
286 mswindows_initialize_dibitmap_image_instance (ii, type);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
287
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
288 IMAGE_INSTANCE_PIXMAP_FILENAME (ii) =
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
289 find_keyword_in_vector (instantiator, Q_file);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
290
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
291 IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii) = bitmap;
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
292 IMAGE_INSTANCE_MSWINDOWS_MASK (ii) = NULL;
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
293 IMAGE_INSTANCE_PIXMAP_WIDTH (ii) = bmp_info->bmiHeader.biWidth;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
294 IMAGE_INSTANCE_PIXMAP_HEIGHT (ii) = bmp_info->bmiHeader.biHeight;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
295 IMAGE_INSTANCE_PIXMAP_DEPTH (ii) = bmp_info->bmiHeader.biBitCount;
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
296 XSETINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii), x_hot);
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
297 XSETINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii), y_hot);
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
298
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
299 if (create_mask)
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
300 {
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
301 mswindows_initialize_image_instance_mask (ii, f);
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
302 }
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
303
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
304 if (type == IMAGE_POINTER)
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
305 {
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
306 mswindows_initialize_image_instance_icon(ii, TRUE);
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
307 }
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
308 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
309
278
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
310 static void
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
311 mswindows_init_image_instance_from_eimage (struct Lisp_Image_Instance *ii,
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
312 int width, int height,
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
313 unsigned char *eimage,
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
314 int dest_mask,
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
315 Lisp_Object instantiator,
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
316 Lisp_Object domain)
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
317 {
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
318 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
319 BITMAPINFO* bmp_info;
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
320 unsigned char* bmp_data;
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
321 int bmp_bits;
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
322 COLORREF bkcolor;
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
323
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
324 if (!DEVICE_MSWINDOWS_P (XDEVICE (device)))
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
325 signal_simple_error ("Not an mswindows device", device);
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
326
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
327 /* this is a hack but MaskBlt and TransparentBlt are not supported
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
328 on most windows variants */
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
329 bkcolor = COLOR_INSTANCE_MSWINDOWS_COLOR
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
330 (XCOLOR_INSTANCE (FACE_BACKGROUND (Vdefault_face, domain)));
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
331
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
332 /* build a bitmap from the eimage */
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
333 if (!(bmp_info=convert_EImage_to_DIBitmap (device, width, height, eimage,
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
334 &bmp_bits, &bmp_data)))
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
335 {
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
336 signal_simple_error ("EImage to DIBitmap conversion failed",
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
337 instantiator);
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
338 }
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
339
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
340 /* Now create the pixmap and set up the image instance */
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
341 init_image_instance_from_dibitmap (ii, bmp_info, dest_mask,
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
342 bmp_data, bmp_bits, instantiator,
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
343 0, 0, 0);
278
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
344
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
345 xfree (bmp_info);
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
346 xfree (bmp_data);
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
347 }
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
348
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
349 static void set_mono_pixel ( unsigned char* bits,
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
350 int bpline, int height,
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
351 int x, int y, int white )
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
352 {
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
353 int index;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
354 unsigned char bitnum;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
355 /* Find the byte on which this scanline begins */
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
356 index = (height - y - 1) * bpline;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
357 /* Find the byte containing this pixel */
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
358 index += (x >> 3);
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
359 /* Which bit is it? */
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
360 bitnum = (unsigned char)( 7 - (x % 8) );
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
361 if( white ) /* Turn it on */
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
362 bits[index] |= (1<<bitnum);
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
363 else /* Turn it off */
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
364 bits[index] &= ~(1<<bitnum);
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
365 }
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
366
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
367 static void
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
368 mswindows_initialize_image_instance_mask (struct Lisp_Image_Instance* image,
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
369 struct frame* f)
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
370 {
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
371 HBITMAP mask;
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
372 HGDIOBJ old = NULL;
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
373 HDC hcdc = FRAME_MSWINDOWS_CDC (f);
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
374 BITMAPINFO* bmp_info =
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
375 xmalloc_and_zero (sizeof(BITMAPINFO) + sizeof(RGBQUAD));
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
376 int i, j;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
377 int height = IMAGE_INSTANCE_PIXMAP_HEIGHT (image);
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
378
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
379 void* and_bits;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
380 int bpline= (int)(~3UL & (unsigned long)
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
381 (((IMAGE_INSTANCE_PIXMAP_WIDTH (image)+7)/8) +3));
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
382
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
383 bmp_info->bmiHeader.biWidth=IMAGE_INSTANCE_PIXMAP_WIDTH (image);
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
384 bmp_info->bmiHeader.biHeight = height;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
385 bmp_info->bmiHeader.biPlanes=1;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
386 bmp_info->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
387 bmp_info->bmiHeader.biBitCount=1;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
388 bmp_info->bmiHeader.biCompression=BI_RGB;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
389 bmp_info->bmiHeader.biClrUsed = 2;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
390 bmp_info->bmiHeader.biClrImportant = 2;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
391 bmp_info->bmiHeader.biSizeImage = height * bpline;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
392 bmp_info->bmiColors[0].rgbRed = 0;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
393 bmp_info->bmiColors[0].rgbGreen = 0;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
394 bmp_info->bmiColors[0].rgbBlue = 0;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
395 bmp_info->bmiColors[0].rgbReserved = 0;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
396 bmp_info->bmiColors[1].rgbRed = 255;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
397 bmp_info->bmiColors[1].rgbGreen = 255;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
398 bmp_info->bmiColors[1].rgbBlue = 255;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
399 bmp_info->bmiColors[0].rgbReserved = 0;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
400
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
401 if (!(mask = CreateDIBSection (hcdc,
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
402 bmp_info,
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
403 DIB_RGB_COLORS,
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
404 &and_bits,
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
405 0,0)))
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
406 {
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
407 xfree (bmp_info);
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
408 return;
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
409 }
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
410
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
411 xfree (bmp_info);
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
412 old = SelectObject (hcdc, IMAGE_INSTANCE_MSWINDOWS_BITMAP (image));
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
413
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
414 for(i=0; i<IMAGE_INSTANCE_PIXMAP_WIDTH (image); i++)
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
415 {
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
416 for(j=0; j<height; j++)
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
417 {
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
418 if( GetPixel( hcdc, i, j ) == transparent_color )
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
419 {
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
420 SetPixel( hcdc, i, j, RGB (0,0,0));
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
421 set_mono_pixel( and_bits, bpline, height, i, j, TRUE );
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
422 }
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
423 else
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
424 {
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
425 set_mono_pixel( and_bits, bpline, height, i, j, FALSE );
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
426 }
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
427 }
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
428 }
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
429
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
430 GdiFlush();
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
431 SelectObject(hcdc, old);
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
432
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
433 IMAGE_INSTANCE_MSWINDOWS_MASK (image) = mask;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
434 }
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
435
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
436 void
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
437 mswindows_initialize_image_instance_icon (struct Lisp_Image_Instance* image,
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
438 int cursor)
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
439 {
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
440 ICONINFO x_icon;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
441
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
442 /* we rely on windows to do any resizing necessary */
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
443 x_icon.fIcon=cursor ? FALSE : TRUE;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
444 x_icon.xHotspot=XINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (image));
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
445 x_icon.yHotspot=XINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (image));
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
446 x_icon.hbmMask=IMAGE_INSTANCE_MSWINDOWS_MASK (image);
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
447 x_icon.hbmColor=IMAGE_INSTANCE_MSWINDOWS_BITMAP (image);
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
448
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
449 IMAGE_INSTANCE_MSWINDOWS_ICON (image)=
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
450 CreateIconIndirect (&x_icon);
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
451 }
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
452
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
453 HBITMAP
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
454 mswindows_create_resized_bitmap (struct Lisp_Image_Instance* ii,
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
455 struct frame* f,
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
456 int newx, int newy)
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
457 {
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
458 HBITMAP newbmp;
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
459 HGDIOBJ old1, old2;
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
460 HDC hcdc = FRAME_MSWINDOWS_CDC (f);
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
461 HDC hdcDst = CreateCompatibleDC (hcdc);
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
462
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
463 old1 = SelectObject (hcdc, IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii));
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
464
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
465 newbmp = CreateCompatibleBitmap (hcdc, newx, newy);
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
466
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
467 old2 = SelectObject (hdcDst, newbmp);
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
468
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
469 if (!StretchBlt (hdcDst, 0, 0, newx, newy,
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
470 hcdc, 0, 0,
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
471 IMAGE_INSTANCE_PIXMAP_WIDTH (ii),
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
472 IMAGE_INSTANCE_PIXMAP_HEIGHT (ii),
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
473 SRCCOPY))
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
474 {
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
475 return 0;
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
476 }
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
477
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
478 SelectObject (hdcDst, old2);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
479 SelectObject (hcdc, old1);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
480 DeleteDC (hdcDst);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
481
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
482 return newbmp;
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
483 }
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
484
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
485 HBITMAP
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
486 mswindows_create_resized_mask (struct Lisp_Image_Instance* ii,
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
487 struct frame* f,
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
488 int newx, int newy)
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
489 {
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
490 if (IMAGE_INSTANCE_MSWINDOWS_MASK (ii))
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
491 {
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
492 HBITMAP newmask;
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
493 HGDIOBJ old1, old2;
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
494 HDC hcdc = FRAME_MSWINDOWS_CDC (f);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
495 HDC hdcDst = CreateCompatibleDC (hcdc);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
496
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
497 old1 = SelectObject (hcdc, IMAGE_INSTANCE_MSWINDOWS_MASK (ii));
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
498 newmask = CreateCompatibleBitmap(hcdc, newx, newy);
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
499 old2 = SelectObject (hdcDst, newmask);
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
500
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
501 if (!StretchBlt(hdcDst, 0, 0, newx, newy,
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
502 hcdc, 0, 0,
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
503 IMAGE_INSTANCE_PIXMAP_WIDTH (ii),
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
504 IMAGE_INSTANCE_PIXMAP_HEIGHT (ii),
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
505 SRCCOPY))
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
506 {
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
507 return NULL;
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
508 }
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
509
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
510 SelectObject (hdcDst, old2);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
511 SelectObject (hcdc, old1);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
512
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
513 DeleteDC (hdcDst);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
514
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
515 return newmask;
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
516 }
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
517
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
518 return NULL;
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
519 }
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
520
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
521 int
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
522 mswindows_resize_dibitmap_instance (struct Lisp_Image_Instance* ii,
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
523 struct frame* f,
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
524 int newx, int newy)
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
525 {
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
526 HBITMAP newbmp = mswindows_create_resized_bitmap (ii, f, newx, newy);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
527 HBITMAP newmask = mswindows_create_resized_mask (ii, f, newx, newy);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
528
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
529 if (!newbmp)
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
530 return FALSE;
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
531
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
532 if (IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii))
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
533 DeleteObject (IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii));
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
534 if (IMAGE_INSTANCE_MSWINDOWS_MASK (ii))
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
535 DeleteObject (IMAGE_INSTANCE_MSWINDOWS_MASK (ii));
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
536
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
537 IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii) = newbmp;
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
538 IMAGE_INSTANCE_MSWINDOWS_MASK (ii) = newmask;
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
539 IMAGE_INSTANCE_PIXMAP_WIDTH (ii) = newx;
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
540 IMAGE_INSTANCE_PIXMAP_HEIGHT (ii) = newy;
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
541
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
542 return TRUE;
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
543 }
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
544
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
545 /**********************************************************************
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
546 * XPM *
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
547 **********************************************************************/
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
548
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
549 #ifdef HAVE_XPM
280
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
550
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
551 struct color_symbol
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
552 {
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
553 char* name;
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
554 COLORREF color;
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
555 };
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
556
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
557 static struct color_symbol*
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
558 extract_xpm_color_names (Lisp_Object device,
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
559 Lisp_Object domain,
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
560 Lisp_Object color_symbol_alist,
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
561 int* nsymbols)
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
562 {
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
563 /* This function can GC */
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
564 Lisp_Object rest;
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
565 Lisp_Object results = Qnil;
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
566 int i, j;
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
567 struct color_symbol *colortbl;
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
568 struct gcpro gcpro1, gcpro2;
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
569
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
570 GCPRO2 (results, device);
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
571
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
572 /* We built up results to be (("name" . #<color>) ...) so that if an
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
573 error happens we don't lose any malloc()ed data, or more importantly,
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
574 leave any pixels allocated in the server. */
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
575 i = 0;
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
576 LIST_LOOP (rest, color_symbol_alist)
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
577 {
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
578 Lisp_Object cons = XCAR (rest);
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
579 Lisp_Object name = XCAR (cons);
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
580 Lisp_Object value = XCDR (cons);
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
581 if (NILP (value))
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
582 continue;
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
583 if (STRINGP (value))
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
584 value =
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
585 Fmake_color_instance
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
586 (value, device, encode_error_behavior_flag (ERROR_ME_NOT));
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
587 else
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
588 {
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
589 assert (COLOR_SPECIFIERP (value));
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
590 value = Fspecifier_instance (value, domain, Qnil, Qnil);
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
591 }
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
592 if (NILP (value))
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
593 continue;
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
594 results = noseeum_cons (noseeum_cons (name, value), results);
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
595 i++;
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
596 }
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
597 UNGCPRO; /* no more evaluation */
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
598
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
599 *nsymbols=i;
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
600 if (i == 0) return 0;
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
601
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
602 colortbl = xnew_array_and_zero (struct color_symbol, i);
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
603
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
604 for (j=0; j<i; j++)
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
605 {
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
606 Lisp_Object cons = XCAR (results);
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
607 colortbl[j].color =
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
608 COLOR_INSTANCE_MSWINDOWS_COLOR (XCOLOR_INSTANCE (XCDR (cons)));
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
609
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
610 colortbl[j].name = (char *) XSTRING_DATA (XCAR (cons));
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
611 free_cons (XCONS (cons));
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
612 cons = results;
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
613 results = XCDR (results);
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
614 free_cons (XCONS (cons));
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
615 }
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
616 return colortbl;
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
617 }
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
618
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
619 static int xpm_to_eimage (Lisp_Object image, CONST Extbyte *buffer,
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
620 unsigned char** data,
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
621 int* width, int* height,
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
622 int* x_hot, int* y_hot,
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
623 int* transp,
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
624 struct color_symbol* color_symbols,
280
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
625 int nsymbols)
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
626 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
627 XpmImage xpmimage;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
628 XpmInfo xpminfo;
280
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
629 int result, i, j, transp_idx, maskbpline;
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
630 unsigned char* dptr;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
631 unsigned int* sptr;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
632 COLORREF color; /* the american spelling virus hits again .. */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
633 COLORREF* colortbl;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
634
272
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
635 xzero (xpmimage);
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
636 xzero (xpminfo);
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
637 xpminfo.valuemask=XpmHotspot;
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
638 *transp=FALSE;
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
639
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
640 result = XpmCreateXpmImageFromBuffer ((char*)buffer,
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
641 &xpmimage,
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
642 &xpminfo);
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
643 switch (result)
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
644 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
645 case XpmSuccess:
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
646 break;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
647 case XpmFileInvalid:
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
648 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
649 signal_simple_error ("invalid XPM data", image);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
650 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
651 case XpmNoMemory:
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
652 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
653 signal_double_file_error ("Parsing pixmap data",
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
654 "out of memory", image);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
655 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
656 default:
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
657 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
658 signal_double_file_error_2 ("Parsing pixmap data",
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
659 "unknown error code",
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
660 make_int (result), image);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
661 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
662 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
663
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
664 *width = xpmimage.width;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
665 *height = xpmimage.height;
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
666 maskbpline = (int)(~3UL & (unsigned long)
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
667 (((~7UL & (unsigned long)(*width + 7)) / 8) + 3));
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
668
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
669 *data = xnew_array_and_zero (unsigned char, *width * *height * 3);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
670
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
671 if (!*data)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
672 {
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
673 XpmFreeXpmImage (&xpmimage);
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
674 XpmFreeXpmInfo (&xpminfo);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
675 return 0;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
676 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
677
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
678 /* build a color table to speed things up */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
679 colortbl = xnew_array_and_zero (COLORREF, xpmimage.ncolors);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
680 if (!colortbl)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
681 {
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
682 xfree (*data);
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
683 XpmFreeXpmImage (&xpmimage);
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
684 XpmFreeXpmInfo (&xpminfo);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
685 return 0;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
686 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
687
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
688 for (i=0; i<xpmimage.ncolors; i++)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
689 {
280
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
690 /* pick up symbolic colors */
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
691 if (xpmimage.colorTable[i].c_color == 0
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
692 &&
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
693 xpmimage.colorTable[i].symbolic != 0)
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
694 {
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
695 if (!color_symbols)
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
696 {
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
697 xfree (*data);
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
698 xfree (colortbl);
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
699 XpmFreeXpmImage (&xpmimage);
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
700 XpmFreeXpmInfo (&xpminfo);
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
701 return 0;
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
702 }
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
703 for (j = 0; j<nsymbols; j++)
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
704 {
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
705 if (!strcmp (xpmimage.colorTable[i].symbolic,
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
706 color_symbols[j].name ))
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
707 {
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
708 colortbl[i]=color_symbols[j].color;
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
709 }
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
710 }
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
711 }
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
712 /* pick up transparencies */
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
713 else if (!strcasecmp (xpmimage.colorTable[i].c_color,"None")
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
714 ||
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
715 (xpmimage.colorTable[i].symbolic
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
716 &&
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
717 (!strcasecmp (xpmimage.colorTable[i].symbolic,"BgColor")
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
718 ||
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
719 !strcasecmp (xpmimage.colorTable[i].symbolic,"None"))))
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
720 {
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
721 *transp=TRUE;
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
722 colortbl[i]=transparent_color;
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
723 transp_idx=i;
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
724 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
725 else
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
726 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
727 colortbl[i]=
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
728 mswindows_string_to_color (xpmimage.colorTable[i].c_color);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
729 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
730 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
731
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
732 /* convert the image */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
733 sptr=xpmimage.data;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
734 dptr=*data;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
735 for (i = 0; i< *width * *height; i++)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
736 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
737 color = colortbl[*sptr++];
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
738
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
739 /* split out the 0x02bbggrr colorref into an rgb triple */
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
740 *dptr++=GetRValue (color); /* red */
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
741 *dptr++=GetGValue (color); /* green */
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
742 *dptr++=GetBValue (color); /* blue */
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
743 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
744
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
745 *x_hot=xpminfo.x_hotspot;
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
746 *y_hot=xpminfo.y_hotspot;
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
747
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
748 XpmFreeXpmImage (&xpmimage);
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
749 XpmFreeXpmInfo (&xpminfo);
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
750 xfree (colortbl);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
751 return TRUE;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
752 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
753
280
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
754 static void
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
755 mswindows_xpm_instantiate (Lisp_Object image_instance,
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
756 Lisp_Object instantiator,
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
757 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
758 int dest_mask, Lisp_Object domain)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
759 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
760 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
761 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
762 CONST Extbyte *bytes;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
763 Extcount len;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
764 unsigned char *eimage;
276
6330739388db Import from CVS: tag r21-0b36
cvs
parents: 272
diff changeset
765 int width, height, x_hot, y_hot;
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
766 BITMAPINFO* bmp_info;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
767 unsigned char* bmp_data;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
768 int bmp_bits;
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
769 int nsymbols=0, transp;
280
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
770 struct color_symbol* color_symbols=NULL;
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
771
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
772 Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
280
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
773 Lisp_Object color_symbol_alist = find_keyword_in_vector (instantiator,
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
774 Q_color_symbols);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
775
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
776 if (!DEVICE_MSWINDOWS_P (XDEVICE (device)))
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
777 signal_simple_error ("Not an mswindows device", device);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
778
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
779 assert (!NILP (data));
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
780
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
781 GET_STRING_BINARY_DATA_ALLOCA (data, bytes, len);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
782
280
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
783 /* in case we have color symbols */
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
784 color_symbols = extract_xpm_color_names (device, domain,
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
785 color_symbol_alist, &nsymbols);
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
786
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
787 /* convert to an eimage to make processing easier */
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
788 if (!xpm_to_eimage (image_instance, bytes, &eimage, &width, &height,
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
789 &x_hot, &y_hot, &transp, color_symbols, nsymbols))
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
790 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
791 signal_simple_error ("XPM to EImage conversion failed",
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
792 image_instance);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
793 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
794
280
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
795 if (color_symbols)
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
796 xfree(color_symbols);
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
797
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
798 /* build a bitmap from the eimage */
278
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
799 if (!(bmp_info=convert_EImage_to_DIBitmap (device, width, height, eimage,
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
800 &bmp_bits, &bmp_data)))
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
801 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
802 signal_simple_error ("XPM to EImage conversion failed",
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
803 image_instance);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
804 }
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
805 xfree (eimage);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
806
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
807 /* Now create the pixmap and set up the image instance */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
808 init_image_instance_from_dibitmap (ii, bmp_info, dest_mask,
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
809 bmp_data, bmp_bits, instantiator,
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
810 x_hot, y_hot, transp);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
811
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
812 xfree (bmp_info);
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
813 xfree (bmp_data);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
814 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
815 #endif /* HAVE_XPM */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
816
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
817 /**********************************************************************
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
818 * BMP *
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
819 **********************************************************************/
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
820
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
821 static void
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
822 bmp_validate (Lisp_Object instantiator)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
823 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
824 file_or_data_must_be_present (instantiator);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
825 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
826
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
827 static Lisp_Object
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
828 bmp_normalize (Lisp_Object inst, Lisp_Object console_type)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
829 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
830 return simple_image_type_normalize (inst, console_type, Qbmp);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
831 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
832
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
833 static int
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
834 bmp_possible_dest_types (void)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
835 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
836 return IMAGE_COLOR_PIXMAP_MASK;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
837 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
838
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
839 static void
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
840 bmp_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
841 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
842 int dest_mask, Lisp_Object domain)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
843 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
844 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
845 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
846 CONST Extbyte *bytes;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
847 Extcount len;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
848 BITMAPFILEHEADER* bmp_file_header;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
849 BITMAPINFO* bmp_info;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
850 void* bmp_data;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
851 int bmp_bits;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
852 Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
853
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
854 if (!DEVICE_MSWINDOWS_P (XDEVICE (device)))
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
855 signal_simple_error ("Not an mswindows device", device);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
856
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
857 assert (!NILP (data));
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
858
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
859 GET_STRING_BINARY_DATA_ALLOCA (data, bytes, len);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
860
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
861 /* Then slurp the image into memory, decoding along the way.
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
862 The result is the image in a simple one-byte-per-pixel
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
863 format. */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
864
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
865 bmp_file_header=(BITMAPFILEHEADER*)bytes;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
866 bmp_info = (BITMAPINFO*)(bytes + sizeof(BITMAPFILEHEADER));
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
867 bmp_data = (Extbyte*)bytes + bmp_file_header->bfOffBits;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
868 bmp_bits = bmp_file_header->bfSize - bmp_file_header->bfOffBits;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
869
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
870 /* Now create the pixmap and set up the image instance */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
871 init_image_instance_from_dibitmap (ii, bmp_info, dest_mask,
282
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
872 bmp_data, bmp_bits, instantiator,
c42ec1d1cded Import from CVS: tag r21-0b39
cvs
parents: 280
diff changeset
873 0, 0, 0);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
874 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
875
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
876
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
877 /**********************************************************************
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
878 * RESOURCES *
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
879 **********************************************************************/
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
880
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
881 static void
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
882 resource_validate (Lisp_Object instantiator)
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
883 {
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
884 if ((NILP (find_keyword_in_vector (instantiator, Q_file))
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
885 &&
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
886 NILP (find_keyword_in_vector (instantiator, Q_resource_id)))
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
887 ||
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
888 NILP (find_keyword_in_vector (instantiator, Q_resource_type)))
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
889 signal_simple_error ("Must supply :file, :resource-id and :resource-type",
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
890 instantiator);
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
891 }
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
892
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
893 static Lisp_Object
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
894 resource_normalize (Lisp_Object inst, Lisp_Object console_type)
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
895 {
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
896 /* This function can call lisp */
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
897 Lisp_Object file = Qnil;
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
898 struct gcpro gcpro1, gcpro2;
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
899 Lisp_Object alist = Qnil;
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
900
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
901 GCPRO2 (file, alist);
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
902
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
903 file = potential_pixmap_file_instantiator (inst, Q_file, Q_data,
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
904 console_type);
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
905
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
906 if (CONSP (file)) /* failure locating filename */
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
907 signal_double_file_error ("Opening pixmap file",
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
908 "no such file or directory",
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
909 Fcar (file));
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
910
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
911 if (NILP (file)) /* no conversion necessary */
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
912 RETURN_UNGCPRO (inst);
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
913
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
914 alist = tagged_vector_to_alist (inst);
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
915
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
916 {
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
917 alist = remassq_no_quit (Q_file, alist);
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
918 alist = Fcons (Fcons (Q_file, file), alist);
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
919 }
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
920
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
921 {
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
922 Lisp_Object result = alist_to_tagged_vector (Qresource, alist);
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
923 free_alist (alist);
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
924 RETURN_UNGCPRO (result);
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
925 }
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
926 }
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
927
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
928 static int
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
929 resource_possible_dest_types (void)
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
930 {
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
931 return IMAGE_POINTER_MASK | IMAGE_COLOR_PIXMAP_MASK;
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
932 }
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
933
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
934 typedef struct
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
935 {
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
936 char *name;
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
937 int resource_id;
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
938 } resource_t;
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
939
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
940 #ifndef OCR_ICOCUR
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
941 #define OCR_ICOCUR 32647
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
942 #define OIC_SAMPLE 32512
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
943 #define OIC_HAND 32513
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
944 #define OIC_QUES 32514
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
945 #define OIC_BANG 32515
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
946 #define OIC_NOTE 32516
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
947 #define OIC_WINLOGO 32517
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
948 #define LR_SHARED 0x8000
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
949 #endif
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
950
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
951 static CONST resource_t bitmap_table[] =
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
952 {
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
953 /* bitmaps */
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
954 { "close", OBM_CLOSE },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
955 { "uparrow", OBM_UPARROW },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
956 { "dnarrow", OBM_DNARROW },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
957 { "rgarrow", OBM_RGARROW },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
958 { "lfarrow", OBM_LFARROW },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
959 { "reduce", OBM_REDUCE },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
960 { "zoom", OBM_ZOOM },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
961 { "restore", OBM_RESTORE },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
962 { "reduced", OBM_REDUCED },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
963 { "zoomd", OBM_ZOOMD },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
964 { "restored", OBM_RESTORED },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
965 { "uparrowd", OBM_UPARROWD },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
966 { "dnarrowd", OBM_DNARROWD },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
967 { "rgarrowd", OBM_RGARROWD },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
968 { "lfarrowd", OBM_LFARROWD },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
969 { "mnarrow", OBM_MNARROW },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
970 { "combo", OBM_COMBO },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
971 { "uparrowi", OBM_UPARROWI },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
972 { "dnarrowi", OBM_DNARROWI },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
973 { "rgarrowi", OBM_RGARROWI },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
974 { "lfarrowi", OBM_LFARROWI },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
975 { "size", OBM_SIZE },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
976 { "btsize", OBM_BTSIZE },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
977 { "check", OBM_CHECK },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
978 { "cehckboxes", OBM_CHECKBOXES },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
979 { "btncorners" , OBM_BTNCORNERS },
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
980 {0}
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
981 };
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
982
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
983 static CONST resource_t cursor_table[] =
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
984 {
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
985 /* cursors */
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
986 { "normal", OCR_NORMAL },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
987 { "ibeam", OCR_IBEAM },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
988 { "wait", OCR_WAIT },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
989 { "cross", OCR_CROSS },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
990 { "up", OCR_UP },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
991 /* { "icon", OCR_ICON }, */
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
992 { "sizenwse", OCR_SIZENWSE },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
993 { "sizenesw", OCR_SIZENESW },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
994 { "sizewe", OCR_SIZEWE },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
995 { "sizens", OCR_SIZENS },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
996 { "sizeall", OCR_SIZEALL },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
997 /* { "icour", OCR_ICOCUR }, */
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
998 { "no", OCR_NO },
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
999 { 0 }
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1000 };
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1001
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1002 static CONST resource_t icon_table[] =
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1003 {
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1004 /* icons */
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1005 { "sample", OIC_SAMPLE },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1006 { "hand", OIC_HAND },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1007 { "ques", OIC_QUES },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1008 { "bang", OIC_BANG },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1009 { "note", OIC_NOTE },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1010 { "winlogo", OIC_WINLOGO },
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1011 {0}
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1012 };
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1013
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1014 static int resource_name_to_resource (Lisp_Object name, int type)
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1015 {
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1016 CONST resource_t* res = (type == IMAGE_CURSOR ? cursor_table
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1017 : type == IMAGE_ICON ? icon_table
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1018 : bitmap_table);
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1019
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1020 if (INTP (name))
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1021 {
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1022 return XINT (name);
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1023 }
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1024 else if (!STRINGP (name))
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1025 {
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1026 signal_simple_error ("invalid resource identifier", name);
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1027 }
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1028
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1029 do {
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1030 if (!strcasecmp ((char*)res->name, XSTRING_DATA (name)))
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1031 return res->resource_id;
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1032 } while ((++res)->name);
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1033 return 0;
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1034 }
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1035
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1036 static int
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1037 resource_symbol_to_type (Lisp_Object data)
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1038 {
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1039 if (EQ (data, Qcursor))
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1040 return IMAGE_CURSOR;
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1041 else if (EQ (data, Qicon))
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1042 return IMAGE_ICON;
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1043 else if (EQ (data, Qbitmap))
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1044 return IMAGE_BITMAP;
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1045 else
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1046 return 0;
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1047 }
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1048
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1049 static void
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1050 resource_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1051 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1052 int dest_mask, Lisp_Object domain)
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1053 {
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1054 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1055 unsigned int type = 0;
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1056 HANDLE himage = NULL;
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1057 LPCTSTR resid=0;
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1058 HINSTANCE hinst = NULL;
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1059 ICONINFO iconinfo;
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1060 int iitype=0;
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1061 char* fname=0;
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1062 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1063
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1064 Lisp_Object file = find_keyword_in_vector (instantiator, Q_file);
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1065 Lisp_Object resource_type = find_keyword_in_vector (instantiator,
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1066 Q_resource_type);
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1067 Lisp_Object resource_id = find_keyword_in_vector (instantiator,
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1068 Q_resource_id);
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1069
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1070 xzero (iconinfo);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1071
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1072 if (!DEVICE_MSWINDOWS_P (XDEVICE (device)))
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1073 signal_simple_error ("Not an mswindows device", device);
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1074
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1075 type = resource_symbol_to_type (resource_type);
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1076
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1077 if (dest_mask & IMAGE_POINTER_MASK && type == IMAGE_CURSOR)
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1078 iitype = IMAGE_POINTER;
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1079 else if (dest_mask & IMAGE_COLOR_PIXMAP_MASK)
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1080 iitype = IMAGE_COLOR_PIXMAP;
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1081 else
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1082 incompatible_image_types (instantiator, dest_mask,
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1083 IMAGE_COLOR_PIXMAP_MASK | IMAGE_POINTER_MASK);
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1084
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1085 /* mess with the keyword info we were provided with */
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1086 if (!NILP (file))
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1087 {
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1088 #ifdef __CYGWIN32__
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1089 CYGWIN_WIN32_PATH (XSTRING_DATA (file), fname);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1090 #else
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1091 /* #### FIXME someone who knows ... */
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1092 fname = XSTRING_DATA (file);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1093 #endif
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1094
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1095 if (NILP (resource_id))
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1096 resid = (LPCTSTR)fname;
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1097 else
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1098 {
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1099 hinst = LoadLibraryEx (fname, NULL,
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1100 LOAD_LIBRARY_AS_DATAFILE);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1101 resid = MAKEINTRESOURCE (resource_name_to_resource (resource_id,
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1102 type));
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1103
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1104 if (!resid)
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1105 resid = XSTRING_DATA (resource_id);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1106 }
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1107 }
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1108 else if (!(resid = MAKEINTRESOURCE (resource_name_to_resource (resource_id,
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1109 type))))
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1110 signal_simple_error ("invalid resource identifier", resource_id);
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1111
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1112 /* load the image */
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1113 if (!(himage = LoadImage (hinst, resid, type, 0, 0,
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1114 LR_CREATEDIBSECTION | LR_DEFAULTSIZE |
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1115 LR_SHARED |
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1116 (!NILP (file) ? LR_LOADFROMFILE : 0))))
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1117 {
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1118 signal_simple_error ("cannot load image", instantiator);
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1119 }
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1120
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1121 if (hinst)
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1122 FreeLibrary (hinst);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1123
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1124 mswindows_initialize_dibitmap_image_instance (ii, iitype);
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1125
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1126 IMAGE_INSTANCE_PIXMAP_FILENAME (ii) = file;
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1127 IMAGE_INSTANCE_PIXMAP_WIDTH (ii) =
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1128 GetSystemMetrics (type == IMAGE_CURSOR ? SM_CXCURSOR : SM_CXICON);
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1129 IMAGE_INSTANCE_PIXMAP_HEIGHT (ii) =
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1130 GetSystemMetrics (type == IMAGE_CURSOR ? SM_CYCURSOR : SM_CYICON);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1131 IMAGE_INSTANCE_PIXMAP_DEPTH (ii) = 1;
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1132
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1133 /* hey, we've got an icon type thing so we can reverse engineer the
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1134 bitmap and mask */
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1135 if (type != IMAGE_BITMAP)
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1136 {
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1137 GetIconInfo (himage, &iconinfo);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1138 IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii) = iconinfo.hbmColor;
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1139 IMAGE_INSTANCE_MSWINDOWS_MASK (ii) = iconinfo.hbmMask;
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1140 XSETINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii), iconinfo.xHotspot);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1141 XSETINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii), iconinfo.yHotspot);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1142 IMAGE_INSTANCE_MSWINDOWS_ICON (ii) = himage;
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1143 }
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1144 else
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1145 {
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1146 IMAGE_INSTANCE_MSWINDOWS_ICON (ii) = NULL;
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1147 IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii) = himage;
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1148 IMAGE_INSTANCE_MSWINDOWS_MASK (ii) = NULL;
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1149 XSETINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii), 0);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1150 XSETINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii), 0);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1151 }
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1152 }
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1153
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1154 static void
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1155 check_valid_resource_symbol (Lisp_Object data)
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1156 {
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1157 CHECK_SYMBOL (data);
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1158 if (!resource_symbol_to_type (data))
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1159 signal_simple_error ("invalid resource type", data);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1160 }
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1161
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1162 static void
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1163 check_valid_resource_id (Lisp_Object data)
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1164 {
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1165 if (!resource_name_to_resource (data, IMAGE_CURSOR)
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1166 &&
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1167 !resource_name_to_resource (data, IMAGE_ICON)
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1168 &&
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1169 !resource_name_to_resource (data, IMAGE_BITMAP))
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1170 signal_simple_error ("invalid resource identifier", data);
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1171 }
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1172
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1173 void
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1174 check_valid_string_or_int (Lisp_Object data)
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1175 {
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1176 if (!INTP (data))
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1177 CHECK_STRING (data);
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1178 else
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1179 CHECK_INT (data);
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1180 }
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1181
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1182
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1183 /************************************************************************/
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1184 /* image instance methods */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1185 /************************************************************************/
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1186
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1187 static void
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1188 mswindows_print_image_instance (struct Lisp_Image_Instance *p,
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1189 Lisp_Object printcharfun,
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1190 int escapeflag)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1191 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1192 char buf[100];
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1193
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1194 switch (IMAGE_INSTANCE_TYPE (p))
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1195 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1196 case IMAGE_MONO_PIXMAP:
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1197 case IMAGE_COLOR_PIXMAP:
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1198 case IMAGE_POINTER:
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1199 sprintf (buf, " (0x%lx",
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1200 (unsigned long) IMAGE_INSTANCE_MSWINDOWS_BITMAP (p));
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1201 write_c_string (buf, printcharfun);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1202 if (IMAGE_INSTANCE_MSWINDOWS_MASK (p))
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1203 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1204 sprintf (buf, "/0x%lx",
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1205 (unsigned long) IMAGE_INSTANCE_MSWINDOWS_MASK (p));
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1206 write_c_string (buf, printcharfun);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1207 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1208 write_c_string (")", printcharfun);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1209 break;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1210 default:
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1211 break;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1212 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1213 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1214
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1215 static void
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1216 mswindows_finalize_image_instance (struct Lisp_Image_Instance *p)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1217 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1218 if (!p->data)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1219 return;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1220
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1221 if (DEVICE_LIVE_P (XDEVICE (p->device)))
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1222 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1223 if (IMAGE_INSTANCE_MSWINDOWS_BITMAP (p))
269
b2472a1930f2 Import from CVS: tag r20-5b33
cvs
parents: 267
diff changeset
1224 DeleteObject (IMAGE_INSTANCE_MSWINDOWS_BITMAP (p));
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1225 IMAGE_INSTANCE_MSWINDOWS_BITMAP (p) = 0;
272
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
1226 if (IMAGE_INSTANCE_MSWINDOWS_MASK (p))
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
1227 DeleteObject (IMAGE_INSTANCE_MSWINDOWS_MASK (p));
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
1228 IMAGE_INSTANCE_MSWINDOWS_MASK (p) = 0;
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
1229 if (IMAGE_INSTANCE_MSWINDOWS_ICON (p))
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
1230 DestroyIcon (IMAGE_INSTANCE_MSWINDOWS_ICON (p));
c5d627a313b1 Import from CVS: tag r21-0b34
cvs
parents: 269
diff changeset
1231 IMAGE_INSTANCE_MSWINDOWS_ICON (p) = 0;
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1232 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1233
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1234 xfree (p->data);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1235 p->data = 0;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1236 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1237
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1238 static int
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1239 mswindows_image_instance_equal (struct Lisp_Image_Instance *p1,
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1240 struct Lisp_Image_Instance *p2, int depth)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1241 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1242 switch (IMAGE_INSTANCE_TYPE (p1))
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1243 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1244 case IMAGE_MONO_PIXMAP:
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1245 case IMAGE_COLOR_PIXMAP:
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1246 case IMAGE_POINTER:
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1247 if (IMAGE_INSTANCE_MSWINDOWS_BITMAP (p1)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1248 != IMAGE_INSTANCE_MSWINDOWS_BITMAP (p2))
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1249 return 0;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1250 break;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1251 default:
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1252 break;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1253 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1254
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1255 return 1;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1256 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1257
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1258 static unsigned long
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1259 mswindows_image_instance_hash (struct Lisp_Image_Instance *p, int depth)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1260 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1261 switch (IMAGE_INSTANCE_TYPE (p))
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1262 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1263 case IMAGE_MONO_PIXMAP:
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1264 case IMAGE_COLOR_PIXMAP:
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1265 case IMAGE_POINTER:
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1266 return (unsigned long) IMAGE_INSTANCE_MSWINDOWS_BITMAP (p);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1267 default:
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1268 return 0;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1269 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1270 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1271
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1272 /* Set all the slots in an image instance structure to reasonable
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1273 default values. This is used somewhere within an instantiate
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1274 method. It is assumed that the device slot within the image
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1275 instance is already set -- this is the case when instantiate
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1276 methods are called. */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1277
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1278 static void
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1279 mswindows_initialize_dibitmap_image_instance (struct Lisp_Image_Instance *ii,
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1280 enum image_instance_type type)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1281 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1282 ii->data = xnew_and_zero (struct mswindows_image_instance_data);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1283 IMAGE_INSTANCE_TYPE (ii) = type;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1284 IMAGE_INSTANCE_PIXMAP_FILENAME (ii) = Qnil;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1285 IMAGE_INSTANCE_PIXMAP_MASK_FILENAME (ii) = Qnil;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1286 IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii) = Qnil;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1287 IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii) = Qnil;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1288 IMAGE_INSTANCE_PIXMAP_FG (ii) = Qnil;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1289 IMAGE_INSTANCE_PIXMAP_BG (ii) = Qnil;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1290 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1291
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1292
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1293 /************************************************************************/
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1294 /* initialization */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1295 /************************************************************************/
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1296
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1297 void
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1298 syms_of_glyphs_mswindows (void)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1299 {
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1300 defkeyword (&Q_resource_id, ":resource-id");
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1301 defkeyword (&Q_resource_type, ":resource-type");
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1302 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1303
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1304 void
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1305 console_type_create_glyphs_mswindows (void)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1306 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1307 /* image methods */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1308
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1309 CONSOLE_HAS_METHOD (mswindows, print_image_instance);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1310 CONSOLE_HAS_METHOD (mswindows, finalize_image_instance);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1311 CONSOLE_HAS_METHOD (mswindows, image_instance_equal);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1312 CONSOLE_HAS_METHOD (mswindows, image_instance_hash);
278
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
1313 CONSOLE_HAS_METHOD (mswindows, init_image_instance_from_eimage);
90d73dddcdc4 Import from CVS: tag r21-0b37
cvs
parents: 276
diff changeset
1314 CONSOLE_HAS_METHOD (mswindows, locate_pixmap_file);
280
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
1315 #ifdef HAVE_XPM
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
1316 CONSOLE_HAS_METHOD (mswindows, xpm_instantiate);
7df0dd720c89 Import from CVS: tag r21-0b38
cvs
parents: 278
diff changeset
1317 #endif
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1318 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1319
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1320 void
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1321 image_instantiator_format_create_glyphs_mswindows (void)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1322 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1323 /* image-instantiator types */
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1324
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1325 INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (bmp, "bmp");
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1326
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1327 IIFORMAT_HAS_METHOD (bmp, validate);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1328 IIFORMAT_HAS_METHOD (bmp, normalize);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1329 IIFORMAT_HAS_METHOD (bmp, possible_dest_types);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1330 IIFORMAT_HAS_METHOD (bmp, instantiate);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1331
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1332 IIFORMAT_VALID_KEYWORD (bmp, Q_data, check_valid_string);
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1333 IIFORMAT_VALID_KEYWORD (bmp, Q_file, check_valid_string);
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1334
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1335 INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (resource, "resource");
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1336
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1337 IIFORMAT_HAS_METHOD (resource, validate);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1338 IIFORMAT_HAS_METHOD (resource, normalize);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1339 IIFORMAT_HAS_METHOD (resource, possible_dest_types);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1340 IIFORMAT_HAS_METHOD (resource, instantiate);
284
558f606b08ae Import from CVS: tag r21-0b40
cvs
parents: 282
diff changeset
1341
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1342 IIFORMAT_VALID_KEYWORD (resource, Q_resource_type,
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1343 check_valid_resource_symbol);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1344 IIFORMAT_VALID_KEYWORD (resource, Q_resource_id, check_valid_resource_id);
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1345 IIFORMAT_VALID_KEYWORD (resource, Q_file, check_valid_string);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1346 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1347
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1348 void
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1349 vars_of_glyphs_mswindows (void)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1350 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1351 Fprovide (Qbmp);
286
57709be46d1b Import from CVS: tag r21-0b41
cvs
parents: 284
diff changeset
1352 Fprovide (Qresource);
267
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1353 DEFVAR_LISP ("mswindows-bitmap-file-path", &Vmswindows_bitmap_file_path /*
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1354 A list of the directories in which mswindows bitmap files may be found.
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1355 This is used by the `make-image-instance' function.
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1356 */ );
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1357 Vmswindows_bitmap_file_path = Qnil;
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1358 }
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1359
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1360 void
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1361 complex_vars_of_glyphs_mswindows (void)
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1362 {
966663fcf606 Import from CVS: tag r20-5b32
cvs
parents:
diff changeset
1363 }