annotate src/glyphs-msw.c @ 771:943eaba38521

[xemacs-hg @ 2002-03-13 08:51:24 by ben] The big ben-mule-21-5 check-in! Various files were added and deleted. See CHANGES-ben-mule. There are still some test suite failures. No crashes, though. Many of the failures have to do with problems in the test suite itself rather than in the actual code. I'll be addressing these in the next day or so -- none of the test suite failures are at all critical. Meanwhile I'll be trying to address the biggest issues -- i.e. build or run failures, which will almost certainly happen on various platforms. All comments should be sent to ben@xemacs.org -- use a Cc: if necessary when sending to mailing lists. There will be pre- and post- tags, something like pre-ben-mule-21-5-merge-in, and post-ben-mule-21-5-merge-in.
author ben
date Wed, 13 Mar 2002 08:54:06 +0000
parents fdefd0186b75
children e38acbeb1cae
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 /* mswindows-specific glyph objects.
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2 Copyright (C) 1998, 1999, 2000 Andy Piper.
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
3 Copyright (C) 2001, 2002 Ben Wing.
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
4
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 XEmacs is distributed in the hope that it will be useful, but WITHOUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 along with XEmacs; see the file COPYING. If not, write to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 Boston, MA 02111-1307, USA. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 /* Synched up with: Not in FSF. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
24 /* This file apparently Mule-ized, 8-7-2000, but could stand review. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
25
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
26 /* written by Andy Piper <andy@xemacs.org> plagiarising bits from
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 glyphs-x.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
29 #define NEED_MSWINDOWS_COMMCTRL
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
30
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 #include <config.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 #include "lisp.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 #include "lstream.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 #include "console-msw.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 #include "glyphs-msw.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 #include "objects-msw.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 #include "window.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 #include "elhash.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 #include "buffer.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 #include "frame.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 #include "insdel.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 #include "opaque.h"
558
ed498ef2108b [xemacs-hg @ 2001-05-23 09:59:33 by ben]
ben
parents: 502
diff changeset
45 #include "sysdep.h"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 #include "sysfile.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 #include "faces.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 #include "imgproc.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 #include "file-coding.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 #define WIDGET_GLYPH_SLOT 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 DECLARE_IMAGE_INSTANTIATOR_FORMAT (nothing);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 DECLARE_IMAGE_INSTANTIATOR_FORMAT (string);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 DECLARE_IMAGE_INSTANTIATOR_FORMAT (formatted_string);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 DECLARE_IMAGE_INSTANTIATOR_FORMAT (inherit);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 #ifdef HAVE_JPEG
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 DECLARE_IMAGE_INSTANTIATOR_FORMAT (jpeg);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 #ifdef HAVE_TIFF
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 DECLARE_IMAGE_INSTANTIATOR_FORMAT (tiff);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
62 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 #ifdef HAVE_PNG
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 DECLARE_IMAGE_INSTANTIATOR_FORMAT (png);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
65 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 #ifdef HAVE_GIF
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 DECLARE_IMAGE_INSTANTIATOR_FORMAT (gif);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
68 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 #ifdef HAVE_XPM
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 DEFINE_DEVICE_IIFORMAT (mswindows, xpm);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
71 DEFINE_DEVICE_IIFORMAT (msprinter, xpm);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 DEFINE_DEVICE_IIFORMAT (mswindows, xbm);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
74 DEFINE_DEVICE_IIFORMAT (msprinter, xbm);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 #ifdef HAVE_XFACE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 DEFINE_DEVICE_IIFORMAT (mswindows, xface);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
77 DEFINE_DEVICE_IIFORMAT (msprinter, xface);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 #endif
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
79 DECLARE_IMAGE_INSTANTIATOR_FORMAT (layout);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
80 DEFINE_DEVICE_IIFORMAT (mswindows, native_layout);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 DEFINE_DEVICE_IIFORMAT (mswindows, button);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 DEFINE_DEVICE_IIFORMAT (mswindows, edit_field);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 DEFINE_DEVICE_IIFORMAT (mswindows, subwindow);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 DEFINE_DEVICE_IIFORMAT (mswindows, widget);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 DEFINE_DEVICE_IIFORMAT (mswindows, label);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 DEFINE_DEVICE_IIFORMAT (mswindows, scrollbar);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 DEFINE_DEVICE_IIFORMAT (mswindows, combo_box);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 DEFINE_DEVICE_IIFORMAT (mswindows, progress_gauge);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 DEFINE_DEVICE_IIFORMAT (mswindows, tree_view);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 DEFINE_DEVICE_IIFORMAT (mswindows, tab_control);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 DEFINE_IMAGE_INSTANTIATOR_FORMAT (bmp);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 Lisp_Object Qbmp;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 Lisp_Object Vmswindows_bitmap_file_path;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 static COLORREF transparent_color = RGB (1,1,1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 DEFINE_IMAGE_INSTANTIATOR_FORMAT (mswindows_resource);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 Lisp_Object Qmswindows_resource;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 static void
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
101 mswindows_initialize_dibitmap_image_instance (Lisp_Image_Instance *ii,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 int slices,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 enum image_instance_type type);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 static void
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
105 mswindows_initialize_image_instance_mask (Lisp_Image_Instance *image,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
106 HDC hcdc);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
107
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
108 /*
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
109 * Given device D, retrieve compatible device context. D can be either
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
110 * mswindows or an msprinter device.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
111 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
112 inline static HDC
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
113 get_device_compdc (struct device *d)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
114 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
115 if (DEVICE_MSWINDOWS_P (d))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
116 return DEVICE_MSWINDOWS_HCDC (d);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
117 else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
118 return DEVICE_MSPRINTER_HCDC (d);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
119 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
120
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
121 /*
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
122 * Initialize image instance pixel sizes in II. For a display bitmap,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
123 * these will be same as real bitmap sizes. For a printer bitmap,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
124 * these will be scaled up so that the bitmap is proportionally enlarged
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
125 * when output to printer. Redisplay code takes care of scaling, to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
126 * conserve memory we do not really scale bitmaps. Set the watermark
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
127 * only here.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
128 * #### Add support for unscalable bitmaps.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
129 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
130 static void init_image_instance_geometry (Lisp_Image_Instance *ii)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
131 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
132 struct device *d = DOMAIN_XDEVICE (ii->domain);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
133
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
134 if (/* #### Scaleable && */ DEVICE_MSPRINTER_P (d))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
135 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
136 HDC printer_dc = DEVICE_MSPRINTER_HCDC (d);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
137 HDC display_dc = CreateCompatibleDC (NULL);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
138 IMAGE_INSTANCE_PIXMAP_WIDTH (ii) =
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
139 MulDiv (IMAGE_INSTANCE_MSWINDOWS_BITMAP_REAL_WIDTH (ii),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
140 GetDeviceCaps (printer_dc, LOGPIXELSX),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
141 GetDeviceCaps (display_dc, LOGPIXELSX));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
142 IMAGE_INSTANCE_PIXMAP_HEIGHT (ii) =
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
143 MulDiv (IMAGE_INSTANCE_MSWINDOWS_BITMAP_REAL_HEIGHT (ii),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
144 GetDeviceCaps (printer_dc, LOGPIXELSY),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
145 GetDeviceCaps (display_dc, LOGPIXELSY));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
146 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
147 else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
148 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
149 IMAGE_INSTANCE_PIXMAP_WIDTH (ii) =
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
150 IMAGE_INSTANCE_MSWINDOWS_BITMAP_REAL_WIDTH (ii);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
151 IMAGE_INSTANCE_PIXMAP_HEIGHT (ii) =
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
152 IMAGE_INSTANCE_MSWINDOWS_BITMAP_REAL_HEIGHT (ii);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
153 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
154 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 #define BPLINE(width) ((int)(~3UL & (unsigned long)((width) +3)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 /* convert from a series of RGB triples to a BITMAPINFO formated for the*/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 /* proper display */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 /************************************************************************/
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
162 static BITMAPINFO *convert_EImage_to_DIBitmap (Lisp_Object device,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 int width, int height,
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
164 UChar_Binary *pic,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 int *bit_count,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
166 UChar_Binary **bmp_data)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 struct device *d = XDEVICE (device);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
169 int i, j;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
170 RGBQUAD *colortbl;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
171 int ncolors;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
172 BITMAPINFO *bmp_info;
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
173 UChar_Binary *ip, *dp;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
175 if (GetDeviceCaps (get_device_compdc (d), BITSPIXEL) > 0)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 int bpline = BPLINE(width * 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 /* FIXME: we can do this because 24bpp implies no color table, once
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 * we start palettizing this is no longer true. The X versions of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 * this function quantises to 256 colors or bit masks down to a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 * long. Windows can actually handle rgb triples in the raw so I
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 * don't see much point trying to optimize down to the best
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 * structure - unless it has memory / color allocation implications
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 * .... */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
185 bmp_info = xnew_and_zero (BITMAPINFO);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
186
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 if (!bmp_info)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 return NULL;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
192 bmp_info->bmiHeader.biBitCount = 24; /* just RGB triples for now */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
193 bmp_info->bmiHeader.biCompression = BI_RGB; /* just RGB triples
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
194 for now */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
195 bmp_info->bmiHeader.biSizeImage = width * height * 3;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 /* bitmap data needs to be in blue, green, red triples - in that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 order, eimage is in RGB format so we need to convert */
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
199 *bmp_data = xnew_array_and_zero (UChar_Binary, bpline * height);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 *bit_count = bpline * height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 if (!bmp_data)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 xfree (bmp_info);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 return NULL;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 ip = pic;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 for (i = height-1; i >= 0; i--) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 dp = (*bmp_data) + (i * bpline);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 for (j = 0; j < width; j++) {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
212 dp[2] = *ip++;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
213 dp[1] = *ip++;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
214 *dp = *ip++;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 dp += 3;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 else /* scale to 256 colors */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 int rd,gr,bl;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 quant_table *qtable;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 int bpline = BPLINE (width * 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 /* Quantize the image and get a histogram while we're at it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 Do this first to save memory */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 qtable = build_EImage_quantable(pic, width, height, 256);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 if (qtable == NULL) return NULL;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 /* use our quantize table to allocate the colors */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 ncolors = qtable->num_active_colors;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
231 bmp_info = (BITMAPINFO *)xmalloc_and_zero (sizeof(BITMAPINFOHEADER) +
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 sizeof(RGBQUAD) * ncolors);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 if (!bmp_info)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 xfree (qtable);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 return NULL;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
239 colortbl = (RGBQUAD *) (((UChar_Binary *) bmp_info) +
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
240 sizeof (BITMAPINFOHEADER));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
241
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
242 bmp_info->bmiHeader.biBitCount = 8;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
243 bmp_info->bmiHeader.biCompression = BI_RGB;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
244 bmp_info->bmiHeader.biSizeImage = bpline * height;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
245 bmp_info->bmiHeader.biClrUsed = ncolors;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
246 bmp_info->bmiHeader.biClrImportant = ncolors;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
247
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
248 *bmp_data = (UChar_Binary *) xmalloc_and_zero (bpline * height);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 *bit_count = bpline * height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 if (!*bmp_data)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 xfree (qtable);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 xfree (bmp_info);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 return NULL;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 }
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
257
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 /* build up an RGBQUAD colortable */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
259 for (i = 0; i < qtable->num_active_colors; i++)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
260 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
261 colortbl[i].rgbRed = (BYTE) qtable->rm[i];
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
262 colortbl[i].rgbGreen = (BYTE) qtable->gm[i];
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
263 colortbl[i].rgbBlue = (BYTE) qtable->bm[i];
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
264 colortbl[i].rgbReserved = 0;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
265 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 /* now build up the data. picture has to be upside-down and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 back-to-front for msw bitmaps */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 ip = pic;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
270 for (i = height-1; i >= 0; i--)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
271 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
272 dp = (*bmp_data) + (i * bpline);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
273 for (j = 0; j < width; j++)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
274 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
275 rd = *ip++;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
276 gr = *ip++;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
277 bl = *ip++;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
278 *dp++ = QUANT_GET_COLOR (qtable,rd,gr,bl);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
279 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 xfree (qtable);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
282 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 /* fix up the standard stuff */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
284 bmp_info->bmiHeader.biWidth = width;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
285 bmp_info->bmiHeader.biHeight = height;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
286 bmp_info->bmiHeader.biPlanes = 1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
287 bmp_info->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
288 bmp_info->bmiHeader.biXPelsPerMeter = 0; /* unless you know better */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
289 bmp_info->bmiHeader.biYPelsPerMeter = 0;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 return bmp_info;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 /* Given a pixmap filename, look through all of the "standard" places
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 where the file might be located. Return a full pathname if found;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 otherwise, return Qnil. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 mswindows_locate_pixmap_file (Lisp_Object name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 /* This function can GC if IN_REDISPLAY is false */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 Lisp_Object found;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 /* Check non-absolute pathnames with a directory component relative to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 the search path; that's the way Xt does it. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 if (IS_DIRECTORY_SEP(XSTRING_BYTE (name, 0)) ||
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 (XSTRING_BYTE (name, 0) == '.' &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 (IS_DIRECTORY_SEP(XSTRING_BYTE (name, 1)) ||
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 (XSTRING_BYTE (name, 1) == '.' &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 (IS_DIRECTORY_SEP(XSTRING_BYTE (name, 2)))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 if (!NILP (Ffile_readable_p (name)))
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
313 return Fexpand_file_name (name, Qnil);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 if (locate_file (Vmswindows_bitmap_file_path, name, Qnil, &found, R_OK) < 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 Lisp_Object temp = list1 (Vdata_directory);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 struct gcpro gcpro1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 GCPRO1 (temp);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 locate_file (temp, name, Qnil, &found, R_OK);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 }
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
327
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 return found;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 /* Initialize an image instance from a bitmap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 DEST_MASK specifies the mask of allowed image types.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 If this fails, signal an error. INSTANTIATOR is only used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 in the error message. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 static void
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
340 init_image_instance_from_dibitmap (Lisp_Image_Instance *ii,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 BITMAPINFO *bmp_info,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 int dest_mask,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 void *bmp_data,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 int bmp_bits,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 int slices,
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
346 Lisp_Object instantiator,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 int x_hot, int y_hot,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 int create_mask)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
350 struct device *d = XDEVICE (IMAGE_INSTANCE_DEVICE (ii));
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
351 void *bmp_buf = 0;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
352 enum image_instance_type type;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 HBITMAP bitmap;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 HDC hdc;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 if (dest_mask & IMAGE_COLOR_PIXMAP_MASK)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 type = IMAGE_COLOR_PIXMAP;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 else if (dest_mask & IMAGE_POINTER_MASK)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 type = IMAGE_POINTER;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
360 else
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 incompatible_image_types (instantiator, dest_mask,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 IMAGE_COLOR_PIXMAP_MASK | IMAGE_POINTER_MASK);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
363
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
364 hdc = get_device_compdc (d);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
365 bitmap = CreateDIBSection (hdc,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
366 bmp_info,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
367 DIB_RGB_COLORS,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
368 &bmp_buf,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
369 0, 0);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 if (!bitmap || !bmp_buf)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
372 signal_image_error ("Unable to create bitmap", instantiator);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 /* copy in the actual bitmap */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 memcpy (bmp_buf, bmp_data, bmp_bits);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 mswindows_initialize_dibitmap_image_instance (ii, slices, type);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 IMAGE_INSTANCE_PIXMAP_FILENAME (ii) =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 find_keyword_in_vector (instantiator, Q_file);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 /* Fixup a set of bitmaps. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii) = bitmap;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 IMAGE_INSTANCE_MSWINDOWS_MASK (ii) = NULL;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
386 IMAGE_INSTANCE_MSWINDOWS_BITMAP_REAL_WIDTH (ii) =
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
387 bmp_info->bmiHeader.biWidth;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
388 IMAGE_INSTANCE_MSWINDOWS_BITMAP_REAL_HEIGHT (ii) =
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
389 bmp_info->bmiHeader.biHeight;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
390 IMAGE_INSTANCE_PIXMAP_DEPTH (ii) = bmp_info->bmiHeader.biBitCount;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 XSETINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii), x_hot);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 XSETINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii), y_hot);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
393 init_image_instance_geometry (ii);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 if (create_mask)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
397 mswindows_initialize_image_instance_mask (ii, hdc);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 }
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
399
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 if (type == IMAGE_POINTER)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 mswindows_initialize_image_instance_icon(ii, TRUE);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 static void
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
407 image_instance_add_dibitmap (Lisp_Image_Instance *ii,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 BITMAPINFO *bmp_info,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 void *bmp_data,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 int bmp_bits,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 int slice,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 Lisp_Object instantiator)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
414 struct device *d = XDEVICE (IMAGE_INSTANCE_DEVICE (ii));
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
415 void *bmp_buf = 0;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
416
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
417 HBITMAP bitmap = CreateDIBSection (get_device_compdc (d),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 bmp_info,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 DIB_RGB_COLORS,
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
420 &bmp_buf,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 0,0);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
422
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 if (!bitmap || !bmp_buf)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
424 signal_image_error ("Unable to create bitmap", instantiator);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 /* copy in the actual bitmap */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 memcpy (bmp_buf, bmp_data, bmp_bits);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 IMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICE (ii, slice) = bitmap;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 static void
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
432 mswindows_init_image_instance_from_eimage (Lisp_Image_Instance *ii,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 int width, int height,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 int slices,
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
435 UChar_Binary *eimage,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 int dest_mask,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437 Lisp_Object instantiator,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 Lisp_Object domain)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
441 BITMAPINFO * bmp_info;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
442 UChar_Binary * bmp_data;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 int bmp_bits;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 COLORREF bkcolor;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 int slice;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
446
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
447 CHECK_MSGDI_DEVICE (device);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 /* this is a hack but MaskBlt and TransparentBlt are not supported
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 on most windows variants */
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
451 bkcolor = COLOR_INSTANCE_MSWINDOWS_COLOR
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 (XCOLOR_INSTANCE (FACE_BACKGROUND (Vdefault_face, domain)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 for (slice = 0; slice < slices; slice++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 /* build a bitmap from the eimage */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
457 if (!(bmp_info = convert_EImage_to_DIBitmap (device, width, height,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 eimage + (width * height * 3 * slice),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 &bmp_bits, &bmp_data)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
461 signal_image_error ("EImage to DIBitmap conversion failed",
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
462 instantiator);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 /* Now create the pixmap and set up the image instance */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466 if (slice == 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467 init_image_instance_from_dibitmap (ii, bmp_info, dest_mask,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 bmp_data, bmp_bits, slices, instantiator,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 0, 0, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 image_instance_add_dibitmap (ii, bmp_info, bmp_data, bmp_bits, slice,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 instantiator);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
473
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 xfree (bmp_info);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 xfree (bmp_data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
479 inline static void
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
480 set_mono_pixel (UChar_Binary *bits,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
481 int bpline, int height,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
482 int x, int y, int white)
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
483 {
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
484 int i;
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
485 UChar_Binary bitnum;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486 /* Find the byte on which this scanline begins */
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
487 i = (height - y - 1) * bpline;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 /* Find the byte containing this pixel */
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
489 i += (x >> 3);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 /* Which bit is it? */
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
491 bitnum = (UChar_Binary) (7 - (x & 7));
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
492 if (white) /* Turn it on */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
493 bits[i] |= (1 << bitnum);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
494 else /* Turn it off */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
495 bits[i] &= ~(1 << bitnum);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
496 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 static void
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
499 mswindows_initialize_image_instance_mask (Lisp_Image_Instance *image,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
500 HDC hcdc)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 HBITMAP mask;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503 HGDIOBJ old = NULL;
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
504 UChar_Binary *dibits, *and_bits;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
505 BITMAPINFO *bmp_info =
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
506 (BITMAPINFO *) xmalloc_and_zero (sizeof (BITMAPINFO) + sizeof (RGBQUAD));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 int i, j;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
508 int height = IMAGE_INSTANCE_MSWINDOWS_BITMAP_REAL_HEIGHT (image);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
509
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
510 int maskbpline = BPLINE ((IMAGE_INSTANCE_MSWINDOWS_BITMAP_REAL_WIDTH (image) + 7) / 8);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
511 int bpline = BPLINE (IMAGE_INSTANCE_MSWINDOWS_BITMAP_REAL_WIDTH (image) * 3);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 if (!bmp_info)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
516 bmp_info->bmiHeader.biWidth = IMAGE_INSTANCE_MSWINDOWS_BITMAP_REAL_WIDTH (image);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 bmp_info->bmiHeader.biHeight = height;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
518 bmp_info->bmiHeader.biPlanes = 1;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
519 bmp_info->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
520 bmp_info->bmiHeader.biBitCount = 1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
521 bmp_info->bmiHeader.biCompression = BI_RGB;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
522 bmp_info->bmiHeader.biClrUsed = 2;
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
523 bmp_info->bmiHeader.biClrImportant = 2;
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
524 bmp_info->bmiHeader.biSizeImage = height * maskbpline;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525 bmp_info->bmiColors[0].rgbRed = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 bmp_info->bmiColors[0].rgbGreen = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527 bmp_info->bmiColors[0].rgbBlue = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528 bmp_info->bmiColors[0].rgbReserved = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 bmp_info->bmiColors[1].rgbRed = 255;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530 bmp_info->bmiColors[1].rgbGreen = 255;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531 bmp_info->bmiColors[1].rgbBlue = 255;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532 bmp_info->bmiColors[0].rgbReserved = 0;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
533
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
534 if (!(mask = CreateDIBSection (hcdc,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535 bmp_info,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536 DIB_RGB_COLORS,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
537 (void **)&and_bits,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 0,0)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540 xfree (bmp_info);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544 old = SelectObject (hcdc, IMAGE_INSTANCE_MSWINDOWS_BITMAP (image));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 /* build up an in-memory set of bits to mess with */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546 xzero (*bmp_info);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
548 bmp_info->bmiHeader.biWidth = IMAGE_INSTANCE_MSWINDOWS_BITMAP_REAL_WIDTH (image);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
549 bmp_info->bmiHeader.biHeight = -height;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
550 bmp_info->bmiHeader.biPlanes = 1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
551 bmp_info->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
552 bmp_info->bmiHeader.biBitCount = 24;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
553 bmp_info->bmiHeader.biCompression = BI_RGB;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
554 bmp_info->bmiHeader.biClrUsed = 0;
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
555 bmp_info->bmiHeader.biClrImportant = 0;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
556 bmp_info->bmiHeader.biSizeImage = height * bpline;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
558 dibits = (UChar_Binary *) xmalloc_and_zero (bpline * height);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 if (GetDIBits (hcdc,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560 IMAGE_INSTANCE_MSWINDOWS_BITMAP (image),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561 0,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 height,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563 dibits,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564 bmp_info,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565 DIB_RGB_COLORS) <= 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
567 xfree (bmp_info);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
570
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571 /* now set the colored bits in the mask and transparent ones to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
572 black in the original */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
573 for (i = 0; i < IMAGE_INSTANCE_MSWINDOWS_BITMAP_REAL_WIDTH (image); i++)
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
574 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
575 for (j = 0; j < height; j++)
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
576 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
577 UChar_Binary *idx = &dibits[j * bpline + i * 3];
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
579 if (RGB (idx[2], idx[1], idx[0]) == transparent_color)
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
580 {
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581 idx[0] = idx[1] = idx[2] = 0;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
582 set_mono_pixel (and_bits, maskbpline, height, i, j, TRUE);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583 }
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
584 else
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
585 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
586 set_mono_pixel (and_bits, maskbpline, height, i, j, FALSE);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
587 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591 SetDIBits (hcdc,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
592 IMAGE_INSTANCE_MSWINDOWS_BITMAP (image),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
593 0,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594 height,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
595 dibits,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
596 bmp_info,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597 DIB_RGB_COLORS);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
598
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599 xfree (bmp_info);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600 xfree (dibits);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
601
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
602 SelectObject(hcdc, old);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
603
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604 IMAGE_INSTANCE_MSWINDOWS_MASK (image) = mask;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
605 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607 void
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
608 mswindows_initialize_image_instance_icon (Lisp_Image_Instance *image,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609 int cursor)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611 ICONINFO x_icon;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
612
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
613 /* we rely on windows to do any resizing necessary */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
614 x_icon.fIcon = cursor ? FALSE : TRUE;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
615 x_icon.xHotspot = XINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (image));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
616 x_icon.yHotspot = XINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (image));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
617 x_icon.hbmMask = IMAGE_INSTANCE_MSWINDOWS_MASK (image);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
618 x_icon.hbmColor = IMAGE_INSTANCE_MSWINDOWS_BITMAP (image);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
619
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
620 IMAGE_INSTANCE_MSWINDOWS_ICON (image)=
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
621 CreateIconIndirect (&x_icon);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
622 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
623
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
624 static HBITMAP
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
625 create_resized_bitmap (HBITMAP curbmp, struct frame *f,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
626 int curx, int cury,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
627 int newx, int newy)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629 HBITMAP newbmp;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
630 HGDIOBJ old1, old2;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
631
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
632 HDC hcdc = get_device_compdc (XDEVICE (FRAME_DEVICE (f)));
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
633 HDC hdcDst = CreateCompatibleDC (hcdc);
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
634
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
635 old1 = SelectObject (hcdc, curbmp);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
636
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 newbmp = CreateCompatibleBitmap (hcdc, newx, newy);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 old2 = SelectObject (hdcDst, newbmp);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
640
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641 if (!StretchBlt (hdcDst, 0, 0, newx, newy,
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
642 hcdc, 0, 0,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
643 curx,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
644 cury,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645 SRCCOPY))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647 DeleteObject (newbmp);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648 DeleteDC (hdcDst);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652 SelectObject (hdcDst, old2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 SelectObject (hcdc, old1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 DeleteDC (hdcDst);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656 return newbmp;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 HBITMAP
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
660 mswindows_create_resized_bitmap (Lisp_Image_Instance *ii,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
661 struct frame *f,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
662 int newx, int newy)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
663 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
664 return create_resized_bitmap (IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
665 f,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
666 IMAGE_INSTANCE_MSWINDOWS_BITMAP_REAL_WIDTH (ii),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
667 IMAGE_INSTANCE_MSWINDOWS_BITMAP_REAL_HEIGHT (ii),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
668 newx, newy);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
669 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
670
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
671 HBITMAP
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
672 mswindows_create_resized_mask (Lisp_Image_Instance *ii,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
673 struct frame *f,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
674 int newx, int newy)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
676 if (IMAGE_INSTANCE_MSWINDOWS_MASK (ii) == NULL)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
677 return NULL;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
678
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
679 return create_resized_bitmap (IMAGE_INSTANCE_MSWINDOWS_MASK (ii),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
680 f,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
681 IMAGE_INSTANCE_MSWINDOWS_BITMAP_REAL_WIDTH (ii),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
682 IMAGE_INSTANCE_MSWINDOWS_BITMAP_REAL_HEIGHT (ii),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
683 newx, newy);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
686 #if 0 /* Currently unused */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
687 /* #### Warning: This function is not correct anymore with
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
688 resizable printer bitmaps. If you uncomment it, clean it. --kkm */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
689 int
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
690 mswindows_resize_dibitmap_instance (Lisp_Image_Instance *ii,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
691 struct frame *f,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
692 int newx, int newy)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
693 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
694 HBITMAP newbmp = mswindows_create_resized_bitmap (ii, f, newx, newy);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
695 HBITMAP newmask = mswindows_create_resized_mask (ii, f, newx, newy);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
696
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
697 if (!newbmp)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
698 return FALSE;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
699
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
700 if (IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
701 DeleteObject (IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
702 if (IMAGE_INSTANCE_MSWINDOWS_MASK (ii))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
703 DeleteObject (IMAGE_INSTANCE_MSWINDOWS_MASK (ii));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
704
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
705 IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii) = newbmp;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
706 IMAGE_INSTANCE_MSWINDOWS_MASK (ii) = newmask;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
707 IMAGE_INSTANCE_PIXMAP_WIDTH (ii) = newx;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
708 IMAGE_INSTANCE_PIXMAP_HEIGHT (ii) = newy;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
709
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
710 return TRUE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
711 }
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
712 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
713
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
714 /**********************************************************************
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
715 * XPM *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
716 **********************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
717
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
718 #ifdef HAVE_XPM
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
719
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
720 struct color_symbol
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
721 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
722 Intbyte * name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
723 COLORREF color;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
724 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
725
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
726 static struct color_symbol *
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
727 extract_xpm_color_names (Lisp_Object device,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
728 Lisp_Object domain,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
729 Lisp_Object color_symbol_alist,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
730 int *nsymbols)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
731 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
732 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
733 Lisp_Object rest;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
734 Lisp_Object results = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
735 int i, j;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
736 struct color_symbol *colortbl;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
737 struct gcpro gcpro1, gcpro2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
738
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
739 GCPRO2 (results, device);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
740
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
741 /* We built up results to be (("name" . #<color>) ...) so that if an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
742 error happens we don't lose any malloc()ed data, or more importantly,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
743 leave any pixels allocated in the server. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
744 i = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
745 LIST_LOOP (rest, color_symbol_alist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
746 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
747 Lisp_Object cons = XCAR (rest);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
748 Lisp_Object name = XCAR (cons);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
749 Lisp_Object value = XCDR (cons);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
750 if (NILP (value))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
751 continue;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
752 if (STRINGP (value))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
753 value =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
754 Fmake_color_instance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
755 (value, device, encode_error_behavior_flag (ERROR_ME_NOT));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
756 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
757 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
758 assert (COLOR_SPECIFIERP (value));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
759 value = Fspecifier_instance (value, domain, Qnil, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
760 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
761 if (NILP (value))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
762 continue;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
763 results = noseeum_cons (noseeum_cons (name, value), results);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
764 i++;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
765 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
766 UNGCPRO; /* no more evaluation */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
767
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
768 *nsymbols = i;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
769 if (i == 0) return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
770
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
771 colortbl = xnew_array_and_zero (struct color_symbol, i);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
772
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
773 for (j = 0; j < i; j++)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
774 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
775 Lisp_Object cons = XCAR (results);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
776 colortbl[j].color =
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
777 COLOR_INSTANCE_MSWINDOWS_COLOR (XCOLOR_INSTANCE (XCDR (cons)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
778
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
779 /* mustn't lose this when we return */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
780 colortbl[j].name = qxestrdup (XSTRING_DATA (XCAR (cons)));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
781 free_cons (XCONS (cons));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
782 cons = results;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
783 results = XCDR (results);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
784 free_cons (XCONS (cons));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
785 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
786 return colortbl;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
787 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
788
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
789 static int xpm_to_eimage (Lisp_Object image, const Extbyte *buffer,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
790 UChar_Binary **data,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
791 int *width, int *height,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
792 int *x_hot, int *y_hot,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
793 int *transp,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
794 struct color_symbol *color_symbols,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
795 int nsymbols)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
796 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
797 XpmImage xpmimage;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
798 XpmInfo xpminfo;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
799 int result, i, j, transp_idx, maskbpline;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
800 UChar_Binary *dptr;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
801 unsigned int *sptr;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
802 COLORREF color; /* the american spelling virus hits again .. */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
803 COLORREF *colortbl;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
804
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
805 xzero (xpmimage);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
806 xzero (xpminfo);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
807 xpminfo.valuemask = XpmHotspot;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
808 *transp = FALSE;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
809
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
810 result = XpmCreateXpmImageFromBuffer ((char *)buffer,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
811 &xpmimage,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
812 &xpminfo);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
813 switch (result)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
814 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
815 case XpmSuccess:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
816 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
817 case XpmFileInvalid:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
818 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
819 signal_image_error ("Invalid XPM data", image);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
820 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
821 case XpmNoMemory:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
822 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
823 signal_double_image_error ("Parsing pixmap data",
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
824 "out of memory", image);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
825 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
826 default:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
827 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
828 signal_double_image_error_2 ("Parsing pixmap data",
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
829 "unknown error",
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
830 make_int (result), image);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
831 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
832 }
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
833
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
834 *width = xpmimage.width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
835 *height = xpmimage.height;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
836 maskbpline = BPLINE ((~7UL & (unsigned long)(*width + 7)) / 8);
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
837
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
838 *data = xnew_array_and_zero (UChar_Binary, *width * *height * 3);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
839
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
840 if (!*data)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
841 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
842 XpmFreeXpmImage (&xpmimage);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
843 XpmFreeXpmInfo (&xpminfo);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
844 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
845 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
846
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
847 /* build a color table to speed things up */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
848 colortbl = xnew_array_and_zero (COLORREF, xpmimage.ncolors);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
849 if (!colortbl)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
850 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
851 xfree (*data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
852 XpmFreeXpmImage (&xpmimage);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
853 XpmFreeXpmInfo (&xpminfo);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
854 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
855 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
856
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
857 for (i = 0; i < (int) xpmimage.ncolors; i++)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
858 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
859 /* goto alert!!!! */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
860 /* pick up symbolic colors in preference */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
861 if (xpmimage.colorTable[i].symbolic)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
862 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
863 if (!strcasecmp (xpmimage.colorTable[i].symbolic, "BgColor")
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
864 ||
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
865 !strcasecmp (xpmimage.colorTable[i].symbolic, "None"))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
866 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
867 *transp = TRUE;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
868 colortbl[i] = transparent_color;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
869 transp_idx = i;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
870 goto label_found_color;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
871 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
872 else if (color_symbols)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
873 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
874 for (j = 0; j < nsymbols; j++)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
875 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
876 if (!qxestrcmp_c (color_symbols[j].name,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
877 xpmimage.colorTable[i].symbolic))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
878 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
879 colortbl[i] = color_symbols[j].color;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
880 goto label_found_color;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
881 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
882 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
883 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
884 else if (xpmimage.colorTable[i].c_color == 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
885 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
886 goto label_no_color;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
887 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
888 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
889 /* pick up transparencies */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
890 if (!strcasecmp (xpmimage.colorTable[i].c_color, "None"))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
891 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
892 *transp = TRUE;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
893 colortbl[i] = transparent_color;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
894 transp_idx = i;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
895 goto label_found_color;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
896 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
897 /* finally pick up a normal color spec */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
898 if (xpmimage.colorTable[i].c_color)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
899 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
900 colortbl[i]=
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
901 mswindows_string_to_color ((Intbyte *)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
902 xpmimage.colorTable[i].c_color);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
903 goto label_found_color;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
904 }
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
905
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
906 label_no_color:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
907 xfree (*data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
908 xfree (colortbl);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
909 XpmFreeXpmImage (&xpmimage);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
910 XpmFreeXpmInfo (&xpminfo);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
911 return 0;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
912
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
913 label_found_color:;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
914 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
915
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
916 /* convert the image */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
917 sptr = xpmimage.data;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
918 dptr= *data;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
919 for (i = 0; i< *width * *height; i++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
920 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
921 color = colortbl[*sptr++];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
922
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
923 /* split out the 0x02bbggrr colorref into an rgb triple */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
924 *dptr++=GetRValue (color); /* red */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
925 *dptr++=GetGValue (color); /* green */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
926 *dptr++=GetBValue (color); /* blue */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
927 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
928
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
929 *x_hot = xpminfo.x_hotspot;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
930 *y_hot = xpminfo.y_hotspot;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
931
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
932 XpmFreeXpmImage (&xpmimage);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
933 XpmFreeXpmInfo (&xpminfo);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
934 xfree (colortbl);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
935 return TRUE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
936 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
937
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
938 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
939 mswindows_xpm_instantiate (Lisp_Object image_instance,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
940 Lisp_Object instantiator,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
941 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
942 int dest_mask, Lisp_Object domain)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
943 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
944 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
945 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
946 const Extbyte *bytes;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
947 Bytecount len;
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
948 UChar_Binary *eimage;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
949 int width, height, x_hot, y_hot;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
950 BITMAPINFO* bmp_info;
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
951 UChar_Binary* bmp_data;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
952 int bmp_bits;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
953 int nsymbols = 0, transp;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
954 struct color_symbol* color_symbols = NULL;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
955
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
956 Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
957 Lisp_Object color_symbol_alist = find_keyword_in_vector (instantiator,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
958 Q_color_symbols);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
959
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
960 CHECK_MSGDI_DEVICE (device);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
961
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
962 assert (!NILP (data));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
963
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
964 TO_EXTERNAL_FORMAT (LISP_STRING, data,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
965 ALLOCA, (bytes, len),
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
966 Qbinary);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
967
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
968 /* in case we have color symbols */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
969 color_symbols = extract_xpm_color_names (device, domain,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
970 color_symbol_alist, &nsymbols);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
971
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
972 /* convert to an eimage to make processing easier */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
973 if (!xpm_to_eimage (image_instance, bytes, &eimage, &width, &height,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
974 &x_hot, &y_hot, &transp, color_symbols, nsymbols))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
975 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
976 signal_image_error ("XPM to EImage conversion failed",
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
977 image_instance);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
978 }
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
979
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
980 if (color_symbols)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
981 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
982 while (nsymbols--)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
983 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
984 xfree (color_symbols[nsymbols].name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
985 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
986 xfree(color_symbols);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
987 }
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
988
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
989 /* build a bitmap from the eimage */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
990 if (!(bmp_info = convert_EImage_to_DIBitmap (device, width, height, eimage,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
991 &bmp_bits, &bmp_data)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
992 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
993 signal_image_error ("XPM to EImage conversion failed",
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
994 image_instance);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
995 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
996 xfree (eimage);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
997
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
998 /* Now create the pixmap and set up the image instance */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
999 init_image_instance_from_dibitmap (ii, bmp_info, dest_mask,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1000 bmp_data, bmp_bits, 1, instantiator,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1001 x_hot, y_hot, transp);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1002
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1003 xfree (bmp_info);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1004 xfree (bmp_data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1005 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1006 #endif /* HAVE_XPM */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1007
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1008 /**********************************************************************
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1009 * BMP *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1010 **********************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1011
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1012 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1013 bmp_validate (Lisp_Object instantiator)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1014 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1015 file_or_data_must_be_present (instantiator);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1016 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1017
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1018 static Lisp_Object
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1019 bmp_normalize (Lisp_Object inst, Lisp_Object console_type,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1020 Lisp_Object dest_mask)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1021 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1022 return simple_image_type_normalize (inst, console_type, Qbmp);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1023 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1024
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1025 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1026 bmp_possible_dest_types (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1027 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1028 return IMAGE_COLOR_PIXMAP_MASK;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1029 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1030
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1031 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1032 bmp_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1033 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1034 int dest_mask, Lisp_Object domain)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1035 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1036 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1037 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1038 const Extbyte *bytes;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1039 Bytecount len;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1040 BITMAPFILEHEADER * bmp_file_header;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1041 BITMAPINFO * bmp_info;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1042 void * bmp_data;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1043 int bmp_bits;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1044 Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1045
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1046 CHECK_MSGDI_DEVICE (device);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1047
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1048 assert (!NILP (data));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1049
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1050 TO_EXTERNAL_FORMAT (LISP_STRING, data,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1051 ALLOCA, (bytes, len),
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1052 Qbinary);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1053
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1054 /* Then slurp the image into memory, decoding along the way.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1055 The result is the image in a simple one-byte-per-pixel
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1056 format. */
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1057
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1058 bmp_file_header = (BITMAPFILEHEADER *)bytes;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1059 bmp_info = (BITMAPINFO *)(bytes + sizeof(BITMAPFILEHEADER));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1060 bmp_data = (Extbyte *)bytes + bmp_file_header->bfOffBits;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1061 bmp_bits = bmp_file_header->bfSize - bmp_file_header->bfOffBits;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1062
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1063 /* Now create the pixmap and set up the image instance */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1064 init_image_instance_from_dibitmap (ii, bmp_info, dest_mask,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1065 bmp_data, bmp_bits, 1, instantiator,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1066 0, 0, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1067 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1068
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1069
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1070 /**********************************************************************
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1071 * RESOURCES *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1072 **********************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1073
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1074 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1075 mswindows_resource_validate (Lisp_Object instantiator)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1076 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
1077 shared_resource_validate (instantiator);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1078 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1079
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1080 static Lisp_Object
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1081 mswindows_resource_normalize (Lisp_Object inst, Lisp_Object console_type,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1082 Lisp_Object dest_mask)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1083 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
1084 return shared_resource_normalize (inst, console_type, dest_mask,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
1085 Qmswindows_resource);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1086 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1087
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1088 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1089 mswindows_resource_possible_dest_types (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1090 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1091 return IMAGE_POINTER_MASK | IMAGE_COLOR_PIXMAP_MASK;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1092 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1093
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1094 typedef struct
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1095 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1096 CIntbyte *name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1097 int resource_id;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1098 } resource_t;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1099
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1100 static const resource_t bitmap_table[] =
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1101 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1102 /* bitmaps */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1103 { "close", OBM_CLOSE },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1104 { "uparrow", OBM_UPARROW },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1105 { "dnarrow", OBM_DNARROW },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1106 { "rgarrow", OBM_RGARROW },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1107 { "lfarrow", OBM_LFARROW },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1108 { "reduce", OBM_REDUCE },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1109 { "zoom", OBM_ZOOM },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1110 { "restore", OBM_RESTORE },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1111 { "reduced", OBM_REDUCED },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1112 { "zoomd", OBM_ZOOMD },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1113 { "restored", OBM_RESTORED },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1114 { "uparrowd", OBM_UPARROWD },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1115 { "dnarrowd", OBM_DNARROWD },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1116 { "rgarrowd", OBM_RGARROWD },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1117 { "lfarrowd", OBM_LFARROWD },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1118 { "mnarrow", OBM_MNARROW },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1119 { "combo", OBM_COMBO },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1120 { "uparrowi", OBM_UPARROWI },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1121 { "dnarrowi", OBM_DNARROWI },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1122 { "rgarrowi", OBM_RGARROWI },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1123 { "lfarrowi", OBM_LFARROWI },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1124 { "size", OBM_SIZE },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1125 { "btsize", OBM_BTSIZE },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1126 { "check", OBM_CHECK },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1127 { "checkboxes", OBM_CHECKBOXES },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1128 { "btncorners" , OBM_BTNCORNERS },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1129 {0}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1130 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1131
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1132 static const resource_t cursor_table[] =
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1133 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1134 /* cursors */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1135 { "normal", OCR_NORMAL },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1136 { "ibeam", OCR_IBEAM },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1137 { "wait", OCR_WAIT },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1138 { "cross", OCR_CROSS },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1139 { "up", OCR_UP },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1140 /* { "icon", OCR_ICON }, */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1141 { "sizenwse", OCR_SIZENWSE },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1142 { "sizenesw", OCR_SIZENESW },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1143 { "sizewe", OCR_SIZEWE },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1144 { "sizens", OCR_SIZENS },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1145 { "sizeall", OCR_SIZEALL },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1146 /* { "icour", OCR_ICOCUR }, */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1147 { "no", OCR_NO },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1148 { 0 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1149 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1150
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1151 static const resource_t icon_table[] =
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1152 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1153 /* icons */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1154 { "sample", OIC_SAMPLE },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1155 { "hand", OIC_HAND },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1156 { "ques", OIC_QUES },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1157 { "bang", OIC_BANG },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1158 { "note", OIC_NOTE },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1159 { "winlogo", OIC_WINLOGO },
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1160 {0}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1161 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1162
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1163 static int
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1164 resource_name_to_resource (Lisp_Object name, int type)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1165 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1166 const resource_t *res = (type == IMAGE_CURSOR ? cursor_table
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1167 : type == IMAGE_ICON ? icon_table
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1168 : bitmap_table);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1169
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1170 if (INTP (name))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1171 return XINT (name);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1172 else if (!STRINGP (name))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1173 invalid_argument ("invalid resource identifier", name);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1174
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1175 do
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1176 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1177 if (!qxestrcasecmp_i18n ((Intbyte *) res->name, XSTRING_DATA (name)))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1178 return res->resource_id;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1179 }
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1180 while ((++res)->name);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1181 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1182 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1183
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1184 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1185 resource_symbol_to_type (Lisp_Object data)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1186 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1187 if (EQ (data, Qcursor))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1188 return IMAGE_CURSOR;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1189 else if (EQ (data, Qicon))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1190 return IMAGE_ICON;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1191 else if (EQ (data, Qbitmap))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1192 return IMAGE_BITMAP;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1193 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1194 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1195 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1196
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1197 static void
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
1198 mswindows_resource_instantiate (Lisp_Object image_instance,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
1199 Lisp_Object instantiator,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
1200 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
1201 int dest_mask, Lisp_Object domain)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1202 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1203 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 611
diff changeset
1204 int type = 0;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1205 HANDLE himage = NULL;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1206 Extbyte *resid = 0;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1207 HINSTANCE hinst = NULL;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1208 ICONINFO iconinfo;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1209 enum image_instance_type iitype;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1210 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1211
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1212 Lisp_Object file = find_keyword_in_vector (instantiator, Q_file);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1213 Lisp_Object resource_type = find_keyword_in_vector (instantiator,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1214 Q_resource_type);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1215 Lisp_Object resource_id = find_keyword_in_vector (instantiator,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1216 Q_resource_id);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1217
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1218 xzero (iconinfo);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1219
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1220 CHECK_MSGDI_DEVICE (device);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1221
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1222 type = resource_symbol_to_type (resource_type);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1223
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1224 if (dest_mask & IMAGE_POINTER_MASK && type == IMAGE_CURSOR)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1225 iitype = IMAGE_POINTER;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1226 else if (dest_mask & IMAGE_COLOR_PIXMAP_MASK)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1227 iitype = IMAGE_COLOR_PIXMAP;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1228 else
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1229 incompatible_image_types (instantiator, dest_mask,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1230 IMAGE_COLOR_PIXMAP_MASK | IMAGE_POINTER_MASK);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1231
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1232 /* mess with the keyword info we were provided with */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1233 if (!NILP (file))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1234 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1235 Extbyte *fname;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1236
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1237 LOCAL_FILE_FORMAT_TO_TSTR (file, fname);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1238
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1239 if (NILP (resource_id))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1240 resid = fname;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1241 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1242 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1243 hinst = qxeLoadLibraryEx (fname, NULL, LOAD_LIBRARY_AS_DATAFILE);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1244 resid = MAKEINTRESOURCE (resource_name_to_resource (resource_id,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1245 type));
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1246
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1247 if (!resid)
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1248 LISP_STRING_TO_TSTR (resource_id, resid);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1249 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1250 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1251 else if (!(resid = MAKEINTRESOURCE (resource_name_to_resource (resource_id,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1252 type))))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
1253 invalid_argument ("Invalid resource identifier", resource_id);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1254
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1255 /* load the image */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1256 if (!(himage = qxeLoadImage (hinst, resid, type, 0, 0,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1257 LR_CREATEDIBSECTION | LR_DEFAULTSIZE |
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1258 LR_SHARED |
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1259 (!NILP (file) ? LR_LOADFROMFILE : 0))))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1260 signal_image_error ("Cannot load image", instantiator);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1261
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1262 if (hinst)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1263 FreeLibrary (hinst);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1264
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1265 mswindows_initialize_dibitmap_image_instance (ii, 1, iitype);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1266
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1267 IMAGE_INSTANCE_PIXMAP_FILENAME (ii) = file;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1268 IMAGE_INSTANCE_MSWINDOWS_BITMAP_REAL_WIDTH (ii) =
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1269 GetSystemMetrics (type == IMAGE_CURSOR ? SM_CXCURSOR : SM_CXICON);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1270 IMAGE_INSTANCE_MSWINDOWS_BITMAP_REAL_HEIGHT (ii) =
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1271 GetSystemMetrics (type == IMAGE_CURSOR ? SM_CYCURSOR : SM_CYICON);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1272 IMAGE_INSTANCE_PIXMAP_DEPTH (ii) = 1;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1273 init_image_instance_geometry (ii);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1274
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1275 /* hey, we've got an icon type thing so we can reverse engineer the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1276 bitmap and mask */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1277 if (type != IMAGE_BITMAP)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1278 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1279 GetIconInfo ((HICON)himage, &iconinfo);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1280 IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii) = iconinfo.hbmColor;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1281 IMAGE_INSTANCE_MSWINDOWS_MASK (ii) = iconinfo.hbmMask;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1282 XSETINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii), iconinfo.xHotspot);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1283 XSETINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii), iconinfo.yHotspot);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1284 IMAGE_INSTANCE_MSWINDOWS_ICON (ii) = (HICON) himage;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1285 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1286 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1287 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1288 IMAGE_INSTANCE_MSWINDOWS_ICON (ii) = NULL;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1289 IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii) = (HBITMAP) himage;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1290 IMAGE_INSTANCE_MSWINDOWS_MASK (ii) = NULL;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1291 XSETINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii), 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1292 XSETINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii), 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1293 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1294 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1295
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1296 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1297 check_valid_resource_symbol (Lisp_Object data)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1298 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1299 CHECK_SYMBOL (data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1300 if (!resource_symbol_to_type (data))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
1301 invalid_constant ("invalid resource type", data);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1302 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1303
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1304 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1305 check_valid_resource_id (Lisp_Object data)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1306 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1307 if (!resource_name_to_resource (data, IMAGE_CURSOR)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1308 &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1309 !resource_name_to_resource (data, IMAGE_ICON)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1310 &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1311 !resource_name_to_resource (data, IMAGE_BITMAP))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
1312 invalid_constant ("invalid resource identifier", data);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1313 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1314
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1315
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1316 /**********************************************************************
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1317 * XBM *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1318 **********************************************************************/
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1319
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1320 /* this table flips four bits around. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1321 static int flip_table[] =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1322 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1323 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1324 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1325
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1326 /* the bitmap data comes in the following format: Widths are padded to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1327 a multiple of 8. Scan lines are stored in increasing byte order
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1328 from left to right, little-endian within a byte. 0 = white, 1 =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1329 black. It must be converted to the following format: Widths are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1330 padded to a multiple of 16. Scan lines are stored in increasing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1331 byte order from left to right, big-endian within a byte. 0 =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1332 black, 1 = white. */
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
1333 static HBITMAP
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
1334 xbm_create_bitmap_from_data (HDC hdc, const UChar_Binary *data,
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 611
diff changeset
1335 int width, int height,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1336 int mask, COLORREF fg, COLORREF bg)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1337 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1338 int old_width = (width + 7)/8;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1339 int new_width = BPLINE (2 * ((width + 15)/16));
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
1340 const UChar_Binary *offset;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1341 void *bmp_buf = 0;
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
1342 UChar_Binary *new_data, *new_offset;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1343 int i, j;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1344 BITMAPINFO *bmp_info =
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1345 (BITMAPINFO *) xmalloc_and_zero (sizeof(BITMAPINFO) + sizeof(RGBQUAD));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1346 HBITMAP bitmap;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1347
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1348 if (!bmp_info)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1349 return NULL;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1350
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
1351 new_data = (UChar_Binary *) xmalloc_and_zero (height * new_width);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1352
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1353 if (!new_data)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1354 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1355 xfree (bmp_info);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1356 return NULL;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1357 }
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1358
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1359 for (i = 0; i < height; i++)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1360 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1361 offset = data + i * old_width;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1362 new_offset = new_data + i * new_width;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1363
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1364 for (j = 0; j < old_width; j++)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1365 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1366 int bite = offset[j];
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
1367 new_offset[j] = ~ (UChar_Binary)
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1368 ((flip_table[bite & 0xf] << 4) + flip_table[bite >> 4]);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1369 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1370 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1371
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1372 /* if we want a mask invert the bits */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1373 if (!mask)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1374 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1375 new_offset = &new_data[height * new_width];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1376 while (new_offset-- != new_data)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1377 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1378 *new_offset ^= 0xff;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1379 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1380 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1381
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1382 bmp_info->bmiHeader.biWidth = width;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1383 bmp_info->bmiHeader.biHeight=-(LONG)height;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1384 bmp_info->bmiHeader.biPlanes = 1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1385 bmp_info->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1386 bmp_info->bmiHeader.biBitCount = 1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1387 bmp_info->bmiHeader.biCompression = BI_RGB;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1388 bmp_info->bmiHeader.biClrUsed = 2;
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1389 bmp_info->bmiHeader.biClrImportant = 2;
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1390 bmp_info->bmiHeader.biSizeImage = height * new_width;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1391 bmp_info->bmiColors[0].rgbRed = GetRValue (fg);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1392 bmp_info->bmiColors[0].rgbGreen = GetGValue (fg);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1393 bmp_info->bmiColors[0].rgbBlue = GetBValue (fg);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1394 bmp_info->bmiColors[0].rgbReserved = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1395 bmp_info->bmiColors[1].rgbRed = GetRValue (bg);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1396 bmp_info->bmiColors[1].rgbGreen = GetGValue (bg);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1397 bmp_info->bmiColors[1].rgbBlue = GetBValue (bg);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1398 bmp_info->bmiColors[1].rgbReserved = 0;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1399
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1400 bitmap = CreateDIBSection (hdc,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1401 bmp_info,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1402 DIB_RGB_COLORS,
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1403 &bmp_buf,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1404 0,0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1405
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1406 xfree (bmp_info);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1407
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1408 if (!bitmap || !bmp_buf)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1409 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1410 xfree (new_data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1411 return NULL;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1412 }
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1413
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1414 /* copy in the actual bitmap */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1415 memcpy (bmp_buf, new_data, height * new_width);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1416 xfree (new_data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1417
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1418 return bitmap;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1419 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1420
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1421 /* Given inline data for a mono pixmap, initialize the given
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1422 image instance accordingly. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1423
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1424 static void
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1425 init_image_instance_from_xbm_inline (Lisp_Image_Instance *ii,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1426 int width, int height,
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
1427 const UChar_Binary *bits,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1428 Lisp_Object instantiator,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1429 Lisp_Object pointer_fg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1430 Lisp_Object pointer_bg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1431 int dest_mask,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1432 HBITMAP mask,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1433 Lisp_Object mask_filename)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1434 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1435 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1436 Lisp_Object foreground = find_keyword_in_vector (instantiator, Q_foreground);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1437 Lisp_Object background = find_keyword_in_vector (instantiator, Q_background);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1438 enum image_instance_type type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1439 COLORREF black = PALETTERGB (0,0,0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1440 COLORREF white = PALETTERGB (255,255,255);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1441 HDC hdc;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1443 CHECK_MSGDI_DEVICE (device);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1444
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1445 hdc = get_device_compdc (XDEVICE (device));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1446
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1447 if ((dest_mask & IMAGE_MONO_PIXMAP_MASK) &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1448 (dest_mask & IMAGE_COLOR_PIXMAP_MASK))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1449 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1450 if (!NILP (foreground) || !NILP (background))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1451 type = IMAGE_COLOR_PIXMAP;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1452 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1453 type = IMAGE_MONO_PIXMAP;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1454 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1455 else if (dest_mask & IMAGE_MONO_PIXMAP_MASK)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1456 type = IMAGE_MONO_PIXMAP;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1457 else if (dest_mask & IMAGE_COLOR_PIXMAP_MASK)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1458 type = IMAGE_COLOR_PIXMAP;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1459 else if (dest_mask & IMAGE_POINTER_MASK)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1460 type = IMAGE_POINTER;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1461 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1462 incompatible_image_types (instantiator, dest_mask,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1463 IMAGE_MONO_PIXMAP_MASK | IMAGE_COLOR_PIXMAP_MASK
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1464 | IMAGE_POINTER_MASK);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1465
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1466 mswindows_initialize_dibitmap_image_instance (ii, 1, type);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1467
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1468 IMAGE_INSTANCE_PIXMAP_FILENAME (ii) =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1469 find_keyword_in_vector (instantiator, Q_file);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1470 IMAGE_INSTANCE_MSWINDOWS_BITMAP_REAL_WIDTH (ii) = width;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1471 IMAGE_INSTANCE_MSWINDOWS_BITMAP_REAL_HEIGHT (ii) = height;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1472 IMAGE_INSTANCE_PIXMAP_DEPTH (ii) = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1473 XSETINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii), 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1474 XSETINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii), 0);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1475 init_image_instance_geometry (ii);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1476
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1477 IMAGE_INSTANCE_MSWINDOWS_MASK (ii) = mask ? mask :
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
1478 xbm_create_bitmap_from_data (hdc, bits, width, height, TRUE, black, white);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1479
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1480 switch (type)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1481 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1482 case IMAGE_MONO_PIXMAP:
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1483 IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii) =
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
1484 xbm_create_bitmap_from_data (hdc, bits, width, height,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1485 FALSE, black, black);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1486 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1487
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1488 case IMAGE_COLOR_PIXMAP:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1489 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1490 COLORREF fg = black;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1491 COLORREF bg = white;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1492
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1493 if (!NILP (foreground) && !COLOR_INSTANCEP (foreground))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1494 foreground =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1495 Fmake_color_instance (foreground, device,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1496 encode_error_behavior_flag (ERROR_ME));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1497
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1498 if (COLOR_INSTANCEP (foreground))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1499 fg = COLOR_INSTANCE_MSWINDOWS_COLOR (XCOLOR_INSTANCE (foreground));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1500
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1501 if (!NILP (background) && !COLOR_INSTANCEP (background))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1502 background =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1503 Fmake_color_instance (background, device,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1504 encode_error_behavior_flag (ERROR_ME));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1505
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1506 if (COLOR_INSTANCEP (background))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1507 bg = COLOR_INSTANCE_MSWINDOWS_COLOR (XCOLOR_INSTANCE (background));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1508
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1509 IMAGE_INSTANCE_PIXMAP_FG (ii) = foreground;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1510 IMAGE_INSTANCE_PIXMAP_BG (ii) = background;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1511
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1512 IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii) =
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
1513 xbm_create_bitmap_from_data (hdc, bits, width, height,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1514 FALSE, fg, black);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1515 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1516 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1517
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1518 case IMAGE_POINTER:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1519 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1520 COLORREF fg = black;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1521 COLORREF bg = white;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1522
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1523 if (NILP (foreground))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1524 foreground = pointer_fg;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1525 if (NILP (background))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1526 background = pointer_bg;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1527
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1528 IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii) =
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1529 find_keyword_in_vector (instantiator, Q_hotspot_x);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1530 IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii) =
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1531 find_keyword_in_vector (instantiator, Q_hotspot_y);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1532 IMAGE_INSTANCE_PIXMAP_FG (ii) = foreground;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1533 IMAGE_INSTANCE_PIXMAP_BG (ii) = background;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1534 if (COLOR_INSTANCEP (foreground))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1535 fg = COLOR_INSTANCE_MSWINDOWS_COLOR (XCOLOR_INSTANCE (foreground));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1536 if (COLOR_INSTANCEP (background))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1537 bg = COLOR_INSTANCE_MSWINDOWS_COLOR (XCOLOR_INSTANCE (background));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1538
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1539 IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii) =
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
1540 xbm_create_bitmap_from_data (hdc, bits, width, height,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1541 TRUE, fg, black);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1542 mswindows_initialize_image_instance_icon (ii, TRUE);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1543 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1544 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1545
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1546 default:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1547 abort ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1548 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1549 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1550
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1551 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1552 xbm_instantiate_1 (Lisp_Object image_instance, Lisp_Object instantiator,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1553 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1554 int dest_mask, int width, int height,
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
1555 const UChar_Binary *bits)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1556 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1557 Lisp_Object mask_data = find_keyword_in_vector (instantiator, Q_mask_data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1558 Lisp_Object mask_file = find_keyword_in_vector (instantiator, Q_mask_file);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1559 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1560 HDC hdc = get_device_compdc (XDEVICE (IMAGE_INSTANCE_DEVICE (ii)));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1561 HBITMAP mask = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1562
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1563 if (!NILP (mask_data))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1564 {
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
1565 UChar_Binary *ext_data;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1566
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1567 TO_EXTERNAL_FORMAT (LISP_STRING, XCAR (XCDR (XCDR (mask_data))),
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1568 C_STRING_ALLOCA, ext_data,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1569 Qbinary);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1570 mask = xbm_create_bitmap_from_data (hdc,
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
1571 ext_data,
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1572 XINT (XCAR (mask_data)),
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1573 XINT (XCAR (XCDR (mask_data))),
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1574 FALSE,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1575 PALETTERGB (0,0,0),
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1576 PALETTERGB (255,255,255));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1577 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1578
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1579 init_image_instance_from_xbm_inline (ii, width, height, bits,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1580 instantiator, pointer_fg, pointer_bg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1581 dest_mask, mask, mask_file);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1582 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1583
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1584 /* Instantiate method for XBM's. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1585
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1586 static void
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1587 mswindows_xbm_instantiate (Lisp_Object image_instance,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1588 Lisp_Object instantiator,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1589 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1590 int dest_mask, Lisp_Object domain)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1591 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1592 Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
1593 const UChar_Binary *ext_data;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1594
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1595 assert (!NILP (data));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1596
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1597 TO_EXTERNAL_FORMAT (LISP_STRING, XCAR (XCDR (XCDR (data))),
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1598 C_STRING_ALLOCA, ext_data,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1599 Qbinary);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1600
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1601 xbm_instantiate_1 (image_instance, instantiator, pointer_fg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1602 pointer_bg, dest_mask, XINT (XCAR (data)),
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1603 XINT (XCAR (XCDR (data))), ext_data);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1604 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1605
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1606 #ifdef HAVE_XFACE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1607 /**********************************************************************
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1608 * X-Face *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1609 **********************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1610 #if defined(EXTERN)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1611 /* This is about to get redefined! */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1612 #undef EXTERN
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1613 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1614 /* We have to define SYSV32 so that compface.h includes string.h
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1615 instead of strings.h. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1616 #define SYSV32
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1617 #ifdef __cplusplus
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1618 extern "C" {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1619 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1620 #include <compface.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1621 #ifdef __cplusplus
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1622 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1623 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1624 /* JMP_BUF cannot be used here because if it doesn't get defined
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1625 to jmp_buf we end up with a conflicting type error with the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1626 definition in compface.h */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1627 extern jmp_buf comp_env;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1628 #undef SYSV32
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1629
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1630 static void
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
1631 mswindows_xface_instantiate (Lisp_Object image_instance,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
1632 Lisp_Object instantiator,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1633 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1634 int dest_mask, Lisp_Object domain)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1635 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1636 Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1637 int i, stattis;
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
1638 UChar_Binary *p, *bits, *bp;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1639 const CIntbyte * volatile emsg = 0;
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
1640 const UChar_Binary * volatile dstring;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1641
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1642 assert (!NILP (data));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1643
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1644 TO_EXTERNAL_FORMAT (LISP_STRING, data,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1645 C_STRING_ALLOCA, dstring,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1646 Qbinary);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1647
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
1648 if ((p = (UChar_Binary *) strchr ((char *) dstring, ':')))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1649 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1650 dstring = p + 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1651 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1652
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1653 /* Must use setjmp not SETJMP because we used jmp_buf above not JMP_BUF */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1654 if (!(stattis = setjmp (comp_env)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1655 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1656 UnCompAll ((char *) dstring);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1657 UnGenFace ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1658 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1659
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1660 switch (stattis)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1661 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1662 case -2:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1663 emsg = "uncompface: internal error";
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1664 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1665 case -1:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1666 emsg = "uncompface: insufficient or invalid data";
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1667 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1668 case 1:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1669 emsg = "uncompface: excess data ignored";
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1670 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1671 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1672
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1673 if (emsg)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
1674 signal_image_error_2 (emsg, data, Qimage);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1675
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
1676 bp = bits = (UChar_Binary *) alloca (PIXELS / 8);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1677
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1678 /* the compface library exports char F[], which uses a single byte per
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1679 pixel to represent a 48x48 bitmap. Yuck. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1680 for (i = 0, p = F; i < (PIXELS / 8); ++i)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1681 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1682 int n, b;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1683 /* reverse the bit order of each byte... */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1684 for (b = n = 0; b < 8; ++b)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1685 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1686 n |= ((*p++) << b);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1687 }
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 563
diff changeset
1688 *bp++ = (UChar_Binary) n;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1689 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1690
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1691 xbm_instantiate_1 (image_instance, instantiator, pointer_fg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1692 pointer_bg, dest_mask, 48, 48, bits);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1693 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1694 #endif /* HAVE_XFACE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1695
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1696
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1697 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1698 /* image instance methods */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1699 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1700
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1701 static void
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1702 mswindows_print_image_instance (Lisp_Image_Instance *p,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1703 Lisp_Object printcharfun,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1704 int escapeflag)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1705 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1706 char buf[100];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1707
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1708 switch (IMAGE_INSTANCE_TYPE (p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1709 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1710 case IMAGE_MONO_PIXMAP:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1711 case IMAGE_COLOR_PIXMAP:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1712 case IMAGE_POINTER:
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1713 sprintf (buf, " (0x%lx",
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1714 (unsigned long) IMAGE_INSTANCE_MSWINDOWS_BITMAP (p));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1715 write_c_string (buf, printcharfun);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1716 if (IMAGE_INSTANCE_MSWINDOWS_MASK (p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1717 {
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1718 sprintf (buf, "/0x%lx",
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1719 (unsigned long) IMAGE_INSTANCE_MSWINDOWS_MASK (p));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1720 write_c_string (buf, printcharfun);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1721 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1722 write_c_string (")", printcharfun);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1723 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1724
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1725 default:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1726 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1727 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1728 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1729
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1730 #ifdef DEBUG_WIDGETS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1731 extern int debug_widget_instances;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1732 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1733
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1734 static void
611
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 608
diff changeset
1735 finalize_destroy_window (void *win)
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 608
diff changeset
1736 {
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 608
diff changeset
1737 DestroyWindow ((HWND) win);
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 608
diff changeset
1738 }
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 608
diff changeset
1739
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 608
diff changeset
1740 static void
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1741 mswindows_finalize_image_instance (Lisp_Image_Instance *p)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1742 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1743 if (!p->data)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1744 return;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1745
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1746 if (DEVICE_LIVE_P (XDEVICE (IMAGE_INSTANCE_DEVICE (p))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1747 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1748 if (image_instance_type_to_mask (IMAGE_INSTANCE_TYPE (p))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1749 & (IMAGE_WIDGET_MASK | IMAGE_SUBWINDOW_MASK))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1750 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1751 #ifdef DEBUG_WIDGETS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1752 debug_widget_instances--;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1753 stderr_out ("widget destroyed, %d left\n", debug_widget_instances);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1754 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1755 if (IMAGE_INSTANCE_SUBWINDOW_ID (p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1756 {
611
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 608
diff changeset
1757 /* DestroyWindow is not safe here, as it will send messages
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 608
diff changeset
1758 to our window proc. */
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 608
diff changeset
1759 register_post_gc_action
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 608
diff changeset
1760 (finalize_destroy_window,
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 608
diff changeset
1761 (void *) (WIDGET_INSTANCE_MSWINDOWS_HANDLE (p)));
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 608
diff changeset
1762 register_post_gc_action
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 608
diff changeset
1763 (finalize_destroy_window,
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 608
diff changeset
1764 (void *) (IMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW (p)));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1765 IMAGE_INSTANCE_SUBWINDOW_ID (p) = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1766 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1767 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1768 else if (p->data)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1769 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1770 int i;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1771 if (IMAGE_INSTANCE_PIXMAP_TIMEOUT (p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1772 disable_glyph_animated_timeout (IMAGE_INSTANCE_PIXMAP_TIMEOUT (p));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1773
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1774 if (IMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICES (p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1775 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1776 for (i = 0; i < IMAGE_INSTANCE_PIXMAP_MAXSLICE (p); i++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1777 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1778 if (IMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICE (p, i))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1779 DeleteObject (IMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICE (p, i));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1780 IMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICE (p, i) = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1781 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1782 xfree (IMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICES (p));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1783 IMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICES (p) = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1784 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1785 if (IMAGE_INSTANCE_MSWINDOWS_MASK (p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1786 DeleteObject (IMAGE_INSTANCE_MSWINDOWS_MASK (p));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1787 IMAGE_INSTANCE_MSWINDOWS_MASK (p) = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1788 if (IMAGE_INSTANCE_MSWINDOWS_ICON (p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1789 DestroyIcon (IMAGE_INSTANCE_MSWINDOWS_ICON (p));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1790 IMAGE_INSTANCE_MSWINDOWS_ICON (p) = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1791 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1792 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1793
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1794 if (p->data)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1795 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1796 xfree (p->data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1797 p->data = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1798 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1799 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1800
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1801 /************************************************************************/
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1802 /* subwindow and widget support */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1803 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1804
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1805 static Lisp_Object
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1806 charset_of_text (Lisp_Object text)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1807 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1808 #ifdef MULE
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1809 Intbyte *p;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1810
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1811 if (NILP (text))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1812 return Vcharset_ascii;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1813 for (p = XSTRING_DATA (text); *p;)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1814 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1815 Emchar c = charptr_emchar (p);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1816 if (!EQ (CHAR_CHARSET (c), Vcharset_ascii))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1817 return CHAR_CHARSET (c);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1818 INC_CHARPTR (p);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1819 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1820 #endif /* MULE */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1821
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1822 return Vcharset_ascii;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1823 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1824
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1825
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1826 static HFONT
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1827 mswindows_widget_hfont (Lisp_Object face,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1828 Lisp_Object domain,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1829 Lisp_Object text)
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1830 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1831 int under = FACE_UNDERLINE_P (face, domain);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1832 int strike = FACE_STRIKETHRU_P (face, domain);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1833 Lisp_Object font;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1834 struct face_cachel frame_cachel;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1835 struct face_cachel *cachel;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1836 Lisp_Object charset;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1837
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1838 reset_face_cachel (&frame_cachel);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1839 update_face_cachel_data (&frame_cachel, domain, face);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1840 cachel = &frame_cachel;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1841 /* !!#### This is a big hack. We return the first non-ASCII charset in
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1842 the string, on the assumption that we can display ASCII characters in
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1843 all fonts. We really need to draw the text of the widget ourselves;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1844 or perhaps there are fonts supporting lots of character sets? */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1845 charset = charset_of_text (text);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1846
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1847 font = FACE_CACHEL_FONT (cachel, charset);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1848
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1849 if (!FONT_INSTANCEP (font))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1850 font = ensure_face_cachel_contains_charset (cachel, domain, charset);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1851
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1852 if (EQ (font, Vthe_null_font_instance))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1853 font = FACE_CACHEL_FONT (cachel, Vcharset_ascii);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1854
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1855 return mswindows_get_hfont (XFONT_INSTANCE (font), under, strike);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1856 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1857
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1858 static HDWP
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1859 begin_defer_window_pos (struct frame *f)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1860 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1861 #ifdef DEFER_WINDOW_POS
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1862 if (FRAME_MSWINDOWS_DATA (f)->hdwp == 0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1863 FRAME_MSWINDOWS_DATA (f)->hdwp = BeginDeferWindowPos (10);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1864 #endif
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1865 return FRAME_MSWINDOWS_DATA (f)->hdwp;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1866 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1867
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1868 /* unmap the image if it is a widget. This is used by redisplay via
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1869 redisplay_unmap_subwindows */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1870 static void
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1871 mswindows_unmap_subwindow (Lisp_Image_Instance *p)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1872 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1873 if (IMAGE_INSTANCE_SUBWINDOW_ID (p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1874 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1875 #ifdef DEFER_WINDOW_POS
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1876 struct frame *f = XFRAME (IMAGE_INSTANCE_FRAME (p));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1877 HDWP hdwp = begin_defer_window_pos (f);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1878 HDWP new_hdwp;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1879 new_hdwp = DeferWindowPos (hdwp, IMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW (p),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1880 NULL,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1881 0, 0, 0, 0,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1882 SWP_HIDEWINDOW | SWP_NOACTIVATE |
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1883 SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1884 /* Setting this flag causes the call to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1885 DeferWindowPos to fail with
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1886 "Invalid parameter". I don't understand
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1887 why we bother to try and set this
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1888 anyway. -- ben */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1889 /* | SWP_NOSENDCHANGING */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1890 );
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1891 if (!new_hdwp)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1892 mswindows_output_last_error ("unmapping");
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1893 else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1894 hdwp = new_hdwp;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1895 FRAME_MSWINDOWS_DATA (f)->hdwp = hdwp;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1896 #else
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1897 SetWindowPos (IMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW (p),
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1898 NULL,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1899 0, 0, 0, 0,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1900 SWP_HIDEWINDOW | SWP_NOACTIVATE |
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1901 SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER );
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1902 #endif
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1903 if (GetFocus() == WIDGET_INSTANCE_MSWINDOWS_HANDLE (p))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1904 SetFocus (GetParent (IMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW (p)));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1905 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1906 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1907
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1908 /* map the subwindow. This is used by redisplay via
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1909 redisplay_output_subwindow */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1910 static void
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1911 mswindows_map_subwindow (Lisp_Image_Instance *p, int x, int y,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1912 struct display_glyph_area *dga)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1913 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1914 #ifdef DEFER_WINDOW_POS
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1915 struct frame *f = XFRAME (IMAGE_INSTANCE_FRAME (p));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1916 HDWP hdwp = begin_defer_window_pos (f);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1917 HDWP new_hdwp;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1918 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1919 /* move the window before mapping it ... */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1920 SetWindowPos (IMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW (p),
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1921 NULL,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1922 x, y, dga->width, dga->height,
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1923 SWP_NOZORDER
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1924 | SWP_NOCOPYBITS | SWP_NOSENDCHANGING);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1925 /* ... adjust the child ... */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1926 SetWindowPos (WIDGET_INSTANCE_MSWINDOWS_HANDLE (p),
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1927 NULL,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1928 -dga->xoffset, -dga->yoffset, 0, 0,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1929 SWP_NOZORDER | SWP_NOSIZE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1930 | SWP_NOCOPYBITS | SWP_NOSENDCHANGING);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1931 /* ... now map it - we are not allowed to move it at the same time. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1932 if (!IMAGE_INSTANCE_SUBWINDOW_DISPLAYEDP (p))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1933 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1934 #ifdef DEFER_WINDOW_POS
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1935 new_hdwp = DeferWindowPos
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1936 (hdwp,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1937 IMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW (p),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1938 NULL, 0, 0, 0, 0,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1939 SWP_NOZORDER | SWP_NOSIZE | SWP_NOMOVE
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1940 | SWP_SHOWWINDOW
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1941 /* | SWP_NOCOPYBITS */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1942 /* Setting this flag causes the call to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1943 DeferWindowPos to fail with
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1944 "Invalid parameter". I don't understand
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1945 why we bother to try and set this
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1946 anyway. -- ben */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1947 /* | SWP_NOSENDCHANGING */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1948 | SWP_NOACTIVATE);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1949 if (!new_hdwp)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1950 mswindows_output_last_error ("mapping");
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1951 else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1952 hdwp = new_hdwp;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1953 FRAME_MSWINDOWS_DATA (f)->hdwp = hdwp;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1954 #else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1955 SetWindowPos (IMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW (p),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1956 NULL,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1957 0, 0, 0, 0,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1958 SWP_NOZORDER | SWP_NOSIZE | SWP_NOMOVE
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1959 | SWP_SHOWWINDOW | SWP_NOCOPYBITS | SWP_NOACTIVATE);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1960 #endif
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1961 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1962 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1963
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1964 /* resize the subwindow instance */
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
1965 static void
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1966 mswindows_resize_subwindow (Lisp_Image_Instance *ii, int w, int h)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1967 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1968 /* Set the size of the control .... */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1969 if (!SetWindowPos (WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1970 NULL,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1971 0, 0, w, h,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1972 SWP_NOZORDER | SWP_NOMOVE
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1973 | SWP_NOCOPYBITS | SWP_NOSENDCHANGING))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1974 mswindows_output_last_error ("resizing");
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1975 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1976
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1977 /* Simply resize the window here. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1978 static void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1979 mswindows_redisplay_subwindow (Lisp_Image_Instance *p)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1980 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1981 mswindows_resize_subwindow (p,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1982 IMAGE_INSTANCE_WIDTH (p),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1983 IMAGE_INSTANCE_HEIGHT (p));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1984 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1985
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1986 /* when you click on a widget you may activate another widget this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1987 needs to be checked and all appropriate widgets updated */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1988 static void
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1989 mswindows_redisplay_widget (Lisp_Image_Instance *p)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1990 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1991 /* Possibly update the face font and colors. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1992 if (!NILP (IMAGE_INSTANCE_WIDGET_TEXT (p))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1993 && (IMAGE_INSTANCE_WIDGET_FACE_CHANGED (p)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1994 || XFRAME (IMAGE_INSTANCE_FRAME (p))->faces_changed
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1995 || IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (p)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1996 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1997 /* set the widget font from the widget face */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1998 qxeSendMessage (WIDGET_INSTANCE_MSWINDOWS_HANDLE (p),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1999 WM_SETFONT,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2000 (WPARAM) mswindows_widget_hfont
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2001 (IMAGE_INSTANCE_WIDGET_FACE (p),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2002 IMAGE_INSTANCE_FRAME (p),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2003 IMAGE_INSTANCE_WIDGET_TEXT (p)),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2004 MAKELPARAM (TRUE, 0));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2005 }
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2006 /* Possibly update the dimensions. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2007 if (IMAGE_INSTANCE_SIZE_CHANGED (p))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2008 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2009 mswindows_resize_subwindow (p,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2010 IMAGE_INSTANCE_WIDTH (p),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2011 IMAGE_INSTANCE_HEIGHT (p));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2012 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2013 /* Possibly update the text in the widget. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2014 if (IMAGE_INSTANCE_TEXT_CHANGED (p)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2015 && !NILP (IMAGE_INSTANCE_WIDGET_TEXT (p)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2016 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2017 Extbyte *lparam = 0;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2018 LISP_STRING_TO_TSTR (IMAGE_INSTANCE_WIDGET_TEXT (p), lparam);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2019 qxeSendMessage (WIDGET_INSTANCE_MSWINDOWS_HANDLE (p),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2020 WM_SETTEXT, 0, (LPARAM) lparam);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2021 }
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 444
diff changeset
2022 /* Set active state. */
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 444
diff changeset
2023 if (IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (p))
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 444
diff changeset
2024 {
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 444
diff changeset
2025 Lisp_Object item = IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (p);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2026 LONG style = qxeGetWindowLong
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 444
diff changeset
2027 (WIDGET_INSTANCE_MSWINDOWS_HANDLE (p),
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 444
diff changeset
2028 GWL_STYLE);
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 444
diff changeset
2029
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 444
diff changeset
2030 if (CONSP (item))
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 444
diff changeset
2031 item = XCAR (item);
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 444
diff changeset
2032
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 444
diff changeset
2033 if (gui_item_active_p (item))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2034 qxeSetWindowLong (WIDGET_INSTANCE_MSWINDOWS_HANDLE (p),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2035 GWL_STYLE, style & ~WS_DISABLED);
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 444
diff changeset
2036 else
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2037 qxeSetWindowLong (WIDGET_INSTANCE_MSWINDOWS_HANDLE (p),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2038 GWL_STYLE, style | WS_DISABLED);
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 444
diff changeset
2039 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2040 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2041
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2042 #ifdef HAVE_WIDGETS
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2043
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2044 /* register widgets into our hashtable so that we can cope with the
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2045 callbacks. The hashtable is weak so deregistration is handled
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2046 automatically */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2047 static int
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2048 mswindows_register_gui_item (Lisp_Object image_instance,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2049 Lisp_Object gui, Lisp_Object domain)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2050 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2051 Lisp_Object frame = DOMAIN_FRAME (domain);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2052 struct frame *f = XFRAME (frame);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2053 int id = gui_item_id_hash (FRAME_MSWINDOWS_WIDGET_HASH_TABLE2 (f),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2054 gui,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2055 WIDGET_GLYPH_SLOT);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2056 Fputhash (make_int (id), image_instance,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2057 FRAME_MSWINDOWS_WIDGET_HASH_TABLE1 (f));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2058 Fputhash (make_int (id), XGUI_ITEM (gui)->callback,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2059 FRAME_MSWINDOWS_WIDGET_HASH_TABLE2 (f));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2060 Fputhash (make_int (id), XGUI_ITEM (gui)->callback_ex,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2061 FRAME_MSWINDOWS_WIDGET_HASH_TABLE3 (f));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2062 return id;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2063 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2064
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2065 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2066 mswindows_register_widget_instance (Lisp_Object instance, Lisp_Object domain)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2067 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2068 return mswindows_register_gui_item (instance,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2069 XIMAGE_INSTANCE_WIDGET_ITEM (instance),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2070 domain);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2071 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2072
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2073 static void
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2074 mswindows_subwindow_instantiate (Lisp_Object image_instance,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2075 Lisp_Object instantiator,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2076 Lisp_Object pointer_fg,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2077 Lisp_Object pointer_bg,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2078 int dest_mask, Lisp_Object domain)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2079 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2080 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2081 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2082 Lisp_Object frame = DOMAIN_FRAME (domain);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2083 HWND wnd;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2084
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2085 CHECK_MSWINDOWS_DEVICE (device);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2086
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2087 /* have to set the type this late in case there is no device
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2088 instantiation for a widget */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2089 IMAGE_INSTANCE_TYPE (ii) = IMAGE_SUBWINDOW;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2090 /* Allocate space for the clip window */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2091 ii->data = xnew_and_zero (struct mswindows_subwindow_data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2092
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2093 if ((IMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW (ii)
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2094 = qxeCreateWindowEx (
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2095 0, /* EX flags */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2096 XETEXT (XEMACS_CONTROL_CLASS),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2097 0, /* text */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2098 WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_CHILD,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2099 0, /* starting x position */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2100 0, /* starting y position */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2101 IMAGE_INSTANCE_WIDGET_WIDTH (ii),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2102 IMAGE_INSTANCE_WIDGET_HEIGHT (ii),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2103 /* parent window */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2104 FRAME_MSWINDOWS_HANDLE (XFRAME (frame)),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2105 NULL, /* No menu */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2106 NULL, /* must be null for this class */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2107 NULL)) == NULL)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
2108 gui_error ("window creation failed with code",
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
2109 make_int (GetLastError()));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2110
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2111 wnd = qxeCreateWindow (XETEXT ("STATIC"), XETEXT (""),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2112 WS_CHILD,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2113 0, /* starting x position */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2114 0, /* starting y position */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2115 IMAGE_INSTANCE_WIDGET_WIDTH (ii),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2116 IMAGE_INSTANCE_WIDGET_HEIGHT (ii),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2117 IMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW (ii),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2118 0,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2119 (HINSTANCE)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2120 qxeGetWindowLong
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2121 (FRAME_MSWINDOWS_HANDLE (XFRAME (frame)),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2122 GWL_HINSTANCE),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2123 NULL);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2124
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2125 qxeSetWindowLong (wnd, GWL_USERDATA, (LONG)LISP_TO_VOID(image_instance));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2126 IMAGE_INSTANCE_SUBWINDOW_ID (ii) = wnd;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2127 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2128
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2129 #endif /* HAVE_WIDGETS */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2130
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2131 static int
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2132 mswindows_image_instance_equal (Lisp_Image_Instance *p1,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2133 Lisp_Image_Instance *p2, int depth)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2134 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2135 switch (IMAGE_INSTANCE_TYPE (p1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2136 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2137 case IMAGE_MONO_PIXMAP:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2138 case IMAGE_COLOR_PIXMAP:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2139 case IMAGE_POINTER:
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2140 if (IMAGE_INSTANCE_MSWINDOWS_BITMAP (p1)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2141 != IMAGE_INSTANCE_MSWINDOWS_BITMAP (p2))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2142 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2143 break;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2144
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2145 default:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2146 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2147 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2148
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2149 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2150 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2151
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2152 static Hashcode
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2153 mswindows_image_instance_hash (Lisp_Image_Instance *p, int depth)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2154 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2155 switch (IMAGE_INSTANCE_TYPE (p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2156 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2157 case IMAGE_MONO_PIXMAP:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2158 case IMAGE_COLOR_PIXMAP:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2159 case IMAGE_POINTER:
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2160 return (Hashcode) IMAGE_INSTANCE_MSWINDOWS_BITMAP (p);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2161
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2162 default:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2163 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2164 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2165 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2166
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2167 /* Set all the slots in an image instance structure to reasonable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2168 default values. This is used somewhere within an instantiate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2169 method. It is assumed that the device slot within the image
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2170 instance is already set -- this is the case when instantiate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2171 methods are called. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2172
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2173 static void
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2174 mswindows_initialize_dibitmap_image_instance (Lisp_Image_Instance *ii,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2175 int slices,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2176 enum image_instance_type type)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2177 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2178 ii->data = xnew_and_zero (struct mswindows_image_instance_data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2179 IMAGE_INSTANCE_TYPE (ii) = type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2180 IMAGE_INSTANCE_PIXMAP_FILENAME (ii) = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2181 IMAGE_INSTANCE_PIXMAP_MASK_FILENAME (ii) = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2182 IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii) = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2183 IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii) = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2184 IMAGE_INSTANCE_PIXMAP_FG (ii) = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2185 IMAGE_INSTANCE_PIXMAP_BG (ii) = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2186 IMAGE_INSTANCE_PIXMAP_MAXSLICE (ii) = slices;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2187 IMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICES (ii) =
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2188 xnew_array_and_zero (HBITMAP, slices);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2189 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2190
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2191
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2192 #ifdef HAVE_WIDGETS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2193
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2194 /************************************************************************/
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2195 /* widgets */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2196 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2197 static void
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2198 mswindows_widget_instantiate (Lisp_Object image_instance,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2199 Lisp_Object instantiator,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2200 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2201 int dest_mask, Lisp_Object domain,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2202 const CIntbyte *class, int flags, int exflags)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2203 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2204 /* this function can call lisp */
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2205 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2206 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii), style;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2207 Lisp_Object frame = DOMAIN_FRAME (domain);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2208 Extbyte *nm = 0;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2209 Extbyte *classext;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2210 HWND wnd;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2211 int id = 0xffff;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2212 Lisp_Object gui = IMAGE_INSTANCE_WIDGET_ITEM (ii);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2213 Lisp_Gui_Item *pgui = XGUI_ITEM (gui);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2214
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2215 CHECK_MSWINDOWS_DEVICE (device);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2216
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2217 if (!gui_item_active_p (gui))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2218 flags |= WS_DISABLED;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2219
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2220 style = pgui->style;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2221
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2222 if (!NILP (pgui->callback) || !NILP (pgui->callback_ex))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2223 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2224 id = mswindows_register_widget_instance (image_instance, domain);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2225 }
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2226
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2227 if (!NILP (IMAGE_INSTANCE_WIDGET_TEXT (ii)))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2228 LISP_STRING_TO_TSTR (IMAGE_INSTANCE_WIDGET_TEXT (ii), nm);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2229
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2230 /* allocate space for the clip window and then allocate the clip window */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2231 ii->data = xnew_and_zero (struct mswindows_subwindow_data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2232
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2233 if ((IMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW (ii)
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2234 = qxeCreateWindowEx (WS_EX_CONTROLPARENT, /* EX flags */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2235 XETEXT (XEMACS_CONTROL_CLASS),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2236 0, /* text */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2237 WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_CHILD,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2238 0, /* starting x position */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2239 0, /* starting y position */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2240 IMAGE_INSTANCE_WIDGET_WIDTH (ii),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2241 IMAGE_INSTANCE_WIDGET_HEIGHT (ii),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2242 /* parent window */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2243 DOMAIN_MSWINDOWS_HANDLE (domain),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2244 (HMENU)id, /* No menu */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2245 NULL, /* must be null for this class */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2246 NULL)) == NULL)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
2247 gui_error ("window creation failed with code",
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
2248 make_int (GetLastError()));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2249
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2250 C_STRING_TO_TSTR (class, classext);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2251
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2252 if ((wnd = qxeCreateWindowEx (exflags /* | WS_EX_NOPARENTNOTIFY*/,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2253 classext,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2254 nm,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2255 flags | WS_CHILD | WS_VISIBLE,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2256 0, /* starting x position */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2257 0, /* starting y position */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2258 IMAGE_INSTANCE_WIDGET_WIDTH (ii),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2259 IMAGE_INSTANCE_WIDGET_HEIGHT (ii),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2260 /* parent window */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2261 IMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW (ii),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2262 (HMENU)id, /* No menu */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2263 (HINSTANCE)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2264 qxeGetWindowLong
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2265 (FRAME_MSWINDOWS_HANDLE (XFRAME (frame)),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2266 GWL_HINSTANCE),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2267 NULL)) == NULL)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2268 gui_error ("window creation failed with code",
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2269 make_int (GetLastError()));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2270
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2271 IMAGE_INSTANCE_SUBWINDOW_ID (ii) = wnd;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2272 qxeSetWindowLong (wnd, GWL_USERDATA, (LONG)LISP_TO_VOID(image_instance));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2273 /* set the widget font from the widget face */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2274 if (!NILP (IMAGE_INSTANCE_WIDGET_TEXT (ii)))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2275 qxeSendMessage (wnd, WM_SETFONT,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2276 (WPARAM) mswindows_widget_hfont
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2277 (IMAGE_INSTANCE_WIDGET_FACE (ii), domain,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2278 IMAGE_INSTANCE_WIDGET_TEXT (ii)),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2279 MAKELPARAM (TRUE, 0));
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2280 #if 0
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2281 /* #### doesn't work. need to investigate more closely. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2282 if (IMAGE_INSTANCE_WANTS_INITIAL_FOCUS (ii))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2283 SetFocus (wnd);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2284 #endif
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2285 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2286
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2287 /* Instantiate a native layout widget. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2288 static void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2289 mswindows_native_layout_instantiate (Lisp_Object image_instance,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2290 Lisp_Object instantiator,
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2291 Lisp_Object pointer_fg,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2292 Lisp_Object pointer_bg,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2293 int dest_mask, Lisp_Object domain)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2294 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2295 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2296
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2297 mswindows_widget_instantiate (image_instance, instantiator, pointer_fg,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2298 pointer_bg, dest_mask, domain, "STATIC",
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2299 /* Approximation to styles available with
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2300 an XEmacs layout. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2301 (EQ (IMAGE_INSTANCE_LAYOUT_BORDER (ii),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2302 Qetched_in) ||
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2303 EQ (IMAGE_INSTANCE_LAYOUT_BORDER (ii),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2304 Qetched_out) ||
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2305 GLYPHP (IMAGE_INSTANCE_LAYOUT_BORDER (ii))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2306 ? SS_ETCHEDFRAME : SS_SUNKEN) | DS_CONTROL,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2307 0);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2308 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2309
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2310 /* Instantiate a button widget. Unfortunately instantiated widgets are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2311 particular to a frame since they need to have a parent. It's not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2312 like images where you just select the image into the context you
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2313 want to display it in and BitBlt it. So image instances can have a
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2314 many-to-one relationship with things you see, whereas widgets can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2315 only be one-to-one (i.e. per frame) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2316 static void
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2317 mswindows_button_instantiate (Lisp_Object image_instance,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2318 Lisp_Object instantiator,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2319 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2320 int dest_mask, Lisp_Object domain)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2321 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2322 /* This function can call lisp */
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2323 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2324 HWND wnd;
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2325 int flags = WS_TABSTOP | BS_NOTIFY;
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2326 /* BS_NOTIFY #### is needed to get exotic feedback only. Since we
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2327 seem to want nothing beyond BN_CLICK, the style is perhaps not
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2328 necessary -- kkm */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2329 Lisp_Object style;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2330 Lisp_Object gui = IMAGE_INSTANCE_WIDGET_ITEM (ii);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2331 Lisp_Gui_Item *pgui = XGUI_ITEM (gui);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2332 Lisp_Object glyph = find_keyword_in_vector (instantiator, Q_image);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2333
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2334 if (!NILP (glyph))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2335 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2336 if (!IMAGE_INSTANCEP (glyph))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2337 glyph = glyph_image_instance (glyph, domain, ERROR_ME, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2338
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2339 if (IMAGE_INSTANCEP (glyph))
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2340 flags |= XIMAGE_INSTANCE_MSWINDOWS_BITMAP (glyph) ?
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2341 BS_BITMAP : BS_ICON;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2342 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2343
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2344 style = pgui->style;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2345
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2346 /* #### consider using the default face for radio and toggle
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2347 buttons. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2348 if (EQ (style, Qradio))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2349 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2350 flags |= BS_RADIOBUTTON;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2351 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2352 else if (EQ (style, Qtoggle))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2353 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2354 flags |= BS_AUTOCHECKBOX;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2355 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2356 else
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2357 {
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2358 flags |= BS_DEFPUSHBUTTON;
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2359 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2360
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2361 mswindows_widget_instantiate (image_instance, instantiator, pointer_fg,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2362 pointer_bg, dest_mask, domain,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2363 "BUTTON", flags, 0);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2364
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2365 wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2366 /* set the checked state */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2367 if (gui_item_selected_p (gui))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2368 qxeSendMessage (wnd, BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2369 else
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2370 qxeSendMessage (wnd, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2371 /* add the image if one was given */
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2372 if (!NILP (glyph) && IMAGE_INSTANCEP (glyph)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2373 &&
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2374 IMAGE_INSTANCE_PIXMAP_TYPE_P (XIMAGE_INSTANCE (glyph)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2375 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2376 qxeSendMessage (wnd, BM_SETIMAGE,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2377 (WPARAM) (XIMAGE_INSTANCE_MSWINDOWS_BITMAP (glyph) ?
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2378 IMAGE_BITMAP : IMAGE_ICON),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2379 (XIMAGE_INSTANCE_MSWINDOWS_BITMAP (glyph) ?
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2380 (LPARAM) XIMAGE_INSTANCE_MSWINDOWS_BITMAP (glyph) :
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2381 (LPARAM) XIMAGE_INSTANCE_MSWINDOWS_ICON (glyph)));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2382 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2383 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2384
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2385 /* Update the state of a button. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2386 static void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2387 mswindows_button_redisplay (Lisp_Object image_instance)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2388 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2389 /* This function can GC if IN_REDISPLAY is false. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2390 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2391
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2392 /* buttons checked or otherwise */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2393 if (gui_item_selected_p (IMAGE_INSTANCE_WIDGET_ITEM (ii)))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2394 qxeSendMessage (WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2395 BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2396 else
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2397 qxeSendMessage (WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2398 BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2399 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2400
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2401 /* instantiate an edit control */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2402 static void
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2403 mswindows_edit_field_instantiate (Lisp_Object image_instance,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2404 Lisp_Object instantiator,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2405 Lisp_Object pointer_fg,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2406 Lisp_Object pointer_bg,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2407 int dest_mask, Lisp_Object domain)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2408 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2409 mswindows_widget_instantiate (image_instance, instantiator, pointer_fg,
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2410 pointer_bg, dest_mask, domain, "EDIT",
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2411 ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2412 | WS_BORDER, WS_EX_CLIENTEDGE);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2413 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2414
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2415 /* instantiate a progress gauge */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2416 static void
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2417 mswindows_progress_gauge_instantiate (Lisp_Object image_instance,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2418 Lisp_Object instantiator,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2419 Lisp_Object pointer_fg,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2420 Lisp_Object pointer_bg,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2421 int dest_mask, Lisp_Object domain)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2422 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2423 HWND wnd;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2424 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2425 Lisp_Object val;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2426 mswindows_widget_instantiate (image_instance, instantiator, pointer_fg,
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2427 pointer_bg, dest_mask, domain, PROGRESS_CLASS,
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2428 WS_BORDER | PBS_SMOOTH, WS_EX_CLIENTEDGE);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2429 wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2430 /* set the colors */
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2431 #if 0 /* #### fix this */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2432 qxeSendMessage (wnd, PBM_SETBKCOLOR, 0,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2433 (LPARAM) (COLOR_INSTANCE_MSWINDOWS_COLOR
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2434 (XCOLOR_INSTANCE
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2435 (FACE_BACKGROUND
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2436 (XIMAGE_INSTANCE_WIDGET_FACE (ii),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2437 XIMAGE_INSTANCE_FRAME (ii))))));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2438 qxeSendMessage (wnd, PBM_SETBARCOLOR, 0,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2439 (LPARAM) (COLOR_INSTANCE_MSWINDOWS_COLOR
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2440 (XCOLOR_INSTANCE
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2441 (FACE_FOREGROUND
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2442 (XIMAGE_INSTANCE_WIDGET_FACE (ii),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2443 XIMAGE_INSTANCE_FRAME (ii))))));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2444 #endif
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2445 val = XGUI_ITEM (IMAGE_INSTANCE_WIDGET_ITEMS (ii))->value;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2446 CHECK_INT (val);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2447 qxeSendMessage (WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2448 PBM_SETPOS, (WPARAM)XINT (val), 0);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2449 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2450
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2451 /* instantiate a tree view widget */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2452 static HTREEITEM add_tree_item (Lisp_Object image_instance,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2453 HWND wnd, HTREEITEM parent, Lisp_Object item,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2454 int children, Lisp_Object domain)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2455 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2456 HTREEITEM ret;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2457 TV_INSERTSTRUCTW tvitem;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2458
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2459 tvitem.hParent = parent;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2460 tvitem.hInsertAfter = TVI_LAST;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2461 tvitem.item.mask = TVIF_TEXT | TVIF_CHILDREN;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2462 tvitem.item.cChildren = children;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2463
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2464 if (GUI_ITEMP (item))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2465 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2466 tvitem.item.lParam =
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2467 mswindows_register_gui_item (image_instance, item, domain);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2468 tvitem.item.mask |= TVIF_PARAM;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2469 LISP_STRING_TO_TSTR (XGUI_ITEM (item)->name, tvitem.item.pszText);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2470 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2471 else
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2472 LISP_STRING_TO_TSTR (item, tvitem.item.pszText);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2473
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2474 tvitem.item.cchTextMax = xetcslen ((Extbyte *) tvitem.item.pszText);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2475
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2476 if ((ret = (HTREEITEM) qxeSendMessage (wnd, TVM_INSERTITEM,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2477 0, (LPARAM) &tvitem)) == 0)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
2478 gui_error ("error adding tree view entry", item);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2479
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2480 return ret;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2481 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2482
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2483 static void add_tree_item_list (Lisp_Object image_instance,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2484 HWND wnd, HTREEITEM parent, Lisp_Object list,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2485 Lisp_Object domain)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2486 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2487 Lisp_Object rest;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2488
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2489 /* get the first item */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2490 parent = add_tree_item (image_instance, wnd, parent, XCAR (list), TRUE, domain);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2491 /* recursively add items to the tree view */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2492 LIST_LOOP (rest, XCDR (list))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2493 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2494 if (LISTP (XCAR (rest)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2495 add_tree_item_list (image_instance, wnd, parent, XCAR (rest), domain);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2496 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2497 add_tree_item (image_instance, wnd, parent, XCAR (rest), FALSE, domain);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2498 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2499 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2500
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2501 static void
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2502 mswindows_tree_view_instantiate (Lisp_Object image_instance,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2503 Lisp_Object instantiator,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2504 Lisp_Object pointer_fg,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2505 Lisp_Object pointer_bg,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2506 int dest_mask, Lisp_Object domain)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2507 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2508 Lisp_Object rest;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2509 HWND wnd;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2510 HTREEITEM parent;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2511 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2512 mswindows_widget_instantiate (image_instance, instantiator, pointer_fg,
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2513 pointer_bg, dest_mask, domain, WC_TREEVIEW,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2514 WS_TABSTOP | WS_BORDER | PBS_SMOOTH
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2515 | TVS_HASLINES | TVS_HASBUTTONS,
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2516 WS_EX_CLIENTEDGE);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2517
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2518 wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2519
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2520 /* define a root */
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2521 parent = add_tree_item (image_instance, wnd, NULL,
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2522 XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2523 TRUE, domain);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2524
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2525 /* recursively add items to the tree view */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2526 /* add items to the tab */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2527 LIST_LOOP (rest, XCDR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2528 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2529 if (LISTP (XCAR (rest)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2530 add_tree_item_list (image_instance, wnd, parent, XCAR (rest), domain);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2531 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2532 add_tree_item (image_instance, wnd, parent, XCAR (rest), FALSE, domain);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2533 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2534 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2535
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2536 /* Set the properties of a tree view. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2537 static void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2538 mswindows_tree_view_redisplay (Lisp_Object image_instance)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2539 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2540 /* This function can GC if IN_REDISPLAY is false. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2541 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2542
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2543 if (IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2544 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2545 HWND wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2546 Lisp_Object rest;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2547 HTREEITEM parent;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2548 /* Delete previous items. */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2549 qxeSendMessage (wnd, TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2550 /* define a root */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2551 parent = add_tree_item (image_instance, wnd, NULL,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2552 XCAR (IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii)),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2553 TRUE, IMAGE_INSTANCE_DOMAIN (ii));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2554
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2555 /* recursively add items to the tree view */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2556 /* add items to the tab */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2557 LIST_LOOP (rest, XCDR (IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2558 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2559 if (LISTP (XCAR (rest)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2560 add_tree_item_list (image_instance, wnd, parent, XCAR (rest),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2561 IMAGE_INSTANCE_DOMAIN (ii));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2562 else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2563 add_tree_item (image_instance, wnd, parent, XCAR (rest), FALSE,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2564 IMAGE_INSTANCE_DOMAIN (ii));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2565 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2566 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2567 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2568
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2569 /* instantiate a tab control */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2570 static int
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2571 add_tab_item (Lisp_Object image_instance,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2572 HWND wnd, Lisp_Object item,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2573 Lisp_Object domain, int i)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2574 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2575 TC_ITEMW tcitem;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2576 int ret = 0;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2577
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2578 tcitem.mask = TCIF_TEXT;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2579
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2580 if (GUI_ITEMP (item))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2581 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2582 tcitem.lParam =
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2583 mswindows_register_gui_item (image_instance, item, domain);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2584 tcitem.mask |= TCIF_PARAM;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2585 LISP_STRING_TO_TSTR (XGUI_ITEM (item)->name, tcitem.pszText);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2586 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2587 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2588 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2589 CHECK_STRING (item);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2590 LISP_STRING_TO_TSTR (item, tcitem.pszText);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2591 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2592
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2593 tcitem.cchTextMax = xetcslen ((Extbyte *) tcitem.pszText);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2594
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2595 if ((ret = qxeSendMessage (wnd, TCM_INSERTITEM, i, (LPARAM) &tcitem)) < 0)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
2596 gui_error ("error adding tab entry", item);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2597
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2598 return ret;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2599 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2600
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2601 static void
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2602 mswindows_tab_control_instantiate (Lisp_Object image_instance,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2603 Lisp_Object instantiator,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2604 Lisp_Object pointer_fg,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2605 Lisp_Object pointer_bg,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2606 int dest_mask, Lisp_Object domain)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2607 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2608 /* This function can call lisp */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2609 Lisp_Object rest;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2610 HWND wnd;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2611 int i = 0, selected = 0;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2612 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2613 Lisp_Object orient = find_keyword_in_vector (instantiator, Q_orientation);
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2614 unsigned int flags = WS_TABSTOP;
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2615
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2616 if (EQ (orient, Qleft) || EQ (orient, Qright))
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2617 {
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2618 flags |= TCS_VERTICAL | TCS_MULTILINE;
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2619 }
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2620 if (EQ (orient, Qright) || EQ (orient, Qbottom))
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2621 {
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2622 flags |= TCS_BOTTOM;
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2623 }
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2624
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2625 mswindows_widget_instantiate (image_instance, instantiator, pointer_fg,
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2626 pointer_bg, dest_mask, domain, WC_TABCONTROL,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2627 /* borders don't suit tabs so well */
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2628 flags, 0);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2629 wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2630 /* add items to the tab */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2631 LIST_LOOP (rest, XCDR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2632 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2633 int idx = add_tab_item (image_instance, wnd, XCAR (rest), domain, i);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2634 assert (idx == i);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2635 if (gui_item_selected_p (XCAR (rest)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2636 selected = i;
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2637 i++;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2638 }
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2639 qxeSendMessage (wnd, TCM_SETCURSEL, selected, 0);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2640 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2641
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2642 /* Set the properties of a tab control. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2643 static void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2644 mswindows_tab_control_redisplay (Lisp_Object image_instance)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2645 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2646 /* This function can GC if IN_REDISPLAY is false. */
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2647 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2648 #ifdef DEBUG_WIDGET_OUTPUT
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2649 stderr_out ("tab control %p redisplayed\n", IMAGE_INSTANCE_SUBWINDOW_ID (ii));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2650 #endif
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2651 if (IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2652 ||
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2653 IMAGE_INSTANCE_WIDGET_ACTION_OCCURRED (ii))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2654 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2655 HWND wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 444
diff changeset
2656 int i = 0, selected_idx = 0;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2657 Lisp_Object rest;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2658
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2659 assert (!NILP (IMAGE_INSTANCE_WIDGET_ITEMS (ii)));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2660
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2661 /* If only the order has changed then simply select the first
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2662 one. This stops horrendous rebuilding of the tabs each time
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2663 you click on one. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2664 if (tab_control_order_only_changed (image_instance))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2665 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2666 Lisp_Object selected =
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2667 gui_item_list_find_selected
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2668 (NILP (IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii)) ?
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2669 XCDR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)) :
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2670 XCDR (IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii)));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2671
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2672 LIST_LOOP (rest, XCDR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2673 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2674 if (gui_item_equal_sans_selected (XCAR (rest), selected, 0))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2675 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2676 Lisp_Object old_selected = gui_item_list_find_selected
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2677 (XCDR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2678
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2679 /* Pick up the new selected item. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2680 XGUI_ITEM (old_selected)->selected =
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2681 XGUI_ITEM (XCAR (rest))->selected;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2682 XGUI_ITEM (XCAR (rest))->selected =
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2683 XGUI_ITEM (selected)->selected;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2684 /* We're not actually changing the items. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2685 IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii) = 0;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2686 IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii) = Qnil;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2687
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2688 qxeSendMessage (wnd, TCM_SETCURSEL, i, 0);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2689 #ifdef DEBUG_WIDGET_OUTPUT
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2690 stderr_out ("tab control %p selected item %d\n",
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2691 IMAGE_INSTANCE_SUBWINDOW_ID (ii), i);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2692 #endif
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2693 break;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2694 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2695 i++;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2696 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2697 }
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2698 else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2699 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2700 /* delete the pre-existing items */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2701 qxeSendMessage (wnd, TCM_DELETEALLITEMS, 0, 0);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2702
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2703 /* add items to the tab */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2704 LIST_LOOP (rest, XCDR (IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2705 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2706 add_tab_item (image_instance, wnd, XCAR (rest),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2707 IMAGE_INSTANCE_FRAME (ii), i);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2708 if (gui_item_selected_p (XCAR (rest)))
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 444
diff changeset
2709 selected_idx = i;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2710 i++;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2711 }
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2712 qxeSendMessage (wnd, TCM_SETCURSEL, selected_idx, 0);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2713 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2714 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2715 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2716
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2717 /* instantiate a static control possible for putting other things in */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2718 static void
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2719 mswindows_label_instantiate (Lisp_Object image_instance,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2720 Lisp_Object instantiator,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2721 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2722 int dest_mask, Lisp_Object domain)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2723 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2724 mswindows_widget_instantiate (image_instance, instantiator, pointer_fg,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2725 pointer_bg, dest_mask, domain,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2726 "STATIC", 0, WS_EX_STATICEDGE);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2727 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2728
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2729 /* instantiate a scrollbar control */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2730 static void
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2731 mswindows_scrollbar_instantiate (Lisp_Object image_instance,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2732 Lisp_Object instantiator,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2733 Lisp_Object pointer_fg,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2734 Lisp_Object pointer_bg,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2735 int dest_mask, Lisp_Object domain)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2736 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2737 mswindows_widget_instantiate (image_instance, instantiator, pointer_fg,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2738 pointer_bg, dest_mask, domain,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2739 "SCROLLBAR", WS_TABSTOP, WS_EX_CLIENTEDGE);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2740 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2741
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2742 /* instantiate a combo control */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2743 static void
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2744 mswindows_combo_box_instantiate (Lisp_Object image_instance,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2745 Lisp_Object instantiator,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2746 Lisp_Object pointer_fg,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2747 Lisp_Object pointer_bg,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 454
diff changeset
2748 int dest_mask, Lisp_Object domain)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2749 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2750 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2751 HWND wnd;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2752 Lisp_Object rest;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2753 Lisp_Object items = find_keyword_in_vector (instantiator, Q_items);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2754 int len, height;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2755
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2756 /* Maybe ought to generalise this more but it may be very windows
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2757 specific. In windows the window height of a combo box is the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2758 height when the combo box is open. Thus we need to set the height
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2759 before creating the window and then reset it to a single line
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2760 after the window is created so that redisplay does the right
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2761 thing. */
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2762 widget_instantiate (image_instance, instantiator, pointer_fg,
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2763 pointer_bg, dest_mask, domain);
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2764
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2765 /* We now have everything right apart from the height. */
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2766 default_face_font_info (domain, 0, 0, &height, 0, 0);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2767 GET_LIST_LENGTH (items, len);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2768
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2769 height = (height + WIDGET_BORDER_HEIGHT * 2 ) * len;
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2770 IMAGE_INSTANCE_HEIGHT (ii) = height;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2771
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2772 /* Now create the widget. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2773 mswindows_widget_instantiate (image_instance, instantiator, pointer_fg,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2774 pointer_bg, dest_mask, domain,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2775 "COMBOBOX",
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2776 WS_BORDER | WS_TABSTOP | CBS_DROPDOWN
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2777 | CBS_AUTOHSCROLL
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2778 | CBS_HASSTRINGS | WS_VSCROLL,
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2779 WS_EX_CLIENTEDGE);
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2780 /* Reset the height. layout will probably do this safely, but better make sure. */
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2781 image_instance_layout (image_instance,
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2782 IMAGE_UNSPECIFIED_GEOMETRY,
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2783 IMAGE_UNSPECIFIED_GEOMETRY,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2784 IMAGE_UNCHANGED_GEOMETRY,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2785 IMAGE_UNCHANGED_GEOMETRY,
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2786 domain);
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2787
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2788 wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2789 /* add items to the combo box */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2790 qxeSendMessage (wnd, CB_RESETCONTENT, 0, 0);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2791 LIST_LOOP (rest, items)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2792 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2793 Extbyte *lparam;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2794 LISP_STRING_TO_TSTR (XCAR (rest), lparam);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2795 if (qxeSendMessage (wnd, CB_ADDSTRING, 0, (LPARAM)lparam) == CB_ERR)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
2796 gui_error ("error adding combo entries", instantiator);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2797 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2798 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2799
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2800 /* get properties of a control */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2801 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2802 mswindows_widget_property (Lisp_Object image_instance, Lisp_Object prop)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2803 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2804 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2805 HWND wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2806 /* get the text from a control */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2807 if (EQ (prop, Q_text))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2808 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2809 Charcount tchar_len = qxeSendMessage (wnd, WM_GETTEXTLENGTH, 0, 0);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2810 Extbyte *buf = (Extbyte *) alloca (XETCHAR_SIZE * (tchar_len + 1));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2811
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2812 qxeSendMessage (wnd, WM_GETTEXT, (WPARAM)tchar_len + 1, (LPARAM) buf);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2813 return build_tstr_string (buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2814 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2815 return Qunbound;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2816 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2817
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2818 /* get properties of a button */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2819 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2820 mswindows_button_property (Lisp_Object image_instance, Lisp_Object prop)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2821 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2822 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2823 HWND wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2824 /* check the state of a button */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2825 if (EQ (prop, Q_selected))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2826 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2827 if (qxeSendMessage (wnd, BM_GETSTATE, 0, 0) & BST_CHECKED)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2828 return Qt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2829 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2830 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2831 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2832 return Qunbound;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2833 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2834
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2835 /* get properties of a combo box */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2836 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2837 mswindows_combo_box_property (Lisp_Object image_instance, Lisp_Object prop)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2838 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2839 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2840 HWND wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2841 /* get the text from a control */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2842 if (EQ (prop, Q_text))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2843 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2844 long item = qxeSendMessage (wnd, CB_GETCURSEL, 0, 0);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2845 Charcount tchar_len = qxeSendMessage (wnd, CB_GETLBTEXTLEN,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2846 (WPARAM)item, 0);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2847 Extbyte *buf = (Extbyte *) alloca (XETCHAR_SIZE * (tchar_len + 1));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2848 qxeSendMessage (wnd, CB_GETLBTEXT, (WPARAM)item, (LPARAM) buf);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2849 return build_tstr_string (buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2850 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2851 return Qunbound;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2852 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2853
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2854 /* set the properties of a progress gauge */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2855 static void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2856 mswindows_progress_gauge_redisplay (Lisp_Object image_instance)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2857 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2858 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2859
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2860 if (IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2861 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2862 Lisp_Object val;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2863 #ifdef ERROR_CHECK_GLYPHS
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2864 assert (GUI_ITEMP (IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii)));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2865 #endif
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2866 val = XGUI_ITEM (IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii))->value;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2867 #ifdef DEBUG_WIDGET_OUTPUT
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2868 stderr_out ("progress gauge displayed value on %p updated to %ld\n",
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2869 WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2870 XINT(val));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2871 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2872 CHECK_INT (val);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2873 qxeSendMessage (WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2874 PBM_SETPOS, (WPARAM)XINT (val), 0);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2875 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2876 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2877
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2878 LRESULT WINAPI
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2879 mswindows_control_wnd_proc (HWND hwnd, UINT msg,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2880 WPARAM wParam, LPARAM lParam)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2881 {
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2882 switch (msg)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2883 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2884 case WM_NOTIFY:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2885 case WM_COMMAND:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2886 case WM_CTLCOLORBTN:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2887 case WM_CTLCOLORLISTBOX:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2888 case WM_CTLCOLOREDIT:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2889 case WM_CTLCOLORSTATIC:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2890 case WM_CTLCOLORSCROLLBAR:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2891
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 434
diff changeset
2892 return mswindows_wnd_proc (GetParent (hwnd), msg, wParam, lParam);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2893 default:
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2894 return qxeDefWindowProc (hwnd, msg, wParam, lParam);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2895 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2896 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2897
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2898 static void
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2899 mswindows_widget_query_string_geometry (Lisp_Object string, Lisp_Object face,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2900 int *width, int *height,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2901 Lisp_Object domain)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2902 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2903 if (height)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2904 query_string_geometry (string, face, 0, height, 0, domain);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2905
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2906 if (width)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2907 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2908 HDC hdc = FRAME_MSWINDOWS_DC (DOMAIN_XFRAME (domain));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2909 Extbyte *str;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2910 Bytecount len;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2911 SIZE size;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2912
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2913 SelectObject (hdc, mswindows_widget_hfont (face, domain, string));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2914 TO_EXTERNAL_FORMAT (LISP_STRING, string, ALLOCA, (str, len),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2915 Qmswindows_tstr);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2916 qxeGetTextExtentPoint32 (hdc, str, len / XETCHAR_SIZE, &size);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2917 *width = size.cx;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2918 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2919 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2920
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2921 #endif /* HAVE_WIDGETS */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2922
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2923
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2924 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2925 /* initialization */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2926 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2927
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2928 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2929 syms_of_glyphs_mswindows (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2930 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2931 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2932
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2933 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2934 console_type_create_glyphs_mswindows (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2935 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2936 /* image methods - display */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2937 CONSOLE_HAS_METHOD (mswindows, print_image_instance);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2938 CONSOLE_HAS_METHOD (mswindows, finalize_image_instance);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2939 CONSOLE_HAS_METHOD (mswindows, unmap_subwindow);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2940 CONSOLE_HAS_METHOD (mswindows, map_subwindow);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2941 CONSOLE_HAS_METHOD (mswindows, redisplay_subwindow);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2942 CONSOLE_HAS_METHOD (mswindows, resize_subwindow);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2943 CONSOLE_HAS_METHOD (mswindows, redisplay_widget);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2944 CONSOLE_HAS_METHOD (mswindows, image_instance_equal);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2945 CONSOLE_HAS_METHOD (mswindows, image_instance_hash);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2946 CONSOLE_HAS_METHOD (mswindows, init_image_instance_from_eimage);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2947 CONSOLE_HAS_METHOD (mswindows, locate_pixmap_file);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2948 #ifdef HAVE_WIDGETS
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2949 CONSOLE_HAS_METHOD (mswindows, widget_query_string_geometry);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2950 #endif
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2951
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2952 /* image methods - printer */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2953 CONSOLE_INHERITS_METHOD (msprinter, mswindows, print_image_instance);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2954 CONSOLE_INHERITS_METHOD (msprinter, mswindows, finalize_image_instance);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2955 CONSOLE_INHERITS_METHOD (msprinter, mswindows, image_instance_equal);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2956 CONSOLE_INHERITS_METHOD (msprinter, mswindows, image_instance_hash);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2957 CONSOLE_INHERITS_METHOD (msprinter, mswindows,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2958 init_image_instance_from_eimage);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2959 CONSOLE_INHERITS_METHOD (msprinter, mswindows, locate_pixmap_file);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2960 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2961
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2962 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2963 image_instantiator_format_create_glyphs_mswindows (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2964 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2965 IIFORMAT_VALID_CONSOLE2 (mswindows, msprinter, nothing);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2966 IIFORMAT_VALID_CONSOLE2 (mswindows, msprinter, string);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2967 IIFORMAT_VALID_CONSOLE2 (mswindows, msprinter, formatted_string);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2968 IIFORMAT_VALID_CONSOLE2 (mswindows, msprinter, inherit);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2969 /* image-instantiator types */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2970 INITIALIZE_DEVICE_IIFORMAT (mswindows, xbm);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2971 INITIALIZE_DEVICE_IIFORMAT (msprinter, xbm);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2972 IIFORMAT_HAS_DEVMETHOD (mswindows, xbm, instantiate);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2973 IIFORMAT_INHERITS_DEVMETHOD (msprinter, mswindows, xbm, instantiate);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2974 #ifdef HAVE_XPM
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2975 INITIALIZE_DEVICE_IIFORMAT (mswindows, xpm);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2976 INITIALIZE_DEVICE_IIFORMAT (msprinter, xpm);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2977 IIFORMAT_HAS_DEVMETHOD (mswindows, xpm, instantiate);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2978 IIFORMAT_INHERITS_DEVMETHOD (msprinter, mswindows, xpm, instantiate);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2979 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2980 #ifdef HAVE_XFACE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2981 INITIALIZE_DEVICE_IIFORMAT (mswindows, xface);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2982 INITIALIZE_DEVICE_IIFORMAT (msprinter, xface);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2983 IIFORMAT_HAS_DEVMETHOD (mswindows, xface, instantiate);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2984 IIFORMAT_INHERITS_DEVMETHOD (msprinter, mswindows, xface, instantiate);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2985 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2986 #ifdef HAVE_JPEG
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2987 IIFORMAT_VALID_CONSOLE2 (mswindows, msprinter, jpeg);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2988 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2989 #ifdef HAVE_TIFF
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2990 IIFORMAT_VALID_CONSOLE2 (mswindows, msprinter, tiff);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2991 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2992 #ifdef HAVE_PNG
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2993 IIFORMAT_VALID_CONSOLE2 (mswindows, msprinter, png);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2994 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2995 #ifdef HAVE_GIF
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2996 IIFORMAT_VALID_CONSOLE2 (mswindows, msprinter, gif);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2997 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2998 #ifdef HAVE_WIDGETS
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2999 INITIALIZE_DEVICE_IIFORMAT (mswindows, widget);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3000 IIFORMAT_HAS_DEVMETHOD (mswindows, widget, property);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3001 /* layout widget */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3002 IIFORMAT_VALID_CONSOLE (mswindows, layout);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3003 INITIALIZE_DEVICE_IIFORMAT (mswindows, native_layout);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3004 IIFORMAT_HAS_DEVMETHOD (mswindows, native_layout, instantiate);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3005 /* button widget */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3006 INITIALIZE_DEVICE_IIFORMAT (mswindows, button);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3007 IIFORMAT_HAS_DEVMETHOD (mswindows, button, property);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3008 IIFORMAT_HAS_DEVMETHOD (mswindows, button, instantiate);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3009 IIFORMAT_HAS_DEVMETHOD (mswindows, button, redisplay);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3010 /* edit-field widget */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3011 INITIALIZE_DEVICE_IIFORMAT (mswindows, edit_field);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3012 IIFORMAT_HAS_DEVMETHOD (mswindows, edit_field, instantiate);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3013 /* subwindow */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3014 INITIALIZE_DEVICE_IIFORMAT (mswindows, subwindow);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3015 IIFORMAT_HAS_DEVMETHOD (mswindows, subwindow, instantiate);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3016 /* label */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3017 INITIALIZE_DEVICE_IIFORMAT (mswindows, label);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3018 IIFORMAT_HAS_DEVMETHOD (mswindows, label, instantiate);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3019 /* combo box */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3020 INITIALIZE_DEVICE_IIFORMAT (mswindows, combo_box);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3021 IIFORMAT_HAS_DEVMETHOD (mswindows, combo_box, property);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3022 IIFORMAT_HAS_DEVMETHOD (mswindows, combo_box, instantiate);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3023 /* scrollbar */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3024 INITIALIZE_DEVICE_IIFORMAT (mswindows, scrollbar);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3025 IIFORMAT_HAS_DEVMETHOD (mswindows, scrollbar, instantiate);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3026 /* progress gauge */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3027 INITIALIZE_DEVICE_IIFORMAT (mswindows, progress_gauge);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3028 IIFORMAT_HAS_DEVMETHOD (mswindows, progress_gauge, redisplay);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3029 IIFORMAT_HAS_DEVMETHOD (mswindows, progress_gauge, instantiate);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3030 /* tree view widget */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3031 INITIALIZE_DEVICE_IIFORMAT (mswindows, tree_view);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3032 IIFORMAT_HAS_DEVMETHOD (mswindows, tree_view, instantiate);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3033 IIFORMAT_HAS_DEVMETHOD (mswindows, tree_view, redisplay);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3034 /* tab control widget */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3035 INITIALIZE_DEVICE_IIFORMAT (mswindows, tab_control);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3036 IIFORMAT_HAS_DEVMETHOD (mswindows, tab_control, instantiate);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3037 IIFORMAT_HAS_DEVMETHOD (mswindows, tab_control, redisplay);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3038 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3039 /* windows bitmap format */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3040 INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (bmp, "bmp");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3041 IIFORMAT_HAS_METHOD (bmp, validate);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3042 IIFORMAT_HAS_METHOD (bmp, normalize);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3043 IIFORMAT_HAS_METHOD (bmp, possible_dest_types);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3044 IIFORMAT_HAS_METHOD (bmp, instantiate);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3045
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3046 IIFORMAT_VALID_KEYWORD (bmp, Q_data, check_valid_string);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3047 IIFORMAT_VALID_KEYWORD (bmp, Q_file, check_valid_string);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3048 IIFORMAT_VALID_CONSOLE2 (mswindows, msprinter, bmp);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3049
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3050 /* mswindows resources */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3051 INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (mswindows_resource,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3052 "mswindows-resource");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3053
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3054 IIFORMAT_HAS_METHOD (mswindows_resource, validate);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3055 IIFORMAT_HAS_METHOD (mswindows_resource, normalize);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3056 IIFORMAT_HAS_METHOD (mswindows_resource, possible_dest_types);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3057 IIFORMAT_HAS_METHOD (mswindows_resource, instantiate);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3058
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
3059 IIFORMAT_VALID_KEYWORD (mswindows_resource, Q_resource_type,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3060 check_valid_resource_symbol);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3061 IIFORMAT_VALID_KEYWORD (mswindows_resource, Q_resource_id, check_valid_resource_id);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3062 IIFORMAT_VALID_KEYWORD (mswindows_resource, Q_file, check_valid_string);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3063 IIFORMAT_VALID_CONSOLE2 (mswindows, msprinter, mswindows_resource);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3064 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3065
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3066 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3067 vars_of_glyphs_mswindows (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3068 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3069 DEFVAR_LISP ("mswindows-bitmap-file-path", &Vmswindows_bitmap_file_path /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3070 A list of the directories in which mswindows bitmap files may be found.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3071 This is used by the `make-image-instance' function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3072 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3073 Vmswindows_bitmap_file_path = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3074 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3075
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3076 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3077 complex_vars_of_glyphs_mswindows (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3078 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3079 }