annotate src/glyphs-x.c @ 4539:061e030e3270

Fix some bugs in load-history construction, built-in symbol file names. lib-src/ChangeLog addition: 2008-12-27 Aidan Kehoe <kehoea@parhasard.net> * make-docfile.c (main): Allow more than one -d argument, followed by a directory to change to. (put_filename): Don't strip directory information; with previous change, allows retrieval of Lisp function and variable origin files from #'built-in-symbol-file relative to lisp-directory. (scan_lisp_file): Don't add an extraneous newline after the file name, put_filename has added the newline already. lisp/ChangeLog addition: 2008-12-27 Aidan Kehoe <kehoea@parhasard.net> * loadup.el (load-history): Add the contents of current-load-list to load-history before clearing it. Move the variable declarations earlier in the file to a format understood by make-docfile.c. * custom.el (custom-declare-variable): Add the variable's symbol to the current file's load history entry correctly, don't use a cons. Eliminate a comment that we don't need to worry about, we don't need to check the `initialized' C variable in Lisp. * bytecomp.el (byte-compile-output-file-form): Merge Andreas Schwab's pre-GPLv3 GNU change of 19970831 here; treat #'custom-declare-variable correctly, generating the docstrings in a format understood by make-docfile.c. * loadhist.el (symbol-file): Correct behaviour for checking autoloaded macros and functions when supplied with a TYPE argument. Accept fully-qualified paths from #'built-in-symbol-file; if a path is not fully-qualified, return it relative to lisp-directory if the filename corresponds to a Lisp file, and relative to (concat source-directory "/src/") otherwise. * make-docfile.el (preloaded-file-list): Rationalise some let bindings a little. Use the "-d" argument to make-docfile.c to supply Lisp paths relative to lisp-directory, not absolutely. Add in loadup.el explicitly to the list of files to be processed by make-docfile.c--it doesn't make sense to add it to preloaded-file-list, since that is used for purposes of byte-compilation too. src/ChangeLog addition: 2008-12-27 Aidan Kehoe <kehoea@parhasard.net> * doc.c (Fbuilt_in_symbol_file): Return a subr's filename immediately if we've found it. Check for compiled function and compiled macro docstrings in DOC too, and return them if they exist. The branch of the if statement focused on functions may have executed, but we may still want to check variable bindings; an else clause isn't appropriate.
author Aidan Kehoe <kehoea@parhasard.net>
date Sat, 27 Dec 2008 14:05:50 +0000
parents 726060ee587c
children 5460287a3327
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 /* X-specific Lisp objects.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Copyright (C) 1993, 1994 Free Software Foundation, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 Copyright (C) 1995 Board of Trustees, University of Illinois.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 Copyright (C) 1995 Tinker Systems
2959
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
5 Copyright (C) 1995, 1996, 2001, 2002, 2003, 2004, 2005 Ben Wing
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 Copyright (C) 1995 Sun Microsystems
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
7 Copyright (C) 1999, 2000, 2002 Andy Piper
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 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
13 Free Software Foundation; either version 2, or (at your option) any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 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
17 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 along with XEmacs; see the file COPYING. If not, write to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 Boston, MA 02111-1307, USA. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 /* Synched up with: Not in FSF. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1111
diff changeset
27 /* 7-8-00 This file is more or less Mule-ized. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
28
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 /* Original author: Jamie Zawinski for 19.8
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 font-truename stuff added by Jamie Zawinski for 19.10
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 subwindow support added by Chuck Thompson
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 additional XPM support added by Chuck Thompson
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 initial X-Face support added by Stig
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 rewritten/restructured by Ben Wing for 19.12/19.13
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 GIF/JPEG support added by Ben Wing for 19.14
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 PNG support added by Bill Perry for 19.14
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 Improved GIF/JPEG support added by Bill Perry for 19.14
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 Cleanup/simplification of error handling by Ben Wing for 19.14
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 Pointer/icon overhaul, more restructuring by Ben Wing for 19.14
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 GIF support changed to external GIFlib 3.1 by Jareth Hein for 21.0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 Many changes for color work and optimizations by Jareth Hein for 21.0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 Switch of GIF/JPEG/PNG to new EImage intermediate code by Jareth Hein for 21.0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 TIFF code by Jareth Hein for 21.0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 GIF/JPEG/PNG/TIFF code moved to new glyph-eimage.c by Andy Piper for 21.0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 Subwindow and Widget support by Andy Piper for 21.2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 TODO:
430
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
48 Support the GrayScale, StaticColor and StaticGray visual classes.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 Convert images.el to C and stick it in here?
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
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
52 /* Mule-ized last 6-22-00 */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
53
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 #include <config.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 #include "lisp.h"
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
56
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
57 #include "buffer.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
58 #include "device-impl.h"
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
59 #include "faces.h"
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
60 #include "file-coding.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
61 #include "frame-impl.h"
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
62 #include "gui.h"
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
63 #include "imgproc.h"
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
64 #include "insdel.h"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 #include "lstream.h"
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
66 #include "opaque.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
67 #include "process.h" /* egetenv() */
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
68 #include "window.h"
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
69
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
70 #include "console-x-impl.h"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 #include "glyphs-x.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
72 #include "objects-x-impl.h"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 #include "xmu.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 #include "sysfile.h"
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
76 #include "sysproc.h" /* for qxe_getpid() */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 #include <setjmp.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 #ifdef LWLIB_WIDGETS_MOTIF
1315
70921960b980 [xemacs-hg @ 2003-02-20 08:19:28 by ben]
ben
parents: 1204
diff changeset
81 #include "xmotif.h"
639
4b7d425dd3c2 [xemacs-hg @ 2001-07-28 05:08:58 by andyp]
andyp
parents: 608
diff changeset
82 #include <Xm/Scale.h>
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 #include <X11/IntrinsicP.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 #define LISP_DEVICE_TO_X_SCREEN(dev) XDefaultScreenOfDisplay (DEVICE_X_DISPLAY (XDEVICE (dev)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 DECLARE_IMAGE_INSTANTIATOR_FORMAT (nothing);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 DECLARE_IMAGE_INSTANTIATOR_FORMAT (string);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 DECLARE_IMAGE_INSTANTIATOR_FORMAT (formatted_string);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 DECLARE_IMAGE_INSTANTIATOR_FORMAT (inherit);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 #ifdef HAVE_JPEG
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 DECLARE_IMAGE_INSTANTIATOR_FORMAT (jpeg);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 #ifdef HAVE_TIFF
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 DECLARE_IMAGE_INSTANTIATOR_FORMAT (tiff);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
97 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 #ifdef HAVE_PNG
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 DECLARE_IMAGE_INSTANTIATOR_FORMAT (png);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
100 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 #ifdef HAVE_GIF
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 DECLARE_IMAGE_INSTANTIATOR_FORMAT (gif);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
103 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 #ifdef HAVE_XPM
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 DEFINE_DEVICE_IIFORMAT (x, xpm);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 DEFINE_DEVICE_IIFORMAT (x, xbm);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 DEFINE_DEVICE_IIFORMAT (x, subwindow);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 #ifdef HAVE_XFACE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 DEFINE_DEVICE_IIFORMAT (x, xface);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 DEFINE_IMAGE_INSTANTIATOR_FORMAT (cursor_font);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 Lisp_Object Qcursor_font;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 DEFINE_IMAGE_INSTANTIATOR_FORMAT (font);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 DEFINE_IMAGE_INSTANTIATOR_FORMAT (autodetect);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
120 #ifdef HAVE_X_WIDGETS
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
121 DECLARE_IMAGE_INSTANTIATOR_FORMAT (layout);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 DEFINE_DEVICE_IIFORMAT (x, widget);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
123 DEFINE_DEVICE_IIFORMAT (x, native_layout);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 DEFINE_DEVICE_IIFORMAT (x, button);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 DEFINE_DEVICE_IIFORMAT (x, progress_gauge);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 DEFINE_DEVICE_IIFORMAT (x, edit_field);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 #if defined (LWLIB_WIDGETS_MOTIF) && XmVERSION > 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 DEFINE_DEVICE_IIFORMAT (x, combo_box);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 DEFINE_DEVICE_IIFORMAT (x, tab_control);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 DEFINE_DEVICE_IIFORMAT (x, label);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 static void cursor_font_instantiate (Lisp_Object image_instance,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 Lisp_Object instantiator,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 Lisp_Object pointer_fg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 Lisp_Object pointer_bg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 int dest_mask,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 Lisp_Object domain);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
141 #ifdef HAVE_X_WIDGETS
1111
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 940
diff changeset
142 static void update_widget_face (widget_value* wv,
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 940
diff changeset
143 Lisp_Image_Instance* ii, Lisp_Object domain);
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 940
diff changeset
144 static void update_tab_widget_face (widget_value* wv,
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 940
diff changeset
145 Lisp_Image_Instance* ii,
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 940
diff changeset
146 Lisp_Object domain);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 #endif
1111
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 940
diff changeset
148 void emacs_Xt_handle_widget_losing_focus (struct frame* f,
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 940
diff changeset
149 Widget losing_widget);
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 940
diff changeset
150 void emacs_Xt_enqueue_focus_event (Widget wants_it, Lisp_Object frame,
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 940
diff changeset
151 int in_p);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 #include "bitmaps.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154
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 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 /* image instance methods */
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 /* convert from a series of RGB triples to an XImage formated for the */
4252
8475ff9c49ea [xemacs-hg @ 2007-11-05 14:59:20 by didierv]
didierv
parents: 4226
diff changeset
162 /* proper display */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 static XImage *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 convert_EImage_to_XImage (Lisp_Object device, int width, int height,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
166 Binbyte *pic, unsigned long **pixtbl,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 int *npixels)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 Display *dpy;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 Colormap cmap;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 Visual *vis;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 XImage *outimg;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 int depth, bitmap_pad, bits_per_pixel, byte_cnt, i, j;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 int rd,gr,bl,q;
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
175 Binbyte *data, *ip, *dp;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 quant_table *qtable = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 union {
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 800
diff changeset
178 UINT_32_BIT val;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 char cp[4];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 } conv;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 dpy = DEVICE_X_DISPLAY (XDEVICE (device));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 cmap = DEVICE_X_COLORMAP (XDEVICE(device));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 vis = DEVICE_X_VISUAL (XDEVICE(device));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 depth = DEVICE_X_DEPTH(XDEVICE(device));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1111
diff changeset
187 if (vis->X_CLASSFIELD == GrayScale || vis->X_CLASSFIELD == StaticColor ||
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1111
diff changeset
188 vis->X_CLASSFIELD == StaticGray)
430
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
189 {
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
190 /* #### Implement me!!! */
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
191 return NULL;
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
192 }
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
193
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1111
diff changeset
194 if (vis->X_CLASSFIELD == PseudoColor)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 /* Quantize the image and get a histogram while we're at it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 Do this first to save memory */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 qtable = build_EImage_quantable(pic, width, height, 256);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 if (qtable == NULL) return NULL;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 }
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 bitmap_pad = ((depth > 16) ? 32 :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 (depth > 8) ? 16 :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 8);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 outimg = XCreateImage (dpy, vis,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 depth, ZPixmap, 0, 0, width, height,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 bitmap_pad, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 if (!outimg) return NULL;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 bits_per_pixel = outimg->bits_per_pixel;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 byte_cnt = bits_per_pixel >> 3;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
214 data = xnew_binbytes (outimg->bytes_per_line * height);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 if (!data)
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 XDestroyImage (outimg);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 return NULL;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 outimg->data = (char *) data;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1111
diff changeset
222 if (vis->X_CLASSFIELD == PseudoColor)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 unsigned long pixarray[256];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 int pixcount, n;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 /* use our quantize table to allocate the colors */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 pixcount = 32;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 *pixtbl = xnew_array (unsigned long, pixcount);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 *npixels = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
231 /* #### should implement a sort by popularity to assure proper allocation */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 n = *npixels;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 for (i = 0; i < qtable->num_active_colors; i++)
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 XColor color;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 int res;
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 color.red = qtable->rm[i] ? qtable->rm[i] << 8 : 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 color.green = qtable->gm[i] ? qtable->gm[i] << 8 : 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 color.blue = qtable->bm[i] ? qtable->bm[i] << 8 : 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 color.flags = DoRed | DoGreen | DoBlue;
3094
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
242 res = x_allocate_nearest_color (dpy, cmap, vis, &color);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 if (res > 0 && res < 3)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 DO_REALLOC(*pixtbl, pixcount, n+1, unsigned long);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 (*pixtbl)[n] = color.pixel;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 n++;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 pixarray[i] = color.pixel;
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 *npixels = n;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 ip = pic;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 for (i = 0; i < height; i++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 dp = data + (i * outimg->bytes_per_line);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 for (j = 0; j < width; j++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 rd = *ip++;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 gr = *ip++;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 bl = *ip++;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 conv.val = pixarray[QUANT_GET_COLOR(qtable,rd,gr,bl)];
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
262 #ifdef WORDS_BIGENDIAN
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 if (outimg->byte_order == MSBFirst)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 for (q = 4-byte_cnt; q < 4; q++) *dp++ = conv.cp[q];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 for (q = 3; q >= 4-byte_cnt; q--) *dp++ = conv.cp[q];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 if (outimg->byte_order == MSBFirst)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 for (q = byte_cnt-1; q >= 0; q--) *dp++ = conv.cp[q];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 for (q = 0; q < byte_cnt; q++) *dp++ = conv.cp[q];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 }
1726
a8d8f419b459 [xemacs-hg @ 2003-09-30 15:26:34 by james]
james
parents: 1346
diff changeset
275 xfree (qtable, quant_table *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 } else {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 unsigned long rshift,gshift,bshift,rbits,gbits,bbits,junk;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 junk = vis->red_mask;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 rshift = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 while ((junk & 0x1) == 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 junk = junk >> 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 rshift ++;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 rbits = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 while (junk != 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 junk = junk >> 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 rbits++;
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 junk = vis->green_mask;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 gshift = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 while ((junk & 0x1) == 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 junk = junk >> 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 gshift ++;
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 gbits = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 while (junk != 0)
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 junk = junk >> 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 gbits++;
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 junk = vis->blue_mask;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 bshift = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 while ((junk & 0x1) == 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 junk = junk >> 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 bshift ++;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 bbits = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 while (junk != 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 junk = junk >> 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 bbits++;
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 ip = pic;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 for (i = 0; i < height; i++)
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 dp = data + (i * outimg->bytes_per_line);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 for (j = 0; j < width; j++)
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 if (rbits > 8)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 rd = *ip++ << (rbits - 8);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 rd = *ip++ >> (8 - rbits);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 if (gbits > 8)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 gr = *ip++ << (gbits - 8);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 gr = *ip++ >> (8 - gbits);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 if (bbits > 8)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 bl = *ip++ << (bbits - 8);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 bl = *ip++ >> (8 - bbits);
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 conv.val = (rd << rshift) | (gr << gshift) | (bl << bshift);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
337 #ifdef WORDS_BIGENDIAN
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 if (outimg->byte_order == MSBFirst)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 for (q = 4-byte_cnt; q < 4; q++) *dp++ = conv.cp[q];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 for (q = 3; q >= 4-byte_cnt; q--) *dp++ = conv.cp[q];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 if (outimg->byte_order == MSBFirst)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 for (q = byte_cnt-1; q >= 0; q--) *dp++ = conv.cp[q];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 for (q = 0; q < byte_cnt; q++) *dp++ = conv.cp[q];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 return outimg;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354
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 static void
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
357 x_print_image_instance (Lisp_Image_Instance *p,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 Lisp_Object printcharfun,
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1913
diff changeset
359 int UNUSED (escapeflag))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 switch (IMAGE_INSTANCE_TYPE (p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 case IMAGE_MONO_PIXMAP:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 case IMAGE_COLOR_PIXMAP:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 case IMAGE_POINTER:
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
366 write_fmt_string (printcharfun, " (0x%lx",
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
367 (unsigned long) IMAGE_INSTANCE_X_PIXMAP (p));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 if (IMAGE_INSTANCE_X_MASK (p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 {
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
370 write_fmt_string (printcharfun, "/0x%lx",
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
371 (unsigned long) IMAGE_INSTANCE_X_MASK (p));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 }
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 800
diff changeset
373 write_c_string (printcharfun, ")");
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 default:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 }
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 #ifdef DEBUG_WIDGETS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381 extern int debug_widget_instances;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 static void
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
385 x_finalize_image_instance (Lisp_Image_Instance *p)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 if (!p->data)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
390 if (DEVICE_LIVE_P (XDEVICE (IMAGE_INSTANCE_DEVICE (p))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
392 Display *dpy = DEVICE_X_DISPLAY
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
393 (XDEVICE (IMAGE_INSTANCE_DEVICE (p)));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
394 if (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
395 ;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
396 #ifdef HAVE_X_WIDGETS
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
397 else if (IMAGE_INSTANCE_TYPE (p) == IMAGE_WIDGET)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 if (IMAGE_INSTANCE_SUBWINDOW_ID (p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 #ifdef DEBUG_WIDGETS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 debug_widget_instances--;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 stderr_out ("widget destroyed, %d left\n", debug_widget_instances);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405 lw_destroy_widget (IMAGE_INSTANCE_X_WIDGET_ID (p));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 lw_destroy_widget (IMAGE_INSTANCE_X_CLIPWIDGET (p));
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
407
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
408 /* We can release the callbacks again. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
409 ungcpro_popup_callbacks (IMAGE_INSTANCE_X_WIDGET_LWID (p));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
410
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
411 IMAGE_INSTANCE_X_WIDGET_ID (p) = 0;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
412 IMAGE_INSTANCE_X_CLIPWIDGET (p) = 0;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 }
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
415 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 else if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 if (IMAGE_INSTANCE_SUBWINDOW_ID (p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 XDestroyWindow (dpy, IMAGE_INSTANCE_X_SUBWINDOW_ID (p));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420 IMAGE_INSTANCE_SUBWINDOW_ID (p) = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 int i;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 if (IMAGE_INSTANCE_PIXMAP_TIMEOUT (p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 disable_glyph_animated_timeout (IMAGE_INSTANCE_PIXMAP_TIMEOUT (p));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 if (IMAGE_INSTANCE_X_MASK (p) &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 IMAGE_INSTANCE_X_MASK (p) != IMAGE_INSTANCE_X_PIXMAP (p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 XFreePixmap (dpy, IMAGE_INSTANCE_X_MASK (p));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 IMAGE_INSTANCE_PIXMAP_MASK (p) = 0;
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
432
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 if (IMAGE_INSTANCE_X_PIXMAP_SLICES (p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435 for (i = 0; i < IMAGE_INSTANCE_PIXMAP_MAXSLICE (p); i++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 if (IMAGE_INSTANCE_X_PIXMAP_SLICE (p,i))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 XFreePixmap (dpy, IMAGE_INSTANCE_X_PIXMAP_SLICE (p,i));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 IMAGE_INSTANCE_X_PIXMAP_SLICE (p, i) = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 }
1726
a8d8f419b459 [xemacs-hg @ 2003-09-30 15:26:34 by james]
james
parents: 1346
diff changeset
441 xfree (IMAGE_INSTANCE_X_PIXMAP_SLICES (p), Pixmap *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 IMAGE_INSTANCE_X_PIXMAP_SLICES (p) = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 if (IMAGE_INSTANCE_X_CURSOR (p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 XFreeCursor (dpy, IMAGE_INSTANCE_X_CURSOR (p));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 IMAGE_INSTANCE_X_CURSOR (p) = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 }
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
450
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 if (IMAGE_INSTANCE_X_NPIXELS (p) != 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 XFreeColors (dpy,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 IMAGE_INSTANCE_X_COLORMAP (p),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 IMAGE_INSTANCE_X_PIXELS (p),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 IMAGE_INSTANCE_X_NPIXELS (p), 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457 IMAGE_INSTANCE_X_NPIXELS (p) = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 /* You can sometimes have pixels without a live device. I forget
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 why, but that's why we free them here if we have a pixmap type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 image instance. It probably means that we might also get a memory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464 leak with widgets. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 if (IMAGE_INSTANCE_TYPE (p) != IMAGE_WIDGET
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466 && IMAGE_INSTANCE_TYPE (p) != IMAGE_SUBWINDOW
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467 && IMAGE_INSTANCE_X_PIXELS (p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 {
1726
a8d8f419b459 [xemacs-hg @ 2003-09-30 15:26:34 by james]
james
parents: 1346
diff changeset
469 xfree (IMAGE_INSTANCE_X_PIXELS (p), unsigned long *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 IMAGE_INSTANCE_X_PIXELS (p) = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472
1726
a8d8f419b459 [xemacs-hg @ 2003-09-30 15:26:34 by james]
james
parents: 1346
diff changeset
473 xfree (p->data, void *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 p->data = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 }
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 static int
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
478 x_image_instance_equal (Lisp_Image_Instance *p1,
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1913
diff changeset
479 Lisp_Image_Instance *p2, int UNUSED (depth))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 switch (IMAGE_INSTANCE_TYPE (p1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 case IMAGE_MONO_PIXMAP:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 case IMAGE_COLOR_PIXMAP:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 case IMAGE_POINTER:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486 if (IMAGE_INSTANCE_X_COLORMAP (p1) != IMAGE_INSTANCE_X_COLORMAP (p2) ||
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 IMAGE_INSTANCE_X_NPIXELS (p1) != IMAGE_INSTANCE_X_NPIXELS (p2))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 default:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
497 static Hashcode
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1913
diff changeset
498 x_image_instance_hash (Lisp_Image_Instance *p, int UNUSED (depth))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 switch (IMAGE_INSTANCE_TYPE (p))
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 case IMAGE_MONO_PIXMAP:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503 case IMAGE_COLOR_PIXMAP:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504 case IMAGE_POINTER:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 return IMAGE_INSTANCE_X_NPIXELS (p);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 default:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511 /* Set all the slots in an image instance structure to reasonable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512 default values. This is used somewhere within an instantiate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 method. It is assumed that the device slot within the image
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 instance is already set -- this is the case when instantiate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515 methods are called. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 static void
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
518 x_initialize_pixmap_image_instance (Lisp_Image_Instance *ii,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519 int slices,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520 enum image_instance_type type)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522 ii->data = xnew_and_zero (struct x_image_instance_data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523 IMAGE_INSTANCE_PIXMAP_MAXSLICE (ii) = slices;
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
524 IMAGE_INSTANCE_X_PIXMAP_SLICES (ii) =
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525 xnew_array_and_zero (Pixmap, slices);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 IMAGE_INSTANCE_TYPE (ii) = type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527 IMAGE_INSTANCE_PIXMAP_FILENAME (ii) = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528 IMAGE_INSTANCE_PIXMAP_MASK_FILENAME (ii) = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii) = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530 IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii) = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531 IMAGE_INSTANCE_PIXMAP_FG (ii) = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532 IMAGE_INSTANCE_PIXMAP_BG (ii) = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
533 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
534
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537 /* pixmap file functions */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 /************************************************************************/
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 /* Where bitmaps are; initialized from resource database */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541 Lisp_Object Vx_bitmap_file_path;
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 #ifndef BITMAPDIR
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544 #define BITMAPDIR "/usr/include/X11/bitmaps"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547 #define USE_XBMLANGPATH
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
548
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
549 /* Given a pixmap filename, look through all of the "standard" places
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
550 where the file might be located. Return a full pathname if found;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
551 otherwise, return Qnil. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
552
4226
9b4442ac18c7 [xemacs-hg @ 2007-10-15 09:55:43 by didierv]
didierv
parents: 3094
diff changeset
553 /* #### FIXME: when Qnil is returned, the caller can't make a difference
9b4442ac18c7 [xemacs-hg @ 2007-10-15 09:55:43 by didierv]
didierv
parents: 3094
diff changeset
554 #### between a non existing X device, an unreadable file, or an actual
9b4442ac18c7 [xemacs-hg @ 2007-10-15 09:55:43 by didierv]
didierv
parents: 3094
diff changeset
555 #### failure to locate the file, so the issued message is really not
9b4442ac18c7 [xemacs-hg @ 2007-10-15 09:55:43 by didierv]
didierv
parents: 3094
diff changeset
556 #### informative. -- dvl */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558 x_locate_pixmap_file (Lisp_Object name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560 /* This function can GC if IN_REDISPLAY is false */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561 Display *display;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563 /* #### Unix-specific */
4226
9b4442ac18c7 [xemacs-hg @ 2007-10-15 09:55:43 by didierv]
didierv
parents: 3094
diff changeset
564 if (string_byte (name, 0) == '~' ||
9b4442ac18c7 [xemacs-hg @ 2007-10-15 09:55:43 by didierv]
didierv
parents: 3094
diff changeset
565 string_byte (name, 0) == '/' ||
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 800
diff changeset
566 (string_byte (name, 0) == '.' &&
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 800
diff changeset
567 (string_byte (name, 1) == '/' ||
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 800
diff changeset
568 (string_byte (name, 1) == '.' &&
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 800
diff changeset
569 (string_byte (name, 2) == '/')))))
428
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 if (!NILP (Ffile_readable_p (name)))
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
572 return Fexpand_file_name (name, Qnil);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
573 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
575 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
576
4226
9b4442ac18c7 [xemacs-hg @ 2007-10-15 09:55:43 by didierv]
didierv
parents: 3094
diff changeset
577 /* Check non-absolute pathnames with a directory component relative to
9b4442ac18c7 [xemacs-hg @ 2007-10-15 09:55:43 by didierv]
didierv
parents: 3094
diff changeset
578 the search path; that's the way Xt does it. */
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
579 {
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
580 Lisp_Object defx = get_default_device (Qx);
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
581 if (NILP (defx))
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
582 /* This may occur during initialization. */
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
583 return Qnil;
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
584 else
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
585 /* We only check the bitmapFilePath resource on the original X device. */
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
586 display = DEVICE_X_DISPLAY (XDEVICE (defx));
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
587 }
428
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 #ifdef USE_XBMLANGPATH
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590 {
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
591 Ibyte *path = egetenv ("XBMLANGPATH");
940
79fb6b9e9f76 [xemacs-hg @ 2002-07-31 10:23:28 by adrian]
adrian
parents: 914
diff changeset
592 if (path)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
593 {
4252
8475ff9c49ea [xemacs-hg @ 2007-11-05 14:59:20 by didierv]
didierv
parents: 4226
diff changeset
594 Extbyte *pathext;
940
79fb6b9e9f76 [xemacs-hg @ 2002-07-31 10:23:28 by adrian]
adrian
parents: 914
diff changeset
595 SubstitutionRec subs[1];
79fb6b9e9f76 [xemacs-hg @ 2002-07-31 10:23:28 by adrian]
adrian
parents: 914
diff changeset
596 subs[0].match = 'B';
79fb6b9e9f76 [xemacs-hg @ 2002-07-31 10:23:28 by adrian]
adrian
parents: 914
diff changeset
597 LISP_STRING_TO_EXTERNAL (name, subs[0].substitution, Qfile_name);
79fb6b9e9f76 [xemacs-hg @ 2002-07-31 10:23:28 by adrian]
adrian
parents: 914
diff changeset
598 C_STRING_TO_EXTERNAL (path, pathext, Qfile_name);
79fb6b9e9f76 [xemacs-hg @ 2002-07-31 10:23:28 by adrian]
adrian
parents: 914
diff changeset
599 /* #### Motif uses a big hairy default if $XBMLANGPATH isn't set.
4252
8475ff9c49ea [xemacs-hg @ 2007-11-05 14:59:20 by didierv]
didierv
parents: 4226
diff changeset
600 We don't. If you want it used, set it. */
940
79fb6b9e9f76 [xemacs-hg @ 2002-07-31 10:23:28 by adrian]
adrian
parents: 914
diff changeset
601 if (pathext &&
79fb6b9e9f76 [xemacs-hg @ 2002-07-31 10:23:28 by adrian]
adrian
parents: 914
diff changeset
602 (pathext = XtResolvePathname (display, "bitmaps", 0, 0, pathext,
79fb6b9e9f76 [xemacs-hg @ 2002-07-31 10:23:28 by adrian]
adrian
parents: 914
diff changeset
603 subs, XtNumber (subs), 0)))
4252
8475ff9c49ea [xemacs-hg @ 2007-11-05 14:59:20 by didierv]
didierv
parents: 4226
diff changeset
604 {
8475ff9c49ea [xemacs-hg @ 2007-11-05 14:59:20 by didierv]
didierv
parents: 4226
diff changeset
605 name = build_ext_string (pathext, Qfile_name);
940
79fb6b9e9f76 [xemacs-hg @ 2002-07-31 10:23:28 by adrian]
adrian
parents: 914
diff changeset
606 XtFree (pathext);
79fb6b9e9f76 [xemacs-hg @ 2002-07-31 10:23:28 by adrian]
adrian
parents: 914
diff changeset
607 return (name);
79fb6b9e9f76 [xemacs-hg @ 2002-07-31 10:23:28 by adrian]
adrian
parents: 914
diff changeset
608 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609 }
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 #endif
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 if (NILP (Vx_bitmap_file_path))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
614 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
615 char *type = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
616 XrmValue value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
617 if (XrmGetResource (XtDatabase (display),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
618 "bitmapFilePath", "BitmapFilePath", &type, &value)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
619 && !strcmp (type, "String"))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
620 {
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
621 Ibyte *path;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
622
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
623 EXTERNAL_TO_C_STRING (value.addr, path, Qfile_name);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
624 Vx_bitmap_file_path = split_env_path (0, path);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
625 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
626 Vx_bitmap_file_path = nconc2 (Vx_bitmap_file_path,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
627 (split_external_path (BITMAPDIR)));
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
630 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631 Lisp_Object found;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
632 if (locate_file (Vx_bitmap_file_path, name, Qnil, &found, R_OK) < 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634 Lisp_Object temp = list1 (Vdata_directory);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635 struct gcpro gcpro1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 GCPRO1 (temp);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638 locate_file (temp, name, Qnil, &found, R_OK);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642 return found;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647 locate_pixmap_file (Lisp_Object name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649 return x_locate_pixmap_file (name);
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 /* cursor functions */
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657 /* Check that this server supports cursors of size WIDTH * HEIGHT. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658 not, signal an error. INSTANTIATOR is only used in the error
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 message. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661 static void
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 639
diff changeset
662 check_pointer_sizes (Screen *xs, int width, int height,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663 Lisp_Object instantiator)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 unsigned int best_width, best_height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666 if (! XQueryBestCursor (DisplayOfScreen (xs), RootWindowOfScreen (xs),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667 width, height, &best_width, &best_height))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668 /* this means that an X error of some sort occurred (we trap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
669 these so they're not fatal). */
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
670 gui_error ("XQueryBestCursor() failed?", instantiator);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 639
diff changeset
672 if (width > (int) best_width || height > (int) best_height)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
673 signal_ferror_with_frob (Qgui_error, instantiator,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
674 "pointer too large (%dx%d): "
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
675 "server requires %dx%d or smaller",
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
676 width, height, best_width, best_height);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
677 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
678
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
679
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681 generate_cursor_fg_bg (Lisp_Object device, Lisp_Object *foreground,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682 Lisp_Object *background, XColor *xfg, XColor *xbg)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
683 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684 if (!NILP (*foreground) && !COLOR_INSTANCEP (*foreground))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685 *foreground =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
686 Fmake_color_instance (*foreground, device,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
687 encode_error_behavior_flag (ERROR_ME));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
688 if (COLOR_INSTANCEP (*foreground))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
689 *xfg = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (*foreground));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
690 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
691 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
692 xfg->pixel = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
693 xfg->red = xfg->green = xfg->blue = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
694 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
695
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
696 if (!NILP (*background) && !COLOR_INSTANCEP (*background))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
697 *background =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
698 Fmake_color_instance (*background, device,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
699 encode_error_behavior_flag (ERROR_ME));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
700 if (COLOR_INSTANCEP (*background))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
701 *xbg = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (*background));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
702 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
703 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
704 xbg->pixel = 0;
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 454
diff changeset
705 xbg->red = xbg->green = xbg->blue = USHRT_MAX;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
706 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
707 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
708
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
709 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
710 maybe_recolor_cursor (Lisp_Object image_instance, Lisp_Object foreground,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
711 Lisp_Object background)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
712 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
713 Lisp_Object device = XIMAGE_INSTANCE_DEVICE (image_instance);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
714 XColor xfg, xbg;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
715
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
716 generate_cursor_fg_bg (device, &foreground, &background, &xfg, &xbg);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
717 if (!NILP (foreground) || !NILP (background))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
718 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
719 XRecolorCursor (DEVICE_X_DISPLAY (XDEVICE (device)),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
720 XIMAGE_INSTANCE_X_CURSOR (image_instance),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
721 &xfg, &xbg);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
722 XIMAGE_INSTANCE_PIXMAP_FG (image_instance) = foreground;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
723 XIMAGE_INSTANCE_PIXMAP_BG (image_instance) = background;
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 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
726
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
727
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
728 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
729 /* color pixmap functions */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
730 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
731
2959
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
732 /* Create a pointer from a color pixmap. */
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
733
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
734 static void
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
735 image_instance_convert_to_pointer (Lisp_Image_Instance *ii,
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
736 Lisp_Object instantiator,
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
737 Lisp_Object pointer_fg,
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
738 Lisp_Object pointer_bg)
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
739 {
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
740 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
741 Display *dpy = DEVICE_X_DISPLAY (XDEVICE (device));
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
742 Screen *xs = DefaultScreenOfDisplay (dpy);
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
743 int npixels = IMAGE_INSTANCE_X_NPIXELS (ii);
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
744 unsigned long *pixels = IMAGE_INSTANCE_X_PIXELS (ii);
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
745 Pixmap pixmap = IMAGE_INSTANCE_X_PIXMAP (ii);
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
746 Pixmap mask = (Pixmap) IMAGE_INSTANCE_PIXMAP_MASK (ii);
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
747 Colormap cmap;
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
748 XColor fg, bg;
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
749 int i;
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
750 int xhot = 0, yhot = 0;
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
751 int w, h;
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
752
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
753 if (INTP (IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii)))
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
754 xhot = XINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii));
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
755 if (INTP (IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii)))
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
756 yhot = XINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii));
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
757 w = IMAGE_INSTANCE_PIXMAP_WIDTH (ii);
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
758 h = IMAGE_INSTANCE_PIXMAP_HEIGHT (ii);
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
759
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
760 #if 1
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
761 /* Although I haven't found it documented yet, it appears that pointers are
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
762 always colored via the default window colormap... Sigh. */
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
763 cmap = DefaultColormap (dpy, DefaultScreen (dpy));
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
764 IMAGE_INSTANCE_X_COLORMAP (ii) = cmap;
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
765 #else
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
766 cmap = IMAGE_INSTANCE_X_COLORMAP (ii);
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
767 #endif
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
768
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
769 check_pointer_sizes (xs, w, h, instantiator);
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
770
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
771 /* If the loaded pixmap has colors allocated (meaning it came from an
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
772 XPM file), then use those as the default colors for the cursor we
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
773 create. Otherwise, default to pointer_fg and pointer_bg.
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
774 */
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
775 if (npixels >= 2)
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
776 {
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
777 /* With an XBM file, it's obvious which bit is foreground
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
778 and which is background, or rather, it's implicit: in
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
779 an XBM file, a 1 bit is foreground, and a 0 bit is
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
780 background.
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
781
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
782 XCreatePixmapCursor() assumes this property of the
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
783 pixmap it is called with as well; the `foreground'
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
784 color argument is used for the 1 bits.
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
785
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
786 With an XPM file, it's tricker, since the elements of
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
787 the pixmap don't represent FG and BG, but are actual
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
788 pixel values. So we need to figure out which of those
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
789 pixels is the foreground color and which is the
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
790 background. We do it by comparing RGB and assuming
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
791 that the darker color is the foreground. This works
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
792 with the result of xbmtopbm|ppmtoxpm, at least.
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
793
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
794 It might be nice if there was some way to tag the
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
795 colors in the XPM file with whether they are the
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
796 foreground - perhaps with logical color names somehow?
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
797
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
798 Once we have decided which color is the foreground, we
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
799 need to ensure that that color corresponds to a `1' bit
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
800 in the Pixmap. The XPM library wrote into the (1-bit)
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
801 pixmap with XPutPixel, which will ignore all but the
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
802 least significant bit.
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
803
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
804 This means that a 1 bit in the image corresponds to
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
805 `fg' only if `fg.pixel' is odd.
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
806
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
807 (This also means that the image will be all the same
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
808 color if both `fg' and `bg' are odd or even, but we can
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
809 safely assume that that won't happen if the XPM file is
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
810 sensible I think.)
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
811
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
812 The desired result is that the image use `1' to
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
813 represent the foreground color, and `0' to represent
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
814 the background color. So, we may need to invert the
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
815 image to accomplish this; we invert if fg is
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
816 odd. (Remember that WhitePixel and BlackPixel are not
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
817 necessarily 1 and 0 respectively, though I think it
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
818 might be safe to assume that one of them is always 1
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
819 and the other is always 0. We also pretty much need to
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
820 assume that one is even and the other is odd.)
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
821 */
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
822
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
823 fg.pixel = pixels[0]; /* pick a pixel at random. */
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
824 bg.pixel = fg.pixel;
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
825 for (i = 1; i < npixels; i++) /* Look for an "other" pixel value.*/
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
826 {
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
827 bg.pixel = pixels[i];
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
828 if (fg.pixel != bg.pixel)
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
829 break;
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
830 }
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
831
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
832 /* If (fg.pixel == bg.pixel) then probably something has
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
833 gone wrong, but I don't think signalling an error would
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
834 be appropriate. */
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
835
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
836 XQueryColor (dpy, cmap, &fg);
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
837 XQueryColor (dpy, cmap, &bg);
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
838
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
839 /* If the foreground is lighter than the background, swap them.
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
840 (This occurs semi-randomly, depending on the ordering of the
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
841 color list in the XPM file.)
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
842 */
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
843 {
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
844 unsigned short fg_total = ((fg.red / 3) + (fg.green / 3)
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
845 + (fg.blue / 3));
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
846 unsigned short bg_total = ((bg.red / 3) + (bg.green / 3)
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
847 + (bg.blue / 3));
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
848 if (fg_total > bg_total)
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
849 {
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
850 XColor swap;
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
851 swap = fg;
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
852 fg = bg;
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
853 bg = swap;
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
854 }
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
855 }
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
856
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
857 /* If the fg pixel corresponds to a `0' in the bitmap, invert it.
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
858 (This occurs (only?) on servers with Black=0, White=1.)
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
859 */
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
860 if ((fg.pixel & 1) == 0)
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
861 {
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
862 XGCValues gcv;
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
863 GC gc;
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
864 gcv.function = GXxor;
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
865 gcv.foreground = 1;
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
866 gc = XCreateGC (dpy, pixmap, (GCFunction | GCForeground),
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
867 &gcv);
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
868 XFillRectangle (dpy, pixmap, gc, 0, 0, w, h);
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
869 XFreeGC (dpy, gc);
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
870 }
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
871 }
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
872 else
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
873 {
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
874 generate_cursor_fg_bg (device, &pointer_fg, &pointer_bg,
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
875 &fg, &bg);
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
876 IMAGE_INSTANCE_PIXMAP_FG (ii) = pointer_fg;
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
877 IMAGE_INSTANCE_PIXMAP_BG (ii) = pointer_bg;
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
878 }
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
879
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
880 IMAGE_INSTANCE_X_CURSOR (ii) =
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
881 XCreatePixmapCursor
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
882 (dpy, pixmap, mask, &fg, &bg, xhot, yhot);
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
883 }
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
884
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
885 /* Initialize an image instance from an XImage.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
886
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
887 DEST_MASK specifies the mask of allowed image types.
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 PIXELS and NPIXELS specify an array of pixels that are used in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
890 the image. These need to be kept around for the duration of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
891 image. When the image instance is freed, XFreeColors() will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
892 automatically be called on all the pixels specified here; thus,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
893 you should have allocated the pixels yourself using XAllocColor()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
894 or the like. The array passed in is used directly without
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
895 being copied, so it should be heap data created with xmalloc().
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
896 It will be freed using xfree() when the image instance is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
897 destroyed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
898
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
899 If this fails, signal an error. INSTANTIATOR is only used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
900 in the error message.
2959
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
901 */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
902
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
903 static void
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
904 init_image_instance_from_x_image (Lisp_Image_Instance *ii,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
905 XImage *ximage,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
906 int dest_mask,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
907 Colormap cmap,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
908 unsigned long *pixels,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
909 int npixels,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
910 int slices,
2959
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
911 Lisp_Object instantiator,
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
912 Lisp_Object pointer_fg,
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
913 Lisp_Object pointer_bg)
428
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 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
916 Display *dpy;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
917 GC gc;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
918 Drawable d;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
919 Pixmap pixmap;
2959
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
920 enum image_instance_type type;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
921
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
922 if (!DEVICE_X_P (XDEVICE (device)))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
923 gui_error ("Not an X device", device);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
924
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
925 dpy = DEVICE_X_DISPLAY (XDEVICE (device));
2959
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
926 d = XtWindow (DEVICE_XT_APP_SHELL (XDEVICE (device)));
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
927
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
928 if (dest_mask & IMAGE_COLOR_PIXMAP_MASK)
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
929 type = IMAGE_COLOR_PIXMAP;
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
930 else if (dest_mask & IMAGE_POINTER_MASK)
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
931 type = IMAGE_POINTER;
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
932 else
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
933 incompatible_image_types (instantiator, dest_mask,
2959
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
934 IMAGE_COLOR_PIXMAP_MASK
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
935 | IMAGE_POINTER_MASK);
428
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 pixmap = XCreatePixmap (dpy, d, ximage->width,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
938 ximage->height, ximage->depth);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
939 if (!pixmap)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
940 gui_error ("Unable to create pixmap", instantiator);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
941
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
942 gc = XCreateGC (dpy, pixmap, 0, NULL);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
943 if (!gc)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
944 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
945 XFreePixmap (dpy, pixmap);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
946 gui_error ("Unable to create GC", instantiator);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
947 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
948
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
949 XPutImage (dpy, pixmap, gc, ximage, 0, 0, 0, 0,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
950 ximage->width, ximage->height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
951
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
952 XFreeGC (dpy, gc);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
953
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
954 x_initialize_pixmap_image_instance (ii, slices, IMAGE_COLOR_PIXMAP);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
955
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
956 IMAGE_INSTANCE_PIXMAP_FILENAME (ii) =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
957 find_keyword_in_vector (instantiator, Q_file);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
958
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
959 /* Fixup a set of pixmaps. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
960 IMAGE_INSTANCE_X_PIXMAP (ii) = pixmap;
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 IMAGE_INSTANCE_PIXMAP_MASK (ii) = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
963 IMAGE_INSTANCE_PIXMAP_WIDTH (ii) = ximage->width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
964 IMAGE_INSTANCE_PIXMAP_HEIGHT (ii) = ximage->height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
965 IMAGE_INSTANCE_PIXMAP_DEPTH (ii) = ximage->depth;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
966 IMAGE_INSTANCE_X_COLORMAP (ii) = cmap;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
967 IMAGE_INSTANCE_X_PIXELS (ii) = pixels;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
968 IMAGE_INSTANCE_X_NPIXELS (ii) = npixels;
2959
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
969
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
970 if (type == IMAGE_POINTER)
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
971 image_instance_convert_to_pointer (ii, instantiator, pointer_fg,
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
972 pointer_bg);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
973 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
974
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
975 static void
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
976 image_instance_add_x_image (Lisp_Image_Instance *ii,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
977 XImage *ximage,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
978 int slice,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
979 Lisp_Object instantiator)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
980 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
981 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
982 Display *dpy;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
983 GC gc;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
984 Drawable d;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
985 Pixmap pixmap;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
986
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
987 dpy = DEVICE_X_DISPLAY (XDEVICE (device));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
988 d = XtWindow(DEVICE_XT_APP_SHELL (XDEVICE (device)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
989
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
990 pixmap = XCreatePixmap (dpy, d, ximage->width,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
991 ximage->height, ximage->depth);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
992 if (!pixmap)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
993 gui_error ("Unable to create pixmap", instantiator);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
994
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
995 gc = XCreateGC (dpy, pixmap, 0, NULL);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
996 if (!gc)
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 XFreePixmap (dpy, pixmap);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
999 gui_error ("Unable to create GC", instantiator);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1000 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1001
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1002 XPutImage (dpy, pixmap, gc, ximage, 0, 0, 0, 0,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1003 ximage->width, ximage->height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1004
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1005 XFreeGC (dpy, gc);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1006
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1007 IMAGE_INSTANCE_X_PIXMAP_SLICE (ii, slice) = pixmap;
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1010 static void
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1011 x_init_image_instance_from_eimage (Lisp_Image_Instance *ii,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1012 int width, int height,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1013 int slices,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
1014 Binbyte *eimage,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1015 int dest_mask,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1016 Lisp_Object instantiator,
2959
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
1017 Lisp_Object pointer_fg,
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
1018 Lisp_Object pointer_bg,
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1913
diff changeset
1019 Lisp_Object UNUSED (domain))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1020 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1021 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1022 Colormap cmap = DEVICE_X_COLORMAP (XDEVICE(device));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1023 unsigned long *pixtbl = NULL;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1024 int npixels = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1025 int slice;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1026 XImage* ximage;
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 for (slice = 0; slice < slices; slice++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1029 {
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
1030 ximage = convert_EImage_to_XImage (device, width, height,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1031 eimage + (width * height * 3 * slice),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1032 &pixtbl, &npixels);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1033 if (!ximage)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1034 {
1726
a8d8f419b459 [xemacs-hg @ 2003-09-30 15:26:34 by james]
james
parents: 1346
diff changeset
1035 if (pixtbl)
a8d8f419b459 [xemacs-hg @ 2003-09-30 15:26:34 by james]
james
parents: 1346
diff changeset
1036 xfree (pixtbl, unsigned long *);
2959
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
1037 signal_image_error ("EImage to XImage conversion failed",
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
1038 instantiator);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1039 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1040
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1041 /* Now create the pixmap and set up the image instance */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1042 if (slice == 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1043 init_image_instance_from_x_image (ii, ximage, dest_mask,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1044 cmap, pixtbl, npixels, slices,
2959
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
1045 instantiator, pointer_fg,
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
1046 pointer_bg);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1047 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1048 image_instance_add_x_image (ii, ximage, slice, instantiator);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1049
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1050 if (ximage)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1051 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1052 if (ximage->data)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1053 {
1726
a8d8f419b459 [xemacs-hg @ 2003-09-30 15:26:34 by james]
james
parents: 1346
diff changeset
1054 xfree (ximage->data, char *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1055 ximage->data = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1056 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1057 XDestroyImage (ximage);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1058 ximage = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1059 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1060 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1061 }
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 /* Given inline data for a mono pixmap, create and return the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1064 corresponding X object. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1065
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1066 static Pixmap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1067 pixmap_from_xbm_inline (Lisp_Object device, int width, int height,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
1068 CBinbyte *bits)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1069 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1070 return XCreatePixmapFromBitmapData (DEVICE_X_DISPLAY (XDEVICE (device)),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1071 XtWindow (DEVICE_XT_APP_SHELL
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1072 (XDEVICE (device))),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1073 bits, width, height,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1074 1, 0, 1);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1075 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1076
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1077 /* Given inline data for a mono pixmap, initialize the given
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1078 image instance accordingly. */
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 void
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1081 init_image_instance_from_xbm_inline (Lisp_Image_Instance *ii,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1082 int width, int height,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
1083 CBinbyte *bits,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1084 Lisp_Object instantiator,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1085 Lisp_Object pointer_fg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1086 Lisp_Object pointer_bg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1087 int dest_mask,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1088 Pixmap mask,
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1913
diff changeset
1089 Lisp_Object UNUSED (mask_filename))
428
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 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1092 Lisp_Object foreground = find_keyword_in_vector (instantiator, Q_foreground);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1093 Lisp_Object background = find_keyword_in_vector (instantiator, Q_background);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1094 Display *dpy;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1095 Screen *scr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1096 Drawable draw;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1097 enum image_instance_type type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1098
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1099 if (!DEVICE_X_P (XDEVICE (device)))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1100 gui_error ("Not an X device", device);
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 dpy = DEVICE_X_DISPLAY (XDEVICE (device));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1103 draw = XtWindow(DEVICE_XT_APP_SHELL (XDEVICE (device)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1104 scr = DefaultScreenOfDisplay (dpy);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1105
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1106 if ((dest_mask & IMAGE_MONO_PIXMAP_MASK) &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1107 (dest_mask & IMAGE_COLOR_PIXMAP_MASK))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1108 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1109 if (!NILP (foreground) || !NILP (background))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1110 type = IMAGE_COLOR_PIXMAP;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1111 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1112 type = IMAGE_MONO_PIXMAP;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1113 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1114 else if (dest_mask & IMAGE_MONO_PIXMAP_MASK)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1115 type = IMAGE_MONO_PIXMAP;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1116 else if (dest_mask & IMAGE_COLOR_PIXMAP_MASK)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1117 type = IMAGE_COLOR_PIXMAP;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1118 else if (dest_mask & IMAGE_POINTER_MASK)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1119 type = IMAGE_POINTER;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1120 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1121 incompatible_image_types (instantiator, dest_mask,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1122 IMAGE_MONO_PIXMAP_MASK | IMAGE_COLOR_PIXMAP_MASK
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1123 | IMAGE_POINTER_MASK);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1124
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1125 x_initialize_pixmap_image_instance (ii, 1, type);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1126 IMAGE_INSTANCE_PIXMAP_WIDTH (ii) = width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1127 IMAGE_INSTANCE_PIXMAP_HEIGHT (ii) = height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1128 IMAGE_INSTANCE_PIXMAP_FILENAME (ii) =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1129 find_keyword_in_vector (instantiator, Q_file);
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 switch (type)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1132 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1133 case IMAGE_MONO_PIXMAP:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1134 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1135 IMAGE_INSTANCE_X_PIXMAP (ii) =
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1136 pixmap_from_xbm_inline (device, width, height, bits);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1137 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1138 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1139
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1140 case IMAGE_COLOR_PIXMAP:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1141 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1142 Dimension d = DEVICE_X_DEPTH (XDEVICE(device));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1143 unsigned long fg = BlackPixelOfScreen (scr);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1144 unsigned long bg = WhitePixelOfScreen (scr);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1145
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1146 if (!NILP (foreground) && !COLOR_INSTANCEP (foreground))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1147 foreground =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1148 Fmake_color_instance (foreground, device,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1149 encode_error_behavior_flag (ERROR_ME));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1150
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1151 if (COLOR_INSTANCEP (foreground))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1152 fg = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (foreground)).pixel;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1153
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1154 if (!NILP (background) && !COLOR_INSTANCEP (background))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1155 background =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1156 Fmake_color_instance (background, device,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1157 encode_error_behavior_flag (ERROR_ME));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1158
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1159 if (COLOR_INSTANCEP (background))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1160 bg = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (background)).pixel;
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 /* We used to duplicate the pixels using XAllocColor(), to protect
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1163 against their getting freed. Just as easy to just store the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1164 color instances here and GC-protect them, so this doesn't
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1165 happen. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1166 IMAGE_INSTANCE_PIXMAP_FG (ii) = foreground;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1167 IMAGE_INSTANCE_PIXMAP_BG (ii) = background;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1168 IMAGE_INSTANCE_X_PIXMAP (ii) =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1169 XCreatePixmapFromBitmapData (dpy, draw,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
1170 (CBinbyte *) bits, width, height,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1171 fg, bg, d);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1172 IMAGE_INSTANCE_PIXMAP_DEPTH (ii) = d;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1173 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1174 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1175
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1176 case IMAGE_POINTER:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1177 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1178 XColor fg_color, bg_color;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1179 Pixmap source;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1180
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1181 check_pointer_sizes (scr, width, height, instantiator);
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 source =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1184 XCreatePixmapFromBitmapData (dpy, draw,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
1185 (CBinbyte *) bits, width, height,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1186 1, 0, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1187
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1188 if (NILP (foreground))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1189 foreground = pointer_fg;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1190 if (NILP (background))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1191 background = pointer_bg;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1192 generate_cursor_fg_bg (device, &foreground, &background,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1193 &fg_color, &bg_color);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1194
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1195 IMAGE_INSTANCE_PIXMAP_FG (ii) = foreground;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1196 IMAGE_INSTANCE_PIXMAP_BG (ii) = background;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1197 IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii) =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1198 find_keyword_in_vector (instantiator, Q_hotspot_x);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1199 IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii) =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1200 find_keyword_in_vector (instantiator, Q_hotspot_y);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1201 IMAGE_INSTANCE_X_CURSOR (ii) =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1202 XCreatePixmapCursor
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1203 (dpy, source, mask, &fg_color, &bg_color,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1204 !NILP (IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii)) ?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1205 XINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii)) : 0,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1206 !NILP (IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii)) ?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1207 XINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii)) : 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1208 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1209 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1210
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1211 default:
2500
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 2421
diff changeset
1212 ABORT ();
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1213 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1214 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1215
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1216 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1217 xbm_instantiate_1 (Lisp_Object image_instance, Lisp_Object instantiator,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1218 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1219 int dest_mask, int width, int height,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
1220 CBinbyte *bits)
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 Lisp_Object mask_data = find_keyword_in_vector (instantiator, Q_mask_data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1223 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
1224 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1225 Pixmap mask = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1226
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1227 if (!NILP (mask_data))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1228 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
1229 CBinbyte *ext_data;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1230
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1231 LISP_STRING_TO_EXTERNAL (XCAR (XCDR (XCDR (mask_data))), ext_data,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1232 Qbinary);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1233 mask = pixmap_from_xbm_inline (IMAGE_INSTANCE_DEVICE (ii),
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1234 XINT (XCAR (mask_data)),
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1235 XINT (XCAR (XCDR (mask_data))),
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1236 ext_data);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1237 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1238
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1239 init_image_instance_from_xbm_inline (ii, width, height, bits,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1240 instantiator, pointer_fg, pointer_bg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1241 dest_mask, mask, mask_file);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1242 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1243
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1244 /* Instantiate method for XBM's. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1245
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1246 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1247 x_xbm_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1248 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1913
diff changeset
1249 int dest_mask, Lisp_Object UNUSED (domain))
428
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 Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
1252 CBinbyte *ext_data;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1253
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1254 assert (!NILP (data));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1255
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1256 LISP_STRING_TO_EXTERNAL (XCAR (XCDR (XCDR (data))), ext_data, Qbinary);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1257
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1258 xbm_instantiate_1 (image_instance, instantiator, pointer_fg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1259 pointer_bg, dest_mask, XINT (XCAR (data)),
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1260 XINT (XCAR (XCDR (data))), ext_data);
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1263
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1264 #ifdef HAVE_XPM
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1265
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 * XPM *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1268 **********************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1269 /* xpm 3.2g and better has XpmCreatePixmapFromBuffer()...
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1270 There was no version number in xpm.h before 3.3, but this should do.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1271 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1272 #if (XpmVersion >= 3) || defined(XpmExactColors)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1273 # define XPM_DOES_BUFFERS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1274 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1275
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1276 #ifndef XPM_DOES_BUFFERS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1277 Your version of XPM is too old. You cannot compile with it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1278 Upgrade to version 3.2g or better or compile with --with-xpm=no.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1279 #endif /* !XPM_DOES_BUFFERS */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1280
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1281 static XpmColorSymbol *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1282 extract_xpm_color_names (XpmAttributes *xpmattrs, Lisp_Object device,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1283 Lisp_Object domain,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1284 Lisp_Object color_symbol_alist)
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 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1287 Display *dpy = DEVICE_X_DISPLAY (XDEVICE(device));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1288 Colormap cmap = DEVICE_X_COLORMAP (XDEVICE(device));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1289 XColor color;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1290 Lisp_Object rest;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1291 Lisp_Object results = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1292 int i;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1293 XpmColorSymbol *symbols;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1294 struct gcpro gcpro1, gcpro2;
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 GCPRO2 (results, device);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1297
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1298 /* We built up results to be (("name" . #<color>) ...) so that if an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1299 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
1300 leave any pixels allocated in the server. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1301 i = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1302 LIST_LOOP (rest, color_symbol_alist)
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 Lisp_Object cons = XCAR (rest);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1305 Lisp_Object name = XCAR (cons);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1306 Lisp_Object value = XCDR (cons);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1307 if (NILP (value))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1308 continue;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1309 if (STRINGP (value))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1310 value =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1311 Fmake_color_instance
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1312 (value, device, encode_error_behavior_flag (ERROR_ME_DEBUG_WARN));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1313 else
4252
8475ff9c49ea [xemacs-hg @ 2007-11-05 14:59:20 by didierv]
didierv
parents: 4226
diff changeset
1314 {
8475ff9c49ea [xemacs-hg @ 2007-11-05 14:59:20 by didierv]
didierv
parents: 4226
diff changeset
1315 assert (COLOR_SPECIFIERP (value));
8475ff9c49ea [xemacs-hg @ 2007-11-05 14:59:20 by didierv]
didierv
parents: 4226
diff changeset
1316 value = Fspecifier_instance (value, domain, Qnil, Qnil);
8475ff9c49ea [xemacs-hg @ 2007-11-05 14:59:20 by didierv]
didierv
parents: 4226
diff changeset
1317 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1318 if (NILP (value))
4252
8475ff9c49ea [xemacs-hg @ 2007-11-05 14:59:20 by didierv]
didierv
parents: 4226
diff changeset
1319 continue;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1320 results = noseeum_cons (noseeum_cons (name, value), results);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1321 i++;
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 UNGCPRO; /* no more evaluation */
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 if (i == 0) return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1326
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1327 symbols = xnew_array (XpmColorSymbol, i);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1328 xpmattrs->valuemask |= XpmColorSymbols;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1329 xpmattrs->colorsymbols = symbols;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1330 xpmattrs->numsymbols = i;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1331
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1332 while (--i >= 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1333 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1334 Lisp_Object cons = XCAR (results);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1335 color = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (XCDR (cons)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1336 /* Duplicate the pixel value so that we still have a lock on it if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1337 the pixel we were passed is later freed. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1338 if (! XAllocColor (dpy, cmap, &color))
2500
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 2421
diff changeset
1339 ABORT (); /* it must be allocable since we're just duplicating it */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1340
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1341 TO_EXTERNAL_FORMAT (LISP_STRING, XCAR (cons), C_STRING_MALLOC,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1342 symbols[i].name, Qctext);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1343 symbols[i].pixel = color.pixel;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1344 symbols[i].value = 0;
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
1345 free_cons (cons);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1346 cons = results;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1347 results = XCDR (results);
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
1348 free_cons (cons);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1349 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1350 return symbols;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1351 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1352
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1353 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1354 xpm_free (XpmAttributes *xpmattrs)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1355 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1356 /* Could conceivably lose if XpmXXX returned an error without first
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1357 initializing this structure, if we didn't know that initializing it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1358 to all zeros was ok (and also that it's ok to call XpmFreeAttributes()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1359 multiple times, since it zeros slots as it frees them...) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1360 XpmFreeAttributes (xpmattrs);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1361 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1362
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1363 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1364 x_xpm_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
1365 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
1366 int dest_mask, Lisp_Object domain)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1367 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1368 /* This function can GC */
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1369 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1370 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1371 Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1372 Display *dpy;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1373 Screen *xs;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1374 Colormap cmap;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1375 int depth;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1376 Visual *visual;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1377 Pixmap pixmap;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1378 Pixmap mask = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1379 XpmAttributes xpmattrs;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1380 int result;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1381 XpmColorSymbol *color_symbols;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1382 Lisp_Object color_symbol_alist = find_keyword_in_vector (instantiator,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1383 Q_color_symbols);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1384 enum image_instance_type type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1385 int force_mono;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 639
diff changeset
1386 int w, h;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1387
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1388 if (!DEVICE_X_P (XDEVICE (device)))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1389 gui_error ("Not an X device", device);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1390
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1391 dpy = DEVICE_X_DISPLAY (XDEVICE (device));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1392 xs = DefaultScreenOfDisplay (dpy);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1393
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1394 if (dest_mask & IMAGE_COLOR_PIXMAP_MASK)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1395 type = IMAGE_COLOR_PIXMAP;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1396 else if (dest_mask & IMAGE_MONO_PIXMAP_MASK)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1397 type = IMAGE_MONO_PIXMAP;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1398 else if (dest_mask & IMAGE_POINTER_MASK)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1399 type = IMAGE_POINTER;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1400 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1401 incompatible_image_types (instantiator, dest_mask,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1402 IMAGE_MONO_PIXMAP_MASK | IMAGE_COLOR_PIXMAP_MASK
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1403 | IMAGE_POINTER_MASK);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1404 force_mono = (type != IMAGE_COLOR_PIXMAP);
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 #if 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1407 /* Although I haven't found it documented yet, it appears that pointers are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1408 always colored via the default window colormap... Sigh. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1409 if (type == IMAGE_POINTER)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1410 {
2959
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
1411 cmap = DefaultColormap (dpy, DefaultScreen (dpy));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1412 depth = DefaultDepthOfScreen (xs);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1413 visual = DefaultVisualOfScreen (xs);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1414 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1415 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1416 {
2959
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
1417 cmap = DEVICE_X_COLORMAP (XDEVICE (device));
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
1418 depth = DEVICE_X_DEPTH (XDEVICE (device));
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
1419 visual = DEVICE_X_VISUAL (XDEVICE (device));
428
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 #else
2959
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
1422 cmap = DEVICE_X_COLORMAP (XDEVICE (device));
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
1423 depth = DEVICE_X_DEPTH (XDEVICE (device));
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
1424 visual = DEVICE_X_VISUAL (XDEVICE (device));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1425 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1426
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1427 x_initialize_pixmap_image_instance (ii, 1, type);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1429 assert (!NILP (data));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1430
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1431 retry:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1432
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1433 xzero (xpmattrs); /* want XpmInitAttributes() */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1434 xpmattrs.valuemask = XpmReturnPixels;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1435 if (force_mono)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1436 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1437 /* Without this, we get a 1-bit version of the color image, which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1438 isn't quite right. With this, we get the mono image, which might
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1439 be very different looking. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1440 xpmattrs.valuemask |= XpmColorKey;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1441 xpmattrs.color_key = XPM_MONO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1442 xpmattrs.depth = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1443 xpmattrs.valuemask |= XpmDepth;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1444 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1445 else
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 xpmattrs.closeness = 65535;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1448 xpmattrs.valuemask |= XpmCloseness;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1449 xpmattrs.depth = depth;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1450 xpmattrs.valuemask |= XpmDepth;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1451 xpmattrs.visual = visual;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1452 xpmattrs.valuemask |= XpmVisual;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1453 xpmattrs.colormap = cmap;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1454 xpmattrs.valuemask |= XpmColormap;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1455 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1456
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1457 color_symbols = extract_xpm_color_names (&xpmattrs, device, domain,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1458 color_symbol_alist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1459
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1460 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1461 Extbyte *dataext;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1462
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1463 LISP_STRING_TO_EXTERNAL (data, dataext, Qctext);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1464
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1465 result =
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1466 XpmCreatePixmapFromBuffer (dpy,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1467 XtWindow
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1468 (DEVICE_XT_APP_SHELL (XDEVICE(device))),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1469 dataext, &pixmap, &mask, &xpmattrs);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1470 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1471
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1472 if (color_symbols)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1473 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1474 int i;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1475
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1476 for (i = 0; i < (int) xpmattrs.numsymbols; i++)
1726
a8d8f419b459 [xemacs-hg @ 2003-09-30 15:26:34 by james]
james
parents: 1346
diff changeset
1477 xfree (color_symbols[i].name, char *);
a8d8f419b459 [xemacs-hg @ 2003-09-30 15:26:34 by james]
james
parents: 1346
diff changeset
1478 xfree (color_symbols, XpmColorSymbol *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1479 xpmattrs.colorsymbols = 0; /* in case XpmFreeAttr is too smart... */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1480 xpmattrs.numsymbols = 0;
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1483 switch (result)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1484 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1485 case XpmSuccess:
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 case XpmFileInvalid:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1488 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1489 xpm_free (&xpmattrs);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1490 signal_image_error ("invalid XPM data", data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1491 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1492 case XpmColorFailed:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1493 case XpmColorError:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1494 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1495 xpm_free (&xpmattrs);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1496 if (force_mono)
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 /* second time; blow out. */
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1499 gui_error ("XPM color allocation failed", data);
428
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 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1502 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1503 /* second time; blow out. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1504 if (! (dest_mask & IMAGE_MONO_PIXMAP_MASK))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1505 gui_error ("XPM color allocation failed", data);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1506 force_mono = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1507 IMAGE_INSTANCE_TYPE (ii) = IMAGE_MONO_PIXMAP;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1508 goto retry;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1509 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1510 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1511 case XpmNoMemory:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1512 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1513 xpm_free (&xpmattrs);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1514 out_of_memory ("Parsing pixmap data", data);
428
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 default:
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 xpm_free (&xpmattrs);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1519 signal_error_2 (Qgui_error,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1520 "Parsing pixmap data: unknown error code",
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1521 make_int (result), data);
428
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 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1524
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1525 w = xpmattrs.width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1526 h = xpmattrs.height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1527
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1528 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1529 int npixels = xpmattrs.npixels;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1530 Pixel *pixels;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1531
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1532 if (npixels != 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1533 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1534 pixels = xnew_array (Pixel, npixels);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1535 memcpy (pixels, xpmattrs.pixels, npixels * sizeof (Pixel));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1536 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1537 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1538 pixels = NULL;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1539
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1540 IMAGE_INSTANCE_X_PIXMAP (ii) = pixmap;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1541 IMAGE_INSTANCE_PIXMAP_MASK (ii) = (void*)mask;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1542 IMAGE_INSTANCE_X_COLORMAP (ii) = cmap;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1543 IMAGE_INSTANCE_X_PIXELS (ii) = pixels;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1544 IMAGE_INSTANCE_X_NPIXELS (ii) = npixels;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1545 IMAGE_INSTANCE_PIXMAP_WIDTH (ii) = w;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1546 IMAGE_INSTANCE_PIXMAP_HEIGHT (ii) = h;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1547 IMAGE_INSTANCE_PIXMAP_FILENAME (ii) =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1548 find_keyword_in_vector (instantiator, Q_file);
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 switch (type)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1552 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1553 case IMAGE_MONO_PIXMAP:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1554 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1555
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1556 case IMAGE_COLOR_PIXMAP:
2959
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
1557 IMAGE_INSTANCE_PIXMAP_DEPTH (ii) = depth;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1558 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1559
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1560 case IMAGE_POINTER:
2959
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
1561 if (xpmattrs.valuemask & XpmHotspot)
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
1562 IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii) = make_int (xpmattrs.x_hotspot);
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
1563 if (xpmattrs.valuemask & XpmHotspot)
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
1564 IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii) = make_int (xpmattrs.y_hotspot);
4252
8475ff9c49ea [xemacs-hg @ 2007-11-05 14:59:20 by didierv]
didierv
parents: 4226
diff changeset
1565
2959
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
1566 image_instance_convert_to_pointer (ii, instantiator, pointer_fg,
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
1567 pointer_bg);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1568 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1569
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1570 default:
2500
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 2421
diff changeset
1571 ABORT ();
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1572 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1573
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1574 xpm_free (&xpmattrs); /* after we've read pixels and hotspot */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1575 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1576
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1577 #endif /* HAVE_XPM */
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1580 #ifdef HAVE_XFACE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1581
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 * X-Face *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1584 **********************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1585 #if defined(EXTERN)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1586 /* This is about to get redefined! */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1587 #undef EXTERN
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1588 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1589 /* We have to define SYSV32 so that compface.h includes string.h
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1590 instead of strings.h. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1591 #define SYSV32
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
1592 BEGIN_C_DECLS
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1593 #include <compface.h>
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
1594 END_C_DECLS
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
1595
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1596 /* 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
1597 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
1598 definition in compface.h */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1599 extern jmp_buf comp_env;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1600 #undef SYSV32
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1601
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1602 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1603 x_xface_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1604 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1913
diff changeset
1605 int dest_mask, Lisp_Object UNUSED (domain))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1606 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1607 Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1608 int i, stattis;
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
1609 Binbyte *p, *bits, *bp;
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
1610 const CIbyte * volatile emsg = 0;
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
1611 const Binbyte * volatile dstring;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1612
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1613 assert (!NILP (data));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1614
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
1615 TO_EXTERNAL_FORMAT (LISP_STRING, data,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
1616 C_STRING_ALLOCA, dstring,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
1617 Qbinary);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
1618
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
1619 if ((p = (Binbyte *) strchr ((char *) dstring, ':')))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1620 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1621 dstring = p + 1;
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1624 /* 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
1625 if (!(stattis = setjmp (comp_env)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1626 {
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
1627 UnCompAll ((char *) dstring);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1628 UnGenFace ();
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1631 switch (stattis)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1632 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1633 case -2:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1634 emsg = "uncompface: internal error";
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1635 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1636 case -1:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1637 emsg = "uncompface: insufficient or invalid data";
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1638 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1639 case 1:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1640 emsg = "uncompface: excess data ignored";
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1641 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1642 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1643
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1644 if (emsg)
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
1645 signal_image_error_2 (emsg, data, Qimage);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
1646
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
1647 bp = bits = alloca_binbytes (PIXELS / 8);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1648
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1649 /* the compface library exports char F[], which uses a single byte per
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1650 pixel to represent a 48x48 bitmap. Yuck. */
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
1651 for (i = 0, p = (Binbyte *) F; i < (PIXELS / 8); ++i)
428
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 int n, b;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1654 /* reverse the bit order of each byte... */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1655 for (b = n = 0; b < 8; ++b)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1656 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1657 n |= ((*p++) << b);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1658 }
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
1659 *bp++ = (Binbyte) n;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1660 }
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 xbm_instantiate_1 (image_instance, instantiator, pointer_fg,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
1663 pointer_bg, dest_mask, 48, 48, (CBinbyte *) bits);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1664 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1665
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1666 #endif /* HAVE_XFACE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1667
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1668
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1669 /**********************************************************************
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1670 * Autodetect *
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 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1674 autodetect_validate (Lisp_Object instantiator)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1675 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1676 data_must_be_present (instantiator);
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1679 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1680 autodetect_normalize (Lisp_Object instantiator,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1681 Lisp_Object console_type,
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1913
diff changeset
1682 Lisp_Object UNUSED (dest_mask))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1683 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1684 Lisp_Object file = find_keyword_in_vector (instantiator, Q_data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1685 Lisp_Object filename = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1686 Lisp_Object data = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1687 struct gcpro gcpro1, gcpro2, gcpro3;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1688 Lisp_Object alist = Qnil;
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 GCPRO3 (filename, data, alist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1691
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1692 if (NILP (file)) /* no conversion necessary */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1693 RETURN_UNGCPRO (instantiator);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1694
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1695 alist = tagged_vector_to_alist (instantiator);
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 filename = locate_pixmap_file (file);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1698 if (!NILP (filename))
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 int xhot, yhot;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1701 /* #### Apparently some versions of XpmReadFileToData, which is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1702 called by pixmap_to_lisp_data, don't return an error value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1703 if the given file is not a valid XPM file. Instead, they
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1704 just seg fault. It is definitely caused by passing a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1705 bitmap. To try and avoid this we check for bitmaps first. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1706
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1707 data = bitmap_to_lisp_data (filename, &xhot, &yhot, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1708
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1709 if (!EQ (data, Qt))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1710 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1711 alist = remassq_no_quit (Q_data, alist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1712 alist = Fcons (Fcons (Q_file, filename),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1713 Fcons (Fcons (Q_data, data), alist));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1714 if (xhot != -1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1715 alist = Fcons (Fcons (Q_hotspot_x, make_int (xhot)),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1716 alist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1717 if (yhot != -1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1718 alist = Fcons (Fcons (Q_hotspot_y, make_int (yhot)),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1719 alist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1720
4252
8475ff9c49ea [xemacs-hg @ 2007-11-05 14:59:20 by didierv]
didierv
parents: 4226
diff changeset
1721 alist = xbm_mask_file_munging (alist, filename, Qt, console_type);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1722
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1723 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1724 Lisp_Object result = alist_to_tagged_vector (Qxbm, alist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1725 free_alist (alist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1726 RETURN_UNGCPRO (result);
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 HAVE_XPM
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1731 data = pixmap_to_lisp_data (filename, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1732
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1733 if (!EQ (data, Qt))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1734 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1735 alist = remassq_no_quit (Q_data, alist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1736 alist = Fcons (Fcons (Q_file, filename),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1737 Fcons (Fcons (Q_data, data), alist));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1738 alist = Fcons (Fcons (Q_color_symbols,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1739 evaluate_xpm_color_symbols ()),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1740 alist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1741 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1742 Lisp_Object result = alist_to_tagged_vector (Qxpm, alist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1743 free_alist (alist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1744 RETURN_UNGCPRO (result);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1745 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1746 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1747 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1748 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1749
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1750 /* If we couldn't convert it, just put it back as it is.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1751 We might try to further frob it later as a cursor-font
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1752 specification. (We can't do that now because we don't know
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1753 what dest-types it's going to be instantiated into.) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1754 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1755 Lisp_Object result = alist_to_tagged_vector (Qautodetect, alist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1756 free_alist (alist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1757 RETURN_UNGCPRO (result);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1758 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1759 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1760
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1761 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1762 autodetect_possible_dest_types (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1763 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1764 return
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1765 IMAGE_MONO_PIXMAP_MASK |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1766 IMAGE_COLOR_PIXMAP_MASK |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1767 IMAGE_POINTER_MASK |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1768 IMAGE_TEXT_MASK;
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1771 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1772 autodetect_instantiate (Lisp_Object image_instance,
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
1773 Lisp_Object instantiator,
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
1774 Lisp_Object pointer_fg,
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
1775 Lisp_Object pointer_bg,
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
1776 int dest_mask, Lisp_Object domain)
428
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 Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1779 struct gcpro gcpro1, gcpro2, gcpro3;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1780 Lisp_Object alist = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1781 Lisp_Object result = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1782 int is_cursor_font = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1783
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1784 GCPRO3 (data, alist, result);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1785
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1786 alist = tagged_vector_to_alist (instantiator);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1787 if (dest_mask & IMAGE_POINTER_MASK)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1788 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1789 const char *name_ext;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1790 LISP_STRING_TO_EXTERNAL (data, name_ext, Qfile_name);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1791 if (XmuCursorNameToIndex (name_ext) != -1)
4252
8475ff9c49ea [xemacs-hg @ 2007-11-05 14:59:20 by didierv]
didierv
parents: 4226
diff changeset
1792 {
8475ff9c49ea [xemacs-hg @ 2007-11-05 14:59:20 by didierv]
didierv
parents: 4226
diff changeset
1793 result = alist_to_tagged_vector (Qcursor_font, alist);
8475ff9c49ea [xemacs-hg @ 2007-11-05 14:59:20 by didierv]
didierv
parents: 4226
diff changeset
1794 is_cursor_font = 1;
8475ff9c49ea [xemacs-hg @ 2007-11-05 14:59:20 by didierv]
didierv
parents: 4226
diff changeset
1795 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1796 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1797
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1798 if (!is_cursor_font)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1799 result = alist_to_tagged_vector (Qstring, alist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1800 free_alist (alist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1801
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1802 if (is_cursor_font)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1803 cursor_font_instantiate (image_instance, result, pointer_fg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1804 pointer_bg, dest_mask, domain);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1805 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1806 string_instantiate (image_instance, result, pointer_fg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1807 pointer_bg, dest_mask, domain);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1808
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1809 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1810 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1811
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1812
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1813 /**********************************************************************
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1814 * Font *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1815 **********************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1816
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1817 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1818 font_validate (Lisp_Object instantiator)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1819 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1820 data_must_be_present (instantiator);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1821 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1822
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1823 /* XmuCvtStringToCursor is bogus in the following ways:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1824
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1825 - When it can't convert the given string to a real cursor, it will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1826 sometimes return a "success" value, after triggering a BadPixmap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1827 error. It then gives you a cursor that will itself generate BadCursor
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1828 errors. So we install this error handler to catch/notice the X error
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1829 and take that as meaning "couldn't convert."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1830
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1831 - When you tell it to find a cursor file that doesn't exist, it prints
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1832 an error message on stderr. You can't make it not do that.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1833
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1834 - Also, using Xmu means we can't properly hack Lisp_Image_Instance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1835 objects, or XPM files, or $XBMLANGPATH.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1836 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1837
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1838 /* Duplicate the behavior of XmuCvtStringToCursor() to bypass its bogusness. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1839
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1840 static int XLoadFont_got_error;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1841
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1842 static int
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1913
diff changeset
1843 XLoadFont_error_handler (Display *UNUSED (dpy), XErrorEvent *UNUSED (xerror))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1844 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1845 XLoadFont_got_error = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1846 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1847 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1848
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1849 static Font
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
1850 safe_XLoadFont (Display *dpy, Ibyte *name)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1851 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1852 Font font;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1853 int (*old_handler) (Display *, XErrorEvent *);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1854 Extbyte *nameext;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1855
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1856 XLoadFont_got_error = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1857 XSync (dpy, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1858 old_handler = XSetErrorHandler (XLoadFont_error_handler);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1859 C_STRING_TO_EXTERNAL (name, nameext, Qfile_name);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1860 font = XLoadFont (dpy, nameext);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1861 XSync (dpy, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1862 XSetErrorHandler (old_handler);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1863 if (XLoadFont_got_error) return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1864 return font;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1865 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1866
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1867 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1868 font_possible_dest_types (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1869 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1870 return IMAGE_POINTER_MASK;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1871 }
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 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1874 font_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1875 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1913
diff changeset
1876 int dest_mask, Lisp_Object UNUSED (domain))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1877 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1878 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1879 Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1880 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1881 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1882 Display *dpy;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1883 XColor fg, bg;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1884 Font source, mask;
2421
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
1885 Ibyte source_name[PATH_MAX_INTERNAL], mask_name[PATH_MAX_INTERNAL], dummy;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1886 int source_char, mask_char;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1887 int count;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1888 Lisp_Object foreground, background;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1889
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1890 if (!DEVICE_X_P (XDEVICE (device)))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1891 gui_error ("Not an X device", device);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1892
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1893 dpy = DEVICE_X_DISPLAY (XDEVICE (device));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1894
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1895 if (!STRINGP (data) ||
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1896 strncmp ("FONT ", (char *) XSTRING_DATA (data), 5))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1897 invalid_argument ("Invalid font-glyph instantiator",
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1898 instantiator);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1899
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1900 if (!(dest_mask & IMAGE_POINTER_MASK))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1901 incompatible_image_types (instantiator, dest_mask, IMAGE_POINTER_MASK);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1902
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1903 foreground = find_keyword_in_vector (instantiator, Q_foreground);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1904 if (NILP (foreground))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1905 foreground = pointer_fg;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1906 background = find_keyword_in_vector (instantiator, Q_background);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1907 if (NILP (background))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1908 background = pointer_bg;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1909
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1910 generate_cursor_fg_bg (device, &foreground, &background, &fg, &bg);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1911
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1912 count = sscanf ((char *) XSTRING_DATA (data),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1913 "FONT %s %d %s %d %c",
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1914 source_name, &source_char,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1915 mask_name, &mask_char, &dummy);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1916 /* Allow "%s %d %d" as well... */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1917 if (count == 3 && (1 == sscanf ((char *) mask_name, "%d %c", &mask_char,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1918 &dummy)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1919 count = 4, mask_name[0] = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1920
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1921 if (count != 2 && count != 4)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1922 syntax_error ("invalid cursor specification", data);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1923 source = safe_XLoadFont (dpy, source_name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1924 if (! source)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1925 signal_error_2 (Qgui_error,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1926 "couldn't load font", build_intstring (source_name), data);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1927 if (count == 2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1928 mask = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1929 else if (!mask_name[0])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1930 mask = source;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1931 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1932 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1933 mask = safe_XLoadFont (dpy, mask_name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1934 if (!mask)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1935 signal_continuable_error_2 (Qgui_error,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1936 "couldn't load font",
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1937 build_intstring (mask_name), data);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1938 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1939 if (!mask)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1940 mask_char = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1941
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1942 /* #### call XQueryTextExtents() and check_pointer_sizes() here. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1943
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1944 x_initialize_pixmap_image_instance (ii, 1, IMAGE_POINTER);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1945 IMAGE_INSTANCE_X_CURSOR (ii) =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1946 XCreateGlyphCursor (dpy, source, mask, source_char, mask_char,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1947 &fg, &bg);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1948 XIMAGE_INSTANCE_PIXMAP_FG (image_instance) = foreground;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1949 XIMAGE_INSTANCE_PIXMAP_BG (image_instance) = background;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1950 XUnloadFont (dpy, source);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1951 if (mask && mask != source) XUnloadFont (dpy, mask);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1952 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1953
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1954
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1955 /**********************************************************************
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1956 * Cursor-Font *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1957 **********************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1958
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1959 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1960 cursor_font_validate (Lisp_Object instantiator)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1961 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1962 data_must_be_present (instantiator);
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1965 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1966 cursor_font_possible_dest_types (void)
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 return IMAGE_POINTER_MASK;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1969 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1970
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1971 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1972 cursor_font_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1973 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1913
diff changeset
1974 int dest_mask, Lisp_Object UNUSED (domain))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1975 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1976 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1977 Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1978 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1979 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1980 Display *dpy;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1981 int i;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1982 const Extbyte *name_ext;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1983 Lisp_Object foreground, background;
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 if (!DEVICE_X_P (XDEVICE (device)))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1986 gui_error ("Not an X device", device);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1987
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1988 dpy = DEVICE_X_DISPLAY (XDEVICE (device));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1989
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1990 if (!(dest_mask & IMAGE_POINTER_MASK))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1991 incompatible_image_types (instantiator, dest_mask, IMAGE_POINTER_MASK);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1992
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1993 LISP_STRING_TO_EXTERNAL (data, name_ext, Qfile_name);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1994 if ((i = XmuCursorNameToIndex (name_ext)) == -1)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1995 invalid_argument ("Unrecognized cursor-font name", data);
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 x_initialize_pixmap_image_instance (ii, 1, IMAGE_POINTER);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1998 IMAGE_INSTANCE_X_CURSOR (ii) = XCreateFontCursor (dpy, i);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1999 foreground = find_keyword_in_vector (instantiator, Q_foreground);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2000 if (NILP (foreground))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2001 foreground = pointer_fg;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2002 background = find_keyword_in_vector (instantiator, Q_background);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2003 if (NILP (background))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2004 background = pointer_bg;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2005 maybe_recolor_cursor (image_instance, foreground, background);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2006 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2007
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2008 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2009 x_colorize_image_instance (Lisp_Object image_instance,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2010 Lisp_Object foreground, Lisp_Object background)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2011 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2012 Lisp_Image_Instance *p;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2013
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2014 p = XIMAGE_INSTANCE (image_instance);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2015
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2016 switch (IMAGE_INSTANCE_TYPE (p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2017 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2018 case IMAGE_MONO_PIXMAP:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2019 IMAGE_INSTANCE_TYPE (p) = IMAGE_COLOR_PIXMAP;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2020 /* Make sure there aren't two pointers to the same mask, causing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2021 it to get freed twice. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2022 IMAGE_INSTANCE_PIXMAP_MASK (p) = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2023 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2024
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2025 default:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2026 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2027 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2028
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2029 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2030 Display *dpy = DEVICE_X_DISPLAY (XDEVICE (IMAGE_INSTANCE_DEVICE (p)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2031 Drawable draw = XtWindow(DEVICE_XT_APP_SHELL (XDEVICE (IMAGE_INSTANCE_DEVICE (p))));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2032 Dimension d = DEVICE_X_DEPTH (XDEVICE (IMAGE_INSTANCE_DEVICE (p)));
2959
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
2033 Pixmap new_ = XCreatePixmap (dpy, draw,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2034 IMAGE_INSTANCE_PIXMAP_WIDTH (p),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2035 IMAGE_INSTANCE_PIXMAP_HEIGHT (p), d);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2036 XColor color;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2037 XGCValues gcv;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2038 GC gc;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2039 color = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (foreground));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2040 gcv.foreground = color.pixel;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2041 color = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (background));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2042 gcv.background = color.pixel;
2959
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
2043 gc = XCreateGC (dpy, new_, GCBackground|GCForeground, &gcv);
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
2044 XCopyPlane (dpy, IMAGE_INSTANCE_X_PIXMAP (p), new_, gc, 0, 0,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2045 IMAGE_INSTANCE_PIXMAP_WIDTH (p),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2046 IMAGE_INSTANCE_PIXMAP_HEIGHT (p),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2047 0, 0, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2048 XFreeGC (dpy, gc);
2959
4eb2a8c07cb3 [xemacs-hg @ 2005-09-27 05:48:22 by ben]
ben
parents: 2500
diff changeset
2049 IMAGE_INSTANCE_X_PIXMAP (p) = new_;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2050 IMAGE_INSTANCE_PIXMAP_DEPTH (p) = d;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2051 IMAGE_INSTANCE_PIXMAP_FG (p) = foreground;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2052 IMAGE_INSTANCE_PIXMAP_BG (p) = background;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2053 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2054 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2055 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2056
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2057
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2058 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2059 /* subwindow and widget support */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2060 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2061
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2062 /* 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
2063 redisplay_unmap_subwindows */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2064 static void
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2065 x_unmap_subwindow (Lisp_Image_Instance *p)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2066 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2067 if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2068 {
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2069 XUnmapWindow
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2070 (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2071 IMAGE_INSTANCE_X_CLIPWINDOW (p));
914
44e6e64b1cf2 [xemacs-hg @ 2002-07-10 03:54:43 by stephent]
stephent
parents: 872
diff changeset
2072 XUnmapSubwindows
44e6e64b1cf2 [xemacs-hg @ 2002-07-10 03:54:43 by stephent]
stephent
parents: 872
diff changeset
2073 (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p),
44e6e64b1cf2 [xemacs-hg @ 2002-07-10 03:54:43 by stephent]
stephent
parents: 872
diff changeset
2074 IMAGE_INSTANCE_X_CLIPWINDOW (p));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2075 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2076 else /* must be a widget */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2077 {
450
98528da0b7fc Import from CVS: tag r21-2-40
cvs
parents: 448
diff changeset
2078 /* Since we are being unmapped we want the enclosing frame to
98528da0b7fc Import from CVS: tag r21-2-40
cvs
parents: 448
diff changeset
2079 get focus. The losing with simple scrolling but is the safest
98528da0b7fc Import from CVS: tag r21-2-40
cvs
parents: 448
diff changeset
2080 thing to do. */
4252
8475ff9c49ea [xemacs-hg @ 2007-11-05 14:59:20 by didierv]
didierv
parents: 4226
diff changeset
2081 emacs_Xt_handle_widget_losing_focus
450
98528da0b7fc Import from CVS: tag r21-2-40
cvs
parents: 448
diff changeset
2082 ( XFRAME (IMAGE_INSTANCE_FRAME (p)),
98528da0b7fc Import from CVS: tag r21-2-40
cvs
parents: 448
diff changeset
2083 IMAGE_INSTANCE_X_WIDGET_ID (p));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2084 XtUnmapWidget (IMAGE_INSTANCE_X_CLIPWIDGET (p));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2085 }
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2088 /* map the subwindow. This is used by redisplay via
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2089 redisplay_output_subwindow */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2090 static void
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2091 x_map_subwindow (Lisp_Image_Instance *p, int x, int y,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2092 struct display_glyph_area* dga)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2093 {
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 446
diff changeset
2094 assert (dga->width > 0 && dga->height > 0);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2095 if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2096 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2097 Window subwindow = IMAGE_INSTANCE_X_SUBWINDOW_ID (p);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2098 XMoveResizeWindow (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p),
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2099 IMAGE_INSTANCE_X_CLIPWINDOW (p),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2100 x, y, dga->width, dga->height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2101 XMoveWindow (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2102 subwindow, -dga->xoffset, -dga->yoffset);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2103 if (!IMAGE_INSTANCE_SUBWINDOW_DISPLAYEDP (p))
914
44e6e64b1cf2 [xemacs-hg @ 2002-07-10 03:54:43 by stephent]
stephent
parents: 872
diff changeset
2104 {
44e6e64b1cf2 [xemacs-hg @ 2002-07-10 03:54:43 by stephent]
stephent
parents: 872
diff changeset
2105 XMapWindow (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p),
44e6e64b1cf2 [xemacs-hg @ 2002-07-10 03:54:43 by stephent]
stephent
parents: 872
diff changeset
2106 IMAGE_INSTANCE_X_CLIPWINDOW (p));
44e6e64b1cf2 [xemacs-hg @ 2002-07-10 03:54:43 by stephent]
stephent
parents: 872
diff changeset
2107 XMapSubwindows (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p),
44e6e64b1cf2 [xemacs-hg @ 2002-07-10 03:54:43 by stephent]
stephent
parents: 872
diff changeset
2108 IMAGE_INSTANCE_X_CLIPWINDOW (p));
44e6e64b1cf2 [xemacs-hg @ 2002-07-10 03:54:43 by stephent]
stephent
parents: 872
diff changeset
2109 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2110 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2111 else /* must be a widget */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2112 {
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2113 XtConfigureWidget (IMAGE_INSTANCE_X_CLIPWIDGET (p),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2114 x + IMAGE_INSTANCE_X_WIDGET_XOFFSET (p),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2115 y + IMAGE_INSTANCE_X_WIDGET_YOFFSET (p),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2116 dga->width, dga->height, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2117 XtMoveWidget (IMAGE_INSTANCE_X_WIDGET_ID (p),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2118 -dga->xoffset, -dga->yoffset);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2119 if (!IMAGE_INSTANCE_SUBWINDOW_DISPLAYEDP (p))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2120 XtMapWidget (IMAGE_INSTANCE_X_CLIPWIDGET (p));
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2121 /* See comments in glyphs-msw.c about keyboard focus. */
1111
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 940
diff changeset
2122 if (IMAGE_INSTANCE_WANTS_INITIAL_FOCUS (p))
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 940
diff changeset
2123 {
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 940
diff changeset
2124 /* #### FIXME to pop-up the find dialog we map the text-field
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 940
diff changeset
2125 seven times! This doesn't show on a fast linux box but does
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 940
diff changeset
2126 under X on windows. */
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 940
diff changeset
2127 emacs_Xt_enqueue_focus_event (IMAGE_INSTANCE_X_WIDGET_ID (p),
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 940
diff changeset
2128 IMAGE_INSTANCE_FRAME (p), 1);
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 940
diff changeset
2129 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2130 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2131 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2132
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2133 /* when you click on a widget you may activate another widget this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2134 needs to be checked and all appropriate widgets updated */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2135 static void
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2136 x_redisplay_subwindow (Lisp_Image_Instance *p)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2137 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2138 /* Update the subwindow size if necessary. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2139 if (IMAGE_INSTANCE_SIZE_CHANGED (p))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2140 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2141 XResizeWindow (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2142 IMAGE_INSTANCE_X_SUBWINDOW_ID (p),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2143 IMAGE_INSTANCE_WIDTH (p),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2144 IMAGE_INSTANCE_HEIGHT (p));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2145 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2146 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2147
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2148 /* Update all attributes that have changed. Lwlib actually does most
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2149 of this for us. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2150 static void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2151 x_redisplay_widget (Lisp_Image_Instance *p)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2152 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2153 /* This function can GC if IN_REDISPLAY is false. */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2154 #ifdef HAVE_X_WIDGETS
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2155 widget_value* wv = 0;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2156
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2157 /* First get the items if they have changed since this is a
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2158 structural change. As such it will nuke all added values so we
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2159 need to update most other things after the items have changed.*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2160 if (IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (p))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2161 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2162 Lisp_Object image_instance = wrap_image_instance (p);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2163
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2164 wv = gui_items_to_widget_values
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2165 (image_instance, IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (p),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2166 /* #### this is not right; we need to keep track of which widgets
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2167 want accelerators and which don't */ 0);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2168 wv->change = STRUCTURAL_CHANGE;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2169 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2170 else
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2171 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2172 /* Assume the lotus position, breath deeply and chant to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2173 yourself lwlibsux, lwlibsux ... lw_get_all_values returns a
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2174 reference to the real values rather than a copy thus any
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2175 changes we make to the values we get back will look like they
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2176 have already been applied. If we rebuild the widget tree then
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2177 we may lose properties. */
4252
8475ff9c49ea [xemacs-hg @ 2007-11-05 14:59:20 by didierv]
didierv
parents: 4226
diff changeset
2178 wv = copy_widget_value_tree (lw_get_all_values
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2179 (IMAGE_INSTANCE_X_WIDGET_LWID (p)),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2180 NO_CHANGE);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2181 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2182
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2183 /* Possibly update the colors and font */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2184 if (IMAGE_INSTANCE_WIDGET_FACE_CHANGED (p)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2185 ||
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 450
diff changeset
2186 /* #### This is not sufficient because it will not cope with widgets
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 450
diff changeset
2187 that are not currently visible. Once redisplay has done the
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 450
diff changeset
2188 visible ones it will clear this flag so that when new ones
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 450
diff changeset
2189 become visible they will not be updated. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2190 XFRAME (IMAGE_INSTANCE_FRAME (p))->faces_changed
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2191 ||
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 450
diff changeset
2192 XFRAME (IMAGE_INSTANCE_FRAME (p))->frame_changed
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 450
diff changeset
2193 ||
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2194 IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (p))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2195 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2196 update_widget_face (wv, p, IMAGE_INSTANCE_FRAME (p));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2197 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2198
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2199 /* Possibly update the text. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2200 if (IMAGE_INSTANCE_TEXT_CHANGED (p))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2201 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2202 Extbyte* str;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2203 Lisp_Object val = IMAGE_INSTANCE_WIDGET_TEXT (p);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2204 LISP_STRING_TO_EXTERNAL (val, str, Qnative);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2205 wv->value = str;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2206 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2207
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2208 /* Possibly update the size. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2209 if (IMAGE_INSTANCE_SIZE_CHANGED (p)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2210 ||
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2211 IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (p)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2212 ||
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2213 IMAGE_INSTANCE_TEXT_CHANGED (p))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2214 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2215 assert (IMAGE_INSTANCE_X_WIDGET_ID (p) &&
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2216 IMAGE_INSTANCE_X_CLIPWIDGET (p)) ;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2217
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2218 if (IMAGE_INSTANCE_X_WIDGET_ID (p)->core.being_destroyed
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2219 || !XtIsManaged(IMAGE_INSTANCE_X_WIDGET_ID (p)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2220 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2221 Lisp_Object sw = wrap_image_instance (p);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2222
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2223 signal_error (Qinternal_error,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2224 "XEmacs bug: subwindow is deleted", sw);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2225 }
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2226
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2227 lw_add_widget_value_arg (wv, XtNwidth,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2228 (Dimension)IMAGE_INSTANCE_WIDTH (p));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2229 lw_add_widget_value_arg (wv, XtNheight,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2230 (Dimension)IMAGE_INSTANCE_HEIGHT (p));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2231 }
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2232
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 446
diff changeset
2233 /* Adjust offsets within the frame. */
450
98528da0b7fc Import from CVS: tag r21-2-40
cvs
parents: 448
diff changeset
2234 if (XFRAME (IMAGE_INSTANCE_FRAME (p))->size_changed)
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 446
diff changeset
2235 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 446
diff changeset
2236 Arg al[2];
4528
726060ee587c First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4522
diff changeset
2237 Xt_SET_ARG (al [0], XtNx, &IMAGE_INSTANCE_X_WIDGET_XOFFSET (p));
726060ee587c First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4522
diff changeset
2238 Xt_SET_ARG (al [1], XtNy, &IMAGE_INSTANCE_X_WIDGET_YOFFSET (p));
4252
8475ff9c49ea [xemacs-hg @ 2007-11-05 14:59:20 by didierv]
didierv
parents: 4226
diff changeset
2239 XtGetValues (FRAME_X_TEXT_WIDGET
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 446
diff changeset
2240 (XFRAME (IMAGE_INSTANCE_FRAME (p))), al, 2);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 446
diff changeset
2241 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 446
diff changeset
2242
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2243 /* now modify the widget */
1346
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
2244 lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (p), wv, True);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2245 free_widget_value_tree (wv);
1346
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
2246 gcpro_popup_callbacks (IMAGE_INSTANCE_X_WIDGET_LWID (p));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2247 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2248 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2249
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2250 /* instantiate and x type subwindow */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2251 static void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1913
diff changeset
2252 x_subwindow_instantiate (Lisp_Object image_instance,
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1913
diff changeset
2253 Lisp_Object UNUSED (instantiator),
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1913
diff changeset
2254 Lisp_Object UNUSED (pointer_fg),
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1913
diff changeset
2255 Lisp_Object UNUSED (pointer_bg),
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1913
diff changeset
2256 int UNUSED (dest_mask), Lisp_Object domain)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2257 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2258 /* This function can GC */
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2259 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2260 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2261 Lisp_Object frame = DOMAIN_FRAME (domain);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2262 struct frame* f = XFRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2263 Display *dpy;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2264 Screen *xs;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2265 Window pw, win;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2266 XSetWindowAttributes xswa;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2267 Mask valueMask = 0;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 639
diff changeset
2268 int w = IMAGE_INSTANCE_WIDTH (ii), h = IMAGE_INSTANCE_HEIGHT (ii);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2269
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2270 if (!DEVICE_X_P (XDEVICE (device)))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2271 gui_error ("Not an X device", device);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2272
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2273 dpy = DEVICE_X_DISPLAY (XDEVICE (device));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2274 xs = DefaultScreenOfDisplay (dpy);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2275
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2276 IMAGE_INSTANCE_TYPE (ii) = IMAGE_SUBWINDOW;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2277
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2278 pw = XtWindow (FRAME_X_TEXT_WIDGET (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2279
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2280 ii->data = xnew_and_zero (struct x_subwindow_data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2281
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2282 IMAGE_INSTANCE_X_SUBWINDOW_PARENT (ii) = pw;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2283 IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (ii) = DisplayOfScreen (xs);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2284
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2285 xswa.backing_store = Always;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2286 valueMask |= CWBackingStore;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2287 xswa.colormap = DefaultColormapOfScreen (xs);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2288 valueMask |= CWColormap;
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2289
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2290 /* Create a window for clipping */
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2291 IMAGE_INSTANCE_X_CLIPWINDOW (ii) =
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2292 XCreateWindow (dpy, pw, 0, 0, w, h, 0, CopyFromParent,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2293 InputOutput, CopyFromParent, valueMask,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2294 &xswa);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2295
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2296 /* Now put the subwindow inside the clip window. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2297 win = XCreateWindow (dpy, IMAGE_INSTANCE_X_CLIPWINDOW (ii),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2298 0, 0, w, h, 0, CopyFromParent,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2299 InputOutput, CopyFromParent, valueMask,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2300 &xswa);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2301
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2302 IMAGE_INSTANCE_SUBWINDOW_ID (ii) = (void*)win;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2303 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2304
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2305 /* Account for some of the limitations with widget images. */
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2306 static int
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2307 x_widget_border_width (void)
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2308 {
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2309 return DEFAULT_WIDGET_BORDER_WIDTH * 2;
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2310 }
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2311
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2312
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2313 #if 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2314 /* #### Should this function exist? If there's any doubt I'm not implementing it --andyp */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2315 DEFUN ("change-subwindow-property", Fchange_subwindow_property, 3, 3, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2316 For the given SUBWINDOW, set PROPERTY to DATA, which is a string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2317 Subwindows are not currently implemented.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2318 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2319 (subwindow, property, data))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2320 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2321 Atom property_atom;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2322 Lisp_Subwindow *sw;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2323 Display *dpy;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2324 Extbyte *propext, *dataext;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2325 Bytecount datalen;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2326
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2327 CHECK_SUBWINDOW (subwindow);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2328 CHECK_STRING (property);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2329 CHECK_STRING (data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2330
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2331 sw = XSUBWINDOW (subwindow);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2332 dpy = DisplayOfScreen (LISP_DEVICE_TO_X_SCREEN
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2333 (FRAME_DEVICE (XFRAME (sw->frame))));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2334
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2335 LISP_TO_EXTERNAL (property, propext, Qctext);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2336 TO_EXTERNAL_FORMAT (LISP_STRING, data,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2337 ALLOCA, (dataext, datalen), Qctext);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2338 property_atom = XInternAtom (dpy, propext, False);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2339 XChangeProperty (dpy, sw->subwindow, property_atom, XA_STRING, 8,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2340 PropModeReplace, dataext, datalen);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2341 return property;
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 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2344
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2345
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2346 #ifdef HAVE_X_WIDGETS
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2347
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2348 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2349 /* widgets */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2350 /************************************************************************/
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 static void
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2353 update_widget_face (widget_value* wv, Lisp_Image_Instance *ii,
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2354 Lisp_Object domain)
428
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 #ifdef LWLIB_WIDGETS_MOTIF
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2357 XmFontList fontList;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2358 #endif
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2359 /* Update the foreground. */
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2360 Lisp_Object pixel = FACE_FOREGROUND
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2361 (IMAGE_INSTANCE_WIDGET_FACE (ii),
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2362 domain);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2363 XColor fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel)), bcolor;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2364 lw_add_widget_value_arg (wv, XtNforeground, fcolor.pixel);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2365
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2366 /* Update the background. */
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2367 pixel = FACE_BACKGROUND (IMAGE_INSTANCE_WIDGET_FACE (ii),
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2368 domain);
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2369 bcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel));
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2370 lw_add_widget_value_arg (wv, XtNbackground, bcolor.pixel);
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2371
3094
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2372 {
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2373 Lisp_Object face = IMAGE_INSTANCE_WIDGET_FACE (ii);
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2374 Lisp_Font_Instance *fi =
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2375 XFONT_INSTANCE (query_string_font (IMAGE_INSTANCE_WIDGET_TEXT (ii),
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2376 face,
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2377 domain));
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2378 XFontStruct *fs = FONT_INSTANCE_X_FONT (fi);
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2379 #ifdef USE_XFT
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2380 XftFont *rf = FONT_INSTANCE_X_XFTFONT (fi);
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2381
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2382 if (rf)
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2383 {
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2384 /* #### What to do about Motif? */
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2385 lw_add_widget_value_arg (wv, XtNxftFont, (XtArgVal) rf);
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2386 }
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2387 #endif
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2388
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2389 if (fs)
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2390 {
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2391 #ifdef LWLIB_WIDGETS_MOTIF
3094
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2392 fontList = XmFontListCreate (fs, XmSTRING_DEFAULT_CHARSET);
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2393 lw_add_widget_value_arg (wv, XmNfontList, (XtArgVal) fontList);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2394 #endif
3094
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2395 lw_add_widget_value_arg (wv, XtNfont, (XtArgVal) fs);
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2396 }
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2397
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2398 #ifdef USE_XFT
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2399 /* #### sanity check, should wrap in appropriate ERROR_CHECK macro */
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2400 if (!rf && !fs)
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2401 warn_when_safe_lispobj
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2402 (intern ("xft"), Qdebug,
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2403 Fcons (build_string ("missing font in update_widget_face"),
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2404 Fface_name (face)));
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2405 #endif
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 2959
diff changeset
2406 }
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2407 wv->change = VISIBLE_CHANGE;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2408 /* #### Megahack - but its just getting too complicated to do this
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2409 in the right place. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2410 if (EQ (IMAGE_INSTANCE_WIDGET_TYPE (ii), Qtab_control))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2411 update_tab_widget_face (wv, ii, domain);
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2412 }
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2413
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2414 static void
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2415 update_tab_widget_face (widget_value* wv, Lisp_Image_Instance *ii,
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2416 Lisp_Object domain)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2417 {
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2418 if (wv->contents)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2419 {
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2420 widget_value* val = wv->contents, *cur;
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2421
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2422 /* Give each child label the correct foreground color. */
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2423 Lisp_Object pixel = FACE_FOREGROUND
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2424 (IMAGE_INSTANCE_WIDGET_FACE (ii),
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2425 domain);
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2426 XColor fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel));
4528
726060ee587c First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4522
diff changeset
2427 lw_add_widget_value_arg (val, (String) XtNtabForeground, fcolor.pixel);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2428 wv->change = VISIBLE_CHANGE;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2429 val->change = VISIBLE_CHANGE;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2430
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2431 for (cur = val->next; cur; cur = cur->next)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2432 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2433 cur->change = VISIBLE_CHANGE;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2434 if (cur->value)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2435 {
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2436 lw_copy_widget_value_args (val, cur);
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2437 }
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2438 }
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2439 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2440 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2441
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2442 static void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1913
diff changeset
2443 x_widget_instantiate (Lisp_Object image_instance,
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1913
diff changeset
2444 Lisp_Object UNUSED (instantiator),
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1913
diff changeset
2445 Lisp_Object UNUSED (pointer_fg),
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1913
diff changeset
2446 Lisp_Object UNUSED (pointer_bg),
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1913
diff changeset
2447 int UNUSED (dest_mask), Lisp_Object domain,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2448 const char* type, widget_value* wv)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2449 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2450 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2451 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii), pixel;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2452 struct device* d = XDEVICE (device);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2453 Lisp_Object frame = DOMAIN_FRAME (domain);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2454 struct frame* f = XFRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2455 char* nm=0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2456 Widget wid;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2457 Arg al [32];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2458 int ac = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2459 int id = new_lwlib_id ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2460 widget_value* clip_wv;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2461 XColor fcolor, bcolor;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2462
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2463 if (!DEVICE_X_P (d))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2464 gui_error ("Not an X device", device);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2465
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2466 /* 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
2467 instantiation for a widget. But we can go ahead and do it without
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2468 checking because there is always a generic instantiator. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2469 IMAGE_INSTANCE_TYPE (ii) = IMAGE_WIDGET;
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 if (!NILP (IMAGE_INSTANCE_WIDGET_TEXT (ii)))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2472 LISP_STRING_TO_EXTERNAL (IMAGE_INSTANCE_WIDGET_TEXT (ii), nm, Qnative);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2473
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2474 ii->data = xnew_and_zero (struct x_subwindow_data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2475
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2476 /* Create a clip window to contain the subwidget. Incredibly the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2477 XEmacs manager seems to be the most appropriate widget for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2478 this. Nothing else is simple enough and yet does what is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2479 required. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2480 clip_wv = xmalloc_widget_value ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2481
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2482 lw_add_widget_value_arg (clip_wv, XtNresize, False);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2483 lw_add_widget_value_arg (clip_wv, XtNwidth,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2484 (Dimension)IMAGE_INSTANCE_WIDTH (ii));
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2485 lw_add_widget_value_arg (clip_wv, XtNheight,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2486 (Dimension)IMAGE_INSTANCE_HEIGHT (ii));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2487 clip_wv->enabled = True;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2488
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2489 clip_wv->name = xstrdup ("clip-window");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2490 clip_wv->value = xstrdup ("clip-window");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2491
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2492 IMAGE_INSTANCE_X_CLIPWIDGET (ii)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2493 = lw_create_widget ("clip-window", "clip-window", new_lwlib_id (),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2494 clip_wv, FRAME_X_CONTAINER_WIDGET (f),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2495 False, 0, 0, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2496
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2497 free_widget_value_tree (clip_wv);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2498
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2499 /* create a sensible name. */
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2500 if (wv->name == 0 || strcmp(wv->name, "") == 0)
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2501 wv->name = xstrdup (type);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2502
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2503 /* copy any args we were given */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2504 ac = 0;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2505 lw_add_value_args_to_args (wv, al, &ac);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2506
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2507 /* Fixup the colors. We have to do this *before* the widget gets
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2508 created so that Motif will fix up the shadow colors
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2509 correctly. Once the widget is created Motif won't do this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2510 anymore...*/
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2511 pixel = FACE_FOREGROUND
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2512 (IMAGE_INSTANCE_WIDGET_FACE (ii),
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2513 IMAGE_INSTANCE_FRAME (ii));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2514 fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2515
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2516 pixel = FACE_BACKGROUND
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2517 (IMAGE_INSTANCE_WIDGET_FACE (ii),
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2518 IMAGE_INSTANCE_FRAME (ii));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2519 bcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2520
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2521 lw_add_widget_value_arg (wv, XtNbackground, bcolor.pixel);
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2522 lw_add_widget_value_arg (wv, XtNforeground, fcolor.pixel);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2523 /* we cannot allow widgets to resize themselves */
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2524 lw_add_widget_value_arg (wv, XtNresize, False);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2525 lw_add_widget_value_arg (wv, XtNwidth,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2526 (Dimension)IMAGE_INSTANCE_WIDTH (ii));
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2527 lw_add_widget_value_arg (wv, XtNheight,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2528 (Dimension)IMAGE_INSTANCE_HEIGHT (ii));
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2529 /* update the font. */
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
2530 update_widget_face (wv, ii, domain);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2531
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2532 wid = lw_create_widget (type, wv->name, id, wv,
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2533 IMAGE_INSTANCE_X_CLIPWIDGET (ii),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2534 False, 0, popup_selection_callback, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2535
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2536 IMAGE_INSTANCE_SUBWINDOW_ID (ii) = (void*)wid;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2537 IMAGE_INSTANCE_X_WIDGET_LWID (ii) = id;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2538 /* because the EmacsManager is the widgets parent we have to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2539 offset the redisplay of the widget by the amount the text
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2540 widget is inside the manager. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2541 ac = 0;
4528
726060ee587c First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4522
diff changeset
2542 Xt_SET_ARG (al [ac], XtNx, &IMAGE_INSTANCE_X_WIDGET_XOFFSET (ii)); ac++;
726060ee587c First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4522
diff changeset
2543 Xt_SET_ARG (al [ac], XtNy, &IMAGE_INSTANCE_X_WIDGET_YOFFSET (ii)); ac++;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2544 XtGetValues (FRAME_X_TEXT_WIDGET (f), al, ac);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2545
436
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2546 XtSetMappedWhenManaged (wid, TRUE);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2547
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2548 free_widget_value_tree (wv);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2549 /* A kludgy but simple way to make sure the callback for a widget
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2550 doesn't get deleted. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2551 gcpro_popup_callbacks (id);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2552 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2553
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2554 /* get properties of a control */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2555 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2556 x_widget_property (Lisp_Object image_instance, Lisp_Object prop)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2557 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2558 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2559 /* get the text from a control */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2560 if (EQ (prop, Q_text))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2561 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2562 widget_value* wv = lw_get_all_values (IMAGE_INSTANCE_X_WIDGET_LWID (ii));
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2563 return build_ext_string (wv->value, Qnative);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2564 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2565 return Qunbound;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2566 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2567
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2568 /* Instantiate a layout control for putting other widgets in. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2569 static void
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2570 x_native_layout_instantiate (Lisp_Object image_instance,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2571 Lisp_Object instantiator,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2572 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2573 int dest_mask, Lisp_Object domain)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2574 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2575 x_widget_instantiate (image_instance, instantiator, pointer_fg,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2576 pointer_bg, dest_mask, domain, "layout", 0);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2577 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2578
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2579 /* Instantiate a button widget. Unfortunately instantiated widgets are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2580 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
2581 like images where you just select the image into the context you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2582 want to display it in and BitBlt it. So images instances can have a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2583 many-to-one relationship with things you see, whereas widgets can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2584 only be one-to-one (i.e. per frame) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2585 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2586 x_button_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2587 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2588 int dest_mask, Lisp_Object domain)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2589 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2590 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2591 Lisp_Object gui = IMAGE_INSTANCE_WIDGET_ITEM (ii);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2592 Lisp_Object glyph = find_keyword_in_vector (instantiator, Q_image);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2593 widget_value* wv = gui_items_to_widget_values (image_instance, gui, 1);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2594
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2595 if (!NILP (glyph))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2596 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2597 if (!IMAGE_INSTANCEP (glyph))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2598 glyph = glyph_image_instance (glyph, domain, ERROR_ME, 1);
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 x_widget_instantiate (image_instance, instantiator, pointer_fg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2602 pointer_bg, dest_mask, domain, "button", wv);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2603
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2604 /* add the image if one was given */
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2605 if (!NILP (glyph) && IMAGE_INSTANCEP (glyph)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2606 && IMAGE_INSTANCE_PIXMAP_TYPE_P (XIMAGE_INSTANCE (glyph)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2607 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2608 Arg al [2];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2609 int ac =0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2610 #ifdef LWLIB_WIDGETS_MOTIF
4528
726060ee587c First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4522
diff changeset
2611 Xt_SET_ARG (al [ac], XmNlabelType, XmPIXMAP); ac++;
726060ee587c First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4522
diff changeset
2612 Xt_SET_ARG (al [ac], XmNlabelPixmap, XIMAGE_INSTANCE_X_PIXMAP (glyph));
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2613 ac++;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2614 #else
4528
726060ee587c First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4522
diff changeset
2615 Xt_SET_ARG (al [ac], XtNpixmap, XIMAGE_INSTANCE_X_PIXMAP (glyph)); ac++;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2616 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2617 XtSetValues (IMAGE_INSTANCE_X_WIDGET_ID (ii), al, ac);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2618 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2619 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2620
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2621 /* Update a button's clicked state.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2622
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2623 #### This is overkill, but it works. Right now this causes all
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2624 button instances to flash for some reason buried deep in lwlib. In
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2625 theory this should be the Right Thing to do since lwlib should only
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2626 merge in changed values - and if nothing has changed then nothing
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2627 should get done. This may be because of the args stuff,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2628 i.e. although the arg contents may be the same the args look
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2629 different and so are re-applied to the widget. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2630 static void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2631 x_button_redisplay (Lisp_Object image_instance)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2632 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2633 /* This function can GC if IN_REDISPLAY is false. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2634 Lisp_Image_Instance *p = XIMAGE_INSTANCE (image_instance);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2635 widget_value* wv =
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2636 gui_items_to_widget_values (image_instance,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2637 IMAGE_INSTANCE_WIDGET_ITEMS (p), 1);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2638
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2639 /* now modify the widget */
1346
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
2640 lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (p), wv, True);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2641 free_widget_value_tree (wv);
1346
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
2642 gcpro_popup_callbacks (IMAGE_INSTANCE_X_WIDGET_LWID (p));
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2643 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2644
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2645 /* get properties of a button */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2646 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2647 x_button_property (Lisp_Object image_instance, Lisp_Object prop)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2648 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2649 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2650 /* check the state of a button */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2651 if (EQ (prop, Q_selected))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2652 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2653 widget_value* wv = lw_get_all_values (IMAGE_INSTANCE_X_WIDGET_LWID (ii));
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 if (wv->selected)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2656 return Qt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2657 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2658 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2659 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2660 return Qunbound;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2661 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2662
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2663 /* instantiate a progress gauge */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2664 static void
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2665 x_progress_gauge_instantiate (Lisp_Object image_instance,
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2666 Lisp_Object instantiator,
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2667 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2668 int dest_mask, Lisp_Object domain)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2669 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2670 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2671 Lisp_Object gui = IMAGE_INSTANCE_WIDGET_ITEM (ii);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2672 widget_value* wv = gui_items_to_widget_values (image_instance, gui, 0);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2673
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2674 x_widget_instantiate (image_instance, instantiator, pointer_fg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2675 pointer_bg, dest_mask, domain, "progress", wv);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2676 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2677
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2678 /* set the properties of a progress gauge */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2679 static void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2680 x_progress_gauge_redisplay (Lisp_Object image_instance)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2681 {
639
4b7d425dd3c2 [xemacs-hg @ 2001-07-28 05:08:58 by andyp]
andyp
parents: 608
diff changeset
2682 Lisp_Image_Instance *p = XIMAGE_INSTANCE (image_instance);
4b7d425dd3c2 [xemacs-hg @ 2001-07-28 05:08:58 by andyp]
andyp
parents: 608
diff changeset
2683
4b7d425dd3c2 [xemacs-hg @ 2001-07-28 05:08:58 by andyp]
andyp
parents: 608
diff changeset
2684 if (IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (p))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2685 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2686 Lisp_Object val;
639
4b7d425dd3c2 [xemacs-hg @ 2001-07-28 05:08:58 by andyp]
andyp
parents: 608
diff changeset
2687 val = XGUI_ITEM (IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (p))->value;
4528
726060ee587c First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4522
diff changeset
2688 Xt_SET_VALUE (IMAGE_INSTANCE_X_WIDGET_ID (p), XtNvalue, XINT (val));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2689 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2690 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2691
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2692 /* instantiate an edit control */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2693 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2694 x_edit_field_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2695 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2696 int dest_mask, Lisp_Object domain)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2697 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2698 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2699 Lisp_Object gui = IMAGE_INSTANCE_WIDGET_ITEM (ii);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2700 widget_value* wv = gui_items_to_widget_values (image_instance, gui, 0);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2701
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2702 x_widget_instantiate (image_instance, instantiator, pointer_fg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2703 pointer_bg, dest_mask, domain, "text-field", wv);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2704 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2705
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2706 #if defined (LWLIB_WIDGETS_MOTIF) && XmVERSION > 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2707 /* instantiate a combo control */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2708 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2709 x_combo_box_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2710 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2711 int dest_mask, Lisp_Object domain)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2712 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2713 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2714 widget_value * wv = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2715 /* This is not done generically because of sizing problems under
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2716 mswindows. */
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2717 widget_instantiate (image_instance, instantiator, pointer_fg,
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2718 pointer_bg, dest_mask, domain);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2719
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2720 wv = gui_items_to_widget_values (image_instance,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2721 IMAGE_INSTANCE_WIDGET_ITEMS (ii), 0);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2722
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2723 x_widget_instantiate (image_instance, instantiator, pointer_fg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2724 pointer_bg, dest_mask, domain, "combo-box", wv);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2725 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2726 #endif
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 static void
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2729 x_tab_control_instantiate (Lisp_Object image_instance,
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2730 Lisp_Object instantiator,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2731 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2732 int dest_mask, Lisp_Object domain)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2733 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2734 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2735 widget_value * wv =
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2736 gui_items_to_widget_values (image_instance,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2737 IMAGE_INSTANCE_WIDGET_ITEMS (ii), 0);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2738 update_tab_widget_face (wv, ii,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2739 IMAGE_INSTANCE_FRAME (ii));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2740 x_widget_instantiate (image_instance, instantiator, pointer_fg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2741 pointer_bg, dest_mask, domain, "tab-control", wv);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2742 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2743
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2744 /* Set the properties of a tab control */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2745 static void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2746 x_tab_control_redisplay (Lisp_Object image_instance)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2747 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2748 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2749
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2750 if (IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii) ||
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2751 IMAGE_INSTANCE_WIDGET_ACTION_OCCURRED (ii))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2752 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2753 /* If only the order has changed then simply select the first
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2754 one of the pending set. This stops horrendous rebuilding -
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2755 and hence flicker - of the tabs each time you click on
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2756 one. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2757 if (tab_control_order_only_changed (image_instance))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2758 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2759 Lisp_Object rest, selected =
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2760 gui_item_list_find_selected
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2761 (NILP (IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii)) ?
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2762 XCDR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)) :
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2763 XCDR (IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii)));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2764
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2765 LIST_LOOP (rest, XCDR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2766 {
1913
7473844a83d3 [xemacs-hg @ 2004-02-17 15:20:41 by james]
james
parents: 1743
diff changeset
2767 if (gui_item_equal_sans_selected (XCAR (rest), selected, 0))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2768 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2769 /* There may be an encapsulated way of doing this,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2770 but I couldn't find it. */
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2771 Lisp_Object old_selected =
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2772 gui_item_list_find_selected
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2773 (XCDR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2774 char* name;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2775 unsigned int num_children, i;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2776 Widget* children;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2777
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2778 LISP_STRING_TO_EXTERNAL (XGUI_ITEM (XCAR (rest))->name,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2779 name, Qnative);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2780 /* The name may contain a `.' which confuses
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2781 XtNameToWidget, so we do it ourselves. */
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2782 children =
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2783 XtCompositeChildren (IMAGE_INSTANCE_X_WIDGET_ID (ii),
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
2784 &num_children);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2785 for (i = 0; i < num_children; i++)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2786 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2787 if (!strcmp (XtName (children [i]), name))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2788 {
4528
726060ee587c First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4522
diff changeset
2789 Xt_SET_VALUE (IMAGE_INSTANCE_X_WIDGET_ID (ii),
726060ee587c First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4522
diff changeset
2790 XtNtopWidget, children [i]);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2791 break;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2792 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2793 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2794 /* Pick up the new selected item. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2795 XGUI_ITEM (old_selected)->selected =
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2796 XGUI_ITEM (XCAR (rest))->selected;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2797 XGUI_ITEM (XCAR (rest))->selected =
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2798 XGUI_ITEM (selected)->selected;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2799 /* We're not actually changing the items anymore. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2800 IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii) = 0;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2801 IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii) = Qnil;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2802 break;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2803 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2804 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2805 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2806 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2807 /* Possibly update the face. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2808 if (IMAGE_INSTANCE_WIDGET_FACE_CHANGED (ii)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2809 ||
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2810 XFRAME (IMAGE_INSTANCE_FRAME (ii))->faces_changed
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2811 ||
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2812 IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2813 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2814 /* See previous comments on the brokeness of lwlib.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2815
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2816 #### There's actually not much point in doing this here
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2817 since, colors will have been set appropriately by
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2818 x_redisplay_widget. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2819 widget_value* wv =copy_widget_value_tree
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2820 (lw_get_all_values
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2821 (IMAGE_INSTANCE_X_WIDGET_LWID (ii)),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2822 NO_CHANGE);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2823
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2824 update_tab_widget_face (wv, ii,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2825 IMAGE_INSTANCE_FRAME (ii));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2826
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2827 lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (ii), wv, True);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2828 free_widget_value_tree (wv);
1346
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
2829 gcpro_popup_callbacks (IMAGE_INSTANCE_X_WIDGET_LWID (ii));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2830 }
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2833 /* instantiate a static control possible for putting other things in */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2834 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2835 x_label_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2836 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2837 int dest_mask, Lisp_Object domain)
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);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2840 Lisp_Object gui = IMAGE_INSTANCE_WIDGET_ITEM (ii);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2841 widget_value* wv = gui_items_to_widget_values (image_instance, gui, 0);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2842
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2843 x_widget_instantiate (image_instance, instantiator, pointer_fg,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2844 pointer_bg, dest_mask, domain, "button", wv);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2845 }
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2846 #endif /* HAVE_X_WIDGETS */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2847
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2848
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2849 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2850 /* initialization */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2851 /************************************************************************/
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 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2854 syms_of_glyphs_x (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2855 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2856 #if 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2857 DEFSUBR (Fchange_subwindow_property);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2858 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2859 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2860
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2861 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2862 console_type_create_glyphs_x (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2863 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2864 /* image methods */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2865
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2866 CONSOLE_HAS_METHOD (x, print_image_instance);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2867 CONSOLE_HAS_METHOD (x, finalize_image_instance);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2868 CONSOLE_HAS_METHOD (x, image_instance_equal);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2869 CONSOLE_HAS_METHOD (x, image_instance_hash);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2870 CONSOLE_HAS_METHOD (x, colorize_image_instance);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2871 CONSOLE_HAS_METHOD (x, init_image_instance_from_eimage);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2872 CONSOLE_HAS_METHOD (x, locate_pixmap_file);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2873 CONSOLE_HAS_METHOD (x, unmap_subwindow);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2874 CONSOLE_HAS_METHOD (x, map_subwindow);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2875 CONSOLE_HAS_METHOD (x, redisplay_widget);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2876 CONSOLE_HAS_METHOD (x, redisplay_subwindow);
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2877 CONSOLE_HAS_METHOD (x, widget_border_width);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2878 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2879
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2880 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2881 image_instantiator_format_create_glyphs_x (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2882 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2883 IIFORMAT_VALID_CONSOLE (x, nothing);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2884 IIFORMAT_VALID_CONSOLE (x, string);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2885 #ifdef HAVE_X_WIDGETS
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2886 IIFORMAT_VALID_CONSOLE (x, layout);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2887 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2888 IIFORMAT_VALID_CONSOLE (x, formatted_string);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2889 IIFORMAT_VALID_CONSOLE (x, inherit);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2890 #ifdef HAVE_XPM
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2891 INITIALIZE_DEVICE_IIFORMAT (x, xpm);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2892 IIFORMAT_HAS_DEVMETHOD (x, xpm, instantiate);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2893 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2894 #ifdef HAVE_JPEG
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2895 IIFORMAT_VALID_CONSOLE (x, jpeg);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2896 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2897 #ifdef HAVE_TIFF
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2898 IIFORMAT_VALID_CONSOLE (x, tiff);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2899 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2900 #ifdef HAVE_PNG
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2901 IIFORMAT_VALID_CONSOLE (x, png);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2902 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2903 #ifdef HAVE_GIF
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2904 IIFORMAT_VALID_CONSOLE (x, gif);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
2905 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2906 INITIALIZE_DEVICE_IIFORMAT (x, xbm);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2907 IIFORMAT_HAS_DEVMETHOD (x, xbm, instantiate);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2908
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2909 INITIALIZE_DEVICE_IIFORMAT (x, subwindow);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2910 IIFORMAT_HAS_DEVMETHOD (x, subwindow, instantiate);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2911 #ifdef HAVE_X_WIDGETS
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2912 /* layout widget */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2913 INITIALIZE_DEVICE_IIFORMAT (x, native_layout);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2914 IIFORMAT_HAS_DEVMETHOD (x, native_layout, instantiate);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2915 /* button widget */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2916 INITIALIZE_DEVICE_IIFORMAT (x, button);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2917 IIFORMAT_HAS_DEVMETHOD (x, button, property);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2918 IIFORMAT_HAS_DEVMETHOD (x, button, instantiate);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2919 IIFORMAT_HAS_DEVMETHOD (x, button, redisplay);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2920 /* general widget methods. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2921 INITIALIZE_DEVICE_IIFORMAT (x, widget);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2922 IIFORMAT_HAS_DEVMETHOD (x, widget, property);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2923 /* progress gauge */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2924 INITIALIZE_DEVICE_IIFORMAT (x, progress_gauge);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2925 IIFORMAT_HAS_DEVMETHOD (x, progress_gauge, redisplay);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2926 IIFORMAT_HAS_DEVMETHOD (x, progress_gauge, instantiate);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2927 /* text field */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2928 INITIALIZE_DEVICE_IIFORMAT (x, edit_field);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2929 IIFORMAT_HAS_DEVMETHOD (x, edit_field, instantiate);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2930 #if defined (LWLIB_WIDGETS_MOTIF) && XmVERSION > 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2931 /* combo box */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2932 INITIALIZE_DEVICE_IIFORMAT (x, combo_box);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2933 IIFORMAT_HAS_DEVMETHOD (x, combo_box, instantiate);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2934 IIFORMAT_HAS_SHARED_DEVMETHOD (x, combo_box, redisplay, tab_control);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2935 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2936 /* tab control widget */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2937 INITIALIZE_DEVICE_IIFORMAT (x, tab_control);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2938 IIFORMAT_HAS_DEVMETHOD (x, tab_control, instantiate);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2939 IIFORMAT_HAS_DEVMETHOD (x, tab_control, redisplay);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2940 /* label */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2941 INITIALIZE_DEVICE_IIFORMAT (x, label);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2942 IIFORMAT_HAS_DEVMETHOD (x, label, instantiate);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2943 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2944 INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (cursor_font, "cursor-font");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2945 IIFORMAT_VALID_CONSOLE (x, cursor_font);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2946
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2947 IIFORMAT_HAS_METHOD (cursor_font, validate);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2948 IIFORMAT_HAS_METHOD (cursor_font, possible_dest_types);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2949 IIFORMAT_HAS_METHOD (cursor_font, instantiate);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2950
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2951 IIFORMAT_VALID_KEYWORD (cursor_font, Q_data, check_valid_string);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2952 IIFORMAT_VALID_KEYWORD (cursor_font, Q_foreground, check_valid_string);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2953 IIFORMAT_VALID_KEYWORD (cursor_font, Q_background, check_valid_string);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2954
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2955 INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (font, "font");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2956
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2957 IIFORMAT_HAS_METHOD (font, validate);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2958 IIFORMAT_HAS_METHOD (font, possible_dest_types);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2959 IIFORMAT_HAS_METHOD (font, instantiate);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2960 IIFORMAT_VALID_CONSOLE (x, font);
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 IIFORMAT_VALID_KEYWORD (font, Q_data, check_valid_string);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2963 IIFORMAT_VALID_KEYWORD (font, Q_foreground, check_valid_string);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2964 IIFORMAT_VALID_KEYWORD (font, Q_background, check_valid_string);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2965
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2966 #ifdef HAVE_XFACE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2967 INITIALIZE_DEVICE_IIFORMAT (x, xface);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2968 IIFORMAT_HAS_DEVMETHOD (x, xface, instantiate);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2969 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2970
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2971 INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (autodetect,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2972 "autodetect");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2973
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2974 IIFORMAT_HAS_METHOD (autodetect, validate);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2975 IIFORMAT_HAS_METHOD (autodetect, normalize);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2976 IIFORMAT_HAS_METHOD (autodetect, possible_dest_types);
4252
8475ff9c49ea [xemacs-hg @ 2007-11-05 14:59:20 by didierv]
didierv
parents: 4226
diff changeset
2977 /* #### autodetect is flawed IMO:
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
2978 1. It makes the assumption that you can detect whether the user
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
2979 wanted a cursor or a string based on the data, since the data is a
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
2980 string you have to prioritise cursors. Instead we will force users
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
2981 to pick the appropriate image type, this is what we do under
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
2982 MS-Windows anyway.
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
2983 2. It doesn't fit with the new domain model - you cannot tell which
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
2984 domain it needs to be instantiated in until you've actually
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
2985 instantiated it, which mucks up caching.
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
2986 3. It only copes with cursors and strings which seems bogus. */
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
2987 IIFORMAT_HAS_SHARED_METHOD (autodetect, governing_domain, subwindow);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2988 IIFORMAT_HAS_METHOD (autodetect, instantiate);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2989 IIFORMAT_VALID_CONSOLE (x, autodetect);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2990
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2991 IIFORMAT_VALID_KEYWORD (autodetect, Q_data, check_valid_string);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2992 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2993
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2994 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2995 vars_of_glyphs_x (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2996 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2997 DEFVAR_LISP ("x-bitmap-file-path", &Vx_bitmap_file_path /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2998 A list of the directories in which X bitmap files may be found.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2999 If nil, this is initialized from the "*bitmapFilePath" resource.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3000 This is used by the `make-image-instance' function (however, note that if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3001 the environment variable XBMLANGPATH is set, it is consulted first).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3002 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3003 Vx_bitmap_file_path = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3004 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3005
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3006 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3007 complex_vars_of_glyphs_x (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3008 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3009 #define BUILD_GLYPH_INST(variable, name) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3010 Fadd_spec_to_specifier \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3011 (GLYPH_IMAGE (XGLYPH (variable)), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3012 vector3 (Qxbm, Q_data, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3013 list3 (make_int (name##_width), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3014 make_int (name##_height), \
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
3015 make_ext_string ((Extbyte *) name##_bits, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3016 sizeof (name##_bits), \
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3017 Qbinary))), \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3018 Qglobal, Qx, Qnil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3019
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3020 BUILD_GLYPH_INST (Vtruncation_glyph, truncator);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3021 BUILD_GLYPH_INST (Vcontinuation_glyph, continuer);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3022 BUILD_GLYPH_INST (Vxemacs_logo, xemacs);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3023 BUILD_GLYPH_INST (Vhscroll_glyph, hscroll);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3024
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3025 #undef BUILD_GLYPH_INST
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3026 }