annotate src/glyphs-gtk.c @ 872:79c6ff3eef26

[xemacs-hg @ 2002-06-20 21:18:01 by ben] font changes etc.; some 21.4 changes mule/mule-msw-init-late.el: Specify charset->windows-registry conversion. mule/mule-x-init.el: Delete extra mule font additions here. Put them in faces.c. cl-macs.el: Document better. font-lock.el: Move Lisp function regexp to lisp-mode.el. lisp-mode.el: Various indentation fixes: Handle flet functions better. Handle argument lists in defuns and flets. Handle quoted lists, e.g. property lists -- don't indent like function calls. Distinguish between lambdas and other lists. lisp-mode.el: Handle this form. faces.el, font-menu.el, font.el, gtk-faces.el, msw-faces.el, msw-font-menu.el, x-faces.el, x-init.el: Major overhaul of face-handling code: -- Fix lots of bogus code in msw-faces.el, msw-font-menu.el, font-menu.el that was "truenaming" font specs -- i.e. in the process of frobbing a particular field in a general user-specified font spec with wildcarded fields, sticking in particular values for all the remaining wildcarded fields. This bug was rampant everywhere except in x-faces.el (the oldest and only correctly written code). This also means that we need to work with font names at all times and not font instances, because a font instance is essentially a truenamed font. -- Total rewrite of extremely junky code in msw-faces.el. Work with names as well as font instances, and return names; stop truenaming when canonicalizing and frobbing; fix handling of the combined style field, i.e. weight/slant (also fixed in font.el). -- Totally rewrite the frobbing functions in faces.el. This time, we frob all the instantiators rather than just computing a single instance value and working backwards. That way, e.g., `bold' will work for all charsets that have bold available, rather than only for whatever charset was part of the computed font instance (another example of the truename virus). Also fix up code to look at the fallbacks (all of them) when no global value present, so we don't need to put something in the global value. Intelligently handle a request to frob a buffer locale, rather than signalling an error. When frobbing instantiators, try hard to figure out what device type is associated with them, and frob each according to its own proper device type. Correctly handle inheritance vectors given as instantiators. Preserve existing tags when putting back frobbed instantiators. Extract out general specifier-frobbing code into specifier.el. Document everything cleanly. Do lots of other things better, etc. -- Don't duplicatively set a global specification for the default font -- it's already in the fallback and we no longer need a default global specification present. Delete various code in x-faces.el and msw-faces.el that duplicated the lists of fonts in faces.c. -- init-global-faces was not being called at all under MS Windows! Major bogosity. That caused device-specific values to get stuck into all the fonts, making it very hard to change them -- setting global specs caused nothing to happen. -- Correct weight names in font.el. -- Lots more font fixups in objects*.c. Printer.el: Warning fix. specifier.el: Add more args to map-specifier. Add various "heuristic" specifier functions to aid in creation of specifier-munging code such as in faces.el. subr.el: New functions. lwlib.c: Fix warning. config.inc.samp: Clean up, add args to control fastcall (not yet supported! the changes needed are in another ws of mine), profile support, vc6 support, union-type. xemacs.dsp, xemacs.mak: Semi-major overhaul. Fix bug where dump-id was always getting recomputed, forcing a redump even when nothing changed. Add support for fastcall. Support edit-and-continue (on by default) with vc6. Use incremental linking when doing a debug compilation. Add support for profiling. Consolidate the various debug flags. Partial support for "batch-compiling" -- compiling many files on a single invocation of the compiler. Doesn't seem to help that much for me, so it's not finished or enabled by default. Remove HAVE_MSW_C_DIRED, we always do. Correct some sloppy use of directories. s/cygwin32.h: Allow pdump to work under Cygwin (mmap is broken, so need to undefine HAVE_MMAP). s/win32-common.h, s/windowsnt.h: Support for fastcall. Add WIN32_ANY for identifying all Win32 variants (Cygwin, native, MinGW). Both of these are properly used in another ws. alloc.c, balloon-x.c, buffer.c, bytecode.c, callint.c, cm.c, cmdloop.c, cmds.c, console-gtk.c, console-gtk.h, console-msw.c, console-msw.h, console-stream.c, console-stream.h, console-tty.c, console-tty.h, console-x.c, console-x.h, console.c, console.h, device-gtk.c, device-msw.c, device-tty.c, device-x.c, device.c, device.h, devslots.h, dialog-gtk.c, dialog-msw.c, dialog-x.c, dialog.c, dired-msw.c, editfns.c, emacs.c, event-Xt.c, event-gtk.c, event-msw.c, event-stream.c, event-tty.c, event-unixoid.c, events.c, extents.c, extents.h, faces.c, fileio.c, fns.c, frame-gtk.c, frame-msw.c, frame-tty.c, frame-x.c, frame.c, frame.h, glyphs-eimage.c, glyphs-gtk.c, glyphs-msw.c, glyphs-widget.c, glyphs-x.c, glyphs.c, glyphs.h, gui-gtk.c, gui-msw.c, gui-x.c, gui.c, gutter.c, input-method-xlib.c, intl-encap-win32.c, intl-win32.c, keymap.c, lisp.h, macros.c, menubar-gtk.c, menubar-msw.c, menubar-x.c, menubar.c, menubar.h, minibuf.c, mule-charset.c, nt.c, objects-gtk.c, objects-gtk.h, objects-msw.c, objects-msw.h, objects-tty.c, objects-tty.h, objects-x.c, objects-x.h, objects.c, objects.h, postgresql.c, print.c, process.h, redisplay-gtk.c, redisplay-msw.c, redisplay-output.c, redisplay-tty.c, redisplay-x.c, redisplay.c, redisplay.h, scrollbar-gtk.c, scrollbar-msw.c, scrollbar-x.c, scrollbar.c, select-gtk.c, select-msw.c, select-x.c, select.c, signal.c, sound.c, specifier.c, symbols.c, syntax.c, sysdep.c, syssignal.h, syswindows.h, toolbar-common.c, toolbar-gtk.c, toolbar-msw.c, toolbar-x.c, toolbar.c, unicode.c, window.c, window.h: The following are the major changes made: (1) Separation of various header files into an external and an internal version, similar to the existing separation of process.h and procimpl.h. Eventually this should be done for all Lisp objects. The external version has the same name as currently; the internal adds -impl. The external file has XFOO() macros for objects, but the structure is opaque and defined only in the internal file. It's now reasonable to move all prototypes in lisp.h into the appropriate external file, and this should be done. Currently, separation has been done on extents.h, objects*.h, console.h, device.h, frame.h, and window.h. For c/d/f/w, the most basic properties are available in the external header file, with the macros resolving to functions. In the internal header file, the macros are redefined to directly access the structure. Also, the global MARK_FOO_CHANGED macros have been made into functions so that they can be accessed without needing to include lots of -impl headers -- they are used in almost exclusively in non-time-critical functions, and take up enough time that the function overhead will be negligible. Similarly, the function overhead from making the basic properties mentioned above into functions is negligible, and code that does heavy accessing of c/d/f/w structures inevitably ends up needing the internal header files, anyway. (2) More face changes. -- Major rewrite of objects-msw.c. Now handles wildcard specs properly, rather than "truenaming" (or even worse, signalling an error, which previously happened with some of the fallbacks if you tried to use them in make-font-instance!). -- Split charset matching of fonts into two stages -- one to find a font specifically designed for a particular charset (by examining its registry), the second to find a Unicode font that can support the charset. This needs to proceed as two complete, separate instantiations in order to work properly (otherwise many of the fonts in the HELLO page look wrong). This should also make it easy to support iso10646 (Unicode) fonts under X. -- All default values for fonts are now completely specified in the fallbacks. Stuff from mule-x-init.el has all been moved here, merged with the existing specs, and totally rethought so you get sensible results. (HELLO now looks much better!). -- Generalize the "default X/GTK device" stuff into a per-device-type "default device". -- Add mswindows-{set-}charset-registry. In time, charset<->code-page conversion functions will be removed. -- Wrap protective code around calls to compute device specifier tags, and do this computation before calling the face initialization code because the latter may need these tags to be correctly updated. (3) Other changes. EmacsFrame.c, glyphs-msw.c, eval.c, gui-x.c, intl-encap-win32.c, search.c, signal.c, toolbar-msw.c, unicode.c: Warning fixes. config.h.in: #undefs meant to be frobbed by configure *MUST* go inside of #ifndef WIN32_NO_CONFIGURE, and everything else *MUST* go outside! eval.c: Let detailed backtraces be detailed. specifier.c: Don't override user's print-string-length/print-length settings. glyphs.c: New function image-instance-instantiator. config.h.in, sysdep.c: Changes for fastcall. sysdep.c, nt.c: Fix up a previous botched patch that tried to add support for both EEXIST and EACCES. IF THE BOTCHED PATCH WENT INTO 21.4, THIS FIXUP NEEDS TO GO IN, TOO. search.c: Fix *evil* crash due to incorrect synching of syntax-cache code with 21.1. THIS SHOULD GO INTO 21.4.
author ben
date Thu, 20 Jun 2002 21:19:10 +0000
parents e7ee5f8bde58
children b531bf8658e9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
714
02339d4ebed4 [xemacs-hg @ 2001-12-23 20:28:19 by wmperry]
wmperry
parents: 691
diff changeset
1 /* GTK-specific Lisp objects.
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2 Copyright (C) 1993, 1994 Free Software Foundation, Inc.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
3 Copyright (C) 1995 Board of Trustees, University of Illinois.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
4 Copyright (C) 1995 Tinker Systems
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
5 Copyright (C) 1995, 1996, 2001, 2002 Ben Wing
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
6 Copyright (C) 1995 Sun Microsystems
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
7
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
8 This file is part of XEmacs.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
9
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
10 XEmacs is free software; you can redistribute it and/or modify it
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
11 under the terms of the GNU General Public License as published by the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
12 Free Software Foundation; either version 2, or (at your option) any
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
13 later version.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
14
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
15 XEmacs is distributed in the hope that it will be useful, but WITHOUT
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
16 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
17 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
18 for more details.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
19
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
20 You should have received a copy of the GNU General Public License
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
21 along with XEmacs; see the file COPYING. If not, write to
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
22 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
23 Boston, MA 02111-1307, USA. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
24
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
25 /* Synched up with: Not in FSF. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
26
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
27 /* Original author: Jamie Zawinski for 19.8
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
28 font-truename stuff added by Jamie Zawinski for 19.10
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
29 subwindow support added by Chuck Thompson
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
30 additional XPM support added by Chuck Thompson
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
31 initial X-Face support added by Stig
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
32 rewritten/restructured by Ben Wing for 19.12/19.13
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
33 GIF/JPEG support added by Ben Wing for 19.14
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
34 PNG support added by Bill Perry for 19.14
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
35 Improved GIF/JPEG support added by Bill Perry for 19.14
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
36 Cleanup/simplification of error handling by Ben Wing for 19.14
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
37 Pointer/icon overhaul, more restructuring by Ben Wing for 19.14
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
38 GIF support changed to external GIFlib 3.1 by Jareth Hein for 21.0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
39 Many changes for color work and optimizations by Jareth Hein for 21.0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
40 Switch of GIF/JPEG/PNG to new EImage intermediate code by Jareth Hein for 21.0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
41 TIFF code by Jareth Hein for 21.0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
42 GIF/JPEG/PNG/TIFF code moved to new glyph-eimage.c for 21.0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
43 Gtk version by William Perry for 21.1
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
44
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
45 TODO:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
46 Support the GrayScale, StaticColor and StaticGray visual classes.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
47 Convert images.el to C and stick it in here?
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
48 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
49
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
50 #include <config.h>
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
51 #include "lisp.h"
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
52
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
53 #include "buffer.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 851
diff changeset
54 #include "device-impl.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 851
diff changeset
55 #include "faces.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 851
diff changeset
56 #include "file-coding.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 851
diff changeset
57 #include "frame-impl.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 851
diff changeset
58 #include "glyphs.h"
809
285f13b079f3 [xemacs-hg @ 2002-04-07 16:01:30 by wmperry]
wmperry
parents: 800
diff changeset
59 #include "gui.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 851
diff changeset
60 #include "imgproc.h"
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
61 #include "insdel.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 851
diff changeset
62 #include "lstream.h"
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
63 #include "opaque.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 851
diff changeset
64 #include "window.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 851
diff changeset
65
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 851
diff changeset
66 #include "console-gtk-impl.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 851
diff changeset
67 #include "glyphs-gtk.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 851
diff changeset
68 #include "gui-gtk.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 851
diff changeset
69 #include "objects-gtk-impl.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 851
diff changeset
70 #include "ui-gtk.h"
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
71
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
72 #include "sysfile.h"
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
73
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
74 #include <setjmp.h>
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
75
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
76 DECLARE_IMAGE_INSTANTIATOR_FORMAT (nothing);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
77 DECLARE_IMAGE_INSTANTIATOR_FORMAT (string);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
78 DECLARE_IMAGE_INSTANTIATOR_FORMAT (formatted_string);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
79 DECLARE_IMAGE_INSTANTIATOR_FORMAT (inherit);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
80 #ifdef HAVE_JPEG
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
81 DECLARE_IMAGE_INSTANTIATOR_FORMAT (jpeg);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
82 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
83 #ifdef HAVE_TIFF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
84 DECLARE_IMAGE_INSTANTIATOR_FORMAT (tiff);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
85 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
86 #ifdef HAVE_PNG
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
87 DECLARE_IMAGE_INSTANTIATOR_FORMAT (png);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
88 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
89 #ifdef HAVE_GIF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
90 DECLARE_IMAGE_INSTANTIATOR_FORMAT (gif);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
91 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
92
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
93 #ifdef HAVE_XFACE
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
94 DEFINE_DEVICE_IIFORMAT (gtk, xface);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
95 Lisp_Object Qxface;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
96 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
97
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
98 #ifdef HAVE_XPM
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
99 DEFINE_DEVICE_IIFORMAT (gtk, xpm);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
100 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
101
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
102 DEFINE_DEVICE_IIFORMAT (gtk, xbm);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
103 DEFINE_DEVICE_IIFORMAT (gtk, subwindow);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
104
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
105 DEFINE_IMAGE_INSTANTIATOR_FORMAT (cursor_font);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
106 Lisp_Object Qcursor_font;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
107
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
108 DEFINE_IMAGE_INSTANTIATOR_FORMAT (font);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
109
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
110 DEFINE_IMAGE_INSTANTIATOR_FORMAT (autodetect);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
111
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
112 #ifdef HAVE_WIDGETS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
113 DECLARE_IMAGE_INSTANTIATOR_FORMAT (layout);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
114 DEFINE_DEVICE_IIFORMAT (gtk, widget);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
115 DEFINE_DEVICE_IIFORMAT (gtk, native_layout);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
116 DEFINE_DEVICE_IIFORMAT (gtk, button);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
117 DEFINE_DEVICE_IIFORMAT (gtk, progress_gauge);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
118 DEFINE_DEVICE_IIFORMAT (gtk, edit_field);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
119 DEFINE_DEVICE_IIFORMAT (gtk, combo_box);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
120 DEFINE_DEVICE_IIFORMAT (gtk, tab_control);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
121 DEFINE_DEVICE_IIFORMAT (gtk, label);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
122 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
123
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
124 static void update_widget_face (GtkWidget *w, Lisp_Image_Instance *ii,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
125 Lisp_Object domain);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
126 static void cursor_font_instantiate (Lisp_Object image_instance,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
127 Lisp_Object instantiator,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
128 Lisp_Object pointer_fg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
129 Lisp_Object pointer_bg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
130 int dest_mask,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
131 Lisp_Object domain);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
132
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
133 static gint cursor_name_to_index (const char *name);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
134
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
135 #ifndef BitmapSuccess
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
136 #define BitmapSuccess 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
137 #define BitmapOpenFailed 1
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
138 #define BitmapFileInvalid 2
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
139 #define BitmapNoMemory 3
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
140 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
141
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
142 #include "bitmaps.h"
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
143
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
144 DEFINE_IMAGE_INSTANTIATOR_FORMAT (gtk_resource);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
145 Lisp_Object Qgtk_resource;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
146 #ifdef HAVE_WIDGETS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
147 Lisp_Object Qgtk_widget_instantiate_internal, Qgtk_widget_property_internal;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
148 Lisp_Object Qgtk_widget_redisplay_internal, Qgtk_widget_set_style;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
149 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
150
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
151
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
152 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
153 /* image instance methods */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
154 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
155
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
156 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
157 /* convert from a series of RGB triples to an XImage formated for the */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
158 /* proper display */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
159 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
160 static GdkImage *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
161 convert_EImage_to_GDKImage (Lisp_Object device, int width, int height,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
162 unsigned char *pic, unsigned long **pixtbl,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
163 int *npixels)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
164 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
165 GdkColormap *cmap;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
166 GdkVisual *vis;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
167 GdkImage *outimg;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
168 int depth, byte_cnt, i, j;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
169 int rd,gr,bl,q;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
170 unsigned char *data, *ip, *dp = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
171 quant_table *qtable = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
172 union {
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 809
diff changeset
173 UINT_32_BIT val;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
174 char cp[4];
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
175 } conv;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
176
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
177 cmap = DEVICE_GTK_COLORMAP (XDEVICE(device));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
178 vis = DEVICE_GTK_VISUAL (XDEVICE(device));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
179 depth = DEVICE_GTK_DEPTH(XDEVICE(device));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
180
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
181 if (vis->type == GDK_VISUAL_GRAYSCALE || vis->type == GDK_VISUAL_STATIC_COLOR ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
182 vis->type == GDK_VISUAL_STATIC_GRAY)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
183 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
184 /* #### Implement me!!! */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
185 return NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
186 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
187
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
188 if (vis->type == GDK_VISUAL_PSEUDO_COLOR)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
189 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
190 /* Quantize the image and get a histogram while we're at it.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
191 Do this first to save memory */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
192 qtable = build_EImage_quantable(pic, width, height, 256);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
193 if (qtable == NULL) return NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
194 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
195
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
196 /* The first parameter (GdkWindow *) is allowed to be NULL if we
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
197 ** specify the depth */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
198 outimg = gdk_image_new (GDK_IMAGE_FASTEST, vis, width, height);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
199
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
200 if (!outimg) return NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
201
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
202 byte_cnt = outimg->bpp;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
203
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
204 data = (unsigned char *) outimg->mem;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
205
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
206 if (!data)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
207 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
208 gdk_image_destroy (outimg);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
209 return NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
210 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
211
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
212 if (vis->type == GDK_VISUAL_PSEUDO_COLOR)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
213 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
214 unsigned long pixarray[256];
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
215 int pixcount, n;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
216 /* use our quantize table to allocate the colors */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
217 pixcount = 32;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
218 *pixtbl = xnew_array (unsigned long, pixcount);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
219 *npixels = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
220
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
221 /* ### should implement a sort by popularity to assure proper allocation */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
222 n = *npixels;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
223 for (i = 0; i < qtable->num_active_colors; i++)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
224 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
225 GdkColor color;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
226 int res;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
227
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
228 color.red = qtable->rm[i] ? qtable->rm[i] << 8 : 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
229 color.green = qtable->gm[i] ? qtable->gm[i] << 8 : 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
230 color.blue = qtable->bm[i] ? qtable->bm[i] << 8 : 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
231 res = allocate_nearest_color (cmap, vis, &color);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
232 if (res > 0 && res < 3)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
233 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
234 DO_REALLOC(*pixtbl, pixcount, n+1, unsigned long);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
235 (*pixtbl)[n] = color.pixel;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
236 n++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
237 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
238 pixarray[i] = color.pixel;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
239 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
240 *npixels = n;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
241 ip = pic;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
242 for (i = 0; i < height; i++)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
243 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
244 dp = data + (i * outimg->bpl);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
245 for (j = 0; j < width; j++)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
246 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
247 rd = *ip++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
248 gr = *ip++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
249 bl = *ip++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
250 conv.val = pixarray[QUANT_GET_COLOR(qtable,rd,gr,bl)];
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
251 #if WORDS_BIGENDIAN
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
252 if (outimg->byte_order == GDK_MSB_FIRST)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
253 for (q = 4-byte_cnt; q < 4; q++) *dp++ = conv.cp[q];
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
254 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
255 for (q = 3; q >= 4-byte_cnt; q--) *dp++ = conv.cp[q];
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
256 #else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
257 if (outimg->byte_order == GDK_MSB_FIRST)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
258 for (q = byte_cnt-1; q >= 0; q--) *dp++ = conv.cp[q];
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
259 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
260 for (q = 0; q < byte_cnt; q++) *dp++ = conv.cp[q];
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
261 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
262 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
263 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
264 xfree(qtable);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
265 } else {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
266 unsigned long rshift,gshift,bshift,rbits,gbits,bbits,junk;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
267 junk = vis->red_mask;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
268 rshift = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
269 while ((junk & 0x1) == 0)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
270 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
271 junk = junk >> 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
272 rshift ++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
273 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
274 rbits = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
275 while (junk != 0)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
276 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
277 junk = junk >> 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
278 rbits++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
279 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
280 junk = vis->green_mask;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
281 gshift = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
282 while ((junk & 0x1) == 0)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
283 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
284 junk = junk >> 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
285 gshift ++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
286 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
287 gbits = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
288 while (junk != 0)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
289 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
290 junk = junk >> 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
291 gbits++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
292 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
293 junk = vis->blue_mask;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
294 bshift = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
295 while ((junk & 0x1) == 0)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
296 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
297 junk = junk >> 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
298 bshift ++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
299 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
300 bbits = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
301 while (junk != 0)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
302 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
303 junk = junk >> 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
304 bbits++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
305 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
306 ip = pic;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
307 for (i = 0; i < height; i++)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
308 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
309 dp = data + (i * outimg->bpl);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
310 for (j = 0; j < width; j++)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
311 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
312 if (rbits > 8)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
313 rd = *ip++ << (rbits - 8);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
314 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
315 rd = *ip++ >> (8 - rbits);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
316 if (gbits > 8)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
317 gr = *ip++ << (gbits - 8);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
318 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
319 gr = *ip++ >> (8 - gbits);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
320 if (bbits > 8)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
321 bl = *ip++ << (bbits - 8);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
322 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
323 bl = *ip++ >> (8 - bbits);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
324
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
325 conv.val = (rd << rshift) | (gr << gshift) | (bl << bshift);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
326 #if WORDS_BIGENDIAN
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
327 if (outimg->byte_order == GDK_MSB_FIRST)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
328 for (q = 4-byte_cnt; q < 4; q++) *dp++ = conv.cp[q];
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
329 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
330 for (q = 3; q >= 4-byte_cnt; q--) *dp++ = conv.cp[q];
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
331 #else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
332 if (outimg->byte_order == GDK_MSB_FIRST)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
333 for (q = byte_cnt-1; q >= 0; q--) *dp++ = conv.cp[q];
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
334 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
335 for (q = 0; q < byte_cnt; q++) *dp++ = conv.cp[q];
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
336 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
337 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
338 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
339 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
340 return outimg;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
341 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
342
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
343 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
344 gtk_print_image_instance (struct Lisp_Image_Instance *p,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
345 Lisp_Object printcharfun,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
346 int escapeflag)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
347 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
348 switch (IMAGE_INSTANCE_TYPE (p))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
349 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
350 case IMAGE_MONO_PIXMAP:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
351 case IMAGE_COLOR_PIXMAP:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
352 case IMAGE_POINTER:
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
353 write_fmt_string (printcharfun, " (0x%lx",
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
354 (unsigned long) IMAGE_INSTANCE_GTK_PIXMAP (p));
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
355 if (IMAGE_INSTANCE_GTK_MASK (p))
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
356 write_fmt_string (printcharfun, "/0x%lx",
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
357 (unsigned long) IMAGE_INSTANCE_GTK_MASK (p));
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 809
diff changeset
358 write_c_string (printcharfun, ")");
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
359 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
360 #if HAVE_SUBWINDOWS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
361 case IMAGE_SUBWINDOW:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
362 /* #### implement me */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
363 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
364 default:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
365 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
366 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
367 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
368
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
369 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
370 gtk_finalize_image_instance (struct Lisp_Image_Instance *p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
371 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
372 if (!p->data)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
373 return;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
374
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
375 if (DEVICE_LIVE_P (XDEVICE (p->device)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
376 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
377 if (0)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
378 ;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
379 #ifdef HAVE_WIDGETS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
380 if (IMAGE_INSTANCE_TYPE (p) == IMAGE_WIDGET)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
381 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
382 if (IMAGE_INSTANCE_SUBWINDOW_ID (p))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
383 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
384 gtk_widget_destroy (IMAGE_INSTANCE_SUBWINDOW_ID (p));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
385
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
386 /* We can release the callbacks again. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
387 /* #### FIXME! */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
388 /* ungcpro_popup_callbacks (...); */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
389
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
390 /* IMAGE_INSTANCE_GTK_WIDGET_ID (p) = 0; */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
391 IMAGE_INSTANCE_GTK_CLIPWIDGET (p) = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
392 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
393 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
394 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
395 else if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
396 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
397 abort();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
398 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
399 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
400 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
401 int i;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
402 if (IMAGE_INSTANCE_PIXMAP_TIMEOUT (p))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
403 disable_glyph_animated_timeout (IMAGE_INSTANCE_PIXMAP_TIMEOUT (p));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
404
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
405 if (IMAGE_INSTANCE_GTK_MASK (p) &&
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
406 IMAGE_INSTANCE_GTK_MASK (p) != IMAGE_INSTANCE_GTK_PIXMAP (p))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
407 gdk_pixmap_unref (IMAGE_INSTANCE_GTK_MASK (p));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
408 IMAGE_INSTANCE_PIXMAP_MASK (p) = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
409
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
410 if (IMAGE_INSTANCE_GTK_PIXMAP_SLICES (p))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
411 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
412 for (i = 0; i < IMAGE_INSTANCE_PIXMAP_MAXSLICE (p); i++)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
413 if (IMAGE_INSTANCE_GTK_PIXMAP_SLICE (p,i))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
414 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
415 gdk_pixmap_unref (IMAGE_INSTANCE_GTK_PIXMAP_SLICE (p,i));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
416 IMAGE_INSTANCE_GTK_PIXMAP_SLICE (p, i) = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
417 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
418 xfree (IMAGE_INSTANCE_GTK_PIXMAP_SLICES (p));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
419 IMAGE_INSTANCE_GTK_PIXMAP_SLICES (p) = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
420 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
421
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
422 if (IMAGE_INSTANCE_GTK_CURSOR (p))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
423 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
424 gdk_cursor_destroy (IMAGE_INSTANCE_GTK_CURSOR (p));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
425 IMAGE_INSTANCE_GTK_CURSOR (p) = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
426 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
427 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
428
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
429 #if 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
430 /* #### BILL!!! */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
431 if (IMAGE_INSTANCE_GTK_NPIXELS (p) != 0)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
432 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
433 XFreeColors (dpy,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
434 IMAGE_INSTANCE_GTK_COLORMAP (p),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
435 IMAGE_INSTANCE_GTK_PIXELS (p),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
436 IMAGE_INSTANCE_GTK_NPIXELS (p), 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
437 IMAGE_INSTANCE_GTK_NPIXELS (p) = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
438 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
439 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
440 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
441
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
442 if (IMAGE_INSTANCE_TYPE (p) != IMAGE_WIDGET
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
443 && IMAGE_INSTANCE_TYPE (p) != IMAGE_SUBWINDOW
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
444 && IMAGE_INSTANCE_GTK_PIXELS (p))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
445 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
446 xfree (IMAGE_INSTANCE_GTK_PIXELS (p));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
447 IMAGE_INSTANCE_GTK_PIXELS (p) = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
448 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
449
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
450 xfree (p->data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
451 p->data = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
452 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
453
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
454 static int
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
455 gtk_image_instance_equal (struct Lisp_Image_Instance *p1,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
456 struct Lisp_Image_Instance *p2, int depth)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
457 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
458 switch (IMAGE_INSTANCE_TYPE (p1))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
459 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
460 case IMAGE_MONO_PIXMAP:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
461 case IMAGE_COLOR_PIXMAP:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
462 case IMAGE_POINTER:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
463 if (IMAGE_INSTANCE_GTK_COLORMAP (p1) != IMAGE_INSTANCE_GTK_COLORMAP (p2) ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
464 IMAGE_INSTANCE_GTK_NPIXELS (p1) != IMAGE_INSTANCE_GTK_NPIXELS (p2))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
465 return 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
466 #if HAVE_SUBWINDOWS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
467 case IMAGE_SUBWINDOW:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
468 /* #### implement me */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
469 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
470 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
471 default:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
472 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
473 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
474
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
475 return 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
476 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
477
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
478 static unsigned long
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
479 gtk_image_instance_hash (struct Lisp_Image_Instance *p, int depth)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
480 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
481 switch (IMAGE_INSTANCE_TYPE (p))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
482 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
483 case IMAGE_MONO_PIXMAP:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
484 case IMAGE_COLOR_PIXMAP:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
485 case IMAGE_POINTER:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
486 return IMAGE_INSTANCE_GTK_NPIXELS (p);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
487 #if HAVE_SUBWINDOWS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
488 case IMAGE_SUBWINDOW:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
489 /* #### implement me */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
490 return 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
491 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
492 default:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
493 return 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
494 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
495 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
496
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
497 /* Set all the slots in an image instance structure to reasonable
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
498 default values. This is used somewhere within an instantiate
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
499 method. It is assumed that the device slot within the image
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
500 instance is already set -- this is the case when instantiate
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
501 methods are called. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
502
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
503 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
504 gtk_initialize_pixmap_image_instance (struct Lisp_Image_Instance *ii,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
505 int slices,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
506 enum image_instance_type type)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
507 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
508 ii->data = xnew_and_zero (struct gtk_image_instance_data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
509 IMAGE_INSTANCE_PIXMAP_MAXSLICE (ii) = slices;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
510 IMAGE_INSTANCE_GTK_PIXMAP_SLICES (ii) =
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
511 xnew_array_and_zero (GdkPixmap *, slices);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
512 IMAGE_INSTANCE_TYPE (ii) = type;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
513 IMAGE_INSTANCE_PIXMAP_FILENAME (ii) = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
514 IMAGE_INSTANCE_PIXMAP_MASK_FILENAME (ii) = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
515 IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii) = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
516 IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii) = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
517 IMAGE_INSTANCE_PIXMAP_FG (ii) = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
518 IMAGE_INSTANCE_PIXMAP_BG (ii) = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
519 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
520
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
521
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
522 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
523 /* pixmap file functions */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
524 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
525
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
526 /* Where bitmaps are; initialized from resource database */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
527 Lisp_Object Vgtk_bitmap_file_path;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
528
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
529 #ifndef BITMAPDIR
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
530 #define BITMAPDIR "/usr/include/X11/bitmaps"
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
531 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
532
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
533 /* Given a pixmap filename, look through all of the "standard" places
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
534 where the file might be located. Return a full pathname if found;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
535 otherwise, return Qnil. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
536
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
537 static Lisp_Object
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
538 gtk_locate_pixmap_file (Lisp_Object name)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
539 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
540 /* This function can GC if IN_REDISPLAY is false */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
541
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
542 /* Check non-absolute pathnames with a directory component relative to
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
543 the search path; that's the way Xt does it. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
544 /* #### Unix-specific */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 809
diff changeset
545 if (string_byte (name, 0) == '/' ||
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 809
diff changeset
546 (string_byte (name, 0) == '.' &&
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 809
diff changeset
547 (string_byte (name, 1) == '/' ||
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 809
diff changeset
548 (string_byte (name, 1) == '.' &&
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 809
diff changeset
549 (string_byte (name, 2) == '/')))))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
550 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
551 if (!NILP (Ffile_readable_p (name)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
552 return name;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
553 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
554 return Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
555 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
556
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
557 if (NILP (Vgtk_bitmap_file_path))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
558 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
559 Vgtk_bitmap_file_path = nconc2 (Vgtk_bitmap_file_path,
778
2923009caf47 [xemacs-hg @ 2002-03-16 10:38:59 by ben]
ben
parents: 771
diff changeset
560 (split_external_path (BITMAPDIR)));
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
561 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
562
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
563 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
564 Lisp_Object found;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
565 if (locate_file (Vgtk_bitmap_file_path, name, Qnil, &found, R_OK) < 0)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
566 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
567 Lisp_Object temp = list1 (Vdata_directory);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
568 struct gcpro gcpro1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
569
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
570 GCPRO1 (temp);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
571 locate_file (temp, name, Qnil, &found, R_OK);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
572 UNGCPRO;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
573 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
574
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
575 return found;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
576 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
577 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
578
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
579 static Lisp_Object
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
580 locate_pixmap_file (Lisp_Object name)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
581 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
582 return gtk_locate_pixmap_file (name);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
583 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
584
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
585
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
586 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
587 /* cursor functions */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
588 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
589
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
590 /* Check that this server supports cursors of size WIDTH * HEIGHT. If
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
591 not, signal an error. INSTANTIATOR is only used in the error
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
592 message. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
593
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
594 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
595 check_pointer_sizes (unsigned int width, unsigned int height,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
596 Lisp_Object instantiator)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
597 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
598 /* #### BILL!!! There is no way to call XQueryBestCursor from Gdk! */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
599 #if 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
600 unsigned int best_width, best_height;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
601 if (! XQueryBestCursor (DisplayOfScreen (xs), RootWindowOfScreen (xs),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
602 width, height, &best_width, &best_height))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
603 /* this means that an X error of some sort occurred (we trap
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
604 these so they're not fatal). */
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
605 gui_error ("XQueryBestCursor() failed?", instantiator);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
606
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
607 if (width > best_width || height > best_height)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
608 signal_ferror_with_frob (Qgui_error, instantiator,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
609 "pointer too large (%dx%d): "
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
610 "server requires %dx%d or smaller",
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
611 width, height, best_width, best_height);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
612 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
613 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
614
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
615 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
616 generate_cursor_fg_bg (Lisp_Object device, Lisp_Object *foreground,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
617 Lisp_Object *background, GdkColor *xfg, GdkColor *xbg)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
618 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
619 if (!NILP (*foreground) && !COLOR_INSTANCEP (*foreground))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
620 *foreground =
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
621 Fmake_color_instance (*foreground, device,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
622 encode_error_behavior_flag (ERROR_ME));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
623 if (COLOR_INSTANCEP (*foreground))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
624 *xfg = * COLOR_INSTANCE_GTK_COLOR (XCOLOR_INSTANCE (*foreground));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
625 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
626 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
627 xfg->pixel = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
628 xfg->red = xfg->green = xfg->blue = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
629 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
630
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
631 if (!NILP (*background) && !COLOR_INSTANCEP (*background))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
632 *background =
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
633 Fmake_color_instance (*background, device,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
634 encode_error_behavior_flag (ERROR_ME));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
635 if (COLOR_INSTANCEP (*background))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
636 *xbg = * COLOR_INSTANCE_GTK_COLOR (XCOLOR_INSTANCE (*background));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
637 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
638 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
639 xbg->pixel = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
640 xbg->red = xbg->green = xbg->blue = ~0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
641 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
642 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
643
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
644 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
645 maybe_recolor_cursor (Lisp_Object image_instance, Lisp_Object foreground,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
646 Lisp_Object background)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
647 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
648 #if 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
649 /* #### BILL!!! */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
650 Lisp_Object device = XIMAGE_INSTANCE_DEVICE (image_instance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
651 GdkColor xfg, xbg;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
652
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
653 generate_cursor_fg_bg (device, &foreground, &background, &xfg, &xbg);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
654 if (!NILP (foreground) || !NILP (background))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
655 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
656 XRecolorCursor (DEVICE_X_DISPLAY (XDEVICE (device)),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
657 XIMAGE_INSTANCE_GTK_CURSOR (image_instance),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
658 &xfg, &xbg);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
659 XIMAGE_INSTANCE_PIXMAP_FG (image_instance) = foreground;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
660 XIMAGE_INSTANCE_PIXMAP_BG (image_instance) = background;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
661 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
662 #else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
663 /* stderr_out ("Don't know how to recolor cursors in Gtk!\n"); */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
664 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
665 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
666
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
667
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
668 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
669 /* color pixmap functions */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
670 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
671
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
672 /* Initialize an image instance from an XImage.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
673
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
674 DEST_MASK specifies the mask of allowed image types.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
675
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
676 PIXELS and NPIXELS specify an array of pixels that are used in
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
677 the image. These need to be kept around for the duration of the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
678 image. When the image instance is freed, XFreeColors() will
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
679 automatically be called on all the pixels specified here; thus,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
680 you should have allocated the pixels yourself using XAllocColor()
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
681 or the like. The array passed in is used directly without
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
682 being copied, so it should be heap data created with xmalloc().
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
683 It will be freed using xfree() when the image instance is
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
684 destroyed.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
685
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
686 If this fails, signal an error. INSTANTIATOR is only used
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
687 in the error message.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
688
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
689 #### This should be able to handle conversion into `pointer'.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
690 Use the same code as for `xpm'. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
691
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
692 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
693 init_image_instance_from_gdk_image (struct Lisp_Image_Instance *ii,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
694 GdkImage *gdk_image,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
695 int dest_mask,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
696 GdkColormap *cmap,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
697 unsigned long *pixels,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
698 int npixels,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
699 int slices,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
700 Lisp_Object instantiator)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
701 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
702 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
703 GdkGC *gc;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
704 GdkWindow *d;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
705 GdkPixmap *pixmap;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
706
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
707 if (!DEVICE_GTK_P (XDEVICE (device)))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
708 gui_error ("Not a Gtk device", device);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
709
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
710 d = GET_GTK_WIDGET_WINDOW (DEVICE_GTK_APP_SHELL (XDEVICE (device)));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
711
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
712 if (!(dest_mask & IMAGE_COLOR_PIXMAP_MASK))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
713 incompatible_image_types (instantiator, dest_mask,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
714 IMAGE_COLOR_PIXMAP_MASK);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
715
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
716 pixmap = gdk_pixmap_new (d, gdk_image->width, gdk_image->height, gdk_image->depth);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
717 if (!pixmap)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
718 gui_error ("Unable to create pixmap", instantiator);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
719
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
720 gc = gdk_gc_new (pixmap);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
721 if (!gc)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
722 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
723 gdk_pixmap_unref (pixmap);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
724 gui_error ("Unable to create GC", instantiator);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
725 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
726
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
727 gdk_draw_image (GDK_DRAWABLE (pixmap), gc, gdk_image,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
728 0, 0, 0, 0, gdk_image->width, gdk_image->height);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
729
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
730 gdk_gc_destroy (gc);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
731
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
732 gtk_initialize_pixmap_image_instance (ii, slices, IMAGE_COLOR_PIXMAP);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
733
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
734 IMAGE_INSTANCE_PIXMAP_FILENAME (ii) =
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
735 find_keyword_in_vector (instantiator, Q_file);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
736
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
737 IMAGE_INSTANCE_GTK_PIXMAP (ii) = pixmap;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
738 IMAGE_INSTANCE_GTK_MASK (ii) = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
739 IMAGE_INSTANCE_PIXMAP_WIDTH (ii) = gdk_image->width;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
740 IMAGE_INSTANCE_PIXMAP_HEIGHT (ii) = gdk_image->height;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
741 IMAGE_INSTANCE_PIXMAP_DEPTH (ii) = gdk_image->depth;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
742 IMAGE_INSTANCE_GTK_COLORMAP (ii) = cmap;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
743 IMAGE_INSTANCE_GTK_PIXELS (ii) = pixels;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
744 IMAGE_INSTANCE_GTK_NPIXELS (ii) = npixels;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
745 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
746
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
747 #if 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
748 void init_image_instance_from_gdk_pixmap (struct Lisp_Image_Instance *ii,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
749 struct device *device,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
750 GdkPixmap *gdk_pixmap,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
751 int dest_mask,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
752 Lisp_Object instantiator)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
753 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
754 GdkWindow *d;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
755 gint width, height, depth;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
756
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
757 if (!DEVICE_GTK_P (device))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
758 abort ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
759
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
760 IMAGE_INSTANCE_DEVICE (ii) = device;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
761 IMAGE_INSTANCE_TYPE (ii) = IMAGE_COLOR_PIXMAP;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
762
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
763 d = GET_GTK_WIDGET_WINDOW (DEVICE_GTK_APP_SHELL (device));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
764
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
765 if (!(dest_mask & IMAGE_COLOR_PIXMAP_MASK))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
766 incompatible_image_types (instantiator, dest_mask,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
767 IMAGE_COLOR_PIXMAP_MASK);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
768
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
769 gtk_initialize_pixmap_image_instance (ii, IMAGE_COLOR_PIXMAP);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
770
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
771 gdk_window_get_geometry (gdk_pixmap, NULL, NULL, &width, &height, &depth);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
772
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
773 IMAGE_INSTANCE_PIXMAP_FILENAME (ii) = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
774 IMAGE_INSTANCE_GTK_PIXMAP (ii) = gdk_pixmap;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
775 IMAGE_INSTANCE_GTK_MASK (ii) = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
776 IMAGE_INSTANCE_PIXMAP_WIDTH (ii) = width;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
777 IMAGE_INSTANCE_PIXMAP_HEIGHT (ii) = height;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
778 IMAGE_INSTANCE_PIXMAP_DEPTH (ii) = depth;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
779 IMAGE_INSTANCE_GTK_COLORMAP (ii) = gdk_window_get_colormap (gdk_pixmap);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
780 IMAGE_INSTANCE_GTK_PIXELS (ii) = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
781 IMAGE_INSTANCE_GTK_NPIXELS (ii) = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
782 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
783 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
784
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
785 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
786 image_instance_add_gdk_image (Lisp_Image_Instance *ii,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
787 GdkImage *gdk_image,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
788 int slice,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
789 Lisp_Object instantiator)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
790 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
791 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
792 GdkWindow *d;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
793 GdkPixmap *pixmap;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
794 GdkGC *gc;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
795
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
796 d = GET_GTK_WIDGET_WINDOW (DEVICE_GTK_APP_SHELL (XDEVICE (device)));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
797
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
798 pixmap = gdk_pixmap_new (d, gdk_image->width, gdk_image->height, gdk_image->depth);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
799
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
800 if (!pixmap)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
801 gui_error ("Unable to create pixmap", instantiator);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
802
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
803 gc = gdk_gc_new (pixmap);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
804
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
805 if (!gc)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
806 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
807 gdk_pixmap_unref (pixmap);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
808 gui_error ("Unable to create GC", instantiator);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
809 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
810
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
811 gdk_draw_image (GDK_DRAWABLE (pixmap), gc, gdk_image, 0, 0, 0, 0,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
812 gdk_image->width, gdk_image->height);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
813
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
814 gdk_gc_destroy (gc);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
815
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
816 IMAGE_INSTANCE_GTK_PIXMAP_SLICE (ii, slice) = pixmap;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
817 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
818
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
819 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
820 gtk_init_image_instance_from_eimage (struct Lisp_Image_Instance *ii,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
821 int width, int height,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
822 int slices,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
823 unsigned char *eimage,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
824 int dest_mask,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
825 Lisp_Object instantiator,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
826 Lisp_Object domain)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
827 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
828 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
829 GdkColormap *cmap = DEVICE_GTK_COLORMAP (XDEVICE(device));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
830 unsigned long *pixtbl = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
831 int npixels = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
832 int slice;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
833 GdkImage* gdk_image;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
834
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
835
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
836 for (slice = 0; slice < slices; slice++)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
837 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
838 gdk_image = convert_EImage_to_GDKImage (device, width, height, eimage,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
839 &pixtbl, &npixels);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
840 if (!gdk_image)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
841 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
842 if (pixtbl) xfree (pixtbl);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
843 signal_image_error("EImage to GdkImage conversion failed", instantiator);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
844 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
845
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
846 if (slice == 0)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
847 /* Now create the pixmap and set up the image instance */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
848 init_image_instance_from_gdk_image (ii, gdk_image, dest_mask,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
849 cmap, pixtbl, npixels, slices,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
850 instantiator);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
851 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
852 image_instance_add_gdk_image (ii, gdk_image, slice, instantiator);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
853
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
854 if (gdk_image)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
855 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
856 gdk_image_destroy (gdk_image);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
857 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
858 gdk_image = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
859 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
860 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
861
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
862 /* Given inline data for a mono pixmap, create and return the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
863 corresponding X object. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
864
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
865 static GdkPixmap *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
866 pixmap_from_xbm_inline (Lisp_Object device, int width, int height,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
867 /* Note that data is in ext-format! */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
868 const Extbyte *bits)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
869 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
870 return (gdk_bitmap_create_from_data (GET_GTK_WIDGET_WINDOW (DEVICE_GTK_APP_SHELL (XDEVICE (device))),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
871 (char *) bits, width, height));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
872 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
873
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
874 /* Given inline data for a mono pixmap, initialize the given
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
875 image instance accordingly. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
876
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
877 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
878 init_image_instance_from_xbm_inline (struct Lisp_Image_Instance *ii,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
879 int width, int height,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
880 /* Note that data is in ext-format! */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
881 const char *bits,
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
882 Lisp_Object instantiator,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
883 Lisp_Object pointer_fg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
884 Lisp_Object pointer_bg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
885 int dest_mask,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
886 GdkPixmap *mask,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
887 Lisp_Object mask_filename)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
888 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
889 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
890 Lisp_Object foreground = find_keyword_in_vector (instantiator, Q_foreground);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
891 Lisp_Object background = find_keyword_in_vector (instantiator, Q_background);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
892 GdkColor fg;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
893 GdkColor bg;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
894 enum image_instance_type type;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
895 GdkWindow *draw = GET_GTK_WIDGET_WINDOW (DEVICE_GTK_APP_SHELL (XDEVICE (device)));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
896 GdkColormap *cmap = DEVICE_GTK_COLORMAP (XDEVICE(device));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
897 GdkColor black;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
898 GdkColor white;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
899
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
900 gdk_color_black(cmap, &black);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
901 gdk_color_white(cmap, &white);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
902
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
903 if (!DEVICE_GTK_P (XDEVICE (device)))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
904 gui_error ("Not a Gtk device", device);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
905
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
906 if ((dest_mask & IMAGE_MONO_PIXMAP_MASK) &&
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
907 (dest_mask & IMAGE_COLOR_PIXMAP_MASK))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
908 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
909 if (!NILP (foreground) || !NILP (background))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
910 type = IMAGE_COLOR_PIXMAP;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
911 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
912 type = IMAGE_MONO_PIXMAP;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
913 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
914 else if (dest_mask & IMAGE_MONO_PIXMAP_MASK)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
915 type = IMAGE_MONO_PIXMAP;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
916 else if (dest_mask & IMAGE_COLOR_PIXMAP_MASK)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
917 type = IMAGE_COLOR_PIXMAP;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
918 else if (dest_mask & IMAGE_POINTER_MASK)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
919 type = IMAGE_POINTER;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
920 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
921 incompatible_image_types (instantiator, dest_mask,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
922 IMAGE_MONO_PIXMAP_MASK | IMAGE_COLOR_PIXMAP_MASK
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
923 | IMAGE_POINTER_MASK);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
924
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
925 gtk_initialize_pixmap_image_instance (ii, 1, type);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
926 IMAGE_INSTANCE_PIXMAP_WIDTH (ii) = width;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
927 IMAGE_INSTANCE_PIXMAP_HEIGHT (ii) = height;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
928 IMAGE_INSTANCE_PIXMAP_FILENAME (ii) =
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
929 find_keyword_in_vector (instantiator, Q_file);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
930
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
931 switch (type)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
932 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
933 case IMAGE_MONO_PIXMAP:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
934 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
935 IMAGE_INSTANCE_GTK_PIXMAP (ii) =
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
936 pixmap_from_xbm_inline (device, width, height, (Extbyte *) bits);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
937 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
938 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
939
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
940 case IMAGE_COLOR_PIXMAP:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
941 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
942 gint d = DEVICE_GTK_DEPTH (XDEVICE(device));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
943
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
944 if (!NILP (foreground) && !COLOR_INSTANCEP (foreground))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
945 foreground =
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
946 Fmake_color_instance (foreground, device,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
947 encode_error_behavior_flag (ERROR_ME));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
948
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
949 if (COLOR_INSTANCEP (foreground))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
950 fg = * COLOR_INSTANCE_GTK_COLOR (XCOLOR_INSTANCE (foreground));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
951
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
952 if (!NILP (background) && !COLOR_INSTANCEP (background))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
953 background =
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
954 Fmake_color_instance (background, device,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
955 encode_error_behavior_flag (ERROR_ME));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
956
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
957 if (COLOR_INSTANCEP (background))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
958 bg = * COLOR_INSTANCE_GTK_COLOR (XCOLOR_INSTANCE (background));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
959
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
960 /* We used to duplicate the pixels using XAllocColor(), to protect
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
961 against their getting freed. Just as easy to just store the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
962 color instances here and GC-protect them, so this doesn't
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
963 happen. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
964 IMAGE_INSTANCE_PIXMAP_FG (ii) = foreground;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
965 IMAGE_INSTANCE_PIXMAP_BG (ii) = background;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
966 IMAGE_INSTANCE_GTK_PIXMAP (ii) =
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
967 gdk_pixmap_create_from_data (draw, (char *) bits, width, height, d, &fg, &bg);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
968 IMAGE_INSTANCE_PIXMAP_DEPTH (ii) = d;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
969 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
970 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
971
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
972 case IMAGE_POINTER:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
973 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
974 GdkColor fg_color, bg_color;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
975 GdkPixmap *source;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
976
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
977 check_pointer_sizes (width, height, instantiator);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
978
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
979 source = gdk_pixmap_create_from_data (draw, (char *) bits, width, height, 1, &black, &white);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
980
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
981 if (NILP (foreground))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
982 foreground = pointer_fg;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
983 if (NILP (background))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
984 background = pointer_bg;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
985 generate_cursor_fg_bg (device, &foreground, &background,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
986 &fg_color, &bg_color);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
987
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
988 IMAGE_INSTANCE_PIXMAP_FG (ii) = foreground;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
989 IMAGE_INSTANCE_PIXMAP_BG (ii) = background;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
990 IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii) =
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
991 find_keyword_in_vector (instantiator, Q_hotspot_x);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
992 IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii) =
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
993 find_keyword_in_vector (instantiator, Q_hotspot_y);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
994 IMAGE_INSTANCE_GTK_CURSOR (ii) =
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
995 gdk_cursor_new_from_pixmap (source, mask, &fg_color, &bg_color,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
996 !NILP (IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii)) ?
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
997 XINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii)) : 0,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
998 !NILP (IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii)) ?
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
999 XINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii)) : 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1000 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1001 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1002
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1003 default:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1004 abort ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1005 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1006 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1007
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1008 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1009 xbm_instantiate_1 (Lisp_Object image_instance, Lisp_Object instantiator,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1010 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1011 int dest_mask, int width, int height,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1012 /* Note that data is in ext-format! */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1013 const char *bits)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1014 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1015 Lisp_Object mask_data = find_keyword_in_vector (instantiator, Q_mask_data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1016 Lisp_Object mask_file = find_keyword_in_vector (instantiator, Q_mask_file);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1017 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1018 GdkPixmap *mask = 0;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1019 const char *gcc_may_you_rot_in_hell;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1020
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1021 if (!NILP (mask_data))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1022 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1023 TO_EXTERNAL_FORMAT (LISP_STRING, XCAR (XCDR (XCDR (mask_data))),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1024 C_STRING_ALLOCA, gcc_may_you_rot_in_hell,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1025 Qfile_name);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1026 mask =
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1027 pixmap_from_xbm_inline (IMAGE_INSTANCE_DEVICE (ii),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1028 XINT (XCAR (mask_data)),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1029 XINT (XCAR (XCDR (mask_data))),
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1030 (const unsigned char *)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1031 gcc_may_you_rot_in_hell);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1032 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1033
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1034 init_image_instance_from_xbm_inline (ii, width, height, bits,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1035 instantiator, pointer_fg, pointer_bg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1036 dest_mask, mask, mask_file);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1037 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1038
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1039 /* Instantiate method for XBM's. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1040
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1041 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1042 gtk_xbm_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1043 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1044 int dest_mask, Lisp_Object domain)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1045 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1046 Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1047 const char *gcc_go_home;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1048
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1049 assert (!NILP (data));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1050
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1051 TO_EXTERNAL_FORMAT (LISP_STRING, XCAR (XCDR (XCDR (data))),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1052 C_STRING_ALLOCA, gcc_go_home,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1053 Qbinary);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1054
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1055 xbm_instantiate_1 (image_instance, instantiator, pointer_fg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1056 pointer_bg, dest_mask, XINT (XCAR (data)),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1057 XINT (XCAR (XCDR (data))), gcc_go_home);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1058 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1059
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1060
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1061 #ifdef HAVE_XPM
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1062 /**********************************************************************
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1063 * XPM *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1064 **********************************************************************/
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1065 static Lisp_Object
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1066 write_lisp_string_to_temp_file (Lisp_Object string)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1067 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1068 Lisp_Object instream, outstream;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1069 Lstream *istr, *ostr;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1070 Char_Binary tempbuf[1024]; /* some random amount */
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1071 int fubar = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1072 FILE *tmpfil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1073 static Extbyte_dynarr *conversion_out_dynarr;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1074 Bytecount bstart, bend;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1075 Lisp_Object tempfile;
778
2923009caf47 [xemacs-hg @ 2002-03-16 10:38:59 by ben]
ben
parents: 771
diff changeset
1076 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1077 Lisp_Object conv_out_stream;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1078 Lstream *costr;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1079
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1080 /* This function can GC */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1081 if (!conversion_out_dynarr)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1082 conversion_out_dynarr = Dynarr_new (Extbyte);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1083 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1084 Dynarr_reset (conversion_out_dynarr);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1085
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1086 /* Create the temporary file ... */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1087 tempfile = Fmake_temp_name (build_string ("/tmp/emacs"));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1088 tmpfil = qxe_fopen (XSTRING_DATA (tempfile), "w");
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1089 if (!tmpfil)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1090 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1091 if (tmpfil)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1092 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1093 int old_errno = errno;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1094 retry_fclose (tmpfil);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1095 qxe_unlink (XSTRING_DATA (tempfile));
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1096 errno = old_errno;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1097 }
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1098 report_file_error ("Creating temp file", tempfile);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1099 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1100
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1101 CHECK_STRING (string);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1102 get_string_range_byte (string, Qnil, Qnil, &bstart, &bend,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1103 GB_HISTORICAL_STRING_BEHAVIOR);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1104 instream = make_lisp_string_input_stream (string, bstart, bend);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1105 istr = XLSTREAM (instream);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1106 /* setup the out stream */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1107 outstream =
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1108 make_dynarr_output_stream ((unsigned_char_dynarr *) conversion_out_dynarr);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1109 ostr = XLSTREAM (outstream);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1110 /* setup the conversion stream */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1111 conv_out_stream =
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
1112 make_coding_output_stream (ostr, Qbinary, CODING_ENCODE, 0);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1113 costr = XLSTREAM (conv_out_stream);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1114 GCPRO4 (tempfile, instream, outstream, conv_out_stream);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1115
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1116 /* Get the data while doing the conversion */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1117 while (1)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1118 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1119 int size_in_bytes = Lstream_read (istr, tempbuf, sizeof (tempbuf));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1120 if (!size_in_bytes)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1121 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1122 /* It does seem the flushes are necessary... */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1123 Lstream_write (costr, tempbuf, size_in_bytes);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1124 Lstream_flush (costr);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1125 Lstream_flush (ostr);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1126 if (retry_fwrite ((unsigned char *)Dynarr_atp(conversion_out_dynarr, 0),
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1127 Dynarr_length(conversion_out_dynarr), 1, tmpfil) != 1)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1128 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1129 fubar = 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1130 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1131 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1132 /* reset the dynarr */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1133 Lstream_rewind(ostr);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1134 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1135
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1136 if (retry_fclose (tmpfil) != 0)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1137 fubar = 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1138 Lstream_close (istr);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1139 Lstream_close (costr);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1140 Lstream_close (ostr);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1141
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1142 Lstream_delete (istr);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1143 Lstream_delete (ostr);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1144 Lstream_delete (costr);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1145
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1146 if (fubar)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1147 report_file_error ("Writing temp file", tempfile);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1148
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1149 UNGCPRO;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1150 return tempfile;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1151 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1152
739
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1153 struct color_symbol
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1154 {
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1155 char* name;
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1156 GdkColor color;
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1157 };
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1158
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1159 static struct color_symbol*
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1160 extract_xpm_color_names (Lisp_Object device,
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1161 Lisp_Object domain,
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1162 Lisp_Object color_symbol_alist,
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1163 int* nsymbols)
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1164 {
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1165 /* This function can GC */
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1166 Lisp_Object rest;
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1167 Lisp_Object results = Qnil;
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1168 int i, j;
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1169 struct color_symbol *colortbl;
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1170 struct gcpro gcpro1, gcpro2;
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1171
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1172 GCPRO2 (results, device);
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1173
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1174 /* We built up results to be (("name" . #<color>) ...) so that if an
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1175 error happens we don't lose any malloc()ed data, or more importantly,
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1176 leave any pixels allocated in the server. */
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1177 i = 0;
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1178 LIST_LOOP (rest, color_symbol_alist)
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1179 {
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1180 Lisp_Object cons = XCAR (rest);
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1181 Lisp_Object name = XCAR (cons);
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1182 Lisp_Object value = XCDR (cons);
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1183 if (NILP (value))
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1184 continue;
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1185 if (STRINGP (value))
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1186 value =
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1187 Fmake_color_instance
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 778
diff changeset
1188 (value, device, encode_error_behavior_flag (ERROR_ME_DEBUG_WARN));
739
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1189 else
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1190 {
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1191 assert (COLOR_SPECIFIERP (value));
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1192 value = Fspecifier_instance (value, domain, Qnil, Qnil);
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1193 }
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1194
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1195 if (NILP (value))
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1196 continue;
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1197 results = noseeum_cons (noseeum_cons (name, value), results);
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1198 i++;
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1199 }
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1200 UNGCPRO; /* no more evaluation */
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1201
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1202 *nsymbols=i;
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1203 if (i == 0) return 0;
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1204
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1205 colortbl = xnew_array_and_zero (struct color_symbol, i);
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1206
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1207 for (j=0; j<i; j++)
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1208 {
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1209 Lisp_Object cons = XCAR (results);
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1210 colortbl[j].color =
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1211 * COLOR_INSTANCE_GTK_COLOR (XCOLOR_INSTANCE (XCDR (cons)));
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1212
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1213 colortbl[j].name = (char *) XSTRING_DATA (XCAR (cons));
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1214 free_cons (XCONS (cons));
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1215 cons = results;
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1216 results = XCDR (results);
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1217 free_cons (XCONS (cons));
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1218 }
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1219 return colortbl;
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1220 }
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1221
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1222 static void
739
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1223 gtk_xpm_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1224 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1225 int dest_mask, Lisp_Object domain)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1226 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1227 /* This function can GC */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1228 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1229 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1230 Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1231 GdkColormap *cmap;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1232 int depth;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1233 GdkVisual *visual;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1234 GdkPixmap *pixmap;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1235 GdkPixmap *mask = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1236 GdkWindow *window = 0;
739
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1237 int nsymbols = 0, i = 0;
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1238 struct color_symbol *color_symbols = NULL;
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1239 GdkColor *transparent_color = NULL;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1240 Lisp_Object color_symbol_alist = find_keyword_in_vector (instantiator,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1241 Q_color_symbols);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1242 enum image_instance_type type;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1243 int force_mono;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1244 unsigned int w, h;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1245 Lisp_Object tempfile = Qnil;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1246 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1247
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1248 if (!DEVICE_GTK_P (XDEVICE (device)))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1249 gui_error ("Not a Gtk device", device);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1250
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1251 if (dest_mask & IMAGE_COLOR_PIXMAP_MASK)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1252 type = IMAGE_COLOR_PIXMAP;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1253 else if (dest_mask & IMAGE_MONO_PIXMAP_MASK)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1254 type = IMAGE_MONO_PIXMAP;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1255 else if (dest_mask & IMAGE_POINTER_MASK)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1256 type = IMAGE_POINTER;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1257 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1258 incompatible_image_types (instantiator, dest_mask,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1259 IMAGE_MONO_PIXMAP_MASK | IMAGE_COLOR_PIXMAP_MASK
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1260 | IMAGE_POINTER_MASK);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1261 force_mono = (type != IMAGE_COLOR_PIXMAP);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1262
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1263 GCPRO4 (device, data, color_symbol_alist, tempfile);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1264
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1265 window = GET_GTK_WIDGET_WINDOW (DEVICE_GTK_APP_SHELL (XDEVICE (device)));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1266 cmap = DEVICE_GTK_COLORMAP (XDEVICE (device));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1267 depth = DEVICE_GTK_DEPTH (XDEVICE (device));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1268 visual = DEVICE_GTK_VISUAL (XDEVICE (device));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1269
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1270 gtk_initialize_pixmap_image_instance (ii, 1, type);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1271
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1272 assert (!NILP (data));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1273
739
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1274 /* Need to get the transparent color here */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1275 color_symbols = extract_xpm_color_names (device, domain, color_symbol_alist,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1276 &nsymbols);
739
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1277 for (i = 0; i < nsymbols; i++)
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1278 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1279 if (!qxestrcasecmp ("BgColor", color_symbols[i].name) ||
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1280 !qxestrcasecmp ("None", color_symbols[i].name))
739
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1281 {
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1282 transparent_color = &color_symbols[i].color;
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1283 }
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1284 }
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1285
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1286 tempfile = write_lisp_string_to_temp_file (data);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1287 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1288 Extbyte *tempfileout;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1289
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1290 LISP_STRING_TO_EXTERNAL (tempfile, tempfileout, Qfile_name);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1291 pixmap = gdk_pixmap_create_from_xpm (window, &mask, transparent_color,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1292 tempfileout);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1293 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1294 qxe_unlink (XSTRING_DATA (tempfile));
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1295
739
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1296 if (color_symbols) xfree (color_symbols);
2e5e2ccbeed2 [xemacs-hg @ 2002-02-02 13:42:53 by wmperry]
wmperry
parents: 714
diff changeset
1297
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1298 if (!pixmap)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1299 signal_image_error ("Error reading pixmap", data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1300
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1301 gdk_window_get_geometry (pixmap, NULL, NULL, &w, &h, &depth);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1302
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1303 IMAGE_INSTANCE_GTK_PIXMAP (ii) = pixmap;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1304 IMAGE_INSTANCE_GTK_MASK (ii) = mask;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1305 IMAGE_INSTANCE_GTK_COLORMAP (ii) = cmap;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1306 IMAGE_INSTANCE_GTK_PIXELS (ii) = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1307 IMAGE_INSTANCE_GTK_NPIXELS (ii) = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1308 IMAGE_INSTANCE_PIXMAP_WIDTH (ii) = w;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1309 IMAGE_INSTANCE_PIXMAP_HEIGHT (ii) = h;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1310 IMAGE_INSTANCE_PIXMAP_FILENAME (ii) =
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1311 find_keyword_in_vector (instantiator, Q_file);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1312
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1313 switch (type)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1314 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1315 case IMAGE_MONO_PIXMAP:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1316 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1317
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1318 case IMAGE_COLOR_PIXMAP:
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1319 IMAGE_INSTANCE_PIXMAP_DEPTH (ii) = depth;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1320 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1321
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1322 case IMAGE_POINTER:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1323 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1324 GdkColor fg, bg;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1325 unsigned int xhot, yhot;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1326
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1327 /* #### Gtk does not give us access to the hotspots of a pixmap */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1328 xhot = yhot = 1;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 778
diff changeset
1329 IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii) = make_int (xhot);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 778
diff changeset
1330 IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii) = make_int (yhot);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1331
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1332 check_pointer_sizes (w, h, instantiator);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1333
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1334 /* If the loaded pixmap has colors allocated (meaning it came from an
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1335 XPM file), then use those as the default colors for the cursor we
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1336 create. Otherwise, default to pointer_fg and pointer_bg.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1337 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1338 if (depth > 1)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1339 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1340 warn_when_safe (Qunimplemented, Qnotice,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1341 "GTK does not support XPM cursors...\n");
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1342 IMAGE_INSTANCE_GTK_CURSOR (ii) = gdk_cursor_new (GDK_COFFEE_MUG);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1343 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1344 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1345 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1346 generate_cursor_fg_bg (device, &pointer_fg, &pointer_bg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1347 &fg, &bg);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1348 IMAGE_INSTANCE_PIXMAP_FG (ii) = pointer_fg;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1349 IMAGE_INSTANCE_PIXMAP_BG (ii) = pointer_bg;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1350 IMAGE_INSTANCE_GTK_CURSOR (ii) =
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1351 gdk_cursor_new_from_pixmap (pixmap, mask, &fg, &bg, xhot, yhot);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1352 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1353 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1354
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1355 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1356
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1357 default:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1358 abort ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1359 }
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1360
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1361 UNGCPRO;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1362 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1363 #endif /* HAVE_XPM */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1364
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1365
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1366 #ifdef HAVE_XFACE
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1367
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1368 /**********************************************************************
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1369 * X-Face *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1370 **********************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1371 #if defined(EXTERN)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1372 /* This is about to get redefined! */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1373 #undef EXTERN
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1374 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1375 /* We have to define SYSV32 so that compface.h includes string.h
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1376 instead of strings.h. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1377 #define SYSV32
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1378 #ifdef __cplusplus
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1379 extern "C" {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1380 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1381 #include <compface.h>
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1382 #ifdef __cplusplus
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1383 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1384 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1385 /* JMP_BUF cannot be used here because if it doesn't get defined
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1386 to jmp_buf we end up with a conflicting type error with the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1387 definition in compface.h */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1388 extern jmp_buf comp_env;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1389 #undef SYSV32
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1390
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1391 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1392 gtk_xface_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1393 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1394 int dest_mask, Lisp_Object domain)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1395 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1396 Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1397 int i, stattis;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1398 char *p, *bits, *bp;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1399 const char * volatile emsg = 0;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1400 const char * volatile dstring;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1401
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1402 assert (!NILP (data));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1403
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1404 LISP_STRING_TO_EXTERNAL (data, dstring, Qbinary);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1405
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1406 if ((p = strchr (dstring, ':')))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1407 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1408 dstring = p + 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1409 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1410
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1411 /* Must use setjmp not SETJMP because we used jmp_buf above not JMP_BUF */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1412 if (!(stattis = setjmp (comp_env)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1413 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1414 UnCompAll ((char *) dstring);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1415 UnGenFace ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1416 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1417
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1418 switch (stattis)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1419 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1420 case -2:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1421 emsg = "uncompface: internal error";
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1422 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1423 case -1:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1424 emsg = "uncompface: insufficient or invalid data";
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1425 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1426 case 1:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1427 emsg = "uncompface: excess data ignored";
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1428 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1429 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1430
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1431 if (emsg)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1432 gui_error_2 (emsg, data, Qimage);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1433
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 826
diff changeset
1434 bp = bits = (char *) ALLOCA (PIXELS / 8);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1435
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1436 /* the compface library exports char F[], which uses a single byte per
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1437 pixel to represent a 48x48 bitmap. Yuck. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1438 for (i = 0, p = F; i < (PIXELS / 8); ++i)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1439 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1440 int n, b;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1441 /* reverse the bit order of each byte... */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1442 for (b = n = 0; b < 8; ++b)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1443 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1444 n |= ((*p++) << b);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1445 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1446 *bp++ = (char) n;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1447 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1448
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1449 xbm_instantiate_1 (image_instance, instantiator, pointer_fg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1450 pointer_bg, dest_mask, 48, 48, bits);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1451 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1452
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1453 #endif /* HAVE_XFACE */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1454
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1455 /**********************************************************************
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1456 * RESOURCES *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1457 **********************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1458
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1459 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1460 gtk_resource_validate (Lisp_Object instantiator)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1461 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1462 if ((NILP (find_keyword_in_vector (instantiator, Q_file))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1463 &&
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1464 NILP (find_keyword_in_vector (instantiator, Q_resource_id)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1465 ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1466 NILP (find_keyword_in_vector (instantiator, Q_resource_type)))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1467 sferror ("Must supply :file, :resource-id and :resource-type",
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1468 instantiator);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1469 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1470
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1471 static Lisp_Object
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1472 gtk_resource_normalize (Lisp_Object inst, Lisp_Object console_type,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1473 Lisp_Object dest_mask)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1474 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1475 return shared_resource_normalize (inst, console_type, dest_mask,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1476 Qgtk_resource);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1477 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1478
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1479 static int
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1480 gtk_resource_possible_dest_types (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1481 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1482 return IMAGE_POINTER_MASK | IMAGE_COLOR_PIXMAP_MASK;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1483 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1484
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1485 extern guint symbol_to_enum (Lisp_Object, GtkType);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1486
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1487 static guint resource_name_to_resource (Lisp_Object name, int type)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1488 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1489 if (type == IMAGE_POINTER)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1490 return (symbol_to_enum (name, GTK_TYPE_GDK_CURSOR_TYPE));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1491 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1492 return (0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1493 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1494
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1495 static int
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1496 resource_symbol_to_type (Lisp_Object data)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1497 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1498 if (EQ (data, Qcursor))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1499 return IMAGE_POINTER;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1500 #if 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1501 else if (EQ (data, Qicon))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1502 return IMAGE_ICON;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1503 else if (EQ (data, Qbitmap))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1504 return IMAGE_BITMAP;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1505 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1506 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1507 return 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1508 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1509
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1510 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1511 gtk_resource_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1512 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1513 int dest_mask, Lisp_Object domain)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1514 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1515 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1516 GdkCursor *c = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1517 unsigned int type = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1518 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1519 Lisp_Object resource_type = find_keyword_in_vector (instantiator, Q_resource_type);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1520 Lisp_Object resource_id = find_keyword_in_vector (instantiator, Q_resource_id);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1521
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1522 if (!DEVICE_GTK_P (XDEVICE (device)))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1523 gui_error ("Not a GTK device", device);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1524
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1525 type = resource_symbol_to_type (resource_type);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1526
595
fec27b06b4e5 [xemacs-hg @ 2001-05-31 14:45:08 by wmperry]
wmperry
parents: 563
diff changeset
1527 #if 0
fec27b06b4e5 [xemacs-hg @ 2001-05-31 14:45:08 by wmperry]
wmperry
parents: 563
diff changeset
1528 if (dest_mask & IMAGE_POINTER_MASK && type == IMAGE_POINTER_MASK)
fec27b06b4e5 [xemacs-hg @ 2001-05-31 14:45:08 by wmperry]
wmperry
parents: 563
diff changeset
1529 iitype = IMAGE_POINTER;
fec27b06b4e5 [xemacs-hg @ 2001-05-31 14:45:08 by wmperry]
wmperry
parents: 563
diff changeset
1530 else if (dest_mask & IMAGE_COLOR_PIXMAP_MASK)
fec27b06b4e5 [xemacs-hg @ 2001-05-31 14:45:08 by wmperry]
wmperry
parents: 563
diff changeset
1531 iitype = IMAGE_COLOR_PIXMAP;
fec27b06b4e5 [xemacs-hg @ 2001-05-31 14:45:08 by wmperry]
wmperry
parents: 563
diff changeset
1532 else
fec27b06b4e5 [xemacs-hg @ 2001-05-31 14:45:08 by wmperry]
wmperry
parents: 563
diff changeset
1533 incompatible_image_types (instantiator, dest_mask,
fec27b06b4e5 [xemacs-hg @ 2001-05-31 14:45:08 by wmperry]
wmperry
parents: 563
diff changeset
1534 IMAGE_COLOR_PIXMAP_MASK | IMAGE_POINTER_MASK);
fec27b06b4e5 [xemacs-hg @ 2001-05-31 14:45:08 by wmperry]
wmperry
parents: 563
diff changeset
1535 #endif
fec27b06b4e5 [xemacs-hg @ 2001-05-31 14:45:08 by wmperry]
wmperry
parents: 563
diff changeset
1536
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1537 /* mess with the keyword info we were provided with */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1538 gtk_initialize_pixmap_image_instance (ii, 1, type);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1539 c = gdk_cursor_new (resource_name_to_resource (resource_id, type));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1540 IMAGE_INSTANCE_GTK_CURSOR (ii) = c;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1541 IMAGE_INSTANCE_PIXMAP_FILENAME (ii) = resource_id;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1542 IMAGE_INSTANCE_PIXMAP_WIDTH (ii) = 10;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1543 IMAGE_INSTANCE_PIXMAP_HEIGHT (ii) = 10;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1544 IMAGE_INSTANCE_PIXMAP_DEPTH (ii) = 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1545 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1546
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1547 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1548 check_valid_resource_symbol (Lisp_Object data)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1549 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1550 CHECK_SYMBOL (data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1551 if (!resource_symbol_to_type (data))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1552 invalid_constant ("invalid resource type", data);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1553 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1554
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1555 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1556 check_valid_resource_id (Lisp_Object data)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1557 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1558 if (!resource_name_to_resource (data, IMAGE_POINTER)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1559 &&
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1560 !resource_name_to_resource (data, IMAGE_COLOR_PIXMAP)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1561 #if 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1562 &&
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1563 !resource_name_to_resource (data, IMAGE_BITMAP)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1564 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1565 )
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1566 invalid_constant ("invalid resource identifier", data);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1567 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1568
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1569 #if 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1570 void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1571 check_valid_string_or_int (Lisp_Object data)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1572 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1573 if (!INTP (data))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1574 CHECK_STRING (data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1575 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1576 CHECK_INT (data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1577 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1578 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1579
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1580
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1581 /**********************************************************************
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1582 * Autodetect *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1583 **********************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1584
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1585 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1586 autodetect_validate (Lisp_Object instantiator)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1587 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1588 data_must_be_present (instantiator);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1589 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1590
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1591 static Lisp_Object
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1592 autodetect_normalize (Lisp_Object instantiator,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1593 Lisp_Object console_type,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1594 Lisp_Object dest_mask)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1595 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1596 Lisp_Object file = find_keyword_in_vector (instantiator, Q_data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1597 Lisp_Object filename = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1598 Lisp_Object data = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1599 struct gcpro gcpro1, gcpro2, gcpro3;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1600 Lisp_Object alist = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1601
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1602 GCPRO3 (filename, data, alist);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1603
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1604 if (NILP (file)) /* no conversion necessary */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1605 RETURN_UNGCPRO (instantiator);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1606
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1607 alist = tagged_vector_to_alist (instantiator);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1608
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1609 filename = locate_pixmap_file (file);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1610 if (!NILP (filename))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1611 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1612 int xhot, yhot;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1613 /* #### Apparently some versions of XpmReadFileToData, which is
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1614 called by pixmap_to_lisp_data, don't return an error value
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1615 if the given file is not a valid XPM file. Instead, they
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1616 just seg fault. It is definitely caused by passing a
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1617 bitmap. To try and avoid this we check for bitmaps first. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1618
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1619 data = bitmap_to_lisp_data (filename, &xhot, &yhot, 1);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1620
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1621 if (!EQ (data, Qt))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1622 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1623 alist = remassq_no_quit (Q_data, alist);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1624 alist = Fcons (Fcons (Q_file, filename),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1625 Fcons (Fcons (Q_data, data), alist));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1626 if (xhot != -1)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1627 alist = Fcons (Fcons (Q_hotspot_x, make_int (xhot)),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1628 alist);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1629 if (yhot != -1)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1630 alist = Fcons (Fcons (Q_hotspot_y, make_int (yhot)),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1631 alist);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1632
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1633 alist = xbm_mask_file_munging (alist, filename, Qnil, console_type);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1634
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1635 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1636 Lisp_Object result = alist_to_tagged_vector (Qxbm, alist);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1637 free_alist (alist);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1638 RETURN_UNGCPRO (result);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1639 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1640 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1641
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1642 #ifdef HAVE_XPM
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1643 data = pixmap_to_lisp_data (filename, 1);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1644
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1645 if (!EQ (data, Qt))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1646 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1647 alist = remassq_no_quit (Q_data, alist);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1648 alist = Fcons (Fcons (Q_file, filename),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1649 Fcons (Fcons (Q_data, data), alist));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1650 alist = Fcons (Fcons (Q_color_symbols,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1651 evaluate_xpm_color_symbols ()),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1652 alist);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1653 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1654 Lisp_Object result = alist_to_tagged_vector (Qxpm, alist);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1655 free_alist (alist);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1656 RETURN_UNGCPRO (result);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1657 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1658 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1659 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1660 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1661
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1662 /* If we couldn't convert it, just put it back as it is.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1663 We might try to further frob it later as a cursor-font
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1664 specification. (We can't do that now because we don't know
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1665 what dest-types it's going to be instantiated into.) */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1666 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1667 Lisp_Object result = alist_to_tagged_vector (Qautodetect, alist);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1668 free_alist (alist);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1669 RETURN_UNGCPRO (result);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1670 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1671 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1672
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1673 static int
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1674 autodetect_possible_dest_types (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1675 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1676 return
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1677 IMAGE_MONO_PIXMAP_MASK |
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1678 IMAGE_COLOR_PIXMAP_MASK |
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1679 IMAGE_POINTER_MASK |
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1680 IMAGE_TEXT_MASK;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1681 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1682
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1683 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1684 autodetect_instantiate (Lisp_Object image_instance,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1685 Lisp_Object instantiator,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1686 Lisp_Object pointer_fg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1687 Lisp_Object pointer_bg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1688 int dest_mask, Lisp_Object domain)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1689 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1690 Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1691 struct gcpro gcpro1, gcpro2, gcpro3;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1692 Lisp_Object alist = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1693 Lisp_Object result = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1694 int is_cursor_font = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1695
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1696 GCPRO3 (data, alist, result);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1697
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1698 alist = tagged_vector_to_alist (instantiator);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1699 if (dest_mask & IMAGE_POINTER_MASK)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1700 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1701 const char *name_ext;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1702
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1703 TO_EXTERNAL_FORMAT (LISP_STRING, data,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1704 C_STRING_ALLOCA, name_ext,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1705 Qfile_name);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1706
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1707 if (cursor_name_to_index (name_ext) != -1)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1708 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1709 result = alist_to_tagged_vector (Qcursor_font, alist);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1710 is_cursor_font = 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1711 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1712 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1713
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1714 if (!is_cursor_font)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1715 result = alist_to_tagged_vector (Qstring, alist);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1716 free_alist (alist);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1717
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1718 if (is_cursor_font)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1719 cursor_font_instantiate (image_instance, result, pointer_fg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1720 pointer_bg, dest_mask, domain);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1721 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1722 string_instantiate (image_instance, result, pointer_fg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1723 pointer_bg, dest_mask, domain);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1724
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1725 UNGCPRO;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1726 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1727
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1728
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1729 /**********************************************************************
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1730 * Font *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1731 **********************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1732
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1733 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1734 font_validate (Lisp_Object instantiator)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1735 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1736 data_must_be_present (instantiator);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1737 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1738
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1739 static int
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1740 font_possible_dest_types (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1741 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1742 return IMAGE_POINTER_MASK;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1743 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1744
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1745 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1746 font_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1747 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1748 int dest_mask, Lisp_Object domain)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1749 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1750 /* This function can GC */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1751 Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1752 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1753 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1754 GdkColor fg, bg;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1755 GdkFont *source, *mask;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1756 char source_name[PATH_MAX], mask_name[PATH_MAX], dummy;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1757 int source_char, mask_char;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1758 int count;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1759 Lisp_Object foreground, background;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1760
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1761 if (!DEVICE_GTK_P (XDEVICE (device)))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1762 gui_error ("Not a Gtk device", device);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1763
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1764 if (!STRINGP (data) ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1765 strncmp ("FONT ", (char *) XSTRING_DATA (data), 5))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1766 invalid_argument ("Invalid font-glyph instantiator",
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1767 instantiator);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1768
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1769 if (!(dest_mask & IMAGE_POINTER_MASK))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1770 incompatible_image_types (instantiator, dest_mask, IMAGE_POINTER_MASK);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1771
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1772 foreground = find_keyword_in_vector (instantiator, Q_foreground);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1773 if (NILP (foreground))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1774 foreground = pointer_fg;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1775 background = find_keyword_in_vector (instantiator, Q_background);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1776 if (NILP (background))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1777 background = pointer_bg;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1778
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1779 generate_cursor_fg_bg (device, &foreground, &background, &fg, &bg);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1780
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1781 count = sscanf ((char *) XSTRING_DATA (data),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1782 "FONT %s %d %s %d %c",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1783 source_name, &source_char,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1784 mask_name, &mask_char, &dummy);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1785 /* Allow "%s %d %d" as well... */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1786 if (count == 3 && (1 == sscanf (mask_name, "%d %c", &mask_char, &dummy)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1787 count = 4, mask_name[0] = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1788
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1789 if (count != 2 && count != 4)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1790 syntax_error ("invalid cursor specification", data);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1791 source = gdk_font_load (source_name);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1792 if (! source)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1793 gui_error_2 ("couldn't load font",
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1794 build_string (source_name),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1795 data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1796 if (count == 2)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1797 mask = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1798 else if (!mask_name[0])
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1799 mask = source;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1800 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1801 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1802 mask = gdk_font_load (mask_name);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1803 if (!mask)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1804 /* continuable */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1805 Fsignal (Qgui_error, list3 (build_msg_string ("couldn't load font"),
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1806 build_string (mask_name), data));
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1807 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1808 if (!mask)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1809 mask_char = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1810
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1811 /* #### call XQueryTextExtents() and check_pointer_sizes() here. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1812
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1813 gtk_initialize_pixmap_image_instance (ii, 1, IMAGE_POINTER);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1814
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1815 IMAGE_INSTANCE_GTK_CURSOR (ii) = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1816
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1817 #if 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1818 /* #### BILL!!! There is no way to call this function from Gdk */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1819 XCreateGlyphCursor (dpy, source, mask, source_char, mask_char,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1820 &fg, &bg);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1821 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1822 XIMAGE_INSTANCE_PIXMAP_FG (image_instance) = foreground;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1823 XIMAGE_INSTANCE_PIXMAP_BG (image_instance) = background;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1824
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1825 gdk_font_unref (source);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1826 if (mask && mask != source) gdk_font_unref (mask);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1827 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1828
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1829
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1830 /**********************************************************************
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1831 * Cursor-Font *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1832 **********************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1833
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1834 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1835 cursor_font_validate (Lisp_Object instantiator)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1836 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1837 data_must_be_present (instantiator);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1838 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1839
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1840 static int
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1841 cursor_font_possible_dest_types (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1842 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1843 return IMAGE_POINTER_MASK;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1844 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1845
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1846 static char *__downcase (const char *name)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1847 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1848 char *converted = strdup(name);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1849 char *work = converted;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1850
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1851 while (*work)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1852 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1853 *work = tolower(*work);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1854 work++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1855 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1856 return(converted);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1857 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1858
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1859 /* This is basically the equivalent of XmuCursorNameToIndex */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1860 static gint
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1861 cursor_name_to_index (const char *name)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1862 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1863 int i;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1864 static char *the_gdk_cursors[GDK_NUM_GLYPHS];
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1865
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1866 if (!the_gdk_cursors[GDK_BASED_ARROW_UP])
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1867 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1868 /* Need to initialize the array */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1869 /* Supposedly since this array is static it should be
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1870 initialized to NULLs for us, but I'm very paranoid. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1871 for (i = 0; i < GDK_NUM_GLYPHS; i++)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1872 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1873 the_gdk_cursors[i] = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1874 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1875
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1876 #define FROB_CURSOR(x) the_gdk_cursors[GDK_##x] = __downcase(#x)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1877 FROB_CURSOR(ARROW); FROB_CURSOR(BASED_ARROW_DOWN);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1878 FROB_CURSOR(BASED_ARROW_UP); FROB_CURSOR(BOAT);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1879 FROB_CURSOR(BOGOSITY); FROB_CURSOR(BOTTOM_LEFT_CORNER);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1880 FROB_CURSOR(BOTTOM_RIGHT_CORNER); FROB_CURSOR(BOTTOM_SIDE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1881 FROB_CURSOR(BOTTOM_TEE); FROB_CURSOR(BOX_SPIRAL);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1882 FROB_CURSOR(CENTER_PTR); FROB_CURSOR(CIRCLE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1883 FROB_CURSOR(CLOCK); FROB_CURSOR(COFFEE_MUG);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1884 FROB_CURSOR(CROSS); FROB_CURSOR(CROSS_REVERSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1885 FROB_CURSOR(CROSSHAIR); FROB_CURSOR(DIAMOND_CROSS);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1886 FROB_CURSOR(DOT); FROB_CURSOR(DOTBOX);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1887 FROB_CURSOR(DOUBLE_ARROW); FROB_CURSOR(DRAFT_LARGE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1888 FROB_CURSOR(DRAFT_SMALL); FROB_CURSOR(DRAPED_BOX);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1889 FROB_CURSOR(EXCHANGE); FROB_CURSOR(FLEUR);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1890 FROB_CURSOR(GOBBLER); FROB_CURSOR(GUMBY);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1891 FROB_CURSOR(HAND1); FROB_CURSOR(HAND2);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1892 FROB_CURSOR(HEART); FROB_CURSOR(ICON);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1893 FROB_CURSOR(IRON_CROSS); FROB_CURSOR(LEFT_PTR);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1894 FROB_CURSOR(LEFT_SIDE); FROB_CURSOR(LEFT_TEE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1895 FROB_CURSOR(LEFTBUTTON); FROB_CURSOR(LL_ANGLE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1896 FROB_CURSOR(LR_ANGLE); FROB_CURSOR(MAN);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1897 FROB_CURSOR(MIDDLEBUTTON); FROB_CURSOR(MOUSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1898 FROB_CURSOR(PENCIL); FROB_CURSOR(PIRATE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1899 FROB_CURSOR(PLUS); FROB_CURSOR(QUESTION_ARROW);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1900 FROB_CURSOR(RIGHT_PTR); FROB_CURSOR(RIGHT_SIDE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1901 FROB_CURSOR(RIGHT_TEE); FROB_CURSOR(RIGHTBUTTON);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1902 FROB_CURSOR(RTL_LOGO); FROB_CURSOR(SAILBOAT);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1903 FROB_CURSOR(SB_DOWN_ARROW); FROB_CURSOR(SB_H_DOUBLE_ARROW);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1904 FROB_CURSOR(SB_LEFT_ARROW); FROB_CURSOR(SB_RIGHT_ARROW);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1905 FROB_CURSOR(SB_UP_ARROW); FROB_CURSOR(SB_V_DOUBLE_ARROW);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1906 FROB_CURSOR(SHUTTLE); FROB_CURSOR(SIZING);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1907 FROB_CURSOR(SPIDER); FROB_CURSOR(SPRAYCAN);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1908 FROB_CURSOR(STAR); FROB_CURSOR(TARGET);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1909 FROB_CURSOR(TCROSS); FROB_CURSOR(TOP_LEFT_ARROW);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1910 FROB_CURSOR(TOP_LEFT_CORNER); FROB_CURSOR(TOP_RIGHT_CORNER);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1911 FROB_CURSOR(TOP_SIDE); FROB_CURSOR(TOP_TEE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1912 FROB_CURSOR(TREK); FROB_CURSOR(UL_ANGLE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1913 FROB_CURSOR(UMBRELLA); FROB_CURSOR(UR_ANGLE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1914 FROB_CURSOR(WATCH); FROB_CURSOR(XTERM);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1915 FROB_CURSOR(X_CURSOR);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1916 #undef FROB_CURSOR
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1917 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1918
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1919 for (i = 0; i < GDK_NUM_GLYPHS; i++)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1920 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1921 if (!the_gdk_cursors[i]) continue;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1922 if (!strcmp (the_gdk_cursors[i], name))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1923 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1924 return (i);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1925 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1926 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1927 return(-1);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1928 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1929
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1930 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1931 cursor_font_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1932 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1933 int dest_mask, Lisp_Object domain)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1934 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1935 /* This function can GC */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1936 Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1937 struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1938 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1939 int i;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 739
diff changeset
1940 const char *name_ext;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1941 Lisp_Object foreground, background;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1942
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1943 if (!DEVICE_GTK_P (XDEVICE (device)))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1944 gui_error ("Not a Gtk device", device);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1945
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1946 if (!(dest_mask & IMAGE_POINTER_MASK))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1947 incompatible_image_types (instantiator, dest_mask, IMAGE_POINTER_MASK);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1948
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1949 TO_EXTERNAL_FORMAT (LISP_STRING, data,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1950 C_STRING_ALLOCA, name_ext,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1951 Qfile_name);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1952
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1953 if ((i = cursor_name_to_index (name_ext)) == -1)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1954 invalid_argument ("Unrecognized cursor-font name", data);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1955
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1956 gtk_initialize_pixmap_image_instance (ii, 1, IMAGE_POINTER);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1957 IMAGE_INSTANCE_GTK_CURSOR (ii) = gdk_cursor_new (i);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1958 foreground = find_keyword_in_vector (instantiator, Q_foreground);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1959 if (NILP (foreground))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1960 foreground = pointer_fg;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1961 background = find_keyword_in_vector (instantiator, Q_background);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1962 if (NILP (background))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1963 background = pointer_bg;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1964 maybe_recolor_cursor (image_instance, foreground, background);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1965 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1966
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1967 static int
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1968 gtk_colorize_image_instance (Lisp_Object image_instance,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1969 Lisp_Object foreground, Lisp_Object background);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1970
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1971
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1972 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1973 /* subwindow and widget support */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1974 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1975
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1976 /* unmap the image if it is a widget. This is used by redisplay via
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1977 redisplay_unmap_subwindows */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1978 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1979 gtk_unmap_subwindow (Lisp_Image_Instance *p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1980 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1981 if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1982 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1983 /* We don't support subwindows, but we do support widgets... */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1984 abort ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1985 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1986 else /* must be a widget */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1987 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1988 /* Since we are being unmapped we want the enclosing frame to
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1989 get focus. The losing with simple scrolling but is the safest
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1990 thing to do. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1991 if (IMAGE_INSTANCE_GTK_CLIPWIDGET (p))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1992 gtk_widget_unmap (IMAGE_INSTANCE_GTK_CLIPWIDGET (p));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1993 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1994 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1995
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1996 /* map the subwindow. This is used by redisplay via
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1997 redisplay_output_subwindow */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1998 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1999 gtk_map_subwindow (Lisp_Image_Instance *p, int x, int y,
691
1df69dc58840 [xemacs-hg @ 2001-12-13 20:53:20 by wmperry]
wmperry
parents: 608
diff changeset
2000 struct display_glyph_area* dga)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2001 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2002 assert (dga->width > 0 && dga->height > 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2003
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2004 if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2005 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2006 /* No subwindow support... */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2007 abort ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2008 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2009 else /* must be a widget */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2010 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2011 struct frame *f = XFRAME (IMAGE_INSTANCE_FRAME (p));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2012 GtkWidget *wid = IMAGE_INSTANCE_GTK_CLIPWIDGET (p);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2013 GtkAllocation a;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2014
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2015 if (!wid) return;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2016
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2017 a.x = x + IMAGE_INSTANCE_GTK_WIDGET_XOFFSET (p);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2018 a.y = y + IMAGE_INSTANCE_GTK_WIDGET_YOFFSET (p);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2019 a.width = dga->width;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2020 a.height = dga->height;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2021
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2022 if ((a.width != wid->allocation.width) ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2023 (a.height != wid->allocation.height))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2024 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2025 gtk_widget_size_allocate (IMAGE_INSTANCE_GTK_CLIPWIDGET (p), &a);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2026 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2027
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2028 /* #### FIXME DAMMIT */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2029 if ((wid->allocation.x != -dga->xoffset) ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2030 (wid->allocation.y != -dga->yoffset))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2031 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2032 guint32 old_flags = GTK_WIDGET_FLAGS (FRAME_GTK_TEXT_WIDGET (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2033
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2034 /* Fucking GtkFixed widget queues a resize when you add a widget.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2035 ** But only if it is visible.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2036 ** losers.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2037 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2038 GTK_WIDGET_FLAGS(FRAME_GTK_TEXT_WIDGET (f)) &= ~GTK_VISIBLE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2039 if (IMAGE_INSTANCE_GTK_ALREADY_PUT(p))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2040 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2041 gtk_fixed_move (GTK_FIXED (FRAME_GTK_TEXT_WIDGET (f)),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2042 wid,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2043 -dga->xoffset, -dga->yoffset);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2044 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2045 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2046 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2047 IMAGE_INSTANCE_GTK_ALREADY_PUT(p) = TRUE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2048 gtk_fixed_put (GTK_FIXED (FRAME_GTK_TEXT_WIDGET (f)),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2049 wid,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2050 -dga->xoffset, -dga->yoffset);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2051 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2052 GTK_WIDGET_FLAGS(FRAME_GTK_TEXT_WIDGET (f)) = old_flags;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2053 }
691
1df69dc58840 [xemacs-hg @ 2001-12-13 20:53:20 by wmperry]
wmperry
parents: 608
diff changeset
2054 else
1df69dc58840 [xemacs-hg @ 2001-12-13 20:53:20 by wmperry]
wmperry
parents: 608
diff changeset
2055 {
1df69dc58840 [xemacs-hg @ 2001-12-13 20:53:20 by wmperry]
wmperry
parents: 608
diff changeset
2056 if (IMAGE_INSTANCE_GTK_ALREADY_PUT(p))
1df69dc58840 [xemacs-hg @ 2001-12-13 20:53:20 by wmperry]
wmperry
parents: 608
diff changeset
2057 {
1df69dc58840 [xemacs-hg @ 2001-12-13 20:53:20 by wmperry]
wmperry
parents: 608
diff changeset
2058 /* Do nothing... */
1df69dc58840 [xemacs-hg @ 2001-12-13 20:53:20 by wmperry]
wmperry
parents: 608
diff changeset
2059 }
1df69dc58840 [xemacs-hg @ 2001-12-13 20:53:20 by wmperry]
wmperry
parents: 608
diff changeset
2060 else
1df69dc58840 [xemacs-hg @ 2001-12-13 20:53:20 by wmperry]
wmperry
parents: 608
diff changeset
2061 {
1df69dc58840 [xemacs-hg @ 2001-12-13 20:53:20 by wmperry]
wmperry
parents: 608
diff changeset
2062 /* Must make sure we have put the image at least once! */
1df69dc58840 [xemacs-hg @ 2001-12-13 20:53:20 by wmperry]
wmperry
parents: 608
diff changeset
2063 IMAGE_INSTANCE_GTK_ALREADY_PUT(p) = TRUE;
1df69dc58840 [xemacs-hg @ 2001-12-13 20:53:20 by wmperry]
wmperry
parents: 608
diff changeset
2064 gtk_fixed_put (GTK_FIXED (FRAME_GTK_TEXT_WIDGET (f)),
1df69dc58840 [xemacs-hg @ 2001-12-13 20:53:20 by wmperry]
wmperry
parents: 608
diff changeset
2065 wid,
1df69dc58840 [xemacs-hg @ 2001-12-13 20:53:20 by wmperry]
wmperry
parents: 608
diff changeset
2066 -dga->xoffset, -dga->yoffset);
1df69dc58840 [xemacs-hg @ 2001-12-13 20:53:20 by wmperry]
wmperry
parents: 608
diff changeset
2067 }
1df69dc58840 [xemacs-hg @ 2001-12-13 20:53:20 by wmperry]
wmperry
parents: 608
diff changeset
2068 }
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2069
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2070 if (!IMAGE_INSTANCE_SUBWINDOW_DISPLAYEDP (p))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2071 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2072 gtk_widget_map (wid);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2073 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2074
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2075 gtk_widget_draw (wid, NULL);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2076 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2077 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2078
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2079 /* when you click on a widget you may activate another widget this
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2080 needs to be checked and all appropriate widgets updated */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2081 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2082 gtk_redisplay_subwindow (Lisp_Image_Instance *p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2083 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2084 /* Update the subwindow size if necessary. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2085 if (IMAGE_INSTANCE_SIZE_CHANGED (p))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2086 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2087 #if 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2088 XResizeWindow (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2089 IMAGE_INSTANCE_X_SUBWINDOW_ID (p),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2090 IMAGE_INSTANCE_WIDTH (p),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2091 IMAGE_INSTANCE_HEIGHT (p));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2092 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2093 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2094 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2095
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2096 /* Update all attributes that have changed. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2097 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2098 gtk_redisplay_widget (Lisp_Image_Instance *p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2099 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2100 /* This function can GC if IN_REDISPLAY is false. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2101
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2102 if (!IMAGE_INSTANCE_GTK_CLIPWIDGET (p))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2103 return;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2104
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2105 #ifdef HAVE_WIDGETS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2106 /* First get the items if they have changed since this is a
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2107 structural change. As such it will nuke all added values so we
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2108 need to update most other things after the items have changed.*/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2109 gtk_widget_show_all (IMAGE_INSTANCE_GTK_CLIPWIDGET (p));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2110 if (IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (p))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2111 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 778
diff changeset
2112 Lisp_Object image_instance = wrap_image_instance (p);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 778
diff changeset
2113
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2114
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2115 /* Need to update GtkArgs that might have changed... */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2116 /* #### FIXME!!! */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2117 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2118 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2119 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2120 /* #### FIXME!!! */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2121 /* No items changed, so do nothing, right? */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2122 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2123
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2124 /* Possibly update the colors and font */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2125 if (IMAGE_INSTANCE_WIDGET_FACE_CHANGED (p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2126 ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2127 /* #### This is not sufficient because it will not cope with widgets
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2128 that are not currently visible. Once redisplay has done the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2129 visible ones it will clear this flag so that when new ones
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2130 become visible they will not be updated. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2131 XFRAME (IMAGE_INSTANCE_FRAME (p))->faces_changed
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2132 ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2133 XFRAME (IMAGE_INSTANCE_FRAME (p))->frame_changed
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2134 ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2135 IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (p))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2136 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2137 /* #### Write this function BILL! */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2138 update_widget_face (NULL, p, IMAGE_INSTANCE_FRAME (p));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2139 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2140
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2141 /* Possibly update the text. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2142 if (IMAGE_INSTANCE_TEXT_CHANGED (p))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2143 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2144 char* str;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2145 Lisp_Object val = IMAGE_INSTANCE_WIDGET_TEXT (p);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2146 LISP_STRING_TO_EXTERNAL (val, str, Qnative);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2147
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2148 /* #### Need to special case each type of GtkWidget here! */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2149 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2150
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2151 /* Possibly update the size. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2152 if (IMAGE_INSTANCE_SIZE_CHANGED (p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2153 ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2154 IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2155 ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2156 IMAGE_INSTANCE_TEXT_CHANGED (p))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2157 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2158 assert (IMAGE_INSTANCE_GTK_WIDGET_ID (p) &&
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2159 IMAGE_INSTANCE_GTK_CLIPWIDGET (p)) ;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2160
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2161 /* #### Resize the widget! */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2162 /* gtk_widget_size_allocate () */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2163 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2164
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2165 /* Adjust offsets within the frame. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2166 if (XFRAME (IMAGE_INSTANCE_FRAME (p))->size_changed)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2167 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2168 /* I don't think we need to do anything for Gtk here... */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2169 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2170
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2171 /* now modify the widget */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2172 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2173 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2174
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2175 /* instantiate and gtk type subwindow */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2176 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2177 gtk_subwindow_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2178 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2179 int dest_mask, Lisp_Object domain)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2180 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2181 /* This function can GC */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2182 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2183 Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2184
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2185 if (!DEVICE_GTK_P (XDEVICE (device)))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2186 gui_error ("Not a GTK device", device);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2187
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2188 IMAGE_INSTANCE_TYPE (ii) = IMAGE_SUBWINDOW;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2189
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2190 ii->data = xnew_and_zero (struct gtk_subwindow_data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2191
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2192 /* Create a window for clipping */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2193 IMAGE_INSTANCE_GTK_CLIPWINDOW (ii) = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2194
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2195 /* Now put the subwindow inside the clip window. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2196 IMAGE_INSTANCE_SUBWINDOW_ID (ii) = (void *) NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2197 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2198
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2199 #ifdef HAVE_WIDGETS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2200
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2201 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2202 /* widgets */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2203 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2204 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2205 update_widget_face (GtkWidget *w, Lisp_Image_Instance *ii,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2206 Lisp_Object domain)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2207 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2208 if (0)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2209 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2210 GtkStyle *style = gtk_widget_get_style (w);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2211 Lisp_Object pixel = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2212 GdkColor *fcolor, *bcolor;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2213
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2214 style = gtk_style_copy (style);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2215
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2216 /* Update the foreground. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2217 pixel = FACE_FOREGROUND (IMAGE_INSTANCE_WIDGET_FACE (ii), domain);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2218 fcolor = COLOR_INSTANCE_GTK_COLOR (XCOLOR_INSTANCE (pixel));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2219
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2220 /* Update the background. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2221 pixel = FACE_BACKGROUND (IMAGE_INSTANCE_WIDGET_FACE (ii), domain);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2222 bcolor = COLOR_INSTANCE_GTK_COLOR (XCOLOR_INSTANCE (pixel));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2223
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2224 /* Update the font */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2225 /* #### FIXME!!! Need to copy the widgets style, dick with it, and
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2226 ** set the widgets style to the new style...
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2227 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2228 gtk_widget_set_style (w, style);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2229
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2230 /* #### Megahack - but its just getting too complicated to do this
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2231 in the right place. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2232 #if 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2233 if (EQ (IMAGE_INSTANCE_WIDGET_TYPE (ii), Qtab_control))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2234 update_tab_widget_face (wv, ii, domain);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2235 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2236 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2237 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2238
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2239 #if 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2240 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2241 update_tab_widget_face (GtkWidget *w, Lisp_Image_Instance *ii,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2242 Lisp_Object domain)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2243 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2244 if (wv->contents)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2245 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2246 widget_value* val = wv->contents, *cur;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2247
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2248 /* Give each child label the correct foreground color. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2249 Lisp_Object pixel = FACE_FOREGROUND
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2250 (IMAGE_INSTANCE_WIDGET_FACE (ii),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2251 domain);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2252 XColor fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2253 lw_add_widget_value_arg (val, XtNtabForeground, fcolor.pixel);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2254 wv->change = VISIBLE_CHANGE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2255 val->change = VISIBLE_CHANGE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2256
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2257 for (cur = val->next; cur; cur = cur->next)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2258 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2259 cur->change = VISIBLE_CHANGE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2260 if (cur->value)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2261 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2262 lw_copy_widget_value_args (val, cur);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2263 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2264 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2265 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2266 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2267 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2268
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2269 static Lisp_Object
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2270 gtk_widget_instantiate_1 (Lisp_Object image_instance, Lisp_Object instantiator,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2271 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2272 Lisp_Object domain)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2273 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2274 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2275 Lisp_Object widget = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2276 char *nm = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2277 GtkWidget *w = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2278 struct gcpro gcpro1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2279
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2280 IMAGE_INSTANCE_TYPE (ii) = IMAGE_WIDGET;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2281
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2282 if (!NILP (IMAGE_INSTANCE_WIDGET_TEXT (ii)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2283 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2284 LISP_STRING_TO_EXTERNAL (IMAGE_INSTANCE_WIDGET_TEXT (ii), nm, Qnative);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2285 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2286
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2287 ii->data = xnew_and_zero (struct gtk_subwindow_data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2288
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2289 /* Create a clipping widget */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2290 IMAGE_INSTANCE_GTK_CLIPWIDGET (ii) = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2291 IMAGE_INSTANCE_GTK_ALREADY_PUT(ii) = FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2292
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2293 /* Create the actual widget */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2294 GCPRO1 (widget);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2295 widget = call5 (Qgtk_widget_instantiate_internal,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2296 image_instance, instantiator,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2297 pointer_fg, pointer_bg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2298 domain);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2299
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2300 if (!NILP (widget))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2301 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2302 CHECK_GTK_OBJECT (widget);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2303 w = GTK_WIDGET (XGTK_OBJECT (widget)->object);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2304 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2305 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2306 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2307 stderr_out ("Lisp-level creation of widget failed... falling back\n");
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2308 w = gtk_label_new ("Widget Creation Failed...");
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2309 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2310
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2311 UNGCPRO;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2312
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2313 IMAGE_INSTANCE_SUBWINDOW_ID (ii) = (void *) w;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2314
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2315 /* #### HACK!!!! We should make this do the right thing if we
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2316 ** really need a clip widget!
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2317 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2318 IMAGE_INSTANCE_GTK_CLIPWIDGET (ii) = w;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2319
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2320 return (Qt);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2321 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2322
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2323 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2324 gtk_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2325 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2326 int dest_mask, Lisp_Object domain)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2327 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2328 call_with_suspended_errors ((lisp_fn_t) gtk_widget_instantiate_1,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2329 Qnil, Qimage,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2330 ERROR_ME_WARN, 5,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2331 image_instance, instantiator,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2332 pointer_fg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2333 pointer_bg,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2334 domain);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2335 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2336
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2337 /* get properties of a control */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2338 static Lisp_Object
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2339 gtk_widget_property (Lisp_Object image_instance, Lisp_Object prop)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2340 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2341 /* Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2342
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2343 /* get the text from a control */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2344 if (EQ (prop, Q_text))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2345 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2346 return Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2347 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2348 return Qunbound;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2349 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2350
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2351 #define FAKE_GTK_WIDGET_INSTANTIATOR(x) \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2352 static void \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2353 gtk_##x##_instantiate (Lisp_Object image_instance, \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2354 Lisp_Object instantiator, \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2355 Lisp_Object pointer_fg, \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2356 Lisp_Object pointer_bg, \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2357 int dest_mask, Lisp_Object domain) \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2358 { \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2359 gtk_widget_instantiate (image_instance, instantiator, pointer_fg, \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2360 pointer_bg, dest_mask, domain); \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2361 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2362
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2363 FAKE_GTK_WIDGET_INSTANTIATOR(native_layout);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2364 FAKE_GTK_WIDGET_INSTANTIATOR(button);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2365 FAKE_GTK_WIDGET_INSTANTIATOR(progress_gauge);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2366 FAKE_GTK_WIDGET_INSTANTIATOR(edit_field);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2367 FAKE_GTK_WIDGET_INSTANTIATOR(combo_box);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2368 FAKE_GTK_WIDGET_INSTANTIATOR(tab_control);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2369 FAKE_GTK_WIDGET_INSTANTIATOR(label);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2370
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2371 /* Update a button's clicked state. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2372 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2373 gtk_button_redisplay (Lisp_Object image_instance)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2374 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2375 /* This function can GC if IN_REDISPLAY is false. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2376 Lisp_Image_Instance *p = XIMAGE_INSTANCE (image_instance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2377 GtkWidget *w = IMAGE_INSTANCE_GTK_CLIPWIDGET (p);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2378
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2379 if (GTK_WIDGET_TYPE (w) == gtk_button_get_type ())
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2380 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2381 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2382 else if (GTK_WIDGET_TYPE (w) == gtk_check_button_get_type ())
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2383 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2384 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2385 else if (GTK_WIDGET_TYPE (w) == gtk_radio_button_get_type ())
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2386 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2387 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2388 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2389 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2390 /* Unknown button type... */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2391 abort();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2392 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2393 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2394
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2395 /* get properties of a button */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2396 static Lisp_Object
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2397 gtk_button_property (Lisp_Object image_instance, Lisp_Object prop)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2398 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2399 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2400
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2401 /* check the state of a button */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2402 if (EQ (prop, Q_selected))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2403 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2404 if (GTK_WIDGET_HAS_FOCUS (IMAGE_INSTANCE_SUBWINDOW_ID (ii)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2405 return Qt;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2406 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2407 return Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2408 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2409 return Qunbound;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2410 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2411
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2412 /* set the properties of a progress gauge */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2413 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2414 gtk_progress_gauge_redisplay (Lisp_Object image_instance)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2415 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2416 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2417
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2418 if (IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2419 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2420 gfloat f;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2421 Lisp_Object val;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2422
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2423 val = XGUI_ITEM (IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii))->value;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2424 f = XFLOATINT (val);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2425
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2426 gtk_progress_set_value (GTK_PROGRESS (IMAGE_INSTANCE_SUBWINDOW_ID (ii)),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2427 f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2428 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2429 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2430
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2431 /* Set the properties of a tab control */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2432 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2433 gtk_tab_control_redisplay (Lisp_Object image_instance)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2434 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2435 /* #### Convert this to GTK baby! */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2436 Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2437
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2438 if (IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii) ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2439 IMAGE_INSTANCE_WIDGET_ACTION_OCCURRED (ii))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2440 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2441 /* If only the order has changed then simply select the first
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2442 one of the pending set. This stops horrendous rebuilding -
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2443 and hence flicker - of the tabs each time you click on
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2444 one. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2445 if (tab_control_order_only_changed (image_instance))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2446 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2447 Lisp_Object rest, selected =
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2448 gui_item_list_find_selected
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2449 (NILP (IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii)) ?
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2450 XCDR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)) :
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2451 XCDR (IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii)));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2452
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2453 LIST_LOOP (rest, XCDR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2454 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2455 if (gui_item_equal_sans_selected (XCAR (rest), selected, 0))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2456 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2457 Lisp_Object old_selected =gui_item_list_find_selected
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2458 (XCDR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2459
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2460 /* Need to focus on the widget... */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2461 stderr_out ("Hey, change the tab-focus you boob...\n");
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2463 /* Pick up the new selected item. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2464 XGUI_ITEM (old_selected)->selected =
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2465 XGUI_ITEM (XCAR (rest))->selected;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2466 XGUI_ITEM (XCAR (rest))->selected =
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2467 XGUI_ITEM (selected)->selected;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2468 /* We're not actually changing the items anymore. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2469 IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii) = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2470 IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii) = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2471 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2472 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2473 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2474 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2475 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2476 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2477 /* More than just the order has changed... let's get busy! */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2478 GtkNotebook *nb = GTK_NOTEBOOK (IMAGE_INSTANCE_GTK_CLIPWIDGET (ii));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2479 guint num_pages = g_list_length (nb->children);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2480 Lisp_Object rest;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2481
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2482 if (num_pages >= 0)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2483 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2484 int i;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2485 for (i = num_pages; i >= 0; --i)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2486 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2487 gtk_notebook_remove_page (nb, i);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2488 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2489 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2490
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2491 LIST_LOOP (rest, XCDR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2492 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2493 Lisp_Gui_Item *pgui = XGUI_ITEM (XCAR (rest));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2494 char *c_name = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2495
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2496 if (!STRINGP (pgui->name))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2497 pgui->name = Feval (pgui->name);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2498
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2499 CHECK_STRING (pgui->name);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2500
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2501 TO_EXTERNAL_FORMAT (LISP_STRING, pgui->name,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2502 C_STRING_ALLOCA, c_name,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2503 Qctext);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2504
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2505 gtk_notebook_append_page (nb,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2506 gtk_vbox_new (FALSE, 3),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2507 gtk_label_new (c_name));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2508 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2509
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2510 /* Show all the new widgets we just added... */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2511 gtk_widget_show_all (GTK_WIDGET (nb));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2512 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2513 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2514
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2515 /* Possibly update the face. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2516 #if 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2517 if (IMAGE_INSTANCE_WIDGET_FACE_CHANGED (ii)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2518 ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2519 XFRAME (IMAGE_INSTANCE_FRAME (ii))->faces_changed
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2520 ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2521 IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2522 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2523 update_tab_widget_face (wv, ii,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2524 IMAGE_INSTANCE_FRAME (ii));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2525 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2526 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2527 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2528 #endif /* HAVE_WIDGETS */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2529
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2530
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2531 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2532 /* initialization */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2533 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2534 void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2535 syms_of_glyphs_gtk (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2536 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2537 #ifdef HAVE_WIDGETS
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2538 DEFSYMBOL (Qgtk_widget_instantiate_internal);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2539 DEFSYMBOL (Qgtk_widget_property_internal);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2540 DEFSYMBOL (Qgtk_widget_redisplay_internal);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2541 DEFSYMBOL (Qgtk_widget_set_style);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2542 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2543 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2544
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2545 void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2546 console_type_create_glyphs_gtk (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2547 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2548 /* image methods */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2549 CONSOLE_HAS_METHOD (gtk, print_image_instance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2550 CONSOLE_HAS_METHOD (gtk, finalize_image_instance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2551 CONSOLE_HAS_METHOD (gtk, image_instance_equal);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2552 CONSOLE_HAS_METHOD (gtk, image_instance_hash);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2553 CONSOLE_HAS_METHOD (gtk, colorize_image_instance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2554 CONSOLE_HAS_METHOD (gtk, init_image_instance_from_eimage);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2555 CONSOLE_HAS_METHOD (gtk, locate_pixmap_file);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2556 CONSOLE_HAS_METHOD (gtk, unmap_subwindow);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2557 CONSOLE_HAS_METHOD (gtk, map_subwindow);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2558 CONSOLE_HAS_METHOD (gtk, redisplay_widget);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2559 CONSOLE_HAS_METHOD (gtk, redisplay_subwindow);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2560 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2561
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2562 void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2563 image_instantiator_format_create_glyphs_gtk (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2564 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2565 IIFORMAT_VALID_CONSOLE (gtk, nothing);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2566 IIFORMAT_VALID_CONSOLE (gtk, string);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2567 #ifdef HAVE_WIDGETS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2568 IIFORMAT_VALID_CONSOLE (gtk, layout);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2569 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2570 IIFORMAT_VALID_CONSOLE (gtk, formatted_string);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2571 IIFORMAT_VALID_CONSOLE (gtk, inherit);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2572 #ifdef HAVE_XPM
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2573 INITIALIZE_DEVICE_IIFORMAT (gtk, xpm);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2574 IIFORMAT_HAS_DEVMETHOD (gtk, xpm, instantiate);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2575 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2576 #ifdef HAVE_JPEG
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2577 IIFORMAT_VALID_CONSOLE (gtk, jpeg);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2578 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2579 #ifdef HAVE_TIFF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2580 IIFORMAT_VALID_CONSOLE (gtk, tiff);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2581 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2582 #ifdef HAVE_PNG
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2583 IIFORMAT_VALID_CONSOLE (gtk, png);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2584 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2585 #ifdef HAVE_GIF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2586 IIFORMAT_VALID_CONSOLE (gtk, gif);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2587 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2588
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2589 INITIALIZE_DEVICE_IIFORMAT (gtk, subwindow);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2590 IIFORMAT_HAS_DEVMETHOD (gtk, subwindow, instantiate);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2591
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2592 #ifdef HAVE_WIDGETS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2593 /* layout widget */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2594 INITIALIZE_DEVICE_IIFORMAT (gtk, native_layout);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2595 IIFORMAT_HAS_DEVMETHOD (gtk, native_layout, instantiate);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2596
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2597 /* button widget */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2598 INITIALIZE_DEVICE_IIFORMAT (gtk, button);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2599 IIFORMAT_HAS_DEVMETHOD (gtk, button, property);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2600 IIFORMAT_HAS_DEVMETHOD (gtk, button, instantiate);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2601 IIFORMAT_HAS_DEVMETHOD (gtk, button, redisplay);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2602 /* general widget methods. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2603 INITIALIZE_DEVICE_IIFORMAT (gtk, widget);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2604 IIFORMAT_HAS_DEVMETHOD (gtk, widget, property);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2605
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2606 /* progress gauge */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2607 INITIALIZE_DEVICE_IIFORMAT (gtk, progress_gauge);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2608 IIFORMAT_HAS_DEVMETHOD (gtk, progress_gauge, redisplay);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2609 IIFORMAT_HAS_DEVMETHOD (gtk, progress_gauge, instantiate);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2610 /* text field */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2611 INITIALIZE_DEVICE_IIFORMAT (gtk, edit_field);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2612 IIFORMAT_HAS_DEVMETHOD (gtk, edit_field, instantiate);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2613 INITIALIZE_DEVICE_IIFORMAT (gtk, combo_box);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2614 IIFORMAT_HAS_DEVMETHOD (gtk, combo_box, instantiate);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2615 IIFORMAT_HAS_SHARED_DEVMETHOD (gtk, combo_box, redisplay, tab_control);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2616 /* tab control widget */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2617 INITIALIZE_DEVICE_IIFORMAT (gtk, tab_control);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2618 IIFORMAT_HAS_DEVMETHOD (gtk, tab_control, instantiate);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2619 IIFORMAT_HAS_DEVMETHOD (gtk, tab_control, redisplay);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2620 /* label */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2621 INITIALIZE_DEVICE_IIFORMAT (gtk, label);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2622 IIFORMAT_HAS_DEVMETHOD (gtk, label, instantiate);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2623 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2624
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2625 INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (cursor_font, "cursor-font");
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2626 IIFORMAT_VALID_CONSOLE (gtk, cursor_font);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2627
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2628 IIFORMAT_HAS_METHOD (cursor_font, validate);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2629 IIFORMAT_HAS_METHOD (cursor_font, possible_dest_types);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2630 IIFORMAT_HAS_METHOD (cursor_font, instantiate);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2631
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2632 IIFORMAT_VALID_KEYWORD (cursor_font, Q_data, check_valid_string);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2633 IIFORMAT_VALID_KEYWORD (cursor_font, Q_foreground, check_valid_string);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2634 IIFORMAT_VALID_KEYWORD (cursor_font, Q_background, check_valid_string);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2635
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2636 INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (font, "font");
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2637 IIFORMAT_VALID_CONSOLE (gtk, font);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2638
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2639 IIFORMAT_HAS_METHOD (font, validate);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2640 IIFORMAT_HAS_METHOD (font, possible_dest_types);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2641 IIFORMAT_HAS_METHOD (font, instantiate);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2642
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2643 IIFORMAT_VALID_KEYWORD (font, Q_data, check_valid_string);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2644 IIFORMAT_VALID_KEYWORD (font, Q_foreground, check_valid_string);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2645 IIFORMAT_VALID_KEYWORD (font, Q_background, check_valid_string);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2646
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2647 #ifdef HAVE_XPM
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2648 INITIALIZE_DEVICE_IIFORMAT (gtk, xpm);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2649 IIFORMAT_HAS_DEVMETHOD (gtk, xpm, instantiate);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2650 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2651
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2652 #ifdef HAVE_XFACE
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2653 INITIALIZE_DEVICE_IIFORMAT (gtk, xface);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2654 IIFORMAT_HAS_DEVMETHOD (gtk, xface, instantiate);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2655 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2656
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2657 INITIALIZE_DEVICE_IIFORMAT (gtk, xbm);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2658 IIFORMAT_HAS_DEVMETHOD (gtk, xbm, instantiate);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2659 IIFORMAT_VALID_CONSOLE (gtk, xbm);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2660
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2661 INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (gtk_resource, "gtk-resource");
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2662 IIFORMAT_VALID_CONSOLE (gtk, gtk_resource);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2663
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2664 IIFORMAT_HAS_METHOD (gtk_resource, validate);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2665 IIFORMAT_HAS_METHOD (gtk_resource, normalize);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2666 IIFORMAT_HAS_METHOD (gtk_resource, possible_dest_types);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2667 IIFORMAT_HAS_METHOD (gtk_resource, instantiate);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2668
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2669 IIFORMAT_VALID_KEYWORD (gtk_resource, Q_resource_type, check_valid_resource_symbol);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2670 IIFORMAT_VALID_KEYWORD (gtk_resource, Q_resource_id, check_valid_resource_id);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2671 IIFORMAT_VALID_KEYWORD (gtk_resource, Q_file, check_valid_string);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2672
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2673 INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (autodetect, "autodetect");
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2674 IIFORMAT_VALID_CONSOLE (gtk, autodetect);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2675
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2676 IIFORMAT_HAS_METHOD (autodetect, validate);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2677 IIFORMAT_HAS_METHOD (autodetect, normalize);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2678 IIFORMAT_HAS_METHOD (autodetect, possible_dest_types);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2679 IIFORMAT_HAS_METHOD (autodetect, instantiate);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2680
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2681 IIFORMAT_VALID_KEYWORD (autodetect, Q_data, check_valid_string);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2682 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2683
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2684 void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2685 vars_of_glyphs_gtk (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2686 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2687 #ifdef HAVE_XFACE
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2688 Fprovide (Qxface);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2689 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2690
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2691 DEFVAR_LISP ("gtk-bitmap-file-path", &Vgtk_bitmap_file_path /*
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2692 A list of the directories in which X bitmap files may be found.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2693 If nil, this is initialized from the "*bitmapFilePath" resource.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2694 This is used by the `make-image-instance' function (however, note that if
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2695 the environment variable XBMLANGPATH is set, it is consulted first).
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2696 */ );
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2697 Vgtk_bitmap_file_path = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2698 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2699
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2700 void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2701 complex_vars_of_glyphs_gtk (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2702 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2703 #define BUILD_GLYPH_INST(variable, name) \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2704 Fadd_spec_to_specifier \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2705 (GLYPH_IMAGE (XGLYPH (variable)), \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2706 vector3 (Qxbm, Q_data, \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2707 list3 (make_int (name##_width), \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2708 make_int (name##_height), \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2709 make_ext_string (name##_bits, \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2710 sizeof (name##_bits), \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2711 Qbinary))), \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2712 Qglobal, Qgtk, Qnil)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2713
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2714 BUILD_GLYPH_INST (Vtruncation_glyph, truncator);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2715 BUILD_GLYPH_INST (Vcontinuation_glyph, continuer);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2716 BUILD_GLYPH_INST (Vxemacs_logo, xemacs);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2717 BUILD_GLYPH_INST (Vhscroll_glyph, hscroll);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2718
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2719 #undef BUILD_GLYPH_INST
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2720 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2721
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2722 /* X specific crap */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2723 #include <gdk/gdkx.h>
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2724 /* #### Should remove all this X specific stuff when GTK/GDK matures a
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2725 bit more and provides an abstraction for it. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2726 static int
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2727 gtk_colorize_image_instance (Lisp_Object image_instance,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2728 Lisp_Object foreground, Lisp_Object background)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2729 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2730 struct Lisp_Image_Instance *p;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2731
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2732 p = XIMAGE_INSTANCE (image_instance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2733
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2734 switch (IMAGE_INSTANCE_TYPE (p))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2735 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2736 case IMAGE_MONO_PIXMAP:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2737 IMAGE_INSTANCE_TYPE (p) = IMAGE_COLOR_PIXMAP;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2738 /* Make sure there aren't two pointers to the same mask, causing
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2739 it to get freed twice. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2740 IMAGE_INSTANCE_GTK_MASK (p) = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2741 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2742
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2743 default:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2744 return 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2745 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2746
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2747 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2748 GdkWindow *draw = GET_GTK_WIDGET_WINDOW (DEVICE_GTK_APP_SHELL (XDEVICE (IMAGE_INSTANCE_DEVICE (p))));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2749 GdkPixmap *new_pxmp = gdk_pixmap_new (draw,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2750 IMAGE_INSTANCE_PIXMAP_WIDTH (p),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2751 IMAGE_INSTANCE_PIXMAP_HEIGHT (p),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2752 DEVICE_GTK_DEPTH (XDEVICE (IMAGE_INSTANCE_DEVICE (p))));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2753 GdkGCValues gcv;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2754 GdkGC *gc;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2755
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2756 gcv.foreground = * COLOR_INSTANCE_GTK_COLOR (XCOLOR_INSTANCE (foreground));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2757 gcv.background = * COLOR_INSTANCE_GTK_COLOR (XCOLOR_INSTANCE (background));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2758 gc = gdk_gc_new_with_values (new_pxmp, &gcv, GDK_GC_BACKGROUND | GDK_GC_FOREGROUND);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2759
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2760 XCopyPlane (GDK_WINDOW_XDISPLAY (draw),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2761 GDK_WINDOW_XWINDOW (IMAGE_INSTANCE_GTK_PIXMAP (p)),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2762 GDK_WINDOW_XWINDOW (new_pxmp),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2763 GDK_GC_XGC (gc), 0, 0,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2764 IMAGE_INSTANCE_PIXMAP_WIDTH (p),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2765 IMAGE_INSTANCE_PIXMAP_HEIGHT (p),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2766 0, 0, 1);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2767
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2768 gdk_gc_destroy (gc);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2769 IMAGE_INSTANCE_GTK_PIXMAP (p) = new_pxmp;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2770 IMAGE_INSTANCE_PIXMAP_DEPTH (p) = DEVICE_GTK_DEPTH (XDEVICE (IMAGE_INSTANCE_DEVICE (p)));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2771 IMAGE_INSTANCE_PIXMAP_FG (p) = foreground;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2772 IMAGE_INSTANCE_PIXMAP_BG (p) = background;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2773 return 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2774 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2775 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2776