Mercurial > emacs
annotate src/xfns.c @ 43834:aa881082fd04
(image-type-from-file-header): Make temporary buffer unibyte.
author | Pavel Janík <Pavel@Janik.cz> |
---|---|
date | Mon, 11 Mar 2002 13:32:22 +0000 |
parents | 5505d571541b |
children | fed15ed090bc |
rev | line source |
---|---|
389 | 1 /* Functions for the X window system. |
35068 | 2 Copyright (C) 1989, 92, 93, 94, 95, 96, 1997, 1998, 1999, 2000, 2001 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3 Free Software Foundation. |
389 | 4 |
5 This file is part of GNU Emacs. | |
6 | |
7 GNU Emacs is free software; you can redistribute it and/or modify | |
8 it under the terms of the GNU General Public License as published by | |
708 | 9 the Free Software Foundation; either version 2, or (at your option) |
389 | 10 any later version. |
11 | |
12 GNU Emacs is distributed in the hope that it will be useful, | |
13 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 GNU General Public License for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
18 along with GNU Emacs; see the file COPYING. If not, write to | |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13867
diff
changeset
|
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13867
diff
changeset
|
20 Boston, MA 02111-1307, USA. */ |
389 | 21 |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26032
diff
changeset
|
22 #include <config.h> |
7899 | 23 #include <signal.h> |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
24 #include <stdio.h> |
25528
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
25 #include <math.h> |
7899 | 26 |
40700
6f6287da52d1
Include unistd.h, if it exists.
Richard M. Stallman <rms@gnu.org>
parents:
40656
diff
changeset
|
27 #ifdef HAVE_UNISTD_H |
6f6287da52d1
Include unistd.h, if it exists.
Richard M. Stallman <rms@gnu.org>
parents:
40656
diff
changeset
|
28 #include <unistd.h> |
6f6287da52d1
Include unistd.h, if it exists.
Richard M. Stallman <rms@gnu.org>
parents:
40656
diff
changeset
|
29 #endif |
6f6287da52d1
Include unistd.h, if it exists.
Richard M. Stallman <rms@gnu.org>
parents:
40656
diff
changeset
|
30 |
8091
f40cbe50c74f
(XLIB_ILLEGAL_ACCESS): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
8090
diff
changeset
|
31 /* This makes the fields of a Display accessible, in Xlib header files. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
32 |
8091
f40cbe50c74f
(XLIB_ILLEGAL_ACCESS): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
8090
diff
changeset
|
33 #define XLIB_ILLEGAL_ACCESS |
f40cbe50c74f
(XLIB_ILLEGAL_ACCESS): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
8090
diff
changeset
|
34 |
389 | 35 #include "lisp.h" |
36 #include "xterm.h" | |
771 | 37 #include "frame.h" |
389 | 38 #include "window.h" |
39 #include "buffer.h" | |
26876 | 40 #include "intervals.h" |
389 | 41 #include "dispextern.h" |
515 | 42 #include "keyboard.h" |
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2355
diff
changeset
|
43 #include "blockinput.h" |
24412
d11ac02f9d6a
Use epaths.h istead of paths.h.
Richard M. Stallman <rms@gnu.org>
parents:
24170
diff
changeset
|
44 #include <epaths.h> |
17048
2da4e24ceee5
Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16966
diff
changeset
|
45 #include "charset.h" |
30351
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
46 #include "coding.h" |
17048
2da4e24ceee5
Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16966
diff
changeset
|
47 #include "fontset.h" |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
48 #include "systime.h" |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
49 #include "termhooks.h" |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
50 #include "atimer.h" |
389 | 51 |
52 #ifdef HAVE_X_WINDOWS | |
25451
786ab5197e4b
Include <stdlib.h> if available, and declare abort only if not. Include
Andreas Schwab <schwab@suse.de>
parents:
25390
diff
changeset
|
53 |
786ab5197e4b
Include <stdlib.h> if available, and declare abort only if not. Include
Andreas Schwab <schwab@suse.de>
parents:
25390
diff
changeset
|
54 #include <ctype.h> |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
55 #include <sys/types.h> |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
56 #include <sys/stat.h> |
389 | 57 |
2355
cec8c9490d8a
* xfns.c [VMS]: Get the gray_bits from [.bitmaps]gray.xbm.
Jim Blandy <jimb@redhat.com>
parents:
2341
diff
changeset
|
58 #ifndef VMS |
3821
8f353c2491d0
* xfns.c: Always #include "bitmaps/gray.xbm"; the bitmaps seem to
Jim Blandy <jimb@redhat.com>
parents:
3692
diff
changeset
|
59 #if 1 /* Used to be #ifdef EMACS_BITMAP_FILES, but this should always work. */ |
3512
2657b04dd324
[EMACS_BIT_MAPS]: Include gray.xbm from ./bitmaps.
Richard M. Stallman <rms@gnu.org>
parents:
3507
diff
changeset
|
60 #include "bitmaps/gray.xbm" |
2657b04dd324
[EMACS_BIT_MAPS]: Include gray.xbm from ./bitmaps.
Richard M. Stallman <rms@gnu.org>
parents:
3507
diff
changeset
|
61 #else |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1786
diff
changeset
|
62 #include <X11/bitmaps/gray> |
3512
2657b04dd324
[EMACS_BIT_MAPS]: Include gray.xbm from ./bitmaps.
Richard M. Stallman <rms@gnu.org>
parents:
3507
diff
changeset
|
63 #endif |
2355
cec8c9490d8a
* xfns.c [VMS]: Get the gray_bits from [.bitmaps]gray.xbm.
Jim Blandy <jimb@redhat.com>
parents:
2341
diff
changeset
|
64 #else |
cec8c9490d8a
* xfns.c [VMS]: Get the gray_bits from [.bitmaps]gray.xbm.
Jim Blandy <jimb@redhat.com>
parents:
2341
diff
changeset
|
65 #include "[.bitmaps]gray.xbm" |
cec8c9490d8a
* xfns.c [VMS]: Get the gray_bits from [.bitmaps]gray.xbm.
Jim Blandy <jimb@redhat.com>
parents:
2341
diff
changeset
|
66 #endif |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1786
diff
changeset
|
67 |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
68 #ifdef USE_X_TOOLKIT |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
69 #include <X11/Shell.h> |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
70 |
12616
ca170048a679
[USE_MOTIF]: Don't include X11/Xaw/Paned.h, X11/Xaw/Label.h.
Richard M. Stallman <rms@gnu.org>
parents:
12546
diff
changeset
|
71 #ifndef USE_MOTIF |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
72 #include <X11/Xaw/Paned.h> |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
73 #include <X11/Xaw/Label.h> |
12616
ca170048a679
[USE_MOTIF]: Don't include X11/Xaw/Paned.h, X11/Xaw/Label.h.
Richard M. Stallman <rms@gnu.org>
parents:
12546
diff
changeset
|
74 #endif /* USE_MOTIF */ |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
75 |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
76 #ifdef USG |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
77 #undef USG /* ####KLUDGE for Solaris 2.2 and up */ |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
78 #include <X11/Xos.h> |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
79 #define USG |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
80 #else |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
81 #include <X11/Xos.h> |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
82 #endif |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
83 |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
84 #include "widget.h" |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
85 |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
86 #include "../lwlib/lwlib.h" |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
87 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
88 #ifdef USE_MOTIF |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
89 #include <Xm/Xm.h> |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
90 #include <Xm/DialogS.h> |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
91 #include <Xm/FileSB.h> |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
92 #endif |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
93 |
13508
b64345cf1ee9
(HACK_EDITRES): Don't define if NO_EDITRES is defined.
Richard M. Stallman <rms@gnu.org>
parents:
13227
diff
changeset
|
94 /* Do the EDITRES protocol if running X11R5 |
b64345cf1ee9
(HACK_EDITRES): Don't define if NO_EDITRES is defined.
Richard M. Stallman <rms@gnu.org>
parents:
13227
diff
changeset
|
95 Exception: HP-UX (at least version A.09.05) has X11R5 without EditRes */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
96 |
13508
b64345cf1ee9
(HACK_EDITRES): Don't define if NO_EDITRES is defined.
Richard M. Stallman <rms@gnu.org>
parents:
13227
diff
changeset
|
97 #if (XtSpecificationRelease >= 5) && !defined(NO_EDITRES) |
9231
eeb35369e536
(HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents:
9182
diff
changeset
|
98 #define HACK_EDITRES |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
99 extern void _XEditResCheckMessages (); |
9231
eeb35369e536
(HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents:
9182
diff
changeset
|
100 #endif /* R5 + Athena */ |
eeb35369e536
(HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents:
9182
diff
changeset
|
101 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
102 /* Unique id counter for widgets created by the Lucid Widget Library. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
103 |
9231
eeb35369e536
(HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents:
9182
diff
changeset
|
104 extern LWLIB_ID widget_id_tick; |
eeb35369e536
(HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents:
9182
diff
changeset
|
105 |
15720
f1549b7501af
(Fx_create_frame): Do xlwmenu hack only if USE_LUCID.
Karl Heuer <kwzh@gnu.org>
parents:
15706
diff
changeset
|
106 #ifdef USE_LUCID |
9742
fe7653791d28
(Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents:
9703
diff
changeset
|
107 /* This is part of a kludge--see lwlib/xlwmenu.c. */ |
15706
bf891f379d9f
(xlwmenu_default_font): Declare, but don't define.
Karl Heuer <kwzh@gnu.org>
parents:
15704
diff
changeset
|
108 extern XFontStruct *xlwmenu_default_font; |
15720
f1549b7501af
(Fx_create_frame): Do xlwmenu hack only if USE_LUCID.
Karl Heuer <kwzh@gnu.org>
parents:
15706
diff
changeset
|
109 #endif |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
110 |
5900
284c0d70a50a
(x_set_menu_bar_lines) [USE_X_TOOLKIT]: Dont Call XtDestroyWidget but
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5899
diff
changeset
|
111 extern void free_frame_menubar (); |
25528
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
112 extern double atof (); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
113 |
37210
8b47704e0150
(Vmotif_version_string) [USE_MOTIF]: New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37173
diff
changeset
|
114 #ifdef USE_MOTIF |
8b47704e0150
(Vmotif_version_string) [USE_MOTIF]: New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37173
diff
changeset
|
115 |
8b47704e0150
(Vmotif_version_string) [USE_MOTIF]: New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37173
diff
changeset
|
116 /* LessTif/Motif version info. */ |
8b47704e0150
(Vmotif_version_string) [USE_MOTIF]: New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37173
diff
changeset
|
117 |
8b47704e0150
(Vmotif_version_string) [USE_MOTIF]: New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37173
diff
changeset
|
118 static Lisp_Object Vmotif_version_string; |
8b47704e0150
(Vmotif_version_string) [USE_MOTIF]: New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37173
diff
changeset
|
119 |
8b47704e0150
(Vmotif_version_string) [USE_MOTIF]: New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37173
diff
changeset
|
120 #endif /* USE_MOTIF */ |
8b47704e0150
(Vmotif_version_string) [USE_MOTIF]: New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37173
diff
changeset
|
121 |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
122 #endif /* USE_X_TOOLKIT */ |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
123 |
4279 | 124 #ifdef HAVE_X11R4 |
125 #define MAXREQUEST(dpy) (XMaxRequestSize (dpy)) | |
126 #else | |
127 #define MAXREQUEST(dpy) ((dpy)->max_request_size) | |
128 #endif | |
129 | |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
130 /* The gray bitmap `bitmaps/gray'. This is done because xterm.c uses |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
131 it, and including `bitmaps/gray' more than once is a problem when |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
132 config.h defines `static' as an empty replacement string. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
133 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
134 int gray_bitmap_width = gray_width; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
135 int gray_bitmap_height = gray_height; |
34512
d069886667e6
(gray_bitmap_bits): Declare `char *'.
Gerd Moellmann <gerd@gnu.org>
parents:
34476
diff
changeset
|
136 char *gray_bitmap_bits = gray_bits; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
137 |
16966
df9f838f255a
(Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16732
diff
changeset
|
138 /* The name we're using in resource queries. Most often "emacs". */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
139 |
4146
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
140 Lisp_Object Vx_resource_name; |
3170
647229114f47
* xfns.c: Make resource manager work correctly even when
Jim Blandy <jimb@redhat.com>
parents:
3141
diff
changeset
|
141 |
16966
df9f838f255a
(Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16732
diff
changeset
|
142 /* The application class we're using in resource queries. |
df9f838f255a
(Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16732
diff
changeset
|
143 Normally "Emacs". */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
144 |
16966
df9f838f255a
(Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16732
diff
changeset
|
145 Lisp_Object Vx_resource_class; |
df9f838f255a
(Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16732
diff
changeset
|
146 |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
147 /* Non-zero means we're allowed to display an hourglass cursor. */ |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
148 |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
149 int display_hourglass_p; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
150 |
389 | 151 /* The background and shape of the mouse pointer, and shape when not |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
152 over text or in the modeline. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
153 |
389 | 154 Lisp_Object Vx_pointer_shape, Vx_nontext_pointer_shape, Vx_mode_pointer_shape; |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
155 Lisp_Object Vx_hourglass_pointer_shape; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
156 |
7683
be3423efbdce
(Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents:
7599
diff
changeset
|
157 /* The shape when over mouse-sensitive text. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
158 |
7683
be3423efbdce
(Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents:
7599
diff
changeset
|
159 Lisp_Object Vx_sensitive_text_pointer_shape; |
389 | 160 |
33960
1f92a2d65681
(Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33747
diff
changeset
|
161 /* If non-nil, the pointer shape to indicate that windows can be |
1f92a2d65681
(Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33747
diff
changeset
|
162 dragged horizontally. */ |
1f92a2d65681
(Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33747
diff
changeset
|
163 |
1f92a2d65681
(Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33747
diff
changeset
|
164 Lisp_Object Vx_window_horizontal_drag_shape; |
1f92a2d65681
(Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33747
diff
changeset
|
165 |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
166 /* Color of chars displayed in cursor box. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
167 |
389 | 168 Lisp_Object Vx_cursor_fore_pixel; |
169 | |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
170 /* Nonzero if using X. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
171 |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
172 static int x_in_use; |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
173 |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
174 /* Non nil if no window manager is in use. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
175 |
389 | 176 Lisp_Object Vx_no_window_manager; |
177 | |
9563 | 178 /* Search path for bitmap files. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
179 |
9563 | 180 Lisp_Object Vx_bitmap_file_path; |
181 | |
17048
2da4e24ceee5
Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16966
diff
changeset
|
182 /* Regexp matching a font name whose width is the same as `PIXEL_SIZE'. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
183 |
17048
2da4e24ceee5
Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16966
diff
changeset
|
184 Lisp_Object Vx_pixel_size_width_font_regexp; |
2da4e24ceee5
Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16966
diff
changeset
|
185 |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
186 Lisp_Object Qauto_raise; |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
187 Lisp_Object Qauto_lower; |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1786
diff
changeset
|
188 Lisp_Object Qbar; |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
189 Lisp_Object Qborder_color; |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
190 Lisp_Object Qborder_width; |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1786
diff
changeset
|
191 Lisp_Object Qbox; |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
192 Lisp_Object Qcursor_color; |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1786
diff
changeset
|
193 Lisp_Object Qcursor_type; |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
194 Lisp_Object Qgeometry; |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
195 Lisp_Object Qicon_left; |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
196 Lisp_Object Qicon_top; |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
197 Lisp_Object Qicon_type; |
12073 | 198 Lisp_Object Qicon_name; |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
199 Lisp_Object Qinternal_border_width; |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
200 Lisp_Object Qleft; |
16254
3e8b16badf3d
(Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents:
16156
diff
changeset
|
201 Lisp_Object Qright; |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
202 Lisp_Object Qmouse_color; |
1874
19cf50641d6c
* frame.c (Fframe_parameters): Report the `minibuffer' parameter of
Jim Blandy <jimb@redhat.com>
parents:
1821
diff
changeset
|
203 Lisp_Object Qnone; |
23793
3f48dda0547a
(Qouter_window_id): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
23411
diff
changeset
|
204 Lisp_Object Qouter_window_id; |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
205 Lisp_Object Qparent_id; |
8942
a43f3b56ed47
(x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents:
8845
diff
changeset
|
206 Lisp_Object Qscroll_bar_width; |
2328
82e4fed9cdd6
* xfns.c (Fx_parse_geometry): Renamed from Fx_geometry.
Jim Blandy <jimb@redhat.com>
parents:
2295
diff
changeset
|
207 Lisp_Object Qsuppress_icon; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
208 extern Lisp_Object Qtop; |
389 | 209 Lisp_Object Qundefined_color; |
1994
73ce9dd21093
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1932
diff
changeset
|
210 Lisp_Object Qvertical_scroll_bars; |
2294
9bce20507666
Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents:
2283
diff
changeset
|
211 Lisp_Object Qvisibility; |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
212 Lisp_Object Qwindow_id; |
771 | 213 Lisp_Object Qx_frame_parameter; |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
214 Lisp_Object Qx_resource_name; |
7251
02cc4eee5928
(x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents:
7209
diff
changeset
|
215 Lisp_Object Quser_position; |
02cc4eee5928
(x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents:
7209
diff
changeset
|
216 Lisp_Object Quser_size; |
26571
bc95d8e47cb9
Don't duplicate Qdisplay definition done elsewhere.
Dave Love <fx@gnu.org>
parents:
26526
diff
changeset
|
217 extern Lisp_Object Qdisplay; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
218 Lisp_Object Qscroll_bar_foreground, Qscroll_bar_background; |
28787 | 219 Lisp_Object Qscreen_gamma, Qline_spacing, Qcenter; |
35402
302fbe91e359
(Qcancel_timer): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
35360
diff
changeset
|
220 Lisp_Object Qcompound_text, Qcancel_timer; |
38183
3ef7b5a020b2
(Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37946
diff
changeset
|
221 Lisp_Object Qwait_for_wm; |
42721
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
222 Lisp_Object Qfullscreen; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
223 Lisp_Object Qfullwidth; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
224 Lisp_Object Qfullheight; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
225 Lisp_Object Qfullboth; |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
226 |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
227 /* The below are defined in frame.c. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
228 |
1874
19cf50641d6c
* frame.c (Fframe_parameters): Report the `minibuffer' parameter of
Jim Blandy <jimb@redhat.com>
parents:
1821
diff
changeset
|
229 extern Lisp_Object Qheight, Qminibuffer, Qname, Qonly, Qwidth; |
14381 | 230 extern Lisp_Object Qunsplittable, Qmenu_bar_lines, Qbuffer_predicate, Qtitle; |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25528
diff
changeset
|
231 extern Lisp_Object Qtool_bar_lines; |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
232 |
389 | 233 extern Lisp_Object Vwindow_system_version; |
234 | |
18631
62bcc6aff013
(x_set_font): Funcall Qface_set_after_frame_default.
Richard M. Stallman <rms@gnu.org>
parents:
18612
diff
changeset
|
235 Lisp_Object Qface_set_after_frame_default; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
236 |
34895
53e52b3525bf
Use #if GLYPH_DEBUG instead of #ifdef GLYPH_DEBUG.
Gerd Moellmann <gerd@gnu.org>
parents:
34662
diff
changeset
|
237 #if GLYPH_DEBUG |
34524
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
238 int image_cache_refcount, dpyinfo_refcount; |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
239 #endif |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
240 |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
241 |
389 | 242 |
2999
33c820044087
(check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2964
diff
changeset
|
243 /* Error if we are not connected to X. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
244 |
5948 | 245 void |
2999
33c820044087
(check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2964
diff
changeset
|
246 check_x () |
33c820044087
(check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2964
diff
changeset
|
247 { |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
248 if (! x_in_use) |
2999
33c820044087
(check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2964
diff
changeset
|
249 error ("X windows are not in use or not initialized"); |
33c820044087
(check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2964
diff
changeset
|
250 } |
33c820044087
(check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2964
diff
changeset
|
251 |
13867
19a05b5a597d
(check_x_display_info, check_x_frame, x_set_font)
Richard M. Stallman <rms@gnu.org>
parents:
13781
diff
changeset
|
252 /* Nonzero if we can use mouse menus. |
19a05b5a597d
(check_x_display_info, check_x_frame, x_set_font)
Richard M. Stallman <rms@gnu.org>
parents:
13781
diff
changeset
|
253 You should not call this unless HAVE_MENUS is defined. */ |
7791
2b4e4a76468b
(using_x_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7683
diff
changeset
|
254 |
2b4e4a76468b
(using_x_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7683
diff
changeset
|
255 int |
13867
19a05b5a597d
(check_x_display_info, check_x_frame, x_set_font)
Richard M. Stallman <rms@gnu.org>
parents:
13781
diff
changeset
|
256 have_menus_p () |
7791
2b4e4a76468b
(using_x_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7683
diff
changeset
|
257 { |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
258 return x_in_use; |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
259 } |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
260 |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
261 /* Extract a frame as a FRAME_PTR, defaulting to the selected frame |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
262 and checking validity for X. */ |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
263 |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
264 FRAME_PTR |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
265 check_x_frame (frame) |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
266 Lisp_Object frame; |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
267 { |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
268 FRAME_PTR f; |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
269 |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
270 if (NILP (frame)) |
25679
8b09c5927f1c
(QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
271 frame = selected_frame; |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
272 CHECK_LIVE_FRAME (frame); |
25679
8b09c5927f1c
(QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
273 f = XFRAME (frame); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
274 if (! FRAME_X_P (f)) |
13867
19a05b5a597d
(check_x_display_info, check_x_frame, x_set_font)
Richard M. Stallman <rms@gnu.org>
parents:
13781
diff
changeset
|
275 error ("Non-X frame used"); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
276 return f; |
7791
2b4e4a76468b
(using_x_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7683
diff
changeset
|
277 } |
2b4e4a76468b
(using_x_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7683
diff
changeset
|
278 |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
279 /* Let the user specify an X display with a frame. |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
280 nil stands for the selected frame--or, if that is not an X frame, |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
281 the first X display on the list. */ |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
282 |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
283 static struct x_display_info * |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
284 check_x_display_info (frame) |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
285 Lisp_Object frame; |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
286 { |
31543
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
287 struct x_display_info *dpyinfo = NULL; |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
288 |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
289 if (NILP (frame)) |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
290 { |
25679
8b09c5927f1c
(QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
291 struct frame *sf = XFRAME (selected_frame); |
8b09c5927f1c
(QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
292 |
8b09c5927f1c
(QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
293 if (FRAME_X_P (sf) && FRAME_LIVE_P (sf)) |
31543
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
294 dpyinfo = FRAME_X_DISPLAY_INFO (sf); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
295 else if (x_display_list != 0) |
31543
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
296 dpyinfo = x_display_list; |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
297 else |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
298 error ("X windows are not in use or not initialized"); |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
299 } |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
300 else if (STRINGP (frame)) |
31543
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
301 dpyinfo = x_display_info_for_name (frame); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
302 else |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
303 { |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
304 FRAME_PTR f; |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
305 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
306 CHECK_LIVE_FRAME (frame); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
307 f = XFRAME (frame); |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
308 if (! FRAME_X_P (f)) |
13867
19a05b5a597d
(check_x_display_info, check_x_frame, x_set_font)
Richard M. Stallman <rms@gnu.org>
parents:
13781
diff
changeset
|
309 error ("Non-X frame used"); |
31543
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
310 dpyinfo = FRAME_X_DISPLAY_INFO (f); |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
311 } |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
312 |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
313 return dpyinfo; |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
314 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
315 |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
316 |
771 | 317 /* Return the Emacs frame-object corresponding to an X window. |
318 It could be the frame's main window or an icon window. */ | |
319 | |
9948
982820033564
(x_window_to_frame, x_any_window_to_frame, x_top_window_to_frame): Use the new
Karl Heuer <kwzh@gnu.org>
parents:
9813
diff
changeset
|
320 /* This function can be called during GC, so use GC_xxx type test macros. */ |
2964
a0ff2bc5dd05
(x_window_to_frame): Use XGCTYPE.
Richard M. Stallman <rms@gnu.org>
parents:
2936
diff
changeset
|
321 |
771 | 322 struct frame * |
11197
1bdc265aab86
(x_window_to_frame): New arg DPYINFO. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
11060
diff
changeset
|
323 x_window_to_frame (dpyinfo, wdesc) |
1bdc265aab86
(x_window_to_frame): New arg DPYINFO. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
11060
diff
changeset
|
324 struct x_display_info *dpyinfo; |
389 | 325 int wdesc; |
326 { | |
771 | 327 Lisp_Object tail, frame; |
328 struct frame *f; | |
329 | |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
330 for (tail = Vframe_list; GC_CONSP (tail); tail = XCDR (tail)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
331 { |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
332 frame = XCAR (tail); |
9948
982820033564
(x_window_to_frame, x_any_window_to_frame, x_top_window_to_frame): Use the new
Karl Heuer <kwzh@gnu.org>
parents:
9813
diff
changeset
|
333 if (!GC_FRAMEP (frame)) |
389 | 334 continue; |
771 | 335 f = XFRAME (frame); |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26571
diff
changeset
|
336 if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo) |
11197
1bdc265aab86
(x_window_to_frame): New arg DPYINFO. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
11060
diff
changeset
|
337 continue; |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
338 if (f->output_data.x->hourglass_window == wdesc) |
27798
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
339 return f; |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
340 #ifdef USE_X_TOOLKIT |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
341 if ((f->output_data.x->edit_widget |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
342 && XtWindow (f->output_data.x->edit_widget) == wdesc) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
343 /* A tooltip frame? */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
344 || (!f->output_data.x->edit_widget |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
345 && FRAME_X_WINDOW (f) == wdesc) |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
346 || f->output_data.x->icon_desc == wdesc) |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
347 return f; |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
348 #else /* not USE_X_TOOLKIT */ |
1050
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
349 if (FRAME_X_WINDOW (f) == wdesc |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
350 || f->output_data.x->icon_desc == wdesc) |
771 | 351 return f; |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
352 #endif /* not USE_X_TOOLKIT */ |
389 | 353 } |
354 return 0; | |
355 } | |
356 | |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
357 #ifdef USE_X_TOOLKIT |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
358 /* Like x_window_to_frame but also compares the window with the widget's |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
359 windows. */ |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
360 |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
361 struct frame * |
11197
1bdc265aab86
(x_window_to_frame): New arg DPYINFO. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
11060
diff
changeset
|
362 x_any_window_to_frame (dpyinfo, wdesc) |
1bdc265aab86
(x_window_to_frame): New arg DPYINFO. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
11060
diff
changeset
|
363 struct x_display_info *dpyinfo; |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
364 int wdesc; |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
365 { |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
366 Lisp_Object tail, frame; |
27798
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
367 struct frame *f, *found; |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
368 struct x_output *x; |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
369 |
27798
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
370 found = NULL; |
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
371 for (tail = Vframe_list; GC_CONSP (tail) && !found; tail = XCDR (tail)) |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
372 { |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
373 frame = XCAR (tail); |
9948
982820033564
(x_window_to_frame, x_any_window_to_frame, x_top_window_to_frame): Use the new
Karl Heuer <kwzh@gnu.org>
parents:
9813
diff
changeset
|
374 if (!GC_FRAMEP (frame)) |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
375 continue; |
27798
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
376 |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
377 f = XFRAME (frame); |
27798
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
378 if (FRAME_X_P (f) && FRAME_X_DISPLAY_INFO (f) == dpyinfo) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
379 { |
27798
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
380 /* This frame matches if the window is any of its widgets. */ |
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
381 x = f->output_data.x; |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
382 if (x->hourglass_window == wdesc) |
27798
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
383 found = f; |
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
384 else if (x->widget) |
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
385 { |
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
386 if (wdesc == XtWindow (x->widget) |
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
387 || wdesc == XtWindow (x->column_widget) |
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
388 || wdesc == XtWindow (x->edit_widget)) |
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
389 found = f; |
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
390 /* Match if the window is this frame's menubar. */ |
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
391 else if (lw_window_is_in_menubar (wdesc, x->menubar_widget)) |
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
392 found = f; |
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
393 } |
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
394 else if (FRAME_X_WINDOW (f) == wdesc) |
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
395 /* A tooltip frame. */ |
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
396 found = f; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
397 } |
27798
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
398 } |
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
399 |
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
400 return found; |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
401 } |
7040
cd4dd38925f9
(x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents:
6940
diff
changeset
|
402 |
11611
bf53e9945a3c
(x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
11537
diff
changeset
|
403 /* Likewise, but exclude the menu bar widget. */ |
bf53e9945a3c
(x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
11537
diff
changeset
|
404 |
bf53e9945a3c
(x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
11537
diff
changeset
|
405 struct frame * |
bf53e9945a3c
(x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
11537
diff
changeset
|
406 x_non_menubar_window_to_frame (dpyinfo, wdesc) |
bf53e9945a3c
(x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
11537
diff
changeset
|
407 struct x_display_info *dpyinfo; |
bf53e9945a3c
(x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
11537
diff
changeset
|
408 int wdesc; |
bf53e9945a3c
(x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
11537
diff
changeset
|
409 { |
bf53e9945a3c
(x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
11537
diff
changeset
|
410 Lisp_Object tail, frame; |
bf53e9945a3c
(x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
11537
diff
changeset
|
411 struct frame *f; |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
412 struct x_output *x; |
11611
bf53e9945a3c
(x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
11537
diff
changeset
|
413 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
414 for (tail = Vframe_list; GC_CONSP (tail); tail = XCDR (tail)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
415 { |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
416 frame = XCAR (tail); |
11611
bf53e9945a3c
(x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
11537
diff
changeset
|
417 if (!GC_FRAMEP (frame)) |
bf53e9945a3c
(x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
11537
diff
changeset
|
418 continue; |
bf53e9945a3c
(x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
11537
diff
changeset
|
419 f = XFRAME (frame); |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26571
diff
changeset
|
420 if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo) |
11611
bf53e9945a3c
(x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
11537
diff
changeset
|
421 continue; |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
422 x = f->output_data.x; |
11611
bf53e9945a3c
(x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
11537
diff
changeset
|
423 /* This frame matches if the window is any of its widgets. */ |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
424 if (x->hourglass_window == wdesc) |
27798
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
425 return f; |
d00730392332
(x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents:
27659
diff
changeset
|
426 else if (x->widget) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
427 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
428 if (wdesc == XtWindow (x->widget) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
429 || wdesc == XtWindow (x->column_widget) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
430 || wdesc == XtWindow (x->edit_widget)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
431 return f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
432 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
433 else if (FRAME_X_WINDOW (f) == wdesc) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
434 /* A tooltip frame. */ |
11611
bf53e9945a3c
(x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
11537
diff
changeset
|
435 return f; |
bf53e9945a3c
(x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
11537
diff
changeset
|
436 } |
bf53e9945a3c
(x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
11537
diff
changeset
|
437 return 0; |
bf53e9945a3c
(x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
11537
diff
changeset
|
438 } |
bf53e9945a3c
(x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
11537
diff
changeset
|
439 |
12656
5beb1d2be5c1
(x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12616
diff
changeset
|
440 /* Likewise, but consider only the menu bar widget. */ |
5beb1d2be5c1
(x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12616
diff
changeset
|
441 |
5beb1d2be5c1
(x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12616
diff
changeset
|
442 struct frame * |
5beb1d2be5c1
(x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12616
diff
changeset
|
443 x_menubar_window_to_frame (dpyinfo, wdesc) |
5beb1d2be5c1
(x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12616
diff
changeset
|
444 struct x_display_info *dpyinfo; |
5beb1d2be5c1
(x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12616
diff
changeset
|
445 int wdesc; |
5beb1d2be5c1
(x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12616
diff
changeset
|
446 { |
5beb1d2be5c1
(x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12616
diff
changeset
|
447 Lisp_Object tail, frame; |
5beb1d2be5c1
(x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12616
diff
changeset
|
448 struct frame *f; |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
449 struct x_output *x; |
12656
5beb1d2be5c1
(x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12616
diff
changeset
|
450 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
451 for (tail = Vframe_list; GC_CONSP (tail); tail = XCDR (tail)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
452 { |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
453 frame = XCAR (tail); |
12656
5beb1d2be5c1
(x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12616
diff
changeset
|
454 if (!GC_FRAMEP (frame)) |
5beb1d2be5c1
(x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12616
diff
changeset
|
455 continue; |
5beb1d2be5c1
(x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12616
diff
changeset
|
456 f = XFRAME (frame); |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26571
diff
changeset
|
457 if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo) |
12656
5beb1d2be5c1
(x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12616
diff
changeset
|
458 continue; |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
459 x = f->output_data.x; |
12656
5beb1d2be5c1
(x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12616
diff
changeset
|
460 /* Match if the window is this frame's menubar. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
461 if (x->menubar_widget |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
462 && lw_window_is_in_menubar (wdesc, x->menubar_widget)) |
12656
5beb1d2be5c1
(x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12616
diff
changeset
|
463 return f; |
5beb1d2be5c1
(x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12616
diff
changeset
|
464 } |
5beb1d2be5c1
(x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12616
diff
changeset
|
465 return 0; |
5beb1d2be5c1
(x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12616
diff
changeset
|
466 } |
5beb1d2be5c1
(x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12616
diff
changeset
|
467 |
7040
cd4dd38925f9
(x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents:
6940
diff
changeset
|
468 /* Return the frame whose principal (outermost) window is WDESC. |
cd4dd38925f9
(x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents:
6940
diff
changeset
|
469 If WDESC is some other (smaller) window, we return 0. */ |
cd4dd38925f9
(x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents:
6940
diff
changeset
|
470 |
cd4dd38925f9
(x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents:
6940
diff
changeset
|
471 struct frame * |
11197
1bdc265aab86
(x_window_to_frame): New arg DPYINFO. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
11060
diff
changeset
|
472 x_top_window_to_frame (dpyinfo, wdesc) |
1bdc265aab86
(x_window_to_frame): New arg DPYINFO. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
11060
diff
changeset
|
473 struct x_display_info *dpyinfo; |
7040
cd4dd38925f9
(x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents:
6940
diff
changeset
|
474 int wdesc; |
cd4dd38925f9
(x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents:
6940
diff
changeset
|
475 { |
cd4dd38925f9
(x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents:
6940
diff
changeset
|
476 Lisp_Object tail, frame; |
cd4dd38925f9
(x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents:
6940
diff
changeset
|
477 struct frame *f; |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
478 struct x_output *x; |
7040
cd4dd38925f9
(x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents:
6940
diff
changeset
|
479 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
480 for (tail = Vframe_list; GC_CONSP (tail); tail = XCDR (tail)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
481 { |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
482 frame = XCAR (tail); |
9948
982820033564
(x_window_to_frame, x_any_window_to_frame, x_top_window_to_frame): Use the new
Karl Heuer <kwzh@gnu.org>
parents:
9813
diff
changeset
|
483 if (!GC_FRAMEP (frame)) |
7040
cd4dd38925f9
(x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents:
6940
diff
changeset
|
484 continue; |
cd4dd38925f9
(x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents:
6940
diff
changeset
|
485 f = XFRAME (frame); |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26571
diff
changeset
|
486 if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo) |
11197
1bdc265aab86
(x_window_to_frame): New arg DPYINFO. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
11060
diff
changeset
|
487 continue; |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
488 x = f->output_data.x; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
489 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
490 if (x->widget) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
491 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
492 /* This frame matches if the window is its topmost widget. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
493 if (wdesc == XtWindow (x->widget)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
494 return f; |
12019
63ee64941021
(x_top_window_to_frame): Don't match menu-bar widget.
Karl Heuer <kwzh@gnu.org>
parents:
12011
diff
changeset
|
495 #if 0 /* I don't know why it did this, |
63ee64941021
(x_top_window_to_frame): Don't match menu-bar widget.
Karl Heuer <kwzh@gnu.org>
parents:
12011
diff
changeset
|
496 but it seems logically wrong, |
63ee64941021
(x_top_window_to_frame): Don't match menu-bar widget.
Karl Heuer <kwzh@gnu.org>
parents:
12011
diff
changeset
|
497 and it causes trouble for MapNotify events. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
498 /* Match if the window is this frame's menubar. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
499 if (x->menubar_widget |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
500 && wdesc == XtWindow (x->menubar_widget)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
501 return f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
502 #endif |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
503 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
504 else if (FRAME_X_WINDOW (f) == wdesc) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
505 /* Tooltip frame. */ |
7040
cd4dd38925f9
(x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents:
6940
diff
changeset
|
506 return f; |
cd4dd38925f9
(x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents:
6940
diff
changeset
|
507 } |
cd4dd38925f9
(x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents:
6940
diff
changeset
|
508 return 0; |
cd4dd38925f9
(x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents:
6940
diff
changeset
|
509 } |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
510 #endif /* USE_X_TOOLKIT */ |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
511 |
389 | 512 |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
513 |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
514 /* Code to deal with bitmaps. Bitmaps are referenced by their bitmap |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
515 id, which is just an int that this section returns. Bitmaps are |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
516 reference counted so they can be shared among frames. |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
517 |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
518 Bitmap indices are guaranteed to be > 0, so a negative number can |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
519 be used to indicate no bitmap. |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
520 |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
521 If you use x_create_bitmap_from_data, then you must keep track of |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
522 the bitmaps yourself. That is, creating a bitmap from the same |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
523 data more than once will not be caught. */ |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
524 |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
525 |
9563 | 526 /* Functions to access the contents of a bitmap, given an id. */ |
527 | |
528 int | |
529 x_bitmap_height (f, id) | |
530 FRAME_PTR f; | |
531 int id; | |
532 { | |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
533 return FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].height; |
9563 | 534 } |
535 | |
536 int | |
537 x_bitmap_width (f, id) | |
538 FRAME_PTR f; | |
539 int id; | |
540 { | |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
541 return FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].width; |
9563 | 542 } |
543 | |
544 int | |
545 x_bitmap_pixmap (f, id) | |
546 FRAME_PTR f; | |
547 int id; | |
548 { | |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
549 return FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].pixmap; |
9563 | 550 } |
551 | |
552 | |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
553 /* Allocate a new bitmap record. Returns index of new record. */ |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
554 |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
555 static int |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
556 x_allocate_bitmap_record (f) |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
557 FRAME_PTR f; |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
558 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
559 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
560 int i; |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
561 |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
562 if (dpyinfo->bitmaps == NULL) |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
563 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
564 dpyinfo->bitmaps_size = 10; |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
565 dpyinfo->bitmaps |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
566 = (struct x_bitmap_record *) xmalloc (dpyinfo->bitmaps_size * sizeof (struct x_bitmap_record)); |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
567 dpyinfo->bitmaps_last = 1; |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
568 return 1; |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
569 } |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
570 |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
571 if (dpyinfo->bitmaps_last < dpyinfo->bitmaps_size) |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
572 return ++dpyinfo->bitmaps_last; |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
573 |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
574 for (i = 0; i < dpyinfo->bitmaps_size; ++i) |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
575 if (dpyinfo->bitmaps[i].refcount == 0) |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
576 return i + 1; |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
577 |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
578 dpyinfo->bitmaps_size *= 2; |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
579 dpyinfo->bitmaps |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
580 = (struct x_bitmap_record *) xrealloc (dpyinfo->bitmaps, |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
581 dpyinfo->bitmaps_size * sizeof (struct x_bitmap_record)); |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
582 return ++dpyinfo->bitmaps_last; |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
583 } |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
584 |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
585 /* Add one reference to the reference count of the bitmap with id ID. */ |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
586 |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
587 void |
9563 | 588 x_reference_bitmap (f, id) |
589 FRAME_PTR f; | |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
590 int id; |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
591 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
592 ++FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].refcount; |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
593 } |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
594 |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
595 /* Create a bitmap for frame F from a HEIGHT x WIDTH array of bits at BITS. */ |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
596 |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
597 int |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
598 x_create_bitmap_from_data (f, bits, width, height) |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
599 struct frame *f; |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
600 char *bits; |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
601 unsigned int width, height; |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
602 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
603 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
604 Pixmap bitmap; |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
605 int id; |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
606 |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
607 bitmap = XCreateBitmapFromData (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
608 bits, width, height); |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
609 |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
610 if (! bitmap) |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
611 return -1; |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
612 |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
613 id = x_allocate_bitmap_record (f); |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
614 dpyinfo->bitmaps[id - 1].pixmap = bitmap; |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
615 dpyinfo->bitmaps[id - 1].file = NULL; |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
616 dpyinfo->bitmaps[id - 1].refcount = 1; |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
617 dpyinfo->bitmaps[id - 1].depth = 1; |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
618 dpyinfo->bitmaps[id - 1].height = height; |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
619 dpyinfo->bitmaps[id - 1].width = width; |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
620 |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
621 return id; |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
622 } |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
623 |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
624 /* Create bitmap from file FILE for frame F. */ |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
625 |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
626 int |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
627 x_create_bitmap_from_file (f, file) |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
628 struct frame *f; |
9563 | 629 Lisp_Object file; |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
630 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
631 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
632 unsigned int width, height; |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
633 Pixmap bitmap; |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
634 int xhot, yhot, result, id; |
9563 | 635 Lisp_Object found; |
636 int fd; | |
637 char *filename; | |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
638 |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
639 /* Look for an existing bitmap with the same name. */ |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
640 for (id = 0; id < dpyinfo->bitmaps_last; ++id) |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
641 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
642 if (dpyinfo->bitmaps[id].refcount |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
643 && dpyinfo->bitmaps[id].file |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
644 && !strcmp (dpyinfo->bitmaps[id].file, (char *) XSTRING (file)->data)) |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
645 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
646 ++dpyinfo->bitmaps[id].refcount; |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
647 return id + 1; |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
648 } |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
649 } |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
650 |
9563 | 651 /* Search bitmap-file-path for the file, if appropriate. */ |
39812
66e0816837a8
Update calls to openp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
652 fd = openp (Vx_bitmap_file_path, file, Qnil, &found, 0); |
9563 | 653 if (fd < 0) |
654 return -1; | |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26032
diff
changeset
|
655 emacs_close (fd); |
9563 | 656 |
657 filename = (char *) XSTRING (found)->data; | |
658 | |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
659 result = XReadBitmapFile (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
9563 | 660 filename, &width, &height, &bitmap, &xhot, &yhot); |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
661 if (result != BitmapSuccess) |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
662 return -1; |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
663 |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
664 id = x_allocate_bitmap_record (f); |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
665 dpyinfo->bitmaps[id - 1].pixmap = bitmap; |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
666 dpyinfo->bitmaps[id - 1].refcount = 1; |
20629
69d52f3bdb46
(x_create_bitmap_from_file): Use size_byte on strings.
Richard M. Stallman <rms@gnu.org>
parents:
19825
diff
changeset
|
667 dpyinfo->bitmaps[id - 1].file |
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
20629
diff
changeset
|
668 = (char *) xmalloc (STRING_BYTES (XSTRING (file)) + 1); |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
669 dpyinfo->bitmaps[id - 1].depth = 1; |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
670 dpyinfo->bitmaps[id - 1].height = height; |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
671 dpyinfo->bitmaps[id - 1].width = width; |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
672 strcpy (dpyinfo->bitmaps[id - 1].file, XSTRING (file)->data); |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
673 |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
674 return id; |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
675 } |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
676 |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
677 /* Remove reference to bitmap with id number ID. */ |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
678 |
21536
468585662fa8
(x_destroy_bitmap): Declare as void, not int.
Karl Heuer <kwzh@gnu.org>
parents:
21267
diff
changeset
|
679 void |
9563 | 680 x_destroy_bitmap (f, id) |
681 FRAME_PTR f; | |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
682 int id; |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
683 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
684 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
685 |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
686 if (id > 0) |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
687 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
688 --dpyinfo->bitmaps[id - 1].refcount; |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
689 if (dpyinfo->bitmaps[id - 1].refcount == 0) |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
690 { |
12051
f193ce9efe24
(x_destroy_bitmap): Block and unblock input.
Karl Heuer <kwzh@gnu.org>
parents:
12046
diff
changeset
|
691 BLOCK_INPUT; |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
692 XFreePixmap (FRAME_X_DISPLAY (f), dpyinfo->bitmaps[id - 1].pixmap); |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
693 if (dpyinfo->bitmaps[id - 1].file) |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
694 { |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
695 xfree (dpyinfo->bitmaps[id - 1].file); |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
696 dpyinfo->bitmaps[id - 1].file = NULL; |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
697 } |
12051
f193ce9efe24
(x_destroy_bitmap): Block and unblock input.
Karl Heuer <kwzh@gnu.org>
parents:
12046
diff
changeset
|
698 UNBLOCK_INPUT; |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
699 } |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
700 } |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
701 } |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
702 |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
703 /* Free all the bitmaps for the display specified by DPYINFO. */ |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
704 |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
705 static void |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
706 x_destroy_all_bitmaps (dpyinfo) |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
707 struct x_display_info *dpyinfo; |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
708 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
709 int i; |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
710 for (i = 0; i < dpyinfo->bitmaps_last; i++) |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
711 if (dpyinfo->bitmaps[i].refcount > 0) |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
712 { |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
713 XFreePixmap (dpyinfo->display, dpyinfo->bitmaps[i].pixmap); |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
714 if (dpyinfo->bitmaps[i].file) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
715 xfree (dpyinfo->bitmaps[i].file); |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
716 } |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
717 dpyinfo->bitmaps_last = 0; |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
718 } |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
719 |
771 | 720 /* Connect the frame-parameter names for X frames |
389 | 721 to the ways of passing the parameter values to the window system. |
722 | |
723 The name of a parameter, as a Lisp symbol, | |
771 | 724 has an `x-frame-parameter' property which is an integer in Lisp |
14439
201ccc109ce7
(x_frame_parms): Alphabetize.
Richard M. Stallman <rms@gnu.org>
parents:
14381
diff
changeset
|
725 that is an index in this table. */ |
389 | 726 |
771 | 727 struct x_frame_parm_table |
389 | 728 { |
729 char *name; | |
25528
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
730 void (*setter) P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
389 | 731 }; |
732 | |
34524
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
733 static Lisp_Object unwind_create_frame P_ ((Lisp_Object)); |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
734 static Lisp_Object unwind_create_tip_frame P_ ((Lisp_Object)); |
31930
9c779861abff
(x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents:
31902
diff
changeset
|
735 static void x_change_window_heights P_ ((Lisp_Object, int)); |
31651
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
736 static void x_disable_image P_ ((struct frame *, struct image *)); |
25528
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
737 void x_set_foreground_color P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
28690
01a3287bb747
(x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28597
diff
changeset
|
738 static void x_set_line_spacing P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
38183
3ef7b5a020b2
(Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37946
diff
changeset
|
739 static void x_set_wait_for_wm P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
42721
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
740 static void x_set_fullscreen P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
25528
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
741 void x_set_background_color P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
742 void x_set_mouse_color P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
743 void x_set_cursor_color P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
744 void x_set_border_color P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
745 void x_set_cursor_type P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
746 void x_set_icon_type P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
747 void x_set_icon_name P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
41722
fd499c5c75d2
(x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents:
41449
diff
changeset
|
748 static void x_set_fringe_width P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
25528
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
749 void x_set_font P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
750 void x_set_border_width P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
751 void x_set_internal_border_width P_ ((struct frame *, Lisp_Object, |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
752 Lisp_Object)); |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
753 void x_explicitly_set_name P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
754 void x_set_autoraise P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
755 void x_set_autolower P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
756 void x_set_vertical_scroll_bars P_ ((struct frame *, Lisp_Object, |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
757 Lisp_Object)); |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
758 void x_set_visibility P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
759 void x_set_menu_bar_lines P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
760 void x_set_scroll_bar_width P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
761 void x_set_title P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
762 void x_set_unsplittable P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25528
diff
changeset
|
763 void x_set_tool_bar_lines P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
764 void x_set_scroll_bar_foreground P_ ((struct frame *, Lisp_Object, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
765 Lisp_Object)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
766 void x_set_scroll_bar_background P_ ((struct frame *, Lisp_Object, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
767 Lisp_Object)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
768 static Lisp_Object x_default_scroll_bar_color_parameter P_ ((struct frame *, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
769 Lisp_Object, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
770 Lisp_Object, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
771 char *, char *, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
772 int)); |
25528
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
773 static void x_set_screen_gamma P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
774 static void x_edge_detection P_ ((struct frame *, struct image *, Lisp_Object, |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
775 Lisp_Object)); |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
776 static void init_color_table P_ ((void)); |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
777 static void free_color_table P_ ((void)); |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
778 static unsigned long *colors_in_color_table P_ ((int *n)); |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
779 static unsigned long lookup_rgb_color P_ ((struct frame *f, int r, int g, int b)); |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
780 static unsigned long lookup_pixel_color P_ ((struct frame *f, unsigned long p)); |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
781 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
782 |
389 | 783 |
771 | 784 static struct x_frame_parm_table x_frame_parms[] = |
389 | 785 { |
42123
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
786 {"auto-raise", x_set_autoraise}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
787 {"auto-lower", x_set_autolower}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
788 {"background-color", x_set_background_color}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
789 {"border-color", x_set_border_color}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
790 {"border-width", x_set_border_width}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
791 {"cursor-color", x_set_cursor_color}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
792 {"cursor-type", x_set_cursor_type}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
793 {"font", x_set_font}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
794 {"foreground-color", x_set_foreground_color}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
795 {"icon-name", x_set_icon_name}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
796 {"icon-type", x_set_icon_type}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
797 {"internal-border-width", x_set_internal_border_width}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
798 {"menu-bar-lines", x_set_menu_bar_lines}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
799 {"mouse-color", x_set_mouse_color}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
800 {"name", x_explicitly_set_name}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
801 {"scroll-bar-width", x_set_scroll_bar_width}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
802 {"title", x_set_title}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
803 {"unsplittable", x_set_unsplittable}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
804 {"vertical-scroll-bars", x_set_vertical_scroll_bars}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
805 {"visibility", x_set_visibility}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
806 {"tool-bar-lines", x_set_tool_bar_lines}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
807 {"scroll-bar-foreground", x_set_scroll_bar_foreground}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
808 {"scroll-bar-background", x_set_scroll_bar_background}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
809 {"screen-gamma", x_set_screen_gamma}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
810 {"line-spacing", x_set_line_spacing}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
811 {"left-fringe", x_set_fringe_width}, |
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
812 {"right-fringe", x_set_fringe_width}, |
42721
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
813 {"wait-for-wm", x_set_wait_for_wm}, |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
814 {"fullscreen", x_set_fullscreen}, |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
815 |
389 | 816 }; |
817 | |
771 | 818 /* Attach the `x-frame-parameter' properties to |
389 | 819 the Lisp symbol names of parameters relevant to X. */ |
820 | |
21846 | 821 void |
389 | 822 init_x_parm_symbols () |
823 { | |
824 int i; | |
825 | |
2136
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
826 for (i = 0; i < sizeof (x_frame_parms) / sizeof (x_frame_parms[0]); i++) |
771 | 827 Fput (intern (x_frame_parms[i].name), Qx_frame_parameter, |
389 | 828 make_number (i)); |
829 } | |
830 | |
42721
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
831 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
832 /* Really try to move where we want to be in case of fullscreen. Some WMs |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
833 moves the window where we tell them. Some (mwm, twm) moves the outer |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
834 window manager window there instead. |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
835 Try to compensate for those WM here. */ |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
836 static void |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
837 x_fullscreen_move (f, new_top, new_left) |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
838 struct frame *f; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
839 int new_top; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
840 int new_left; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
841 { |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
842 if (new_top != f->output_data.x->top_pos |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
843 || new_left != f->output_data.x->left_pos) |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
844 { |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
845 int move_x = new_left + f->output_data.x->x_pixels_outer_diff; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
846 int move_y = new_top + f->output_data.x->y_pixels_outer_diff; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
847 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
848 f->output_data.x->want_fullscreen |= FULLSCREEN_MOVE_WAIT; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
849 x_set_offset (f, move_x, move_y, 1); |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
850 } |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
851 } |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
852 |
19095
2f58824bf3f6
(x_set_frame_parameters): Heading comment fixed.
Kenichi Handa <handa@m17n.org>
parents:
19026
diff
changeset
|
853 /* Change the parameters of frame F as specified by ALIST. |
29617
14aa31254532
(x_set_frame_parameters): Comment fix.
Gerd Moellmann <gerd@gnu.org>
parents:
29434
diff
changeset
|
854 If a parameter is not specially recognized, do nothing special; |
14aa31254532
(x_set_frame_parameters): Comment fix.
Gerd Moellmann <gerd@gnu.org>
parents:
29434
diff
changeset
|
855 otherwise call the `x_set_...' function for that parameter. |
14aa31254532
(x_set_frame_parameters): Comment fix.
Gerd Moellmann <gerd@gnu.org>
parents:
29434
diff
changeset
|
856 Except for certain geometry properties, always call store_frame_param |
14aa31254532
(x_set_frame_parameters): Comment fix.
Gerd Moellmann <gerd@gnu.org>
parents:
29434
diff
changeset
|
857 to store the new value in the parameter alist. */ |
2136
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
858 |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
859 void |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
860 x_set_frame_parameters (f, alist) |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
861 FRAME_PTR f; |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
862 Lisp_Object alist; |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
863 { |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
864 Lisp_Object tail; |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
865 |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
866 /* If both of these parameters are present, it's more efficient to |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
867 set them both at once. So we wait until we've looked at the |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
868 entire list before we set them. */ |
16156
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
869 int width, height; |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
870 |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
871 /* Same here. */ |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
872 Lisp_Object left, top; |
3203
1055aa1b7547
* xfns.c (x_set_frame_parameters): Use the first
Jim Blandy <jimb@redhat.com>
parents:
3173
diff
changeset
|
873 |
10222
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
874 /* Same with these. */ |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
875 Lisp_Object icon_left, icon_top; |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
876 |
3447
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
877 /* Record in these vectors all the parms specified. */ |
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
878 Lisp_Object *parms; |
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
879 Lisp_Object *values; |
25289
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25200
diff
changeset
|
880 int i, p; |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
881 int left_no_change = 0, top_no_change = 0; |
10222
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
882 int icon_left_no_change = 0, icon_top_no_change = 0; |
42883
57c5f7f05f4c
xfns.c (x_set_frame_parameters): Just call x_fullscreen_adjust
Jan Djärv <jan.h.d@swipnet.se>
parents:
42721
diff
changeset
|
883 int fullscreen_is_being_set = 0; |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
884 |
24170
3689490f7f65
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
23793
diff
changeset
|
885 struct gcpro gcpro1, gcpro2; |
3689490f7f65
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
23793
diff
changeset
|
886 |
3447
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
887 i = 0; |
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
888 for (tail = alist; CONSP (tail); tail = Fcdr (tail)) |
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
889 i++; |
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
890 |
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
891 parms = (Lisp_Object *) alloca (i * sizeof (Lisp_Object)); |
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
892 values = (Lisp_Object *) alloca (i * sizeof (Lisp_Object)); |
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
893 |
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
894 /* Extract parm names and values into those vectors. */ |
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
895 |
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
896 i = 0; |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
897 for (tail = alist; CONSP (tail); tail = Fcdr (tail)) |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
898 { |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
899 Lisp_Object elt; |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
900 |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
901 elt = Fcar (tail); |
3447
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
902 parms[i] = Fcar (elt); |
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
903 values[i] = Fcdr (elt); |
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
904 i++; |
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
905 } |
24170
3689490f7f65
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
23793
diff
changeset
|
906 /* TAIL and ALIST are not used again below here. */ |
3689490f7f65
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
23793
diff
changeset
|
907 alist = tail = Qnil; |
3689490f7f65
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
23793
diff
changeset
|
908 |
3689490f7f65
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
23793
diff
changeset
|
909 GCPRO2 (*parms, *values); |
3689490f7f65
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
23793
diff
changeset
|
910 gcpro1.nvars = i; |
3689490f7f65
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
23793
diff
changeset
|
911 gcpro2.nvars = i; |
3689490f7f65
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
23793
diff
changeset
|
912 |
3689490f7f65
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
23793
diff
changeset
|
913 /* There is no need to gcpro LEFT, TOP, ICON_LEFT, or ICON_TOP, |
3689490f7f65
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
23793
diff
changeset
|
914 because their values appear in VALUES and strings are not valid. */ |
16156
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
915 top = left = Qunbound; |
10222
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
916 icon_left = icon_top = Qunbound; |
3447
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
917 |
16156
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
918 /* Provide default values for HEIGHT and WIDTH. */ |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
919 if (FRAME_NEW_WIDTH (f)) |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
920 width = FRAME_NEW_WIDTH (f); |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
921 else |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
922 width = FRAME_WIDTH (f); |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
923 |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
924 if (FRAME_NEW_HEIGHT (f)) |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
925 height = FRAME_NEW_HEIGHT (f); |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
926 else |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
927 height = FRAME_HEIGHT (f); |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
928 |
25289
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25200
diff
changeset
|
929 /* Process foreground_color and background_color before anything else. |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25200
diff
changeset
|
930 They are independent of other properties, but other properties (e.g., |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25200
diff
changeset
|
931 cursor_color) are dependent upon them. */ |
41722
fd499c5c75d2
(x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents:
41449
diff
changeset
|
932 /* Process default font as well, since fringe widths depends on it. */ |
42721
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
933 /* Also, process fullscreen, width and height depend upon that */ |
25289
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25200
diff
changeset
|
934 for (p = 0; p < i; p++) |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25200
diff
changeset
|
935 { |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25200
diff
changeset
|
936 Lisp_Object prop, val; |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25200
diff
changeset
|
937 |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25200
diff
changeset
|
938 prop = parms[p]; |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25200
diff
changeset
|
939 val = values[p]; |
41722
fd499c5c75d2
(x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents:
41449
diff
changeset
|
940 if (EQ (prop, Qforeground_color) |
fd499c5c75d2
(x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents:
41449
diff
changeset
|
941 || EQ (prop, Qbackground_color) |
42721
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
942 || EQ (prop, Qfont) |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
943 || EQ (prop, Qfullscreen)) |
25289
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25200
diff
changeset
|
944 { |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25200
diff
changeset
|
945 register Lisp_Object param_index, old_value; |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25200
diff
changeset
|
946 |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25200
diff
changeset
|
947 old_value = get_frame_param (f, prop); |
42894
b9c592cee6ec
xfns.c (x_set_frame_parameters): Typo in previous fix corrected.
Jan Djärv <jan.h.d@swipnet.se>
parents:
42883
diff
changeset
|
948 fullscreen_is_being_set |= EQ (prop, Qfullscreen); |
40802
82e6baf4446f
(x_set_frame_parameters): Avoid infinite recursion.
Miles Bader <miles@gnu.org>
parents:
40715
diff
changeset
|
949 |
82e6baf4446f
(x_set_frame_parameters): Avoid infinite recursion.
Miles Bader <miles@gnu.org>
parents:
40715
diff
changeset
|
950 if (NILP (Fequal (val, old_value))) |
82e6baf4446f
(x_set_frame_parameters): Avoid infinite recursion.
Miles Bader <miles@gnu.org>
parents:
40715
diff
changeset
|
951 { |
82e6baf4446f
(x_set_frame_parameters): Avoid infinite recursion.
Miles Bader <miles@gnu.org>
parents:
40715
diff
changeset
|
952 store_frame_param (f, prop, val); |
82e6baf4446f
(x_set_frame_parameters): Avoid infinite recursion.
Miles Bader <miles@gnu.org>
parents:
40715
diff
changeset
|
953 |
82e6baf4446f
(x_set_frame_parameters): Avoid infinite recursion.
Miles Bader <miles@gnu.org>
parents:
40715
diff
changeset
|
954 param_index = Fget (prop, Qx_frame_parameter); |
82e6baf4446f
(x_set_frame_parameters): Avoid infinite recursion.
Miles Bader <miles@gnu.org>
parents:
40715
diff
changeset
|
955 if (NATNUMP (param_index) |
82e6baf4446f
(x_set_frame_parameters): Avoid infinite recursion.
Miles Bader <miles@gnu.org>
parents:
40715
diff
changeset
|
956 && (XFASTINT (param_index) |
82e6baf4446f
(x_set_frame_parameters): Avoid infinite recursion.
Miles Bader <miles@gnu.org>
parents:
40715
diff
changeset
|
957 < sizeof (x_frame_parms)/sizeof (x_frame_parms[0]))) |
82e6baf4446f
(x_set_frame_parameters): Avoid infinite recursion.
Miles Bader <miles@gnu.org>
parents:
40715
diff
changeset
|
958 (*x_frame_parms[XINT (param_index)].setter)(f, val, old_value); |
82e6baf4446f
(x_set_frame_parameters): Avoid infinite recursion.
Miles Bader <miles@gnu.org>
parents:
40715
diff
changeset
|
959 } |
25289
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25200
diff
changeset
|
960 } |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25200
diff
changeset
|
961 } |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25200
diff
changeset
|
962 |
3447
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
963 /* Now process them in reverse of specified order. */ |
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
964 for (i--; i >= 0; i--) |
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
965 { |
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
966 Lisp_Object prop, val; |
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
967 |
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
968 prop = parms[i]; |
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
969 val = values[i]; |
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
970 |
16156
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
971 if (EQ (prop, Qwidth) && NUMBERP (val)) |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
972 width = XFASTINT (val); |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
973 else if (EQ (prop, Qheight) && NUMBERP (val)) |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
974 height = XFASTINT (val); |
3447
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
975 else if (EQ (prop, Qtop)) |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
976 top = val; |
3447
ed2a17aac4cd
(x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents:
3446
diff
changeset
|
977 else if (EQ (prop, Qleft)) |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
978 left = val; |
10222
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
979 else if (EQ (prop, Qicon_top)) |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
980 icon_top = val; |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
981 else if (EQ (prop, Qicon_left)) |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
982 icon_left = val; |
41722
fd499c5c75d2
(x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents:
41449
diff
changeset
|
983 else if (EQ (prop, Qforeground_color) |
fd499c5c75d2
(x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents:
41449
diff
changeset
|
984 || EQ (prop, Qbackground_color) |
42721
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
985 || EQ (prop, Qfont) |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
986 || EQ (prop, Qfullscreen)) |
25289
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25200
diff
changeset
|
987 /* Processed above. */ |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25200
diff
changeset
|
988 continue; |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
989 else |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
990 { |
6519
22c56514eeb3
(x_set_frame_parameters, x_get_arg, x_window, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents:
6506
diff
changeset
|
991 register Lisp_Object param_index, old_value; |
22c56514eeb3
(x_set_frame_parameters, x_get_arg, x_window, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents:
6506
diff
changeset
|
992 |
22c56514eeb3
(x_set_frame_parameters, x_get_arg, x_window, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents:
6506
diff
changeset
|
993 old_value = get_frame_param (f, prop); |
40802
82e6baf4446f
(x_set_frame_parameters): Avoid infinite recursion.
Miles Bader <miles@gnu.org>
parents:
40715
diff
changeset
|
994 |
41089
ead122ed3fe6
(x_set_frame_parameters): Revert change of 2001-11-07.
Gerd Moellmann <gerd@gnu.org>
parents:
41087
diff
changeset
|
995 store_frame_param (f, prop, val); |
ead122ed3fe6
(x_set_frame_parameters): Revert change of 2001-11-07.
Gerd Moellmann <gerd@gnu.org>
parents:
41087
diff
changeset
|
996 |
ead122ed3fe6
(x_set_frame_parameters): Revert change of 2001-11-07.
Gerd Moellmann <gerd@gnu.org>
parents:
41087
diff
changeset
|
997 param_index = Fget (prop, Qx_frame_parameter); |
ead122ed3fe6
(x_set_frame_parameters): Revert change of 2001-11-07.
Gerd Moellmann <gerd@gnu.org>
parents:
41087
diff
changeset
|
998 if (NATNUMP (param_index) |
ead122ed3fe6
(x_set_frame_parameters): Revert change of 2001-11-07.
Gerd Moellmann <gerd@gnu.org>
parents:
41087
diff
changeset
|
999 && (XFASTINT (param_index) |
ead122ed3fe6
(x_set_frame_parameters): Revert change of 2001-11-07.
Gerd Moellmann <gerd@gnu.org>
parents:
41087
diff
changeset
|
1000 < sizeof (x_frame_parms)/sizeof (x_frame_parms[0]))) |
ead122ed3fe6
(x_set_frame_parameters): Revert change of 2001-11-07.
Gerd Moellmann <gerd@gnu.org>
parents:
41087
diff
changeset
|
1001 (*x_frame_parms[XINT (param_index)].setter)(f, val, old_value); |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
1002 } |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
1003 } |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
1004 |
4617
807ba8bcc309
(x_set_frame_parameters): Don't die if just one of
Richard M. Stallman <rms@gnu.org>
parents:
4606
diff
changeset
|
1005 /* Don't die if just one of these was set. */ |
807ba8bcc309
(x_set_frame_parameters): Don't die if just one of
Richard M. Stallman <rms@gnu.org>
parents:
4606
diff
changeset
|
1006 if (EQ (left, Qunbound)) |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1007 { |
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1008 left_no_change = 1; |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1009 if (f->output_data.x->left_pos < 0) |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1010 left = Fcons (Qplus, Fcons (make_number (f->output_data.x->left_pos), Qnil)); |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1011 else |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1012 XSETINT (left, f->output_data.x->left_pos); |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1013 } |
4617
807ba8bcc309
(x_set_frame_parameters): Don't die if just one of
Richard M. Stallman <rms@gnu.org>
parents:
4606
diff
changeset
|
1014 if (EQ (top, Qunbound)) |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1015 { |
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1016 top_no_change = 1; |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1017 if (f->output_data.x->top_pos < 0) |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1018 top = Fcons (Qplus, Fcons (make_number (f->output_data.x->top_pos), Qnil)); |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1019 else |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1020 XSETINT (top, f->output_data.x->top_pos); |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1021 } |
4617
807ba8bcc309
(x_set_frame_parameters): Don't die if just one of
Richard M. Stallman <rms@gnu.org>
parents:
4606
diff
changeset
|
1022 |
10222
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
1023 /* If one of the icon positions was not set, preserve or default it. */ |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
1024 if (EQ (icon_left, Qunbound) || ! INTEGERP (icon_left)) |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
1025 { |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
1026 icon_left_no_change = 1; |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
1027 icon_left = Fcdr (Fassq (Qicon_left, f->param_alist)); |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
1028 if (NILP (icon_left)) |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
1029 XSETINT (icon_left, 0); |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
1030 } |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
1031 if (EQ (icon_top, Qunbound) || ! INTEGERP (icon_top)) |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
1032 { |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
1033 icon_top_no_change = 1; |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
1034 icon_top = Fcdr (Fassq (Qicon_top, f->param_alist)); |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
1035 if (NILP (icon_top)) |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
1036 XSETINT (icon_top, 0); |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
1037 } |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
1038 |
42883
57c5f7f05f4c
xfns.c (x_set_frame_parameters): Just call x_fullscreen_adjust
Jan Djärv <jan.h.d@swipnet.se>
parents:
42721
diff
changeset
|
1039 if (FRAME_VISIBLE_P (f) && fullscreen_is_being_set) |
42721
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1040 { |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1041 /* If the frame is visible already and the fullscreen parameter is |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1042 being set, it is too late to set WM manager hints to specify |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1043 size and position. |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1044 Here we first get the width, height and position that applies to |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1045 fullscreen. We then move the frame to the appropriate |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1046 position. Resize of the frame is taken care of in the code after |
42883
57c5f7f05f4c
xfns.c (x_set_frame_parameters): Just call x_fullscreen_adjust
Jan Djärv <jan.h.d@swipnet.se>
parents:
42721
diff
changeset
|
1047 this if-statement. */ |
42721
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1048 int new_left, new_top; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1049 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1050 x_fullscreen_adjust (f, &width, &height, &new_top, &new_left); |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1051 x_fullscreen_move (f, new_top, new_left); |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1052 } |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1053 |
11932
f3fb1e5dfde1
(x_set_frame_parameters) Fix typo.
Karl Heuer <kwzh@gnu.org>
parents:
11917
diff
changeset
|
1054 /* Don't set these parameters unless they've been explicitly |
4146
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
1055 specified. The window might be mapped or resized while we're in |
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
1056 this function, and we don't want to override that unless the lisp |
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
1057 code has asked for it. |
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
1058 |
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
1059 Don't set these parameters unless they actually differ from the |
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
1060 window's current parameters; the window may not actually exist |
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
1061 yet. */ |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
1062 { |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
1063 Lisp_Object frame; |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
1064 |
5107
2a019dd8ed51
(x_set_frame_parameters): Call check_frame_size
Richard M. Stallman <rms@gnu.org>
parents:
4771
diff
changeset
|
1065 check_frame_size (f, &height, &width); |
2a019dd8ed51
(x_set_frame_parameters): Call check_frame_size
Richard M. Stallman <rms@gnu.org>
parents:
4771
diff
changeset
|
1066 |
9285
75f1c0d90b3d
(x_set_frame_parameters, x_set_visibility, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents:
9240
diff
changeset
|
1067 XSETFRAME (frame, f); |
4617
807ba8bcc309
(x_set_frame_parameters): Don't die if just one of
Richard M. Stallman <rms@gnu.org>
parents:
4606
diff
changeset
|
1068 |
16156
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
1069 if (width != FRAME_WIDTH (f) |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
1070 || height != FRAME_HEIGHT (f) |
14965
685888f786d3
(x_set_frame_parameters): Do call Fset_frame_size
Richard M. Stallman <rms@gnu.org>
parents:
14831
diff
changeset
|
1071 || FRAME_NEW_HEIGHT (f) || FRAME_NEW_WIDTH (f)) |
16156
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
1072 Fset_frame_size (frame, make_number (width), make_number (height)); |
8090
bb03e344f07e
(x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents:
7989
diff
changeset
|
1073 |
bb03e344f07e
(x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents:
7989
diff
changeset
|
1074 if ((!NILP (left) || !NILP (top)) |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1075 && ! (left_no_change && top_no_change) |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1076 && ! (NUMBERP (left) && XINT (left) == f->output_data.x->left_pos |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1077 && NUMBERP (top) && XINT (top) == f->output_data.x->top_pos)) |
8090
bb03e344f07e
(x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents:
7989
diff
changeset
|
1078 { |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1079 int leftpos = 0; |
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1080 int toppos = 0; |
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1081 |
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1082 /* Record the signs. */ |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1083 f->output_data.x->size_hint_flags &= ~ (XNegative | YNegative); |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1084 if (EQ (left, Qminus)) |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1085 f->output_data.x->size_hint_flags |= XNegative; |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1086 else if (INTEGERP (left)) |
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1087 { |
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1088 leftpos = XINT (left); |
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1089 if (leftpos < 0) |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1090 f->output_data.x->size_hint_flags |= XNegative; |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1091 } |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
1092 else if (CONSP (left) && EQ (XCAR (left), Qminus) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
1093 && CONSP (XCDR (left)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
1094 && INTEGERP (XCAR (XCDR (left)))) |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1095 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
1096 leftpos = - XINT (XCAR (XCDR (left))); |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1097 f->output_data.x->size_hint_flags |= XNegative; |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1098 } |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
1099 else if (CONSP (left) && EQ (XCAR (left), Qplus) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
1100 && CONSP (XCDR (left)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
1101 && INTEGERP (XCAR (XCDR (left)))) |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1102 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
1103 leftpos = XINT (XCAR (XCDR (left))); |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1104 } |
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1105 |
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1106 if (EQ (top, Qminus)) |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1107 f->output_data.x->size_hint_flags |= YNegative; |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1108 else if (INTEGERP (top)) |
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1109 { |
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1110 toppos = XINT (top); |
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1111 if (toppos < 0) |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1112 f->output_data.x->size_hint_flags |= YNegative; |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1113 } |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
1114 else if (CONSP (top) && EQ (XCAR (top), Qminus) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
1115 && CONSP (XCDR (top)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
1116 && INTEGERP (XCAR (XCDR (top)))) |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1117 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
1118 toppos = - XINT (XCAR (XCDR (top))); |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1119 f->output_data.x->size_hint_flags |= YNegative; |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1120 } |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
1121 else if (CONSP (top) && EQ (XCAR (top), Qplus) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
1122 && CONSP (XCDR (top)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
1123 && INTEGERP (XCAR (XCDR (top)))) |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1124 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
1125 toppos = XINT (XCAR (XCDR (top))); |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1126 } |
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
1127 |
8090
bb03e344f07e
(x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents:
7989
diff
changeset
|
1128 |
bb03e344f07e
(x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents:
7989
diff
changeset
|
1129 /* Store the numeric value of the position. */ |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1130 f->output_data.x->top_pos = toppos; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1131 f->output_data.x->left_pos = leftpos; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1132 |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1133 f->output_data.x->win_gravity = NorthWestGravity; |
8090
bb03e344f07e
(x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents:
7989
diff
changeset
|
1134 |
bb03e344f07e
(x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents:
7989
diff
changeset
|
1135 /* Actually set that position, and convert to absolute. */ |
11989
0deb4505c0f0
(x_set_frame_parameters): Pass -1 to x_set_offset.
Karl Heuer <kwzh@gnu.org>
parents:
11986
diff
changeset
|
1136 x_set_offset (f, leftpos, toppos, -1); |
8090
bb03e344f07e
(x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents:
7989
diff
changeset
|
1137 } |
10222
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
1138 |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
1139 if ((!NILP (icon_left) || !NILP (icon_top)) |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
1140 && ! (icon_left_no_change && icon_top_no_change)) |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
1141 x_wm_set_icon_position (f, XINT (icon_left), XINT (icon_top)); |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
1142 } |
24170
3689490f7f65
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
23793
diff
changeset
|
1143 |
3689490f7f65
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
23793
diff
changeset
|
1144 UNGCPRO; |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
1145 } |
2136
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
1146 |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
1147 /* Store the screen positions of frame F into XPTR and YPTR. |
7408
65c133b66371
(x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7308
diff
changeset
|
1148 These are the positions of the containing window manager window, |
65c133b66371
(x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7308
diff
changeset
|
1149 not Emacs's own window. */ |
65c133b66371
(x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7308
diff
changeset
|
1150 |
65c133b66371
(x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7308
diff
changeset
|
1151 void |
65c133b66371
(x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7308
diff
changeset
|
1152 x_real_positions (f, xptr, yptr) |
65c133b66371
(x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7308
diff
changeset
|
1153 FRAME_PTR f; |
65c133b66371
(x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7308
diff
changeset
|
1154 int *xptr, *yptr; |
65c133b66371
(x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7308
diff
changeset
|
1155 { |
42721
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1156 int win_x, win_y, outer_x, outer_y; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1157 int real_x = 0, real_y = 0; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1158 int had_errors = 0; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1159 Window win = f->output_data.x->parent_desc; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1160 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1161 int count; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1162 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1163 BLOCK_INPUT; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1164 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1165 count = x_catch_errors (FRAME_X_DISPLAY (f)); |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1166 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1167 if (win == FRAME_X_DISPLAY_INFO (f)->root_window) |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1168 win = FRAME_OUTER_WINDOW (f); |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1169 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1170 /* This loop traverses up the containment tree until we hit the root |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1171 window. Window managers may intersect many windows between our window |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1172 and the root window. The window we find just before the root window |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1173 should be the outer WM window. */ |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1174 for (;;) |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1175 { |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1176 Window wm_window, rootw; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1177 Window *tmp_children; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1178 unsigned int tmp_nchildren; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1179 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1180 XQueryTree (FRAME_X_DISPLAY (f), win, &rootw, |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1181 &wm_window, &tmp_children, &tmp_nchildren); |
14563
6aa8b322b4d7
(x_real_positions): Cast arg of XFree.
Karl Heuer <kwzh@gnu.org>
parents:
14530
diff
changeset
|
1182 XFree ((char *) tmp_children); |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
1183 |
42721
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1184 had_errors = x_had_errors_p (FRAME_X_DISPLAY (f)); |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1185 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1186 if (wm_window == rootw || had_errors) |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1187 break; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1188 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1189 win = wm_window; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1190 } |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1191 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1192 if (! had_errors) |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1193 { |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1194 int ign; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1195 Window child, rootw; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1196 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1197 /* Get the real coordinates for the WM window upper left corner */ |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1198 XGetGeometry (FRAME_X_DISPLAY (f), win, |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1199 &rootw, &real_x, &real_y, &ign, &ign, &ign, &ign); |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1200 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1201 /* Translate real coordinates to coordinates relative to our |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1202 window. For our window, the upper left corner is 0, 0. |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1203 Since the upper left corner of the WM window is outside |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1204 our window, win_x and win_y will be negative: |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1205 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1206 ------------------ ---> x |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1207 | title | |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1208 | ----------------- v y |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1209 | | our window |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1210 */ |
17954
7c919d7f8217
(x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents:
17836
diff
changeset
|
1211 XTranslateCoordinates (FRAME_X_DISPLAY (f), |
7c919d7f8217
(x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents:
17836
diff
changeset
|
1212 |
7c919d7f8217
(x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents:
17836
diff
changeset
|
1213 /* From-window, to-window. */ |
7c919d7f8217
(x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents:
17836
diff
changeset
|
1214 FRAME_X_DISPLAY_INFO (f)->root_window, |
42721
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1215 FRAME_X_WINDOW (f), |
17954
7c919d7f8217
(x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents:
17836
diff
changeset
|
1216 |
7c919d7f8217
(x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents:
17836
diff
changeset
|
1217 /* From-position, to-position. */ |
42721
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1218 real_x, real_y, &win_x, &win_y, |
17954
7c919d7f8217
(x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents:
17836
diff
changeset
|
1219 |
7c919d7f8217
(x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents:
17836
diff
changeset
|
1220 /* Child of win. */ |
7c919d7f8217
(x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents:
17836
diff
changeset
|
1221 &child); |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
1222 |
42721
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1223 if (FRAME_X_WINDOW (f) == FRAME_OUTER_WINDOW (f)) |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1224 { |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1225 outer_x = win_x; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1226 outer_y = win_y; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1227 } |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1228 else |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1229 { |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1230 XTranslateCoordinates (FRAME_X_DISPLAY (f), |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1231 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1232 /* From-window, to-window. */ |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1233 FRAME_X_DISPLAY_INFO (f)->root_window, |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1234 FRAME_OUTER_WINDOW (f), |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1235 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1236 /* From-position, to-position. */ |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1237 real_x, real_y, &outer_x, &outer_y, |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1238 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1239 /* Child of win. */ |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1240 &child); |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1241 } |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1242 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1243 had_errors = x_had_errors_p (FRAME_X_DISPLAY (f)); |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1244 } |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1245 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1246 x_uncatch_errors (FRAME_X_DISPLAY (f), count); |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1247 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1248 UNBLOCK_INPUT; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1249 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1250 if (had_errors) return; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1251 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1252 f->output_data.x->x_pixels_diff = -win_x; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1253 f->output_data.x->y_pixels_diff = -win_y; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1254 f->output_data.x->x_pixels_outer_diff = -outer_x; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1255 f->output_data.x->y_pixels_outer_diff = -outer_y; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1256 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1257 *xptr = real_x; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1258 *yptr = real_y; |
7408
65c133b66371
(x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7308
diff
changeset
|
1259 } |
65c133b66371
(x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7308
diff
changeset
|
1260 |
771 | 1261 /* Insert a description of internally-recorded parameters of frame X |
389 | 1262 into the parameter alist *ALISTPTR that is to be given to the user. |
1263 Only parameters that are specific to the X window system | |
771 | 1264 and whose values are not correctly recorded in the frame's |
389 | 1265 param_alist need to be considered here. */ |
1266 | |
21536
468585662fa8
(x_destroy_bitmap): Declare as void, not int.
Karl Heuer <kwzh@gnu.org>
parents:
21267
diff
changeset
|
1267 void |
771 | 1268 x_report_frame_params (f, alistptr) |
1269 struct frame *f; | |
389 | 1270 Lisp_Object *alistptr; |
1271 { | |
1272 char buf[16]; | |
11986
bfdf35b8c34b
(x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents:
11962
diff
changeset
|
1273 Lisp_Object tem; |
bfdf35b8c34b
(x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents:
11962
diff
changeset
|
1274 |
bfdf35b8c34b
(x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents:
11962
diff
changeset
|
1275 /* Represent negative positions (off the top or left screen edge) |
bfdf35b8c34b
(x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents:
11962
diff
changeset
|
1276 in a way that Fmodify_frame_parameters will understand correctly. */ |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1277 XSETINT (tem, f->output_data.x->left_pos); |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1278 if (f->output_data.x->left_pos >= 0) |
11986
bfdf35b8c34b
(x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents:
11962
diff
changeset
|
1279 store_in_alist (alistptr, Qleft, tem); |
bfdf35b8c34b
(x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents:
11962
diff
changeset
|
1280 else |
bfdf35b8c34b
(x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents:
11962
diff
changeset
|
1281 store_in_alist (alistptr, Qleft, Fcons (Qplus, Fcons (tem, Qnil))); |
bfdf35b8c34b
(x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents:
11962
diff
changeset
|
1282 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1283 XSETINT (tem, f->output_data.x->top_pos); |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1284 if (f->output_data.x->top_pos >= 0) |
11986
bfdf35b8c34b
(x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents:
11962
diff
changeset
|
1285 store_in_alist (alistptr, Qtop, tem); |
bfdf35b8c34b
(x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents:
11962
diff
changeset
|
1286 else |
bfdf35b8c34b
(x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents:
11962
diff
changeset
|
1287 store_in_alist (alistptr, Qtop, Fcons (Qplus, Fcons (tem, Qnil))); |
bfdf35b8c34b
(x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents:
11962
diff
changeset
|
1288 |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
1289 store_in_alist (alistptr, Qborder_width, |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1290 make_number (f->output_data.x->border_width)); |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
1291 store_in_alist (alistptr, Qinternal_border_width, |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1292 make_number (f->output_data.x->internal_border_width)); |
41833
ad13493331f7
(x_report_frame_params): Make the scroll-bar-width frame parameter have a numeric value
Kim F. Storm <storm@cua.dk>
parents:
41722
diff
changeset
|
1293 store_in_alist (alistptr, Qleft_fringe, |
ad13493331f7
(x_report_frame_params): Make the scroll-bar-width frame parameter have a numeric value
Kim F. Storm <storm@cua.dk>
parents:
41722
diff
changeset
|
1294 make_number (f->output_data.x->left_fringe_width)); |
ad13493331f7
(x_report_frame_params): Make the scroll-bar-width frame parameter have a numeric value
Kim F. Storm <storm@cua.dk>
parents:
41722
diff
changeset
|
1295 store_in_alist (alistptr, Qright_fringe, |
ad13493331f7
(x_report_frame_params): Make the scroll-bar-width frame parameter have a numeric value
Kim F. Storm <storm@cua.dk>
parents:
41722
diff
changeset
|
1296 make_number (f->output_data.x->right_fringe_width)); |
42006
06231786ed81
(Frame_parameters): Makes the scroll-bar-width frame parameter have
Eli Zaretskii <eliz@gnu.org>
parents:
41833
diff
changeset
|
1297 store_in_alist (alistptr, Qscroll_bar_width, |
06231786ed81
(Frame_parameters): Makes the scroll-bar-width frame parameter have
Eli Zaretskii <eliz@gnu.org>
parents:
41833
diff
changeset
|
1298 make_number (FRAME_HAS_VERTICAL_SCROLL_BARS (f) |
06231786ed81
(Frame_parameters): Makes the scroll-bar-width frame parameter have
Eli Zaretskii <eliz@gnu.org>
parents:
41833
diff
changeset
|
1299 ? FRAME_SCROLL_BAR_PIXEL_WIDTH(f) |
06231786ed81
(Frame_parameters): Makes the scroll-bar-width frame parameter have
Eli Zaretskii <eliz@gnu.org>
parents:
41833
diff
changeset
|
1300 : 0)); |
9182
516fdeee89d6
(x_report_frame_params): Fix format/arg mismatch.
Karl Heuer <kwzh@gnu.org>
parents:
9166
diff
changeset
|
1301 sprintf (buf, "%ld", (long) FRAME_X_WINDOW (f)); |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
1302 store_in_alist (alistptr, Qwindow_id, |
389 | 1303 build_string (buf)); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
1304 #ifdef USE_X_TOOLKIT |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
1305 /* Tooltip frame may not have this widget. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
1306 if (f->output_data.x->widget) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
1307 #endif |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
1308 sprintf (buf, "%ld", (long) FRAME_OUTER_WINDOW (f)); |
23793
3f48dda0547a
(Qouter_window_id): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
23411
diff
changeset
|
1309 store_in_alist (alistptr, Qouter_window_id, |
3f48dda0547a
(Qouter_window_id): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
23411
diff
changeset
|
1310 build_string (buf)); |
12276
2e376a4397bc
(x_report_frame_params, x_set_icon_type, x_set_icon_name)
Richard M. Stallman <rms@gnu.org>
parents:
12209
diff
changeset
|
1311 store_in_alist (alistptr, Qicon_name, f->icon_name); |
6522
eecaa7b19b6c
(x_report_frame_params): Sample visibility.
Karl Heuer <kwzh@gnu.org>
parents:
6519
diff
changeset
|
1312 FRAME_SAMPLE_VISIBILITY (f); |
2136
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
1313 store_in_alist (alistptr, Qvisibility, |
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
1314 (FRAME_VISIBLE_P (f) ? Qt |
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
1315 : FRAME_ICONIFIED_P (f) ? Qicon : Qnil)); |
11483
089f81a81ba6
(x_report_frame_params): Report value of `display' parm.
Richard M. Stallman <rms@gnu.org>
parents:
11417
diff
changeset
|
1316 store_in_alist (alistptr, Qdisplay, |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
1317 XCAR (FRAME_X_DISPLAY_INFO (f)->name_list_element)); |
16156
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
1318 |
18612
88efccff8970
Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents:
18594
diff
changeset
|
1319 if (f->output_data.x->parent_desc == FRAME_X_DISPLAY_INFO (f)->root_window) |
88efccff8970
Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents:
18594
diff
changeset
|
1320 tem = Qnil; |
88efccff8970
Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents:
18594
diff
changeset
|
1321 else |
88efccff8970
Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents:
18594
diff
changeset
|
1322 XSETFASTINT (tem, f->output_data.x->parent_desc); |
88efccff8970
Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents:
18594
diff
changeset
|
1323 store_in_alist (alistptr, Qparent_id, tem); |
389 | 1324 } |
1325 | |
10920
bb3f9aaf0e46
(defined_color): If colormap is full, find closest match.
Richard M. Stallman <rms@gnu.org>
parents:
10742
diff
changeset
|
1326 |
25528
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1327 |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1328 /* Gamma-correct COLOR on frame F. */ |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1329 |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1330 void |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1331 gamma_correct (f, color) |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1332 struct frame *f; |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1333 XColor *color; |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1334 { |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1335 if (f->gamma) |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1336 { |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1337 color->red = pow (color->red / 65535.0, f->gamma) * 65535.0 + 0.5; |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1338 color->green = pow (color->green / 65535.0, f->gamma) * 65535.0 + 0.5; |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1339 color->blue = pow (color->blue / 65535.0, f->gamma) * 65535.0 + 0.5; |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1340 } |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1341 } |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1342 |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1343 |
28096
244f283b3d03
(x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
28050
diff
changeset
|
1344 /* Decide if color named COLOR_NAME is valid for use on frame F. If |
244f283b3d03
(x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
28050
diff
changeset
|
1345 so, return the RGB values in COLOR. If ALLOC_P is non-zero, |
244f283b3d03
(x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
28050
diff
changeset
|
1346 allocate the color. Value is zero if COLOR_NAME is invalid, or |
244f283b3d03
(x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
28050
diff
changeset
|
1347 no color could be allocated. */ |
8675
1fe413b0a916
(defined_color): New arg ALLOC--optionally don't allocate the color.
Richard M. Stallman <rms@gnu.org>
parents:
8655
diff
changeset
|
1348 |
389 | 1349 int |
28096
244f283b3d03
(x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
28050
diff
changeset
|
1350 x_defined_color (f, color_name, color, alloc_p) |
244f283b3d03
(x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
28050
diff
changeset
|
1351 struct frame *f; |
244f283b3d03
(x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
28050
diff
changeset
|
1352 char *color_name; |
244f283b3d03
(x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
28050
diff
changeset
|
1353 XColor *color; |
244f283b3d03
(x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
28050
diff
changeset
|
1354 int alloc_p; |
244f283b3d03
(x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
28050
diff
changeset
|
1355 { |
244f283b3d03
(x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
28050
diff
changeset
|
1356 int success_p; |
244f283b3d03
(x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
28050
diff
changeset
|
1357 Display *dpy = FRAME_X_DISPLAY (f); |
244f283b3d03
(x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
28050
diff
changeset
|
1358 Colormap cmap = FRAME_X_COLORMAP (f); |
389 | 1359 |
1360 BLOCK_INPUT; | |
28096
244f283b3d03
(x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
28050
diff
changeset
|
1361 success_p = XParseColor (dpy, cmap, color_name, color); |
244f283b3d03
(x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
28050
diff
changeset
|
1362 if (success_p && alloc_p) |
244f283b3d03
(x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
28050
diff
changeset
|
1363 success_p = x_alloc_nearest_color (f, cmap, color); |
389 | 1364 UNBLOCK_INPUT; |
1365 | |
28096
244f283b3d03
(x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
28050
diff
changeset
|
1366 return success_p; |
389 | 1367 } |
1368 | |
27987
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
1369 |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
1370 /* Return the pixel color value for color COLOR_NAME on frame F. If F |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
1371 is a monochrome frame, return MONO_COLOR regardless of what ARG says. |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
1372 Signal an error if color can't be allocated. */ |
389 | 1373 |
1374 int | |
27987
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
1375 x_decode_color (f, color_name, mono_color) |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
1376 FRAME_PTR f; |
27987
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
1377 Lisp_Object color_name; |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
1378 int mono_color; |
389 | 1379 { |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
1380 XColor cdef; |
389 | 1381 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
1382 CHECK_STRING (color_name); |
27987
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
1383 |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
1384 #if 0 /* Don't do this. It's wrong when we're not using the default |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
1385 colormap, it makes freeing difficult, and it's probably not |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
1386 an important optimization. */ |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
1387 if (strcmp (XSTRING (color_name)->data, "black") == 0) |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
1388 return BLACK_PIX_DEFAULT (f); |
27987
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
1389 else if (strcmp (XSTRING (color_name)->data, "white") == 0) |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
1390 return WHITE_PIX_DEFAULT (f); |
27987
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
1391 #endif |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
1392 |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
1393 /* Return MONO_COLOR for monochrome frames. */ |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
1394 if (FRAME_X_DISPLAY_INFO (f)->n_planes == 1) |
27987
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
1395 return mono_color; |
389 | 1396 |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26571
diff
changeset
|
1397 /* x_defined_color is responsible for coping with failures |
11060
0a7048d331e6
(x_decode_color): Don't use cdef if defined_color failed.
Richard M. Stallman <rms@gnu.org>
parents:
11014
diff
changeset
|
1398 by looking for a near-miss. */ |
27987
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
1399 if (x_defined_color (f, XSTRING (color_name)->data, &cdef, 1)) |
11060
0a7048d331e6
(x_decode_color): Don't use cdef if defined_color failed.
Richard M. Stallman <rms@gnu.org>
parents:
11014
diff
changeset
|
1400 return cdef.pixel; |
0a7048d331e6
(x_decode_color): Don't use cdef if defined_color failed.
Richard M. Stallman <rms@gnu.org>
parents:
11014
diff
changeset
|
1401 |
31902
f526f6f002d7
(x_decode_color): Don't return a Lisp_Object.
Gerd Moellmann <gerd@gnu.org>
parents:
31824
diff
changeset
|
1402 Fsignal (Qerror, Fcons (build_string ("Undefined color"), |
f526f6f002d7
(x_decode_color): Don't return a Lisp_Object.
Gerd Moellmann <gerd@gnu.org>
parents:
31824
diff
changeset
|
1403 Fcons (color_name, Qnil))); |
f526f6f002d7
(x_decode_color): Don't return a Lisp_Object.
Gerd Moellmann <gerd@gnu.org>
parents:
31824
diff
changeset
|
1404 return 0; |
27987
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
1405 } |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
1406 |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
1407 |
389 | 1408 |
28690
01a3287bb747
(x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28597
diff
changeset
|
1409 /* Change the `line-spacing' frame parameter of frame F. OLD_VALUE is |
01a3287bb747
(x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28597
diff
changeset
|
1410 the previous value of that parameter, NEW_VALUE is the new value. */ |
01a3287bb747
(x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28597
diff
changeset
|
1411 |
01a3287bb747
(x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28597
diff
changeset
|
1412 static void |
01a3287bb747
(x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28597
diff
changeset
|
1413 x_set_line_spacing (f, new_value, old_value) |
01a3287bb747
(x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28597
diff
changeset
|
1414 struct frame *f; |
01a3287bb747
(x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28597
diff
changeset
|
1415 Lisp_Object new_value, old_value; |
01a3287bb747
(x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28597
diff
changeset
|
1416 { |
01a3287bb747
(x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28597
diff
changeset
|
1417 if (NILP (new_value)) |
01a3287bb747
(x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28597
diff
changeset
|
1418 f->extra_line_spacing = 0; |
01a3287bb747
(x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28597
diff
changeset
|
1419 else if (NATNUMP (new_value)) |
01a3287bb747
(x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28597
diff
changeset
|
1420 f->extra_line_spacing = XFASTINT (new_value); |
01a3287bb747
(x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28597
diff
changeset
|
1421 else |
30601
7c995a54a0e8
Replace `illegal' with `invalid'.
Gerd Moellmann <gerd@gnu.org>
parents:
30573
diff
changeset
|
1422 Fsignal (Qerror, Fcons (build_string ("Invalid line-spacing"), |
28690
01a3287bb747
(x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28597
diff
changeset
|
1423 Fcons (new_value, Qnil))); |
01a3287bb747
(x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28597
diff
changeset
|
1424 if (FRAME_VISIBLE_P (f)) |
01a3287bb747
(x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28597
diff
changeset
|
1425 redraw_frame (f); |
01a3287bb747
(x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28597
diff
changeset
|
1426 } |
01a3287bb747
(x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28597
diff
changeset
|
1427 |
01a3287bb747
(x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28597
diff
changeset
|
1428 |
38183
3ef7b5a020b2
(Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37946
diff
changeset
|
1429 /* Change the `wait-for-wm' frame parameter of frame F. OLD_VALUE is |
3ef7b5a020b2
(Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37946
diff
changeset
|
1430 the previous value of that parameter, NEW_VALUE is the new value. |
3ef7b5a020b2
(Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37946
diff
changeset
|
1431 See also the comment of wait_for_wm in struct x_output. */ |
3ef7b5a020b2
(Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37946
diff
changeset
|
1432 |
3ef7b5a020b2
(Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37946
diff
changeset
|
1433 static void |
3ef7b5a020b2
(Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37946
diff
changeset
|
1434 x_set_wait_for_wm (f, new_value, old_value) |
3ef7b5a020b2
(Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37946
diff
changeset
|
1435 struct frame *f; |
3ef7b5a020b2
(Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37946
diff
changeset
|
1436 Lisp_Object new_value, old_value; |
3ef7b5a020b2
(Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37946
diff
changeset
|
1437 { |
3ef7b5a020b2
(Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37946
diff
changeset
|
1438 f->output_data.x->wait_for_wm = !NILP (new_value); |
3ef7b5a020b2
(Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37946
diff
changeset
|
1439 } |
3ef7b5a020b2
(Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37946
diff
changeset
|
1440 |
3ef7b5a020b2
(Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37946
diff
changeset
|
1441 |
42721
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1442 /* Change the `fullscreen' frame parameter of frame F. OLD_VALUE is |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1443 the previous value of that parameter, NEW_VALUE is the new value. */ |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1444 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1445 static void |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1446 x_set_fullscreen (f, new_value, old_value) |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1447 struct frame *f; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1448 Lisp_Object new_value, old_value; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1449 { |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1450 if (NILP (new_value)) |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1451 f->output_data.x->want_fullscreen = FULLSCREEN_NONE; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1452 else if (EQ (new_value, Qfullboth)) |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1453 f->output_data.x->want_fullscreen = FULLSCREEN_BOTH; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1454 else if (EQ (new_value, Qfullwidth)) |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1455 f->output_data.x->want_fullscreen = FULLSCREEN_WIDTH; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1456 else if (EQ (new_value, Qfullheight)) |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1457 f->output_data.x->want_fullscreen = FULLSCREEN_HEIGHT; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1458 } |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1459 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
1460 |
25528
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1461 /* Change the `screen-gamma' frame parameter of frame F. OLD_VALUE is |
38183
3ef7b5a020b2
(Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37946
diff
changeset
|
1462 the previous value of that parameter, NEW_VALUE is the new |
3ef7b5a020b2
(Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37946
diff
changeset
|
1463 value. */ |
25528
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1464 |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1465 static void |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1466 x_set_screen_gamma (f, new_value, old_value) |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1467 struct frame *f; |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1468 Lisp_Object new_value, old_value; |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1469 { |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1470 if (NILP (new_value)) |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1471 f->gamma = 0; |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1472 else if (NUMBERP (new_value) && XFLOATINT (new_value) > 0) |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1473 /* The value 0.4545 is the normal viewing gamma. */ |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1474 f->gamma = 1.0 / (0.4545 * XFLOATINT (new_value)); |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1475 else |
30601
7c995a54a0e8
Replace `illegal' with `invalid'.
Gerd Moellmann <gerd@gnu.org>
parents:
30573
diff
changeset
|
1476 Fsignal (Qerror, Fcons (build_string ("Invalid screen-gamma"), |
25528
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1477 Fcons (new_value, Qnil))); |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1478 |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1479 clear_face_cache (0); |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1480 } |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1481 |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
1482 |
771 | 1483 /* Functions called only from `x_set_frame_param' |
389 | 1484 to set individual parameters. |
1485 | |
1050
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
1486 If FRAME_X_WINDOW (f) is 0, |
771 | 1487 the frame is being created and its X-window does not exist yet. |
389 | 1488 In that case, just record the parameter's new value |
1489 in the standard place; do not attempt to change the window. */ | |
1490 | |
1491 void | |
771 | 1492 x_set_foreground_color (f, arg, oldval) |
1493 struct frame *f; | |
389 | 1494 Lisp_Object arg, oldval; |
1495 { | |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1496 struct x_output *x = f->output_data.x; |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1497 unsigned long fg, old_fg; |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1498 |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1499 fg = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f)); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1500 old_fg = x->foreground_pixel; |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1501 x->foreground_pixel = fg; |
21779
6aaa0268fe91
(x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents:
21555
diff
changeset
|
1502 |
1050
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
1503 if (FRAME_X_WINDOW (f) != 0) |
389 | 1504 { |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1505 Display *dpy = FRAME_X_DISPLAY (f); |
37608
9ce50239786f
(x_set_foreground_color): Set frame's cursor_pixel.
Gerd Moellmann <gerd@gnu.org>
parents:
37556
diff
changeset
|
1506 |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1507 BLOCK_INPUT; |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1508 XSetForeground (dpy, x->normal_gc, fg); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1509 XSetBackground (dpy, x->reverse_gc, fg); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1510 |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1511 if (x->cursor_pixel == old_fg) |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1512 { |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1513 unload_color (f, x->cursor_pixel); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1514 x->cursor_pixel = x_copy_color (f, fg); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1515 XSetBackground (dpy, x->cursor_gc, x->cursor_pixel); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1516 } |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1517 |
389 | 1518 UNBLOCK_INPUT; |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1519 |
25593
9aecfcf3cb43
(x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents:
25550
diff
changeset
|
1520 update_face_from_frame_parameter (f, Qforeground_color, arg); |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1521 |
1719
48f539ac6921
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1657
diff
changeset
|
1522 if (FRAME_VISIBLE_P (f)) |
771 | 1523 redraw_frame (f); |
389 | 1524 } |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1525 |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1526 unload_color (f, old_fg); |
389 | 1527 } |
1528 | |
1529 void | |
771 | 1530 x_set_background_color (f, arg, oldval) |
1531 struct frame *f; | |
389 | 1532 Lisp_Object arg, oldval; |
1533 { | |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1534 struct x_output *x = f->output_data.x; |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1535 unsigned long bg; |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1536 |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1537 bg = x_decode_color (f, arg, WHITE_PIX_DEFAULT (f)); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1538 unload_color (f, x->background_pixel); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1539 x->background_pixel = bg; |
21779
6aaa0268fe91
(x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents:
21555
diff
changeset
|
1540 |
1050
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
1541 if (FRAME_X_WINDOW (f) != 0) |
389 | 1542 { |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1543 Display *dpy = FRAME_X_DISPLAY (f); |
37608
9ce50239786f
(x_set_foreground_color): Set frame's cursor_pixel.
Gerd Moellmann <gerd@gnu.org>
parents:
37556
diff
changeset
|
1544 |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1545 BLOCK_INPUT; |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1546 XSetBackground (dpy, x->normal_gc, bg); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1547 XSetForeground (dpy, x->reverse_gc, bg); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1548 XSetWindowBackground (dpy, FRAME_X_WINDOW (f), bg); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1549 XSetForeground (dpy, x->cursor_gc, bg); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1550 |
39159
2c7a6a1b047e
(x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents:
38749
diff
changeset
|
1551 #ifndef USE_TOOLKIT_SCROLL_BARS /* Turns out to be annoying with |
2c7a6a1b047e
(x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents:
38749
diff
changeset
|
1552 toolkit scroll bars. */ |
2c7a6a1b047e
(x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents:
38749
diff
changeset
|
1553 { |
2c7a6a1b047e
(x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents:
38749
diff
changeset
|
1554 Lisp_Object bar; |
2c7a6a1b047e
(x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents:
38749
diff
changeset
|
1555 for (bar = FRAME_SCROLL_BARS (f); |
2c7a6a1b047e
(x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents:
38749
diff
changeset
|
1556 !NILP (bar); |
2c7a6a1b047e
(x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents:
38749
diff
changeset
|
1557 bar = XSCROLL_BAR (bar)->next) |
2c7a6a1b047e
(x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents:
38749
diff
changeset
|
1558 { |
2c7a6a1b047e
(x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents:
38749
diff
changeset
|
1559 Window window = SCROLL_BAR_X_WINDOW (XSCROLL_BAR (bar)); |
2c7a6a1b047e
(x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents:
38749
diff
changeset
|
1560 XSetWindowBackground (dpy, window, bg); |
2c7a6a1b047e
(x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents:
38749
diff
changeset
|
1561 } |
2c7a6a1b047e
(x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents:
38749
diff
changeset
|
1562 } |
2c7a6a1b047e
(x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents:
38749
diff
changeset
|
1563 #endif /* USE_TOOLKIT_SCROLL_BARS */ |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1564 |
389 | 1565 UNBLOCK_INPUT; |
25593
9aecfcf3cb43
(x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents:
25550
diff
changeset
|
1566 update_face_from_frame_parameter (f, Qbackground_color, arg); |
3075
878381e48b0d
* xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents:
3048
diff
changeset
|
1567 |
1719
48f539ac6921
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1657
diff
changeset
|
1568 if (FRAME_VISIBLE_P (f)) |
771 | 1569 redraw_frame (f); |
389 | 1570 } |
1571 } | |
1572 | |
1573 void | |
771 | 1574 x_set_mouse_color (f, arg, oldval) |
1575 struct frame *f; | |
389 | 1576 Lisp_Object arg, oldval; |
1577 { | |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1578 struct x_output *x = f->output_data.x; |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1579 Display *dpy = FRAME_X_DISPLAY (f); |
6759
e0938c42218c
(syms_of_xfns): Define Vx_cross_pointer_shape.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6610
diff
changeset
|
1580 Cursor cursor, nontext_cursor, mode_cursor, cross_cursor; |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
1581 Cursor hourglass_cursor, horizontal_drag_cursor; |
17609
8c878d76d6a4
(x_real_positions, x_set_mouse_color, Fx_list_fonts):
Richard M. Stallman <rms@gnu.org>
parents:
17579
diff
changeset
|
1582 int count; |
25075
9f5d679349e9
(x_set_mouse_color): Always unload the old color.
Karl Heuer <kwzh@gnu.org>
parents:
24994
diff
changeset
|
1583 unsigned long pixel = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f)); |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1584 unsigned long mask_color = x->background_pixel; |
25075
9f5d679349e9
(x_set_mouse_color): Always unload the old color.
Karl Heuer <kwzh@gnu.org>
parents:
24994
diff
changeset
|
1585 |
9f5d679349e9
(x_set_mouse_color): Always unload the old color.
Karl Heuer <kwzh@gnu.org>
parents:
24994
diff
changeset
|
1586 /* Don't let pointers be invisible. */ |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1587 if (mask_color == pixel) |
35261
ba1f849f9381
(x_set_mouse_color): Fix color allocation.
Gerd Moellmann <gerd@gnu.org>
parents:
35191
diff
changeset
|
1588 { |
ba1f849f9381
(x_set_mouse_color): Fix color allocation.
Gerd Moellmann <gerd@gnu.org>
parents:
35191
diff
changeset
|
1589 x_free_colors (f, &pixel, 1); |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1590 pixel = x_copy_color (f, x->foreground_pixel); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1591 } |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1592 |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1593 unload_color (f, x->mouse_pixel); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1594 x->mouse_pixel = pixel; |
389 | 1595 |
1596 BLOCK_INPUT; | |
1050
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
1597 |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
3512
diff
changeset
|
1598 /* It's not okay to crash if the user selects a screwy cursor. */ |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1599 count = x_catch_errors (dpy); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1600 |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1601 if (!NILP (Vx_pointer_shape)) |
389 | 1602 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
1603 CHECK_NUMBER (Vx_pointer_shape); |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1604 cursor = XCreateFontCursor (dpy, XINT (Vx_pointer_shape)); |
389 | 1605 } |
1606 else | |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1607 cursor = XCreateFontCursor (dpy, XC_xterm); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1608 x_check_errors (dpy, "bad text pointer cursor: %s"); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1609 |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1610 if (!NILP (Vx_nontext_pointer_shape)) |
389 | 1611 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
1612 CHECK_NUMBER (Vx_nontext_pointer_shape); |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1613 nontext_cursor |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1614 = XCreateFontCursor (dpy, XINT (Vx_nontext_pointer_shape)); |
389 | 1615 } |
1616 else | |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1617 nontext_cursor = XCreateFontCursor (dpy, XC_left_ptr); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1618 x_check_errors (dpy, "bad nontext pointer cursor: %s"); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1619 |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1620 if (!NILP (Vx_hourglass_pointer_shape)) |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
1621 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
1622 CHECK_NUMBER (Vx_hourglass_pointer_shape); |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1623 hourglass_cursor |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1624 = XCreateFontCursor (dpy, XINT (Vx_hourglass_pointer_shape)); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
1625 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
1626 else |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1627 hourglass_cursor = XCreateFontCursor (dpy, XC_watch); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1628 x_check_errors (dpy, "bad hourglass pointer cursor: %s"); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1629 |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1630 x_check_errors (dpy, "bad nontext pointer cursor: %s"); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1631 if (!NILP (Vx_mode_pointer_shape)) |
389 | 1632 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
1633 CHECK_NUMBER (Vx_mode_pointer_shape); |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1634 mode_cursor = XCreateFontCursor (dpy, XINT (Vx_mode_pointer_shape)); |
389 | 1635 } |
1636 else | |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1637 mode_cursor = XCreateFontCursor (dpy, XC_xterm); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1638 x_check_errors (dpy, "bad modeline pointer cursor: %s"); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1639 |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1640 if (!NILP (Vx_sensitive_text_pointer_shape)) |
6759
e0938c42218c
(syms_of_xfns): Define Vx_cross_pointer_shape.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6610
diff
changeset
|
1641 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
1642 CHECK_NUMBER (Vx_sensitive_text_pointer_shape); |
7683
be3423efbdce
(Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents:
7599
diff
changeset
|
1643 cross_cursor |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1644 = XCreateFontCursor (dpy, XINT (Vx_sensitive_text_pointer_shape)); |
6759
e0938c42218c
(syms_of_xfns): Define Vx_cross_pointer_shape.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6610
diff
changeset
|
1645 } |
e0938c42218c
(syms_of_xfns): Define Vx_cross_pointer_shape.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6610
diff
changeset
|
1646 else |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1647 cross_cursor = XCreateFontCursor (dpy, XC_crosshair); |
389 | 1648 |
33960
1f92a2d65681
(Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33747
diff
changeset
|
1649 if (!NILP (Vx_window_horizontal_drag_shape)) |
1f92a2d65681
(Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33747
diff
changeset
|
1650 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
1651 CHECK_NUMBER (Vx_window_horizontal_drag_shape); |
33960
1f92a2d65681
(Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33747
diff
changeset
|
1652 horizontal_drag_cursor |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1653 = XCreateFontCursor (dpy, XINT (Vx_window_horizontal_drag_shape)); |
33960
1f92a2d65681
(Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33747
diff
changeset
|
1654 } |
1f92a2d65681
(Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33747
diff
changeset
|
1655 else |
1f92a2d65681
(Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33747
diff
changeset
|
1656 horizontal_drag_cursor |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1657 = XCreateFontCursor (dpy, XC_sb_h_double_arrow); |
33960
1f92a2d65681
(Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33747
diff
changeset
|
1658 |
1050
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
1659 /* Check and report errors with the above calls. */ |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1660 x_check_errors (dpy, "can't set cursor shape: %s"); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1661 x_uncatch_errors (dpy, count); |
1050
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
1662 |
389 | 1663 { |
1664 XColor fore_color, back_color; | |
1665 | |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1666 fore_color.pixel = x->mouse_pixel; |
32606
78b4e9f31087
(x_to_xcolors, x_set_mouse_color, lookup_pixel_color)
Gerd Moellmann <gerd@gnu.org>
parents:
32549
diff
changeset
|
1667 x_query_color (f, &fore_color); |
389 | 1668 back_color.pixel = mask_color; |
32606
78b4e9f31087
(x_to_xcolors, x_set_mouse_color, lookup_pixel_color)
Gerd Moellmann <gerd@gnu.org>
parents:
32549
diff
changeset
|
1669 x_query_color (f, &back_color); |
78b4e9f31087
(x_to_xcolors, x_set_mouse_color, lookup_pixel_color)
Gerd Moellmann <gerd@gnu.org>
parents:
32549
diff
changeset
|
1670 |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1671 XRecolorCursor (dpy, cursor, &fore_color, &back_color); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1672 XRecolorCursor (dpy, nontext_cursor, &fore_color, &back_color); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1673 XRecolorCursor (dpy, mode_cursor, &fore_color, &back_color); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1674 XRecolorCursor (dpy, cross_cursor, &fore_color, &back_color); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1675 XRecolorCursor (dpy, hourglass_cursor, &fore_color, &back_color); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1676 XRecolorCursor (dpy, horizontal_drag_cursor, &fore_color, &back_color); |
389 | 1677 } |
1678 | |
1050
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
1679 if (FRAME_X_WINDOW (f) != 0) |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1680 XDefineCursor (dpy, FRAME_X_WINDOW (f), cursor); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1681 |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1682 if (cursor != x->text_cursor |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1683 && x->text_cursor != 0) |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1684 XFreeCursor (dpy, x->text_cursor); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1685 x->text_cursor = cursor; |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1686 |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1687 if (nontext_cursor != x->nontext_cursor |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1688 && x->nontext_cursor != 0) |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1689 XFreeCursor (dpy, x->nontext_cursor); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1690 x->nontext_cursor = nontext_cursor; |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1691 |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1692 if (hourglass_cursor != x->hourglass_cursor |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1693 && x->hourglass_cursor != 0) |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1694 XFreeCursor (dpy, x->hourglass_cursor); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1695 x->hourglass_cursor = hourglass_cursor; |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1696 |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1697 if (mode_cursor != x->modeline_cursor |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1698 && x->modeline_cursor != 0) |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1699 XFreeCursor (dpy, f->output_data.x->modeline_cursor); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1700 x->modeline_cursor = mode_cursor; |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1701 |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1702 if (cross_cursor != x->cross_cursor |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1703 && x->cross_cursor != 0) |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1704 XFreeCursor (dpy, x->cross_cursor); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1705 x->cross_cursor = cross_cursor; |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1706 |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1707 if (horizontal_drag_cursor != x->horizontal_drag_cursor |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1708 && x->horizontal_drag_cursor != 0) |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1709 XFreeCursor (dpy, x->horizontal_drag_cursor); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1710 x->horizontal_drag_cursor = horizontal_drag_cursor; |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1711 |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1712 XFlush (dpy); |
389 | 1713 UNBLOCK_INPUT; |
25593
9aecfcf3cb43
(x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents:
25550
diff
changeset
|
1714 |
9aecfcf3cb43
(x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents:
25550
diff
changeset
|
1715 update_face_from_frame_parameter (f, Qmouse_color, arg); |
389 | 1716 } |
1717 | |
1718 void | |
771 | 1719 x_set_cursor_color (f, arg, oldval) |
1720 struct frame *f; | |
389 | 1721 Lisp_Object arg, oldval; |
1722 { | |
21779
6aaa0268fe91
(x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents:
21555
diff
changeset
|
1723 unsigned long fore_pixel, pixel; |
28355
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1724 int fore_pixel_allocated_p = 0, pixel_allocated_p = 0; |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1725 struct x_output *x = f->output_data.x; |
28355
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1726 |
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1727 if (!NILP (Vx_cursor_fore_pixel)) |
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1728 { |
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1729 fore_pixel = x_decode_color (f, Vx_cursor_fore_pixel, |
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1730 WHITE_PIX_DEFAULT (f)); |
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1731 fore_pixel_allocated_p = 1; |
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1732 } |
389 | 1733 else |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1734 fore_pixel = x->background_pixel; |
28355
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1735 |
21779
6aaa0268fe91
(x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents:
21555
diff
changeset
|
1736 pixel = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f)); |
28355
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1737 pixel_allocated_p = 1; |
21779
6aaa0268fe91
(x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents:
21555
diff
changeset
|
1738 |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
1739 /* Make sure that the cursor color differs from the background color. */ |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1740 if (pixel == x->background_pixel) |
389 | 1741 { |
28355
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1742 if (pixel_allocated_p) |
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1743 { |
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1744 x_free_colors (f, &pixel, 1); |
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1745 pixel_allocated_p = 0; |
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1746 } |
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1747 |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1748 pixel = x->mouse_pixel; |
21779
6aaa0268fe91
(x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents:
21555
diff
changeset
|
1749 if (pixel == fore_pixel) |
28355
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1750 { |
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1751 if (fore_pixel_allocated_p) |
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1752 { |
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1753 x_free_colors (f, &fore_pixel, 1); |
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1754 fore_pixel_allocated_p = 0; |
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1755 } |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1756 fore_pixel = x->background_pixel; |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1757 } |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1758 } |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1759 |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1760 unload_color (f, x->cursor_foreground_pixel); |
28355
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1761 if (!fore_pixel_allocated_p) |
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1762 fore_pixel = x_copy_color (f, fore_pixel); |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1763 x->cursor_foreground_pixel = fore_pixel; |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1764 |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1765 unload_color (f, x->cursor_pixel); |
28355
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1766 if (!pixel_allocated_p) |
11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents:
28347
diff
changeset
|
1767 pixel = x_copy_color (f, pixel); |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1768 x->cursor_pixel = pixel; |
21779
6aaa0268fe91
(x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents:
21555
diff
changeset
|
1769 |
1050
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
1770 if (FRAME_X_WINDOW (f) != 0) |
389 | 1771 { |
1772 BLOCK_INPUT; | |
37762
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1773 XSetBackground (FRAME_X_DISPLAY (f), x->cursor_gc, x->cursor_pixel); |
ddf0a963805f
(x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents:
37608
diff
changeset
|
1774 XSetForeground (FRAME_X_DISPLAY (f), x->cursor_gc, fore_pixel); |
389 | 1775 UNBLOCK_INPUT; |
1776 | |
1719
48f539ac6921
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1657
diff
changeset
|
1777 if (FRAME_VISIBLE_P (f)) |
389 | 1778 { |
15999
0e148af7d4ec
(x_set_cursor_color): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents:
15942
diff
changeset
|
1779 x_update_cursor (f, 0); |
0e148af7d4ec
(x_set_cursor_color): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents:
15942
diff
changeset
|
1780 x_update_cursor (f, 1); |
389 | 1781 } |
1782 } | |
25593
9aecfcf3cb43
(x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents:
25550
diff
changeset
|
1783 |
9aecfcf3cb43
(x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents:
25550
diff
changeset
|
1784 update_face_from_frame_parameter (f, Qcursor_color, arg); |
389 | 1785 } |
14482
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
1786 |
771 | 1787 /* Set the border-color of frame F to value described by ARG. |
389 | 1788 ARG can be a string naming a color. |
1789 The border-color is used for the border that is drawn by the X server. | |
1790 Note that this does not fully take effect if done before | |
771 | 1791 F has an x-window; it must be redone when the window is created. |
389 | 1792 |
1793 Note: this is done in two routines because of the way X10 works. | |
1794 | |
1795 Note: under X11, this is normally the province of the window manager, | |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
1796 and so emacs' border colors may be overridden. */ |
389 | 1797 |
1798 void | |
771 | 1799 x_set_border_color (f, arg, oldval) |
1800 struct frame *f; | |
389 | 1801 Lisp_Object arg, oldval; |
1802 { | |
1803 int pix; | |
1804 | |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
1805 CHECK_STRING (arg); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
1806 pix = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f)); |
771 | 1807 x_set_border_pixel (f, pix); |
25593
9aecfcf3cb43
(x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents:
25550
diff
changeset
|
1808 update_face_from_frame_parameter (f, Qborder_color, arg); |
389 | 1809 } |
1810 | |
771 | 1811 /* Set the border-color of frame F to pixel value PIX. |
389 | 1812 Note that this does not fully take effect if done before |
771 | 1813 F has an x-window. */ |
1814 | |
21536
468585662fa8
(x_destroy_bitmap): Declare as void, not int.
Karl Heuer <kwzh@gnu.org>
parents:
21267
diff
changeset
|
1815 void |
771 | 1816 x_set_border_pixel (f, pix) |
1817 struct frame *f; | |
389 | 1818 int pix; |
1819 { | |
21779
6aaa0268fe91
(x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents:
21555
diff
changeset
|
1820 unload_color (f, f->output_data.x->border_pixel); |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1821 f->output_data.x->border_pixel = pix; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1822 |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1823 if (FRAME_X_WINDOW (f) != 0 && f->output_data.x->border_width > 0) |
389 | 1824 { |
1825 BLOCK_INPUT; | |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
1826 XSetWindowBorder (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
11882
8b3575269610
(hack_wm_protocols): Cast args of XGetWindowProperty.
Karl Heuer <kwzh@gnu.org>
parents:
11774
diff
changeset
|
1827 (unsigned long)pix); |
389 | 1828 UNBLOCK_INPUT; |
1829 | |
1719
48f539ac6921
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1657
diff
changeset
|
1830 if (FRAME_VISIBLE_P (f)) |
771 | 1831 redraw_frame (f); |
389 | 1832 } |
1833 } | |
1834 | |
28347
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1835 |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1836 /* Value is the internal representation of the specified cursor type |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1837 ARG. If type is BAR_CURSOR, return in *WIDTH the specified width |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1838 of the bar cursor. */ |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1839 |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1840 enum text_cursor_kinds |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1841 x_specified_cursor_type (arg, width) |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1842 Lisp_Object arg; |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1843 int *width; |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1844 { |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1845 enum text_cursor_kinds type; |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1846 |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1786
diff
changeset
|
1847 if (EQ (arg, Qbar)) |
10742
e4d6f6f1fc17
(x_set_cursor_type): Set cursor_width field.
Richard M. Stallman <rms@gnu.org>
parents:
10717
diff
changeset
|
1848 { |
28347
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1849 type = BAR_CURSOR; |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1850 *width = 2; |
10742
e4d6f6f1fc17
(x_set_cursor_type): Set cursor_width field.
Richard M. Stallman <rms@gnu.org>
parents:
10717
diff
changeset
|
1851 } |
28050
79a67f9da183
(x_set_cursor_type): If ARG is nil, give frame no cursor.
Gerd Moellmann <gerd@gnu.org>
parents:
28044
diff
changeset
|
1852 else if (CONSP (arg) |
79a67f9da183
(x_set_cursor_type): If ARG is nil, give frame no cursor.
Gerd Moellmann <gerd@gnu.org>
parents:
28044
diff
changeset
|
1853 && EQ (XCAR (arg), Qbar) |
79a67f9da183
(x_set_cursor_type): If ARG is nil, give frame no cursor.
Gerd Moellmann <gerd@gnu.org>
parents:
28044
diff
changeset
|
1854 && INTEGERP (XCDR (arg)) |
79a67f9da183
(x_set_cursor_type): If ARG is nil, give frame no cursor.
Gerd Moellmann <gerd@gnu.org>
parents:
28044
diff
changeset
|
1855 && XINT (XCDR (arg)) >= 0) |
10742
e4d6f6f1fc17
(x_set_cursor_type): Set cursor_width field.
Richard M. Stallman <rms@gnu.org>
parents:
10717
diff
changeset
|
1856 { |
28347
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1857 type = BAR_CURSOR; |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1858 *width = XINT (XCDR (arg)); |
10742
e4d6f6f1fc17
(x_set_cursor_type): Set cursor_width field.
Richard M. Stallman <rms@gnu.org>
parents:
10717
diff
changeset
|
1859 } |
28050
79a67f9da183
(x_set_cursor_type): If ARG is nil, give frame no cursor.
Gerd Moellmann <gerd@gnu.org>
parents:
28044
diff
changeset
|
1860 else if (NILP (arg)) |
28347
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1861 type = NO_CURSOR; |
3134
efdaaa695ad4
(x_set_cursor_type): If arg not recognized, use box cursor.
Richard M. Stallman <rms@gnu.org>
parents:
3108
diff
changeset
|
1862 else |
10742
e4d6f6f1fc17
(x_set_cursor_type): Set cursor_width field.
Richard M. Stallman <rms@gnu.org>
parents:
10717
diff
changeset
|
1863 /* Treat anything unknown as "box cursor". |
e4d6f6f1fc17
(x_set_cursor_type): Set cursor_width field.
Richard M. Stallman <rms@gnu.org>
parents:
10717
diff
changeset
|
1864 It was bad to signal an error; people have trouble fixing |
e4d6f6f1fc17
(x_set_cursor_type): Set cursor_width field.
Richard M. Stallman <rms@gnu.org>
parents:
10717
diff
changeset
|
1865 .Xdefaults with Emacs, when it has something bad in it. */ |
28347
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1866 type = FILLED_BOX_CURSOR; |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1867 |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1868 return type; |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1869 } |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1870 |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1871 void |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1872 x_set_cursor_type (f, arg, oldval) |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1873 FRAME_PTR f; |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1874 Lisp_Object arg, oldval; |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1875 { |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1876 int width; |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1877 |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1878 FRAME_DESIRED_CURSOR (f) = x_specified_cursor_type (arg, &width); |
ce7dddf6dfb7
(x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28229
diff
changeset
|
1879 f->output_data.x->cursor_width = width; |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1786
diff
changeset
|
1880 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1786
diff
changeset
|
1881 /* Make sure the cursor gets redrawn. This is overkill, but how |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1786
diff
changeset
|
1882 often do people change cursor types? */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1786
diff
changeset
|
1883 update_mode_lines++; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1786
diff
changeset
|
1884 } |
14482
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
1885 |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1786
diff
changeset
|
1886 void |
771 | 1887 x_set_icon_type (f, arg, oldval) |
1888 struct frame *f; | |
389 | 1889 Lisp_Object arg, oldval; |
1890 { | |
1891 int result; | |
1892 | |
9543
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
1893 if (STRINGP (arg)) |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
1894 { |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
1895 if (STRINGP (oldval) && EQ (Fstring_equal (oldval, arg), Qt)) |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
1896 return; |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
1897 } |
3cf8aa53c4cf
(x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents:
9528
diff
changeset
|
1898 else if (!STRINGP (oldval) && EQ (oldval, Qnil) == EQ (arg, Qnil)) |
389 | 1899 return; |
1900 | |
1901 BLOCK_INPUT; | |
485 | 1902 if (NILP (arg)) |
12073 | 1903 result = x_text_icon (f, |
12276
2e376a4397bc
(x_report_frame_params, x_set_icon_type, x_set_icon_name)
Richard M. Stallman <rms@gnu.org>
parents:
12209
diff
changeset
|
1904 (char *) XSTRING ((!NILP (f->icon_name) |
2e376a4397bc
(x_report_frame_params, x_set_icon_type, x_set_icon_name)
Richard M. Stallman <rms@gnu.org>
parents:
12209
diff
changeset
|
1905 ? f->icon_name |
12073 | 1906 : f->name))->data); |
9563 | 1907 else |
1908 result = x_bitmap_icon (f, arg); | |
389 | 1909 |
1910 if (result) | |
1911 { | |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
1912 UNBLOCK_INPUT; |
9353
30659ed71a1b
(x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents:
9329
diff
changeset
|
1913 error ("No icon window available"); |
389 | 1914 } |
1915 | |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
1916 XFlush (FRAME_X_DISPLAY (f)); |
389 | 1917 UNBLOCK_INPUT; |
1918 } | |
1919 | |
9563 | 1920 /* Return non-nil if frame F wants a bitmap icon. */ |
1921 | |
1922 Lisp_Object | |
9353
30659ed71a1b
(x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents:
9329
diff
changeset
|
1923 x_icon_type (f) |
30659ed71a1b
(x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents:
9329
diff
changeset
|
1924 FRAME_PTR f; |
30659ed71a1b
(x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents:
9329
diff
changeset
|
1925 { |
30659ed71a1b
(x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents:
9329
diff
changeset
|
1926 Lisp_Object tem; |
30659ed71a1b
(x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents:
9329
diff
changeset
|
1927 |
30659ed71a1b
(x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents:
9329
diff
changeset
|
1928 tem = assq_no_quit (Qicon_type, f->param_alist); |
9563 | 1929 if (CONSP (tem)) |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
1930 return XCDR (tem); |
9563 | 1931 else |
1932 return Qnil; | |
9353
30659ed71a1b
(x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents:
9329
diff
changeset
|
1933 } |
30659ed71a1b
(x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents:
9329
diff
changeset
|
1934 |
12073 | 1935 void |
1936 x_set_icon_name (f, arg, oldval) | |
1937 struct frame *f; | |
1938 Lisp_Object arg, oldval; | |
1939 { | |
1940 int result; | |
1941 | |
1942 if (STRINGP (arg)) | |
1943 { | |
1944 if (STRINGP (oldval) && EQ (Fstring_equal (oldval, arg), Qt)) | |
1945 return; | |
1946 } | |
1947 else if (!STRINGP (oldval) && EQ (oldval, Qnil) == EQ (arg, Qnil)) | |
1948 return; | |
1949 | |
12276
2e376a4397bc
(x_report_frame_params, x_set_icon_type, x_set_icon_name)
Richard M. Stallman <rms@gnu.org>
parents:
12209
diff
changeset
|
1950 f->icon_name = arg; |
12073 | 1951 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
1952 if (f->output_data.x->icon_bitmap != 0) |
12073 | 1953 return; |
1954 | |
1955 BLOCK_INPUT; | |
1956 | |
1957 result = x_text_icon (f, | |
12276
2e376a4397bc
(x_report_frame_params, x_set_icon_type, x_set_icon_name)
Richard M. Stallman <rms@gnu.org>
parents:
12209
diff
changeset
|
1958 (char *) XSTRING ((!NILP (f->icon_name) |
2e376a4397bc
(x_report_frame_params, x_set_icon_type, x_set_icon_name)
Richard M. Stallman <rms@gnu.org>
parents:
12209
diff
changeset
|
1959 ? f->icon_name |
14482
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
1960 : !NILP (f->title) |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
1961 ? f->title |
12073 | 1962 : f->name))->data); |
1963 | |
1964 if (result) | |
1965 { | |
1966 UNBLOCK_INPUT; | |
1967 error ("No icon window available"); | |
1968 } | |
1969 | |
1970 XFlush (FRAME_X_DISPLAY (f)); | |
1971 UNBLOCK_INPUT; | |
1972 } | |
14482
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
1973 |
389 | 1974 void |
771 | 1975 x_set_font (f, arg, oldval) |
1976 struct frame *f; | |
389 | 1977 Lisp_Object arg, oldval; |
1978 { | |
3075
878381e48b0d
* xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents:
3048
diff
changeset
|
1979 Lisp_Object result; |
17048
2da4e24ceee5
Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16966
diff
changeset
|
1980 Lisp_Object fontset_name; |
18631
62bcc6aff013
(x_set_font): Funcall Qface_set_after_frame_default.
Richard M. Stallman <rms@gnu.org>
parents:
18612
diff
changeset
|
1981 Lisp_Object frame; |
36446
59630511a774
(x_set_font): Handle case of x_new_fontset returning the
Gerd Moellmann <gerd@gnu.org>
parents:
36441
diff
changeset
|
1982 int old_fontset = f->output_data.x->fontset; |
389 | 1983 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
1984 CHECK_STRING (arg); |
389 | 1985 |
21555
0927f341e390
(x_set_font): Give 2nd arg nil to Fquery_fontset.
Kenichi Handa <handa@m17n.org>
parents:
21549
diff
changeset
|
1986 fontset_name = Fquery_fontset (arg, Qnil); |
17048
2da4e24ceee5
Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16966
diff
changeset
|
1987 |
389 | 1988 BLOCK_INPUT; |
17048
2da4e24ceee5
Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16966
diff
changeset
|
1989 result = (STRINGP (fontset_name) |
2da4e24ceee5
Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16966
diff
changeset
|
1990 ? x_new_fontset (f, XSTRING (fontset_name)->data) |
2da4e24ceee5
Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16966
diff
changeset
|
1991 : x_new_font (f, XSTRING (arg)->data)); |
389 | 1992 UNBLOCK_INPUT; |
1993 | |
3075
878381e48b0d
* xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents:
3048
diff
changeset
|
1994 if (EQ (result, Qnil)) |
13867
19a05b5a597d
(check_x_display_info, check_x_frame, x_set_font)
Richard M. Stallman <rms@gnu.org>
parents:
13781
diff
changeset
|
1995 error ("Font `%s' is not defined", XSTRING (arg)->data); |
3075
878381e48b0d
* xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents:
3048
diff
changeset
|
1996 else if (EQ (result, Qt)) |
24589
316c00e8bc62
(x_set_font): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
24412
diff
changeset
|
1997 error ("The characters of the given font have varying widths"); |
3075
878381e48b0d
* xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents:
3048
diff
changeset
|
1998 else if (STRINGP (result)) |
878381e48b0d
* xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents:
3048
diff
changeset
|
1999 { |
36446
59630511a774
(x_set_font): Handle case of x_new_fontset returning the
Gerd Moellmann <gerd@gnu.org>
parents:
36441
diff
changeset
|
2000 if (STRINGP (fontset_name)) |
59630511a774
(x_set_font): Handle case of x_new_fontset returning the
Gerd Moellmann <gerd@gnu.org>
parents:
36441
diff
changeset
|
2001 { |
59630511a774
(x_set_font): Handle case of x_new_fontset returning the
Gerd Moellmann <gerd@gnu.org>
parents:
36441
diff
changeset
|
2002 /* Fontset names are built from ASCII font names, so the |
59630511a774
(x_set_font): Handle case of x_new_fontset returning the
Gerd Moellmann <gerd@gnu.org>
parents:
36441
diff
changeset
|
2003 names may be equal despite there was a change. */ |
59630511a774
(x_set_font): Handle case of x_new_fontset returning the
Gerd Moellmann <gerd@gnu.org>
parents:
36441
diff
changeset
|
2004 if (old_fontset == f->output_data.x->fontset) |
59630511a774
(x_set_font): Handle case of x_new_fontset returning the
Gerd Moellmann <gerd@gnu.org>
parents:
36441
diff
changeset
|
2005 return; |
59630511a774
(x_set_font): Handle case of x_new_fontset returning the
Gerd Moellmann <gerd@gnu.org>
parents:
36441
diff
changeset
|
2006 } |
59630511a774
(x_set_font): Handle case of x_new_fontset returning the
Gerd Moellmann <gerd@gnu.org>
parents:
36441
diff
changeset
|
2007 else if (!NILP (Fequal (result, oldval))) |
35859
c9edddbb8dbf
(x_set_font): If font hasn't changed, avoid recomputing
Gerd Moellmann <gerd@gnu.org>
parents:
35819
diff
changeset
|
2008 return; |
36446
59630511a774
(x_set_font): Handle case of x_new_fontset returning the
Gerd Moellmann <gerd@gnu.org>
parents:
36441
diff
changeset
|
2009 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2010 store_frame_param (f, Qfont, result); |
3075
878381e48b0d
* xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents:
3048
diff
changeset
|
2011 recompute_basic_faces (f); |
878381e48b0d
* xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents:
3048
diff
changeset
|
2012 } |
878381e48b0d
* xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents:
3048
diff
changeset
|
2013 else |
878381e48b0d
* xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents:
3048
diff
changeset
|
2014 abort (); |
18631
62bcc6aff013
(x_set_font): Funcall Qface_set_after_frame_default.
Richard M. Stallman <rms@gnu.org>
parents:
18612
diff
changeset
|
2015 |
25363
bf0488244270
Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents:
25335
diff
changeset
|
2016 do_pending_window_change (0); |
25153
fc8435c2ae0e
(x_set_internal_border_width):
Richard M. Stallman <rms@gnu.org>
parents:
25082
diff
changeset
|
2017 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2018 /* Don't call `face-set-after-frame-default' when faces haven't been |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2019 initialized yet. This is the case when called from |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2020 Fx_create_frame. In that case, the X widget or window doesn't |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2021 exist either, and we can end up in x_report_frame_params with a |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2022 null widget which gives a segfault. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2023 if (FRAME_FACE_CACHE (f)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2024 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2025 XSETFRAME (frame, f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2026 call1 (Qface_set_after_frame_default, frame); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2027 } |
389 | 2028 } |
2029 | |
41722
fd499c5c75d2
(x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents:
41449
diff
changeset
|
2030 static void |
fd499c5c75d2
(x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents:
41449
diff
changeset
|
2031 x_set_fringe_width (f, new_value, old_value) |
fd499c5c75d2
(x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents:
41449
diff
changeset
|
2032 struct frame *f; |
fd499c5c75d2
(x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents:
41449
diff
changeset
|
2033 Lisp_Object new_value, old_value; |
fd499c5c75d2
(x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents:
41449
diff
changeset
|
2034 { |
fd499c5c75d2
(x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents:
41449
diff
changeset
|
2035 x_compute_fringe_widths (f, 1); |
fd499c5c75d2
(x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents:
41449
diff
changeset
|
2036 } |
fd499c5c75d2
(x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents:
41449
diff
changeset
|
2037 |
389 | 2038 void |
771 | 2039 x_set_border_width (f, arg, oldval) |
2040 struct frame *f; | |
389 | 2041 Lisp_Object arg, oldval; |
2042 { | |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
2043 CHECK_NUMBER (arg); |
389 | 2044 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
2045 if (XINT (arg) == f->output_data.x->border_width) |
389 | 2046 return; |
2047 | |
1050
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
2048 if (FRAME_X_WINDOW (f) != 0) |
389 | 2049 error ("Cannot change the border width of a window"); |
2050 | |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
2051 f->output_data.x->border_width = XINT (arg); |
389 | 2052 } |
2053 | |
2054 void | |
771 | 2055 x_set_internal_border_width (f, arg, oldval) |
2056 struct frame *f; | |
389 | 2057 Lisp_Object arg, oldval; |
2058 { | |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
2059 int old = f->output_data.x->internal_border_width; |
389 | 2060 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
2061 CHECK_NUMBER (arg); |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
2062 f->output_data.x->internal_border_width = XINT (arg); |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
2063 if (f->output_data.x->internal_border_width < 0) |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
2064 f->output_data.x->internal_border_width = 0; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
2065 |
16396
4e4cc27b2a2a
(x_set_internal_border_width): Only change
Richard M. Stallman <rms@gnu.org>
parents:
16357
diff
changeset
|
2066 #ifdef USE_X_TOOLKIT |
16351
ac552926fc7e
(x_set_internal_border_width, Fx_create_frame):
Richard M. Stallman <rms@gnu.org>
parents:
16305
diff
changeset
|
2067 if (f->output_data.x->edit_widget) |
21536
468585662fa8
(x_destroy_bitmap): Declare as void, not int.
Karl Heuer <kwzh@gnu.org>
parents:
21267
diff
changeset
|
2068 widget_store_internal_border (f->output_data.x->edit_widget); |
16396
4e4cc27b2a2a
(x_set_internal_border_width): Only change
Richard M. Stallman <rms@gnu.org>
parents:
16357
diff
changeset
|
2069 #endif |
16351
ac552926fc7e
(x_set_internal_border_width, Fx_create_frame):
Richard M. Stallman <rms@gnu.org>
parents:
16305
diff
changeset
|
2070 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
2071 if (f->output_data.x->internal_border_width == old) |
389 | 2072 return; |
2073 | |
1050
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
2074 if (FRAME_X_WINDOW (f) != 0) |
389 | 2075 { |
5899
4e8f26a0f2b7
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5721
diff
changeset
|
2076 x_set_window_size (f, 0, f->width, f->height); |
771 | 2077 SET_FRAME_GARBAGED (f); |
25363
bf0488244270
Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents:
25335
diff
changeset
|
2078 do_pending_window_change (0); |
389 | 2079 } |
40437
1ee61682a51f
(x_set_internal_border_width): Set frame garbaged
Gerd Moellmann <gerd@gnu.org>
parents:
40427
diff
changeset
|
2080 else |
1ee61682a51f
(x_set_internal_border_width): Set frame garbaged
Gerd Moellmann <gerd@gnu.org>
parents:
40427
diff
changeset
|
2081 SET_FRAME_GARBAGED (f); |
389 | 2082 } |
2083 | |
2136
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2084 void |
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2085 x_set_visibility (f, value, oldval) |
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2086 struct frame *f; |
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2087 Lisp_Object value, oldval; |
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2088 { |
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2089 Lisp_Object frame; |
9285
75f1c0d90b3d
(x_set_frame_parameters, x_set_visibility, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents:
9240
diff
changeset
|
2090 XSETFRAME (frame, f); |
2136
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2091 |
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2092 if (NILP (value)) |
5899
4e8f26a0f2b7
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5721
diff
changeset
|
2093 Fmake_frame_invisible (frame, Qt); |
2294
9bce20507666
Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents:
2283
diff
changeset
|
2094 else if (EQ (value, Qicon)) |
9bce20507666
Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents:
2283
diff
changeset
|
2095 Ficonify_frame (frame); |
9bce20507666
Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents:
2283
diff
changeset
|
2096 else |
2136
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2097 Fmake_frame_visible (frame); |
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2098 } |
31930
9c779861abff
(x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents:
31902
diff
changeset
|
2099 |
14482
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2100 |
31930
9c779861abff
(x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents:
31902
diff
changeset
|
2101 /* Change window heights in windows rooted in WINDOW by N lines. */ |
9c779861abff
(x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents:
31902
diff
changeset
|
2102 |
2136
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2103 static void |
31930
9c779861abff
(x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents:
31902
diff
changeset
|
2104 x_change_window_heights (window, n) |
2136
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2105 Lisp_Object window; |
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2106 int n; |
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2107 { |
3477
c079a2d6cf0e
(x_set_menu_bar_lines_1): Adjust just the uppermost child
Richard M. Stallman <rms@gnu.org>
parents:
3447
diff
changeset
|
2108 struct window *w = XWINDOW (window); |
c079a2d6cf0e
(x_set_menu_bar_lines_1): Adjust just the uppermost child
Richard M. Stallman <rms@gnu.org>
parents:
3447
diff
changeset
|
2109 |
9329
4e1048594e7f
(x_set_menu_bar_lines_1): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents:
9327
diff
changeset
|
2110 XSETFASTINT (w->top, XFASTINT (w->top) + n); |
4e1048594e7f
(x_set_menu_bar_lines_1): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents:
9327
diff
changeset
|
2111 XSETFASTINT (w->height, XFASTINT (w->height) - n); |
3477
c079a2d6cf0e
(x_set_menu_bar_lines_1): Adjust just the uppermost child
Richard M. Stallman <rms@gnu.org>
parents:
3447
diff
changeset
|
2112 |
28010
5e3c139838a6
(x_set_menu_bar_lines_1): Adjust window's orig_top and
Gerd Moellmann <gerd@gnu.org>
parents:
28001
diff
changeset
|
2113 if (INTEGERP (w->orig_top)) |
5e3c139838a6
(x_set_menu_bar_lines_1): Adjust window's orig_top and
Gerd Moellmann <gerd@gnu.org>
parents:
28001
diff
changeset
|
2114 XSETFASTINT (w->orig_top, XFASTINT (w->orig_top) + n); |
5e3c139838a6
(x_set_menu_bar_lines_1): Adjust window's orig_top and
Gerd Moellmann <gerd@gnu.org>
parents:
28001
diff
changeset
|
2115 if (INTEGERP (w->orig_height)) |
5e3c139838a6
(x_set_menu_bar_lines_1): Adjust window's orig_top and
Gerd Moellmann <gerd@gnu.org>
parents:
28001
diff
changeset
|
2116 XSETFASTINT (w->orig_height, XFASTINT (w->orig_height) - n); |
5e3c139838a6
(x_set_menu_bar_lines_1): Adjust window's orig_top and
Gerd Moellmann <gerd@gnu.org>
parents:
28001
diff
changeset
|
2117 |
3477
c079a2d6cf0e
(x_set_menu_bar_lines_1): Adjust just the uppermost child
Richard M. Stallman <rms@gnu.org>
parents:
3447
diff
changeset
|
2118 /* Handle just the top child in a vertical split. */ |
c079a2d6cf0e
(x_set_menu_bar_lines_1): Adjust just the uppermost child
Richard M. Stallman <rms@gnu.org>
parents:
3447
diff
changeset
|
2119 if (!NILP (w->vchild)) |
31930
9c779861abff
(x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents:
31902
diff
changeset
|
2120 x_change_window_heights (w->vchild, n); |
3477
c079a2d6cf0e
(x_set_menu_bar_lines_1): Adjust just the uppermost child
Richard M. Stallman <rms@gnu.org>
parents:
3447
diff
changeset
|
2121 |
c079a2d6cf0e
(x_set_menu_bar_lines_1): Adjust just the uppermost child
Richard M. Stallman <rms@gnu.org>
parents:
3447
diff
changeset
|
2122 /* Adjust all children in a horizontal split. */ |
c079a2d6cf0e
(x_set_menu_bar_lines_1): Adjust just the uppermost child
Richard M. Stallman <rms@gnu.org>
parents:
3447
diff
changeset
|
2123 for (window = w->hchild; !NILP (window); window = w->next) |
2136
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2124 { |
3477
c079a2d6cf0e
(x_set_menu_bar_lines_1): Adjust just the uppermost child
Richard M. Stallman <rms@gnu.org>
parents:
3447
diff
changeset
|
2125 w = XWINDOW (window); |
31930
9c779861abff
(x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents:
31902
diff
changeset
|
2126 x_change_window_heights (window, n); |
2136
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2127 } |
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2128 } |
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2129 |
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2130 void |
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2131 x_set_menu_bar_lines (f, value, oldval) |
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2132 struct frame *f; |
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2133 Lisp_Object value, oldval; |
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2134 { |
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2135 int nlines; |
25715
feaedc03dbc8
(x_set_background_color): Remove unused variable(s).
Gerd Moellmann <gerd@gnu.org>
parents:
25691
diff
changeset
|
2136 #ifndef USE_X_TOOLKIT |
2136
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2137 int olines = FRAME_MENU_BAR_LINES (f); |
25715
feaedc03dbc8
(x_set_background_color): Remove unused variable(s).
Gerd Moellmann <gerd@gnu.org>
parents:
25691
diff
changeset
|
2138 #endif |
2136
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2139 |
2880
9a78169e44df
* xfns.c (x_set_menu_bar_lines): Minibuffer-only frames can't have
Jim Blandy <jimb@redhat.com>
parents:
2842
diff
changeset
|
2140 /* Right now, menu bars don't work properly in minibuf-only frames; |
9a78169e44df
* xfns.c (x_set_menu_bar_lines): Minibuffer-only frames can't have
Jim Blandy <jimb@redhat.com>
parents:
2842
diff
changeset
|
2141 most of the commands try to apply themselves to the minibuffer |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2142 frame itself, and get an error because you can't switch buffers |
2880
9a78169e44df
* xfns.c (x_set_menu_bar_lines): Minibuffer-only frames can't have
Jim Blandy <jimb@redhat.com>
parents:
2842
diff
changeset
|
2143 in or split the minibuffer window. */ |
2885
cb1709f302e9
(x_set_menu_bar_lines): Fix typo in last change.
Richard M. Stallman <rms@gnu.org>
parents:
2880
diff
changeset
|
2144 if (FRAME_MINIBUF_ONLY_P (f)) |
2880
9a78169e44df
* xfns.c (x_set_menu_bar_lines): Minibuffer-only frames can't have
Jim Blandy <jimb@redhat.com>
parents:
2842
diff
changeset
|
2145 return; |
9a78169e44df
* xfns.c (x_set_menu_bar_lines): Minibuffer-only frames can't have
Jim Blandy <jimb@redhat.com>
parents:
2842
diff
changeset
|
2146 |
9103
948e8acb6990
(x_set_frame_parameters, x_set_menu_bar_lines, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents:
9022
diff
changeset
|
2147 if (INTEGERP (value)) |
2136
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2148 nlines = XINT (value); |
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2149 else |
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2150 nlines = 0; |
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2151 |
17556
c0f8f4264f7a
(x_set_menu_bar_lines): Increment windows_or_buffers_changed.
Richard M. Stallman <rms@gnu.org>
parents:
17106
diff
changeset
|
2152 /* Make sure we redisplay all windows in this frame. */ |
c0f8f4264f7a
(x_set_menu_bar_lines): Increment windows_or_buffers_changed.
Richard M. Stallman <rms@gnu.org>
parents:
17106
diff
changeset
|
2153 windows_or_buffers_changed++; |
c0f8f4264f7a
(x_set_menu_bar_lines): Increment windows_or_buffers_changed.
Richard M. Stallman <rms@gnu.org>
parents:
17106
diff
changeset
|
2154 |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
2155 #ifdef USE_X_TOOLKIT |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
2156 FRAME_MENU_BAR_LINES (f) = 0; |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
2157 if (nlines) |
12832
0d750e41c4f2
(x_set_menu_bar_lines) [USE_X_TOOLKIT]: When turning
Richard M. Stallman <rms@gnu.org>
parents:
12773
diff
changeset
|
2158 { |
0d750e41c4f2
(x_set_menu_bar_lines) [USE_X_TOOLKIT]: When turning
Richard M. Stallman <rms@gnu.org>
parents:
12773
diff
changeset
|
2159 FRAME_EXTERNAL_MENU_BAR (f) = 1; |
13734
714433bead7f
(x_set_menu_bar_lines) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
13508
diff
changeset
|
2160 if (FRAME_X_P (f) && f->output_data.x->menubar_widget == 0) |
12832
0d750e41c4f2
(x_set_menu_bar_lines) [USE_X_TOOLKIT]: When turning
Richard M. Stallman <rms@gnu.org>
parents:
12773
diff
changeset
|
2161 /* Make sure next redisplay shows the menu bar. */ |
0d750e41c4f2
(x_set_menu_bar_lines) [USE_X_TOOLKIT]: When turning
Richard M. Stallman <rms@gnu.org>
parents:
12773
diff
changeset
|
2162 XWINDOW (FRAME_SELECTED_WINDOW (f))->update_mode_line = Qt; |
0d750e41c4f2
(x_set_menu_bar_lines) [USE_X_TOOLKIT]: When turning
Richard M. Stallman <rms@gnu.org>
parents:
12773
diff
changeset
|
2163 } |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
2164 else |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
2165 { |
5900
284c0d70a50a
(x_set_menu_bar_lines) [USE_X_TOOLKIT]: Dont Call XtDestroyWidget but
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5899
diff
changeset
|
2166 if (FRAME_EXTERNAL_MENU_BAR (f) == 1) |
284c0d70a50a
(x_set_menu_bar_lines) [USE_X_TOOLKIT]: Dont Call XtDestroyWidget but
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5899
diff
changeset
|
2167 free_frame_menubar (f); |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
2168 FRAME_EXTERNAL_MENU_BAR (f) = 0; |
13734
714433bead7f
(x_set_menu_bar_lines) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
13508
diff
changeset
|
2169 if (FRAME_X_P (f)) |
714433bead7f
(x_set_menu_bar_lines) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
13508
diff
changeset
|
2170 f->output_data.x->menubar_widget = 0; |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
2171 } |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
2172 #else /* not USE_X_TOOLKIT */ |
2136
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
2173 FRAME_MENU_BAR_LINES (f) = nlines; |
31930
9c779861abff
(x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents:
31902
diff
changeset
|
2174 x_change_window_heights (f->root_window, nlines - olines); |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
2175 #endif /* not USE_X_TOOLKIT */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2176 adjust_glyphs (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2177 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2178 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2179 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2180 /* Set the number of lines used for the tool bar of frame F to VALUE. |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2181 VALUE not an integer, or < 0 means set the lines to zero. OLDVAL |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2182 is the old number of tool bar lines. This function changes the |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2183 height of all windows on frame F to match the new tool bar height. |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2184 The frame's height doesn't change. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2185 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2186 void |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25528
diff
changeset
|
2187 x_set_tool_bar_lines (f, value, oldval) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2188 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2189 Lisp_Object value, oldval; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2190 { |
31930
9c779861abff
(x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents:
31902
diff
changeset
|
2191 int delta, nlines, root_height; |
9c779861abff
(x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents:
31902
diff
changeset
|
2192 Lisp_Object root_window; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2193 |
35819
74e2d9de2fc1
(x_set_tool_bar_lines): Do nothing If frame is
Gerd Moellmann <gerd@gnu.org>
parents:
35733
diff
changeset
|
2194 /* Treat tool bars like menu bars. */ |
74e2d9de2fc1
(x_set_tool_bar_lines): Do nothing If frame is
Gerd Moellmann <gerd@gnu.org>
parents:
35733
diff
changeset
|
2195 if (FRAME_MINIBUF_ONLY_P (f)) |
74e2d9de2fc1
(x_set_tool_bar_lines): Do nothing If frame is
Gerd Moellmann <gerd@gnu.org>
parents:
35733
diff
changeset
|
2196 return; |
74e2d9de2fc1
(x_set_tool_bar_lines): Do nothing If frame is
Gerd Moellmann <gerd@gnu.org>
parents:
35733
diff
changeset
|
2197 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2198 /* Use VALUE only if an integer >= 0. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2199 if (INTEGERP (value) && XINT (value) >= 0) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2200 nlines = XFASTINT (value); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2201 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2202 nlines = 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2203 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2204 /* Make sure we redisplay all windows in this frame. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2205 ++windows_or_buffers_changed; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2206 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25528
diff
changeset
|
2207 delta = nlines - FRAME_TOOL_BAR_LINES (f); |
31930
9c779861abff
(x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents:
31902
diff
changeset
|
2208 |
9c779861abff
(x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents:
31902
diff
changeset
|
2209 /* Don't resize the tool-bar to more than we have room for. */ |
9c779861abff
(x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents:
31902
diff
changeset
|
2210 root_window = FRAME_ROOT_WINDOW (f); |
9c779861abff
(x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents:
31902
diff
changeset
|
2211 root_height = XINT (XWINDOW (root_window)->height); |
9c779861abff
(x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents:
31902
diff
changeset
|
2212 if (root_height - delta < 1) |
9c779861abff
(x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents:
31902
diff
changeset
|
2213 { |
9c779861abff
(x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents:
31902
diff
changeset
|
2214 delta = root_height - 1; |
9c779861abff
(x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents:
31902
diff
changeset
|
2215 nlines = FRAME_TOOL_BAR_LINES (f) + delta; |
9c779861abff
(x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents:
31902
diff
changeset
|
2216 } |
9c779861abff
(x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents:
31902
diff
changeset
|
2217 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25528
diff
changeset
|
2218 FRAME_TOOL_BAR_LINES (f) = nlines; |
31930
9c779861abff
(x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents:
31902
diff
changeset
|
2219 x_change_window_heights (root_window, delta); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2220 adjust_glyphs (f); |
31999
d862c73ea0d5
(x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents:
31930
diff
changeset
|
2221 |
d862c73ea0d5
(x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents:
31930
diff
changeset
|
2222 /* We also have to make sure that the internal border at the top of |
d862c73ea0d5
(x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents:
31930
diff
changeset
|
2223 the frame, below the menu bar or tool bar, is redrawn when the |
d862c73ea0d5
(x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents:
31930
diff
changeset
|
2224 tool bar disappears. This is so because the internal border is |
d862c73ea0d5
(x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents:
31930
diff
changeset
|
2225 below the tool bar if one is displayed, but is below the menu bar |
d862c73ea0d5
(x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents:
31930
diff
changeset
|
2226 if there isn't a tool bar. The tool bar draws into the area |
d862c73ea0d5
(x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents:
31930
diff
changeset
|
2227 below the menu bar. */ |
d862c73ea0d5
(x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents:
31930
diff
changeset
|
2228 if (FRAME_X_WINDOW (f) && FRAME_TOOL_BAR_LINES (f) == 0) |
d862c73ea0d5
(x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents:
31930
diff
changeset
|
2229 { |
d862c73ea0d5
(x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents:
31930
diff
changeset
|
2230 updating_frame = f; |
d862c73ea0d5
(x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents:
31930
diff
changeset
|
2231 clear_frame (); |
33601
1ee8ea329b7b
(x_set_tool_bar_lines): When clearing the frame, also
Gerd Moellmann <gerd@gnu.org>
parents:
33589
diff
changeset
|
2232 clear_current_matrices (f); |
31999
d862c73ea0d5
(x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents:
31930
diff
changeset
|
2233 updating_frame = NULL; |
d862c73ea0d5
(x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents:
31930
diff
changeset
|
2234 } |
33747
e0e2461a24fe
(x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents:
33713
diff
changeset
|
2235 |
e0e2461a24fe
(x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents:
33713
diff
changeset
|
2236 /* If the tool bar gets smaller, the internal border below it |
e0e2461a24fe
(x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents:
33713
diff
changeset
|
2237 has to be cleared. It was formerly part of the display |
e0e2461a24fe
(x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents:
33713
diff
changeset
|
2238 of the larger tool bar, and updating windows won't clear it. */ |
e0e2461a24fe
(x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents:
33713
diff
changeset
|
2239 if (delta < 0) |
e0e2461a24fe
(x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents:
33713
diff
changeset
|
2240 { |
e0e2461a24fe
(x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents:
33713
diff
changeset
|
2241 int height = FRAME_INTERNAL_BORDER_WIDTH (f); |
e0e2461a24fe
(x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents:
33713
diff
changeset
|
2242 int width = PIXEL_WIDTH (f); |
e0e2461a24fe
(x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents:
33713
diff
changeset
|
2243 int y = nlines * CANON_Y_UNIT (f); |
e0e2461a24fe
(x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents:
33713
diff
changeset
|
2244 |
e0e2461a24fe
(x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents:
33713
diff
changeset
|
2245 BLOCK_INPUT; |
35579
65c31f59048a
* xfns.c (x_set_tool_bar_lines): Use x_clear_area instead of
Gerd Moellmann <gerd@gnu.org>
parents:
35566
diff
changeset
|
2246 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
65c31f59048a
* xfns.c (x_set_tool_bar_lines): Use x_clear_area instead of
Gerd Moellmann <gerd@gnu.org>
parents:
35566
diff
changeset
|
2247 0, y, width, height, False); |
33747
e0e2461a24fe
(x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents:
33713
diff
changeset
|
2248 UNBLOCK_INPUT; |
38625
0bfdfd449f4a
(x_set_tool_bar_lines): Clear the tool bar window's
Gerd Moellmann <gerd@gnu.org>
parents:
38575
diff
changeset
|
2249 |
0bfdfd449f4a
(x_set_tool_bar_lines): Clear the tool bar window's
Gerd Moellmann <gerd@gnu.org>
parents:
38575
diff
changeset
|
2250 if (WINDOWP (f->tool_bar_window)) |
0bfdfd449f4a
(x_set_tool_bar_lines): Clear the tool bar window's
Gerd Moellmann <gerd@gnu.org>
parents:
38575
diff
changeset
|
2251 clear_glyph_matrix (XWINDOW (f->tool_bar_window)->current_matrix); |
33747
e0e2461a24fe
(x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents:
33713
diff
changeset
|
2252 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2253 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2254 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2255 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2256 /* Set the foreground color for scroll bars on frame F to VALUE. |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2257 VALUE should be a string, a color name. If it isn't a string or |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2258 isn't a valid color name, do nothing. OLDVAL is the old value of |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2259 the frame parameter. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2260 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2261 void |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2262 x_set_scroll_bar_foreground (f, value, oldval) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2263 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2264 Lisp_Object value, oldval; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2265 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2266 unsigned long pixel; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2267 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2268 if (STRINGP (value)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2269 pixel = x_decode_color (f, value, BLACK_PIX_DEFAULT (f)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2270 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2271 pixel = -1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2272 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2273 if (f->output_data.x->scroll_bar_foreground_pixel != -1) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2274 unload_color (f, f->output_data.x->scroll_bar_foreground_pixel); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2275 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2276 f->output_data.x->scroll_bar_foreground_pixel = pixel; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2277 if (FRAME_X_WINDOW (f) && FRAME_VISIBLE_P (f)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2278 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2279 /* Remove all scroll bars because they have wrong colors. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2280 if (condemn_scroll_bars_hook) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2281 (*condemn_scroll_bars_hook) (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2282 if (judge_scroll_bars_hook) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2283 (*judge_scroll_bars_hook) (f); |
25593
9aecfcf3cb43
(x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents:
25550
diff
changeset
|
2284 |
9aecfcf3cb43
(x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents:
25550
diff
changeset
|
2285 update_face_from_frame_parameter (f, Qscroll_bar_foreground, value); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2286 redraw_frame (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2287 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2288 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2289 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2290 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2291 /* Set the background color for scroll bars on frame F to VALUE VALUE |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2292 should be a string, a color name. If it isn't a string or isn't a |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2293 valid color name, do nothing. OLDVAL is the old value of the frame |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2294 parameter. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2295 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2296 void |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2297 x_set_scroll_bar_background (f, value, oldval) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2298 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2299 Lisp_Object value, oldval; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2300 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2301 unsigned long pixel; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2302 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2303 if (STRINGP (value)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2304 pixel = x_decode_color (f, value, WHITE_PIX_DEFAULT (f)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2305 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2306 pixel = -1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2307 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2308 if (f->output_data.x->scroll_bar_background_pixel != -1) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2309 unload_color (f, f->output_data.x->scroll_bar_background_pixel); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2310 |
39619
1e12db2b25f0
(x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents:
39591
diff
changeset
|
2311 #ifdef USE_TOOLKIT_SCROLL_BARS |
1e12db2b25f0
(x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents:
39591
diff
changeset
|
2312 /* Scrollbar shadow colors. */ |
1e12db2b25f0
(x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents:
39591
diff
changeset
|
2313 if (f->output_data.x->scroll_bar_top_shadow_pixel != -1) |
1e12db2b25f0
(x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents:
39591
diff
changeset
|
2314 { |
1e12db2b25f0
(x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents:
39591
diff
changeset
|
2315 unload_color (f, f->output_data.x->scroll_bar_top_shadow_pixel); |
1e12db2b25f0
(x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents:
39591
diff
changeset
|
2316 f->output_data.x->scroll_bar_top_shadow_pixel = -1; |
1e12db2b25f0
(x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents:
39591
diff
changeset
|
2317 } |
1e12db2b25f0
(x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents:
39591
diff
changeset
|
2318 if (f->output_data.x->scroll_bar_bottom_shadow_pixel != -1) |
1e12db2b25f0
(x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents:
39591
diff
changeset
|
2319 { |
1e12db2b25f0
(x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents:
39591
diff
changeset
|
2320 unload_color (f, f->output_data.x->scroll_bar_bottom_shadow_pixel); |
1e12db2b25f0
(x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents:
39591
diff
changeset
|
2321 f->output_data.x->scroll_bar_bottom_shadow_pixel = -1; |
1e12db2b25f0
(x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents:
39591
diff
changeset
|
2322 } |
1e12db2b25f0
(x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents:
39591
diff
changeset
|
2323 #endif /* USE_TOOLKIT_SCROLL_BARS */ |
1e12db2b25f0
(x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents:
39591
diff
changeset
|
2324 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2325 f->output_data.x->scroll_bar_background_pixel = pixel; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2326 if (FRAME_X_WINDOW (f) && FRAME_VISIBLE_P (f)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2327 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2328 /* Remove all scroll bars because they have wrong colors. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2329 if (condemn_scroll_bars_hook) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2330 (*condemn_scroll_bars_hook) (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2331 if (judge_scroll_bars_hook) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2332 (*judge_scroll_bars_hook) (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2333 |
25593
9aecfcf3cb43
(x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents:
25550
diff
changeset
|
2334 update_face_from_frame_parameter (f, Qscroll_bar_background, value); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2335 redraw_frame (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2336 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2337 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2338 |
14482
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2339 |
30383 | 2340 /* Encode Lisp string STRING as a text in a format appropriate for |
30351
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2341 XICCC (X Inter Client Communication Conventions). |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2342 |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2343 If STRING contains only ASCII characters, do no conversion and |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2344 return the string data of STRING. Otherwise, encode the text by |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2345 CODING_SYSTEM, and return a newly allocated memory area which |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2346 should be freed by `xfree' by a caller. |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2347 |
43452
75677c801c26
(x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents:
43426
diff
changeset
|
2348 SELECTIONP non-zero means the string is being encoded for an X |
75677c801c26
(x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents:
43426
diff
changeset
|
2349 selection, so it is safe to run pre-write conversions (which |
75677c801c26
(x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents:
43426
diff
changeset
|
2350 may run Lisp code). |
75677c801c26
(x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents:
43426
diff
changeset
|
2351 |
30351
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2352 Store the byte length of resulting text in *TEXT_BYTES. |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2353 |
30354 | 2354 If the text contains only ASCII and Latin-1, store 1 in *STRING_P, |
30351
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2355 which means that the `encoding' of the result can be `STRING'. |
30354 | 2356 Otherwise store 0 in *STRINGP, which means that the `encoding' of |
30351
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2357 the result should be `COMPOUND_TEXT'. */ |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2358 |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2359 unsigned char * |
43452
75677c801c26
(x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents:
43426
diff
changeset
|
2360 x_encode_text (string, coding_system, selectionp, text_bytes, stringp) |
30351
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2361 Lisp_Object string, coding_system; |
30354 | 2362 int *text_bytes, *stringp; |
43452
75677c801c26
(x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents:
43426
diff
changeset
|
2363 int selectionp; |
30351
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2364 { |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2365 unsigned char *str = XSTRING (string)->data; |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2366 int chars = XSTRING (string)->size; |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2367 int bytes = STRING_BYTES (XSTRING (string)); |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2368 int charset_info; |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2369 int bufsize; |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2370 unsigned char *buf; |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2371 struct coding_system coding; |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2372 |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2373 charset_info = find_charset_in_text (str, chars, bytes, NULL, Qnil); |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2374 if (charset_info == 0) |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2375 { |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2376 /* No multibyte character in OBJ. We need not encode it. */ |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2377 *text_bytes = bytes; |
30354 | 2378 *stringp = 1; |
30351
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2379 return str; |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2380 } |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2381 |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2382 setup_coding_system (coding_system, &coding); |
43452
75677c801c26
(x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents:
43426
diff
changeset
|
2383 if (selectionp |
75677c801c26
(x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents:
43426
diff
changeset
|
2384 && SYMBOLP (coding.pre_write_conversion) |
75677c801c26
(x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents:
43426
diff
changeset
|
2385 && !NILP (Ffboundp (coding.pre_write_conversion))) |
75677c801c26
(x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents:
43426
diff
changeset
|
2386 { |
75677c801c26
(x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents:
43426
diff
changeset
|
2387 string = run_pre_post_conversion_on_str (string, &coding, 1); |
75677c801c26
(x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents:
43426
diff
changeset
|
2388 str = XSTRING (string)->data; |
75677c801c26
(x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents:
43426
diff
changeset
|
2389 chars = XSTRING (string)->size; |
75677c801c26
(x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents:
43426
diff
changeset
|
2390 bytes = STRING_BYTES (XSTRING (string)); |
75677c801c26
(x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents:
43426
diff
changeset
|
2391 } |
30351
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2392 coding.src_multibyte = 1; |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2393 coding.dst_multibyte = 0; |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2394 coding.mode |= CODING_MODE_LAST_BLOCK; |
30354 | 2395 if (coding.type == coding_type_iso2022) |
2396 coding.flags |= CODING_FLAG_ISO_SAFE; | |
33242
421e3db4e24e
(x_encode_text): Suppress producing escape sequences for composition.
Kenichi Handa <handa@m17n.org>
parents:
32606
diff
changeset
|
2397 /* We suppress producing escape sequences for composition. */ |
421e3db4e24e
(x_encode_text): Suppress producing escape sequences for composition.
Kenichi Handa <handa@m17n.org>
parents:
32606
diff
changeset
|
2398 coding.composing = COMPOSITION_DISABLED; |
30351
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2399 bufsize = encoding_buffer_size (&coding, bytes); |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2400 buf = (unsigned char *) xmalloc (bufsize); |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2401 encode_coding (&coding, str, buf, bytes, bufsize); |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2402 *text_bytes = coding.produced; |
30354 | 2403 *stringp = (charset_info == 1 || !EQ (coding_system, Qcompound_text)); |
30351
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2404 return buf; |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2405 } |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2406 |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2407 |
4650 | 2408 /* Change the name of frame F to NAME. If NAME is nil, set F's name to |
1018
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2409 x_id_name. |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2410 |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2411 If EXPLICIT is non-zero, that indicates that lisp code is setting the |
4650 | 2412 name; if NAME is a string, set F's name to NAME and set |
2413 F->explicit_name; if NAME is Qnil, then clear F->explicit_name. | |
1018
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2414 |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2415 If EXPLICIT is zero, that indicates that Emacs redisplay code is |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2416 suggesting a new name, which lisp code should override; if |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2417 F->explicit_name is set, ignore the new name; otherwise, set it. */ |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2418 |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2419 void |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2420 x_set_name (f, name, explicit) |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2421 struct frame *f; |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2422 Lisp_Object name; |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2423 int explicit; |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2424 { |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2425 /* Make sure that requests from lisp code override requests from |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2426 Emacs redisplay code. */ |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2427 if (explicit) |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2428 { |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2429 /* If we're switching from explicit to implicit, we had better |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2430 update the mode lines and thereby update the title. */ |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2431 if (f->explicit_name && NILP (name)) |
1786
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
2432 update_mode_lines = 1; |
1018
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2433 |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2434 f->explicit_name = ! NILP (name); |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2435 } |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2436 else if (f->explicit_name) |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2437 return; |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2438 |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2439 /* If NAME is nil, set the name to the x_id_name. */ |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2440 if (NILP (name)) |
8090
bb03e344f07e
(x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents:
7989
diff
changeset
|
2441 { |
bb03e344f07e
(x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents:
7989
diff
changeset
|
2442 /* Check for no change needed in this very common case |
bb03e344f07e
(x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents:
7989
diff
changeset
|
2443 before we do any consing. */ |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
2444 if (!strcmp (FRAME_X_DISPLAY_INFO (f)->x_id_name, |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
2445 XSTRING (f->name)->data)) |
8090
bb03e344f07e
(x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents:
7989
diff
changeset
|
2446 return; |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
2447 name = build_string (FRAME_X_DISPLAY_INFO (f)->x_id_name); |
8090
bb03e344f07e
(x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents:
7989
diff
changeset
|
2448 } |
833 | 2449 else |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
2450 CHECK_STRING (name); |
1018
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2451 |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2452 /* Don't change the name if it's already NAME. */ |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2453 if (! NILP (Fstring_equal (name, f->name))) |
727 | 2454 return; |
2455 | |
14482
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2456 f->name = name; |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2457 |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2458 /* For setting the frame title, the title parameter should override |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2459 the name parameter. */ |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2460 if (! NILP (f->title)) |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2461 name = f->title; |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2462 |
1050
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
2463 if (FRAME_X_WINDOW (f)) |
389 | 2464 { |
708 | 2465 BLOCK_INPUT; |
1050
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
2466 #ifdef HAVE_X11R4 |
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
2467 { |
12073 | 2468 XTextProperty text, icon; |
30354 | 2469 int bytes, stringp; |
30355 | 2470 Lisp_Object coding_system; |
2471 | |
2472 coding_system = Vlocale_coding_system; | |
2473 if (NILP (coding_system)) | |
2474 coding_system = Qcompound_text; | |
43452
75677c801c26
(x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents:
43426
diff
changeset
|
2475 text.value = x_encode_text (name, coding_system, 0, &bytes, &stringp); |
30354 | 2476 text.encoding = (stringp ? XA_STRING |
30351
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2477 : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT); |
1050
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
2478 text.format = 8; |
30351
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2479 text.nitems = bytes; |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2480 |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2481 if (NILP (f->icon_name)) |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2482 { |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2483 icon = text; |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2484 } |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2485 else |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2486 { |
43452
75677c801c26
(x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents:
43426
diff
changeset
|
2487 icon.value = x_encode_text (f->icon_name, coding_system, 0, |
30354 | 2488 &bytes, &stringp); |
2489 icon.encoding = (stringp ? XA_STRING | |
30351
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2490 : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT); |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2491 icon.format = 8; |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2492 icon.nitems = bytes; |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2493 } |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
2494 #ifdef USE_X_TOOLKIT |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
2495 XSetWMName (FRAME_X_DISPLAY (f), |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
2496 XtWindow (f->output_data.x->widget), &text); |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
2497 XSetWMIconName (FRAME_X_DISPLAY (f), XtWindow (f->output_data.x->widget), |
12073 | 2498 &icon); |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
2499 #else /* not USE_X_TOOLKIT */ |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
2500 XSetWMName (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), &text); |
12073 | 2501 XSetWMIconName (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), &icon); |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
2502 #endif /* not USE_X_TOOLKIT */ |
30351
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2503 if (!NILP (f->icon_name) |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2504 && icon.value != XSTRING (f->icon_name)->data) |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2505 xfree (icon.value); |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2506 if (text.value != XSTRING (name)->data) |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2507 xfree (text.value); |
1050
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
2508 } |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
2509 #else /* not HAVE_X11R4 */ |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
2510 XSetIconName (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
1050
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
2511 XSTRING (name)->data); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
2512 XStoreName (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
1050
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
2513 XSTRING (name)->data); |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
2514 #endif /* not HAVE_X11R4 */ |
708 | 2515 UNBLOCK_INPUT; |
389 | 2516 } |
1018
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2517 } |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2518 |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2519 /* This function should be called when the user's lisp code has |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2520 specified a name for the frame; the name will override any set by the |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2521 redisplay code. */ |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2522 void |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2523 x_explicitly_set_name (f, arg, oldval) |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2524 FRAME_PTR f; |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2525 Lisp_Object arg, oldval; |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2526 { |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2527 x_set_name (f, arg, 1); |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2528 } |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2529 |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2530 /* This function should be called by Emacs redisplay code to set the |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2531 name; names set this way will never override names set by the user's |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2532 lisp code. */ |
1125
059624bf9bf0
Declare x_implicitly_set_name to be void.
Jim Blandy <jimb@redhat.com>
parents:
1096
diff
changeset
|
2533 void |
1018
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2534 x_implicitly_set_name (f, arg, oldval) |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2535 FRAME_PTR f; |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2536 Lisp_Object arg, oldval; |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2537 { |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
2538 x_set_name (f, arg, 0); |
389 | 2539 } |
14482
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2540 |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2541 /* Change the title of frame F to NAME. |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2542 If NAME is nil, use the frame name as the title. |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2543 |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2544 If EXPLICIT is non-zero, that indicates that lisp code is setting the |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2545 name; if NAME is a string, set F's name to NAME and set |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2546 F->explicit_name; if NAME is Qnil, then clear F->explicit_name. |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2547 |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2548 If EXPLICIT is zero, that indicates that Emacs redisplay code is |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2549 suggesting a new name, which lisp code should override; if |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2550 F->explicit_name is set, ignore the new name; otherwise, set it. */ |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2551 |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2552 void |
25528
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
2553 x_set_title (f, name, old_name) |
14482
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2554 struct frame *f; |
25528
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
2555 Lisp_Object name, old_name; |
14482
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2556 { |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2557 /* Don't change the title if it's already NAME. */ |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2558 if (EQ (name, f->title)) |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2559 return; |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2560 |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2561 update_mode_lines = 1; |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2562 |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2563 f->title = name; |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2564 |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2565 if (NILP (name)) |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2566 name = f->name; |
16732
f52c4fd47f03
(x_set_title): Check data type of NAME.
Richard M. Stallman <rms@gnu.org>
parents:
16682
diff
changeset
|
2567 else |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
2568 CHECK_STRING (name); |
14482
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2569 |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2570 if (FRAME_X_WINDOW (f)) |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2571 { |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2572 BLOCK_INPUT; |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2573 #ifdef HAVE_X11R4 |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2574 { |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2575 XTextProperty text, icon; |
30354 | 2576 int bytes, stringp; |
30355 | 2577 Lisp_Object coding_system; |
2578 | |
2579 coding_system = Vlocale_coding_system; | |
2580 if (NILP (coding_system)) | |
2581 coding_system = Qcompound_text; | |
43452
75677c801c26
(x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents:
43426
diff
changeset
|
2582 text.value = x_encode_text (name, coding_system, 0, &bytes, &stringp); |
30354 | 2583 text.encoding = (stringp ? XA_STRING |
30351
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2584 : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT); |
14482
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2585 text.format = 8; |
30351
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2586 text.nitems = bytes; |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2587 |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2588 if (NILP (f->icon_name)) |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2589 { |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2590 icon = text; |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2591 } |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2592 else |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2593 { |
43452
75677c801c26
(x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents:
43426
diff
changeset
|
2594 icon.value = x_encode_text (f->icon_name, coding_system, 0, |
30354 | 2595 &bytes, &stringp); |
2596 icon.encoding = (stringp ? XA_STRING | |
30351
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2597 : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT); |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2598 icon.format = 8; |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2599 icon.nitems = bytes; |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2600 } |
14482
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2601 #ifdef USE_X_TOOLKIT |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2602 XSetWMName (FRAME_X_DISPLAY (f), |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2603 XtWindow (f->output_data.x->widget), &text); |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2604 XSetWMIconName (FRAME_X_DISPLAY (f), XtWindow (f->output_data.x->widget), |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2605 &icon); |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2606 #else /* not USE_X_TOOLKIT */ |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2607 XSetWMName (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), &text); |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2608 XSetWMIconName (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), &icon); |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2609 #endif /* not USE_X_TOOLKIT */ |
30351
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2610 if (!NILP (f->icon_name) |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2611 && icon.value != XSTRING (f->icon_name)->data) |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2612 xfree (icon.value); |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2613 if (text.value != XSTRING (name)->data) |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
2614 xfree (text.value); |
14482
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2615 } |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2616 #else /* not HAVE_X11R4 */ |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2617 XSetIconName (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2618 XSTRING (name)->data); |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2619 XStoreName (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2620 XSTRING (name)->data); |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2621 #endif /* not HAVE_X11R4 */ |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2622 UNBLOCK_INPUT; |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2623 } |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2624 } |
479987ba2c8d
(x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents:
14439
diff
changeset
|
2625 |
389 | 2626 void |
771 | 2627 x_set_autoraise (f, arg, oldval) |
2628 struct frame *f; | |
389 | 2629 Lisp_Object arg, oldval; |
2630 { | |
771 | 2631 f->auto_raise = !EQ (Qnil, arg); |
389 | 2632 } |
2633 | |
2634 void | |
771 | 2635 x_set_autolower (f, arg, oldval) |
2636 struct frame *f; | |
389 | 2637 Lisp_Object arg, oldval; |
2638 { | |
771 | 2639 f->auto_lower = !EQ (Qnil, arg); |
389 | 2640 } |
1719
48f539ac6921
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1657
diff
changeset
|
2641 |
48f539ac6921
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1657
diff
changeset
|
2642 void |
9580
bcc9342cf633
(x_set_unsplittable): New function.
Karl Heuer <kwzh@gnu.org>
parents:
9563
diff
changeset
|
2643 x_set_unsplittable (f, arg, oldval) |
bcc9342cf633
(x_set_unsplittable): New function.
Karl Heuer <kwzh@gnu.org>
parents:
9563
diff
changeset
|
2644 struct frame *f; |
bcc9342cf633
(x_set_unsplittable): New function.
Karl Heuer <kwzh@gnu.org>
parents:
9563
diff
changeset
|
2645 Lisp_Object arg, oldval; |
bcc9342cf633
(x_set_unsplittable): New function.
Karl Heuer <kwzh@gnu.org>
parents:
9563
diff
changeset
|
2646 { |
bcc9342cf633
(x_set_unsplittable): New function.
Karl Heuer <kwzh@gnu.org>
parents:
9563
diff
changeset
|
2647 f->no_split = !NILP (arg); |
bcc9342cf633
(x_set_unsplittable): New function.
Karl Heuer <kwzh@gnu.org>
parents:
9563
diff
changeset
|
2648 } |
bcc9342cf633
(x_set_unsplittable): New function.
Karl Heuer <kwzh@gnu.org>
parents:
9563
diff
changeset
|
2649 |
bcc9342cf633
(x_set_unsplittable): New function.
Karl Heuer <kwzh@gnu.org>
parents:
9563
diff
changeset
|
2650 void |
1994
73ce9dd21093
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1932
diff
changeset
|
2651 x_set_vertical_scroll_bars (f, arg, oldval) |
1719
48f539ac6921
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1657
diff
changeset
|
2652 struct frame *f; |
48f539ac6921
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1657
diff
changeset
|
2653 Lisp_Object arg, oldval; |
48f539ac6921
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1657
diff
changeset
|
2654 { |
16254
3e8b16badf3d
(Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents:
16156
diff
changeset
|
2655 if ((EQ (arg, Qleft) && FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT (f)) |
3e8b16badf3d
(Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents:
16156
diff
changeset
|
2656 || (EQ (arg, Qright) && FRAME_HAS_VERTICAL_SCROLL_BARS_ON_LEFT (f)) |
3e8b16badf3d
(Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents:
16156
diff
changeset
|
2657 || (NILP (arg) && FRAME_HAS_VERTICAL_SCROLL_BARS (f)) |
3e8b16badf3d
(Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents:
16156
diff
changeset
|
2658 || (!NILP (arg) && ! FRAME_HAS_VERTICAL_SCROLL_BARS (f))) |
1719
48f539ac6921
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1657
diff
changeset
|
2659 { |
16254
3e8b16badf3d
(Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents:
16156
diff
changeset
|
2660 FRAME_VERTICAL_SCROLL_BAR_TYPE (f) |
3e8b16badf3d
(Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents:
16156
diff
changeset
|
2661 = (NILP (arg) |
3e8b16badf3d
(Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents:
16156
diff
changeset
|
2662 ? vertical_scroll_bar_none |
3e8b16badf3d
(Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents:
16156
diff
changeset
|
2663 : EQ (Qright, arg) |
3e8b16badf3d
(Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents:
16156
diff
changeset
|
2664 ? vertical_scroll_bar_right |
3e8b16badf3d
(Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents:
16156
diff
changeset
|
2665 : vertical_scroll_bar_left); |
1719
48f539ac6921
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1657
diff
changeset
|
2666 |
1786
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
2667 /* We set this parameter before creating the X window for the |
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
2668 frame, so we can get the geometry right from the start. |
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
2669 However, if the window hasn't been created yet, we shouldn't |
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
2670 call x_set_window_size. */ |
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
2671 if (FRAME_X_WINDOW (f)) |
5899
4e8f26a0f2b7
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5721
diff
changeset
|
2672 x_set_window_size (f, 0, FRAME_WIDTH (f), FRAME_HEIGHT (f)); |
25363
bf0488244270
Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents:
25335
diff
changeset
|
2673 do_pending_window_change (0); |
1719
48f539ac6921
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1657
diff
changeset
|
2674 } |
48f539ac6921
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1657
diff
changeset
|
2675 } |
8942
a43f3b56ed47
(x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents:
8845
diff
changeset
|
2676 |
a43f3b56ed47
(x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents:
8845
diff
changeset
|
2677 void |
a43f3b56ed47
(x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents:
8845
diff
changeset
|
2678 x_set_scroll_bar_width (f, arg, oldval) |
a43f3b56ed47
(x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents:
8845
diff
changeset
|
2679 struct frame *f; |
a43f3b56ed47
(x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents:
8845
diff
changeset
|
2680 Lisp_Object arg, oldval; |
a43f3b56ed47
(x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents:
8845
diff
changeset
|
2681 { |
18594
5ca5ff1c74eb
(x_set_scroll_bar_width): By default, use enough
Richard M. Stallman <rms@gnu.org>
parents:
18114
diff
changeset
|
2682 int wid = FONT_WIDTH (f->output_data.x->font); |
5ca5ff1c74eb
(x_set_scroll_bar_width): By default, use enough
Richard M. Stallman <rms@gnu.org>
parents:
18114
diff
changeset
|
2683 |
9166
44b44e900cf1
(x_set_scroll_bar_width): Nil now means 2 columns' worth of pixels.
Karl Heuer <kwzh@gnu.org>
parents:
9103
diff
changeset
|
2684 if (NILP (arg)) |
44b44e900cf1
(x_set_scroll_bar_width): Nil now means 2 columns' worth of pixels.
Karl Heuer <kwzh@gnu.org>
parents:
9103
diff
changeset
|
2685 { |
25511
9bc9d4d6c716
(x_set_scroll_bar_width): Change conditional compilation
Gerd Moellmann <gerd@gnu.org>
parents:
25464
diff
changeset
|
2686 #ifdef USE_TOOLKIT_SCROLL_BARS |
9bc9d4d6c716
(x_set_scroll_bar_width): Change conditional compilation
Gerd Moellmann <gerd@gnu.org>
parents:
25464
diff
changeset
|
2687 /* A minimum width of 14 doesn't look good for toolkit scroll bars. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2688 int width = 16 + 2 * VERTICAL_SCROLL_BAR_WIDTH_TRIM; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2689 FRAME_SCROLL_BAR_COLS (f) = (width + wid - 1) / wid; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2690 FRAME_SCROLL_BAR_PIXEL_WIDTH (f) = width; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2691 #else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2692 /* Make the actual width at least 14 pixels and a multiple of a |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2693 character width. */ |
18594
5ca5ff1c74eb
(x_set_scroll_bar_width): By default, use enough
Richard M. Stallman <rms@gnu.org>
parents:
18114
diff
changeset
|
2694 FRAME_SCROLL_BAR_COLS (f) = (14 + wid - 1) / wid; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2695 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2696 /* Use all of that space (aside from required margins) for the |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2697 scroll bar. */ |
9166
44b44e900cf1
(x_set_scroll_bar_width): Nil now means 2 columns' worth of pixels.
Karl Heuer <kwzh@gnu.org>
parents:
9103
diff
changeset
|
2698 FRAME_SCROLL_BAR_PIXEL_WIDTH (f) = 0; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2699 #endif |
18594
5ca5ff1c74eb
(x_set_scroll_bar_width): By default, use enough
Richard M. Stallman <rms@gnu.org>
parents:
18114
diff
changeset
|
2700 |
15891
dbc8c9c9d819
(x_set_scroll_bar_width): Call x_set_window_size when arg is nil.
Richard M. Stallman <rms@gnu.org>
parents:
15881
diff
changeset
|
2701 if (FRAME_X_WINDOW (f)) |
dbc8c9c9d819
(x_set_scroll_bar_width): Call x_set_window_size when arg is nil.
Richard M. Stallman <rms@gnu.org>
parents:
15881
diff
changeset
|
2702 x_set_window_size (f, 0, FRAME_WIDTH (f), FRAME_HEIGHT (f)); |
25363
bf0488244270
Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents:
25335
diff
changeset
|
2703 do_pending_window_change (0); |
9166
44b44e900cf1
(x_set_scroll_bar_width): Nil now means 2 columns' worth of pixels.
Karl Heuer <kwzh@gnu.org>
parents:
9103
diff
changeset
|
2704 } |
44b44e900cf1
(x_set_scroll_bar_width): Nil now means 2 columns' worth of pixels.
Karl Heuer <kwzh@gnu.org>
parents:
9103
diff
changeset
|
2705 else if (INTEGERP (arg) && XINT (arg) > 0 |
44b44e900cf1
(x_set_scroll_bar_width): Nil now means 2 columns' worth of pixels.
Karl Heuer <kwzh@gnu.org>
parents:
9103
diff
changeset
|
2706 && XFASTINT (arg) != FRAME_SCROLL_BAR_PIXEL_WIDTH (f)) |
8942
a43f3b56ed47
(x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents:
8845
diff
changeset
|
2707 { |
17629
fa92ac645cf0
(x_set_scroll_bar_width): If arg is too small, round it up.
Richard M. Stallman <rms@gnu.org>
parents:
17609
diff
changeset
|
2708 if (XFASTINT (arg) <= 2 * VERTICAL_SCROLL_BAR_WIDTH_TRIM) |
fa92ac645cf0
(x_set_scroll_bar_width): If arg is too small, round it up.
Richard M. Stallman <rms@gnu.org>
parents:
17609
diff
changeset
|
2709 XSETINT (arg, 2 * VERTICAL_SCROLL_BAR_WIDTH_TRIM + 1); |
16682
fe4b95eb15ae
(x_set_scroll_bar_width): Reject a width that's too small.
Richard M. Stallman <rms@gnu.org>
parents:
16515
diff
changeset
|
2710 |
8942
a43f3b56ed47
(x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents:
8845
diff
changeset
|
2711 FRAME_SCROLL_BAR_PIXEL_WIDTH (f) = XFASTINT (arg); |
a43f3b56ed47
(x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents:
8845
diff
changeset
|
2712 FRAME_SCROLL_BAR_COLS (f) = (XFASTINT (arg) + wid-1) / wid; |
a43f3b56ed47
(x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents:
8845
diff
changeset
|
2713 if (FRAME_X_WINDOW (f)) |
a43f3b56ed47
(x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents:
8845
diff
changeset
|
2714 x_set_window_size (f, 0, FRAME_WIDTH (f), FRAME_HEIGHT (f)); |
a43f3b56ed47
(x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents:
8845
diff
changeset
|
2715 } |
16302
025b3dc7a6ba
(Fx_create_frame): Default Qinternal_border_width to 1.
Richard M. Stallman <rms@gnu.org>
parents:
16254
diff
changeset
|
2716 |
25363
bf0488244270
Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents:
25335
diff
changeset
|
2717 change_frame_size (f, 0, FRAME_WIDTH (f), 0, 0, 0); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2718 XWINDOW (FRAME_SELECTED_WINDOW (f))->cursor.hpos = 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2719 XWINDOW (FRAME_SELECTED_WINDOW (f))->cursor.x = 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2720 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2721 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2722 |
389 | 2723 |
771 | 2724 /* Subroutines of creating an X frame. */ |
389 | 2725 |
11917
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2726 /* Make sure that Vx_resource_name is set to a reasonable value. |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2727 Fix it up, or set it to `emacs' if it is too hopeless. */ |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2728 |
4146
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
2729 static void |
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
2730 validate_x_resource_name () |
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
2731 { |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2732 int len = 0; |
11353
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2733 /* Number of valid characters in the resource name. */ |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2734 int good_count = 0; |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2735 /* Number of invalid characters in the resource name. */ |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2736 int bad_count = 0; |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2737 Lisp_Object new; |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2738 int i; |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2739 |
16966
df9f838f255a
(Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16732
diff
changeset
|
2740 if (!STRINGP (Vx_resource_class)) |
df9f838f255a
(Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16732
diff
changeset
|
2741 Vx_resource_class = build_string (EMACS_CLASS); |
df9f838f255a
(Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16732
diff
changeset
|
2742 |
7525
5b784d881c0f
(validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents:
7408
diff
changeset
|
2743 if (STRINGP (Vx_resource_name)) |
5b784d881c0f
(validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents:
7408
diff
changeset
|
2744 { |
5b784d881c0f
(validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents:
7408
diff
changeset
|
2745 unsigned char *p = XSTRING (Vx_resource_name)->data; |
5b784d881c0f
(validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents:
7408
diff
changeset
|
2746 int i; |
5b784d881c0f
(validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents:
7408
diff
changeset
|
2747 |
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
20629
diff
changeset
|
2748 len = STRING_BYTES (XSTRING (Vx_resource_name)); |
11353
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2749 |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2750 /* Only letters, digits, - and _ are valid in resource names. |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2751 Count the valid characters and count the invalid ones. */ |
7525
5b784d881c0f
(validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents:
7408
diff
changeset
|
2752 for (i = 0; i < len; i++) |
5b784d881c0f
(validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents:
7408
diff
changeset
|
2753 { |
5b784d881c0f
(validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents:
7408
diff
changeset
|
2754 int c = p[i]; |
5b784d881c0f
(validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents:
7408
diff
changeset
|
2755 if (! ((c >= 'a' && c <= 'z') |
5b784d881c0f
(validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents:
7408
diff
changeset
|
2756 || (c >= 'A' && c <= 'Z') |
5b784d881c0f
(validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents:
7408
diff
changeset
|
2757 || (c >= '0' && c <= '9') |
5b784d881c0f
(validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents:
7408
diff
changeset
|
2758 || c == '-' || c == '_')) |
11353
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2759 bad_count++; |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2760 else |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2761 good_count++; |
7525
5b784d881c0f
(validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents:
7408
diff
changeset
|
2762 } |
5b784d881c0f
(validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents:
7408
diff
changeset
|
2763 } |
5b784d881c0f
(validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents:
7408
diff
changeset
|
2764 else |
11353
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2765 /* Not a string => completely invalid. */ |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2766 bad_count = 5, good_count = 0; |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2767 |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2768 /* If name is valid already, return. */ |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2769 if (bad_count == 0) |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2770 return; |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2771 |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2772 /* If name is entirely invalid, or nearly so, use `emacs'. */ |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2773 if (good_count == 0 |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2774 || (good_count == 1 && bad_count > 0)) |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2775 { |
11917
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2776 Vx_resource_name = build_string ("emacs"); |
11353
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2777 return; |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2778 } |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2779 |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2780 /* Name is partly valid. Copy it and replace the invalid characters |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2781 with underscores. */ |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2782 |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2783 Vx_resource_name = new = Fcopy_sequence (Vx_resource_name); |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2784 |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2785 for (i = 0; i < len; i++) |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2786 { |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2787 int c = XSTRING (new)->data[i]; |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2788 if (! ((c >= 'a' && c <= 'z') |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2789 || (c >= 'A' && c <= 'Z') |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2790 || (c >= '0' && c <= '9') |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2791 || c == '-' || c == '_')) |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2792 XSTRING (new)->data[i] = '_'; |
9e3da029f921
(x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
2793 } |
4146
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
2794 } |
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
2795 |
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
2796 |
389 | 2797 extern char *x_get_string_resource (); |
2798 | |
1786
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
2799 DEFUN ("x-get-resource", Fx_get_resource, Sx_get_resource, 2, 4, 0, |
40599 | 2800 doc: /* Return the value of ATTRIBUTE, of class CLASS, from the X defaults database. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
2801 This uses `INSTANCE.ATTRIBUTE' as the key and `Emacs.CLASS' as the |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
2802 class, where INSTANCE is the name under which Emacs was invoked, or |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
2803 the name specified by the `-name' or `-rn' command-line arguments. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
2804 |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
2805 The optional arguments COMPONENT and SUBCLASS add to the key and the |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
2806 class, respectively. You must specify both of them or neither. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
2807 If you specify them, the key is `INSTANCE.COMPONENT.ATTRIBUTE' |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
2808 and the class is `Emacs.CLASS.SUBCLASS'. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
2809 (attribute, class, component, subclass) |
1786
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
2810 Lisp_Object attribute, class, component, subclass; |
389 | 2811 { |
2812 register char *value; | |
2813 char *name_key; | |
2814 char *class_key; | |
2815 | |
2999
33c820044087
(check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2964
diff
changeset
|
2816 check_x (); |
33c820044087
(check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2964
diff
changeset
|
2817 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
2818 CHECK_STRING (attribute); |
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
2819 CHECK_STRING (class); |
1786
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
2820 |
1733
2d41a3d7b9a6
(Fx_get_resource): Use EMACS_CLASS to make class_key
Richard M. Stallman <rms@gnu.org>
parents:
1719
diff
changeset
|
2821 if (!NILP (component)) |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
2822 CHECK_STRING (component); |
1733
2d41a3d7b9a6
(Fx_get_resource): Use EMACS_CLASS to make class_key
Richard M. Stallman <rms@gnu.org>
parents:
1719
diff
changeset
|
2823 if (!NILP (subclass)) |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
2824 CHECK_STRING (subclass); |
1733
2d41a3d7b9a6
(Fx_get_resource): Use EMACS_CLASS to make class_key
Richard M. Stallman <rms@gnu.org>
parents:
1719
diff
changeset
|
2825 if (NILP (component) != NILP (subclass)) |
2d41a3d7b9a6
(Fx_get_resource): Use EMACS_CLASS to make class_key
Richard M. Stallman <rms@gnu.org>
parents:
1719
diff
changeset
|
2826 error ("x-get-resource: must specify both COMPONENT and SUBCLASS or neither"); |
2d41a3d7b9a6
(Fx_get_resource): Use EMACS_CLASS to make class_key
Richard M. Stallman <rms@gnu.org>
parents:
1719
diff
changeset
|
2827 |
4146
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
2828 validate_x_resource_name (); |
11917
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2829 |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2830 /* Allocate space for the components, the dots which separate them, |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2831 and the final '\0'. Make them big enough for the worst case. */ |
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
20629
diff
changeset
|
2832 name_key = (char *) alloca (STRING_BYTES (XSTRING (Vx_resource_name)) |
11917
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2833 + (STRINGP (component) |
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
20629
diff
changeset
|
2834 ? STRING_BYTES (XSTRING (component)) : 0) |
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
20629
diff
changeset
|
2835 + STRING_BYTES (XSTRING (attribute)) |
11917
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2836 + 3); |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2837 |
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
20629
diff
changeset
|
2838 class_key = (char *) alloca (STRING_BYTES (XSTRING (Vx_resource_class)) |
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
20629
diff
changeset
|
2839 + STRING_BYTES (XSTRING (class)) |
11917
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2840 + (STRINGP (subclass) |
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
20629
diff
changeset
|
2841 ? STRING_BYTES (XSTRING (subclass)) : 0) |
11917
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2842 + 3); |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2843 |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2844 /* Start with emacs.FRAMENAME for the name (the specific one) |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2845 and with `Emacs' for the class key (the general one). */ |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2846 strcpy (name_key, XSTRING (Vx_resource_name)->data); |
16966
df9f838f255a
(Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16732
diff
changeset
|
2847 strcpy (class_key, XSTRING (Vx_resource_class)->data); |
11917
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2848 |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2849 strcat (class_key, "."); |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2850 strcat (class_key, XSTRING (class)->data); |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2851 |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2852 if (!NILP (component)) |
389 | 2853 { |
11917
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2854 strcat (class_key, "."); |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2855 strcat (class_key, XSTRING (subclass)->data); |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2856 |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2857 strcat (name_key, "."); |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2858 strcat (name_key, XSTRING (component)->data); |
389 | 2859 } |
11917
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2860 |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2861 strcat (name_key, "."); |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
2862 strcat (name_key, XSTRING (attribute)->data); |
389 | 2863 |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
2864 value = x_get_string_resource (check_x_display_info (Qnil)->xrdb, |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
2865 name_key, class_key); |
389 | 2866 |
2867 if (value != (char *) 0) | |
2868 return build_string (value); | |
2869 else | |
2870 return Qnil; | |
2871 } | |
2872 | |
17779
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2873 /* Get an X resource, like Fx_get_resource, but for display DPYINFO. */ |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2874 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2875 Lisp_Object |
17779
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2876 display_x_get_resource (dpyinfo, attribute, class, component, subclass) |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2877 struct x_display_info *dpyinfo; |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2878 Lisp_Object attribute, class, component, subclass; |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2879 { |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2880 register char *value; |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2881 char *name_key; |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2882 char *class_key; |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2883 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
2884 CHECK_STRING (attribute); |
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
2885 CHECK_STRING (class); |
17779
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2886 |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2887 if (!NILP (component)) |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
2888 CHECK_STRING (component); |
17779
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2889 if (!NILP (subclass)) |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
2890 CHECK_STRING (subclass); |
17779
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2891 if (NILP (component) != NILP (subclass)) |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2892 error ("x-get-resource: must specify both COMPONENT and SUBCLASS or neither"); |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2893 |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2894 validate_x_resource_name (); |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2895 |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2896 /* Allocate space for the components, the dots which separate them, |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2897 and the final '\0'. Make them big enough for the worst case. */ |
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
20629
diff
changeset
|
2898 name_key = (char *) alloca (STRING_BYTES (XSTRING (Vx_resource_name)) |
17779
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2899 + (STRINGP (component) |
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
20629
diff
changeset
|
2900 ? STRING_BYTES (XSTRING (component)) : 0) |
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
20629
diff
changeset
|
2901 + STRING_BYTES (XSTRING (attribute)) |
17779
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2902 + 3); |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2903 |
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
20629
diff
changeset
|
2904 class_key = (char *) alloca (STRING_BYTES (XSTRING (Vx_resource_class)) |
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
20629
diff
changeset
|
2905 + STRING_BYTES (XSTRING (class)) |
17779
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2906 + (STRINGP (subclass) |
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
20629
diff
changeset
|
2907 ? STRING_BYTES (XSTRING (subclass)) : 0) |
17779
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2908 + 3); |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2909 |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2910 /* Start with emacs.FRAMENAME for the name (the specific one) |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2911 and with `Emacs' for the class key (the general one). */ |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2912 strcpy (name_key, XSTRING (Vx_resource_name)->data); |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2913 strcpy (class_key, XSTRING (Vx_resource_class)->data); |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2914 |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2915 strcat (class_key, "."); |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2916 strcat (class_key, XSTRING (class)->data); |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2917 |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2918 if (!NILP (component)) |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2919 { |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2920 strcat (class_key, "."); |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2921 strcat (class_key, XSTRING (subclass)->data); |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2922 |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2923 strcat (name_key, "."); |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2924 strcat (name_key, XSTRING (component)->data); |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2925 } |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2926 |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2927 strcat (name_key, "."); |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2928 strcat (name_key, XSTRING (attribute)->data); |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2929 |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2930 value = x_get_string_resource (dpyinfo->xrdb, name_key, class_key); |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2931 |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2932 if (value != (char *) 0) |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2933 return build_string (value); |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2934 else |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2935 return Qnil; |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2936 } |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2937 |
3173
c3c1b1ceab05
(x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3170
diff
changeset
|
2938 /* Used when C code wants a resource value. */ |
c3c1b1ceab05
(x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3170
diff
changeset
|
2939 |
c3c1b1ceab05
(x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3170
diff
changeset
|
2940 char * |
c3c1b1ceab05
(x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3170
diff
changeset
|
2941 x_get_resource_string (attribute, class) |
c3c1b1ceab05
(x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3170
diff
changeset
|
2942 char *attribute, *class; |
c3c1b1ceab05
(x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3170
diff
changeset
|
2943 { |
c3c1b1ceab05
(x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3170
diff
changeset
|
2944 char *name_key; |
c3c1b1ceab05
(x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3170
diff
changeset
|
2945 char *class_key; |
25679
8b09c5927f1c
(QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
2946 struct frame *sf = SELECTED_FRAME (); |
3173
c3c1b1ceab05
(x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3170
diff
changeset
|
2947 |
c3c1b1ceab05
(x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3170
diff
changeset
|
2948 /* Allocate space for the components, the dots which separate them, |
c3c1b1ceab05
(x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3170
diff
changeset
|
2949 and the final '\0'. */ |
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
20629
diff
changeset
|
2950 name_key = (char *) alloca (STRING_BYTES (XSTRING (Vinvocation_name)) |
3173
c3c1b1ceab05
(x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3170
diff
changeset
|
2951 + strlen (attribute) + 2); |
c3c1b1ceab05
(x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3170
diff
changeset
|
2952 class_key = (char *) alloca ((sizeof (EMACS_CLASS) - 1) |
c3c1b1ceab05
(x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3170
diff
changeset
|
2953 + strlen (class) + 2); |
c3c1b1ceab05
(x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3170
diff
changeset
|
2954 |
c3c1b1ceab05
(x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3170
diff
changeset
|
2955 sprintf (name_key, "%s.%s", |
c3c1b1ceab05
(x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3170
diff
changeset
|
2956 XSTRING (Vinvocation_name)->data, |
c3c1b1ceab05
(x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3170
diff
changeset
|
2957 attribute); |
c3c1b1ceab05
(x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3170
diff
changeset
|
2958 sprintf (class_key, "%s.%s", EMACS_CLASS, class); |
c3c1b1ceab05
(x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3170
diff
changeset
|
2959 |
25679
8b09c5927f1c
(QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
2960 return x_get_string_resource (FRAME_X_DISPLAY_INFO (sf)->xrdb, |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
2961 name_key, class_key); |
3173
c3c1b1ceab05
(x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3170
diff
changeset
|
2962 } |
c3c1b1ceab05
(x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3170
diff
changeset
|
2963 |
398 | 2964 /* Types we might convert a resource string into. */ |
2965 enum resource_types | |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2966 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2967 RES_TYPE_NUMBER, |
25528
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
2968 RES_TYPE_FLOAT, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2969 RES_TYPE_BOOLEAN, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2970 RES_TYPE_STRING, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2971 RES_TYPE_SYMBOL |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
2972 }; |
398 | 2973 |
389 | 2974 /* Return the value of parameter PARAM. |
398 | 2975 |
771 | 2976 First search ALIST, then Vdefault_frame_alist, then the X defaults |
1786
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
2977 database, using ATTRIBUTE as the attribute name and CLASS as its class. |
398 | 2978 |
2979 Convert the resource to the type specified by desired_type. | |
2980 | |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
2981 If no default is specified, return Qunbound. If you call |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
2982 x_get_arg, make sure you deal with Qunbound in a reasonable way, |
10222
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
2983 and don't let it get stored in any Lisp-visible variables! */ |
389 | 2984 |
2985 static Lisp_Object | |
17779
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2986 x_get_arg (dpyinfo, alist, param, attribute, class, type) |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
2987 struct x_display_info *dpyinfo; |
641 | 2988 Lisp_Object alist, param; |
398 | 2989 char *attribute; |
1786
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
2990 char *class; |
398 | 2991 enum resource_types type; |
389 | 2992 { |
2993 register Lisp_Object tem; | |
2994 | |
2995 tem = Fassq (param, alist); | |
2996 if (EQ (tem, Qnil)) | |
771 | 2997 tem = Fassq (param, Vdefault_frame_alist); |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
2998 if (EQ (tem, Qnil)) |
389 | 2999 { |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3000 |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3001 if (attribute) |
398 | 3002 { |
17779
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
3003 tem = display_x_get_resource (dpyinfo, |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
3004 build_string (attribute), |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
3005 build_string (class), |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
3006 Qnil, Qnil); |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3007 |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3008 if (NILP (tem)) |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3009 return Qunbound; |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3010 |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3011 switch (type) |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3012 { |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3013 case RES_TYPE_NUMBER: |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3014 return make_number (atoi (XSTRING (tem)->data)); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3015 |
25528
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
3016 case RES_TYPE_FLOAT: |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
3017 return make_float (atof (XSTRING (tem)->data)); |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
3018 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3019 case RES_TYPE_BOOLEAN: |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3020 tem = Fdowncase (tem); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3021 if (!strcmp (XSTRING (tem)->data, "on") |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3022 || !strcmp (XSTRING (tem)->data, "true")) |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3023 return Qt; |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3024 else |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3025 return Qnil; |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3026 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3027 case RES_TYPE_STRING: |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3028 return tem; |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3029 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3030 case RES_TYPE_SYMBOL: |
2294
9bce20507666
Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents:
2283
diff
changeset
|
3031 /* As a special case, we map the values `true' and `on' |
9bce20507666
Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents:
2283
diff
changeset
|
3032 to Qt, and `false' and `off' to Qnil. */ |
9bce20507666
Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents:
2283
diff
changeset
|
3033 { |
6519
22c56514eeb3
(x_set_frame_parameters, x_get_arg, x_window, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents:
6506
diff
changeset
|
3034 Lisp_Object lower; |
22c56514eeb3
(x_set_frame_parameters, x_get_arg, x_window, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents:
6506
diff
changeset
|
3035 lower = Fdowncase (tem); |
6523
d9d9ab5951dd
(x_get_arg): Use downcased string in compare.
Karl Heuer <kwzh@gnu.org>
parents:
6522
diff
changeset
|
3036 if (!strcmp (XSTRING (lower)->data, "on") |
d9d9ab5951dd
(x_get_arg): Use downcased string in compare.
Karl Heuer <kwzh@gnu.org>
parents:
6522
diff
changeset
|
3037 || !strcmp (XSTRING (lower)->data, "true")) |
2294
9bce20507666
Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents:
2283
diff
changeset
|
3038 return Qt; |
6523
d9d9ab5951dd
(x_get_arg): Use downcased string in compare.
Karl Heuer <kwzh@gnu.org>
parents:
6522
diff
changeset
|
3039 else if (!strcmp (XSTRING (lower)->data, "off") |
d9d9ab5951dd
(x_get_arg): Use downcased string in compare.
Karl Heuer <kwzh@gnu.org>
parents:
6522
diff
changeset
|
3040 || !strcmp (XSTRING (lower)->data, "false")) |
2294
9bce20507666
Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents:
2283
diff
changeset
|
3041 return Qnil; |
9bce20507666
Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents:
2283
diff
changeset
|
3042 else |
2686
a84b9a78ab08
(x_get_arg): Call Fintern, not intern.
Richard M. Stallman <rms@gnu.org>
parents:
2439
diff
changeset
|
3043 return Fintern (tem, Qnil); |
2294
9bce20507666
Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents:
2283
diff
changeset
|
3044 } |
1018
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
3045 |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3046 default: |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3047 abort (); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3048 } |
398 | 3049 } |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3050 else |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3051 return Qunbound; |
389 | 3052 } |
3053 return Fcdr (tem); | |
3054 } | |
3055 | |
16156
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
3056 /* Like x_get_arg, but also record the value in f->param_alist. */ |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
3057 |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
3058 static Lisp_Object |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
3059 x_get_and_record_arg (f, alist, param, attribute, class, type) |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
3060 struct frame *f; |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
3061 Lisp_Object alist, param; |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
3062 char *attribute; |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
3063 char *class; |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
3064 enum resource_types type; |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
3065 { |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
3066 Lisp_Object value; |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
3067 |
17779
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
3068 value = x_get_arg (FRAME_X_DISPLAY_INFO (f), alist, param, |
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
3069 attribute, class, type); |
16156
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
3070 if (! NILP (value)) |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
3071 store_frame_param (f, param, value); |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
3072 |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
3073 return value; |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
3074 } |
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
3075 |
771 | 3076 /* Record in frame F the specified or default value according to ALIST |
19095
2f58824bf3f6
(x_set_frame_parameters): Heading comment fixed.
Kenichi Handa <handa@m17n.org>
parents:
19026
diff
changeset
|
3077 of the parameter named PROP (a Lisp symbol). |
2f58824bf3f6
(x_set_frame_parameters): Heading comment fixed.
Kenichi Handa <handa@m17n.org>
parents:
19026
diff
changeset
|
3078 If no value is specified for PROP, look for an X default for XPROP |
771 | 3079 on the frame named NAME. |
389 | 3080 If that is not found either, use the value DEFLT. */ |
3081 | |
3082 static Lisp_Object | |
1786
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
3083 x_default_parameter (f, alist, prop, deflt, xprop, xclass, type) |
771 | 3084 struct frame *f; |
389 | 3085 Lisp_Object alist; |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3086 Lisp_Object prop; |
389 | 3087 Lisp_Object deflt; |
3088 char *xprop; | |
1786
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
3089 char *xclass; |
398 | 3090 enum resource_types type; |
389 | 3091 { |
3092 Lisp_Object tem; | |
3093 | |
17779
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
3094 tem = x_get_arg (FRAME_X_DISPLAY_INFO (f), alist, prop, xprop, xclass, type); |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3095 if (EQ (tem, Qunbound)) |
389 | 3096 tem = deflt; |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3097 x_set_frame_parameters (f, Fcons (Fcons (prop, tem), Qnil)); |
389 | 3098 return tem; |
3099 } | |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3100 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3101 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3102 /* Record in frame F the specified or default value according to ALIST |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3103 of the parameter named PROP (a Lisp symbol). If no value is |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3104 specified for PROP, look for an X default for XPROP on the frame |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3105 named NAME. If that is not found either, use the value DEFLT. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3106 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3107 static Lisp_Object |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3108 x_default_scroll_bar_color_parameter (f, alist, prop, xprop, xclass, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3109 foreground_p) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3110 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3111 Lisp_Object alist; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3112 Lisp_Object prop; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3113 char *xprop; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3114 char *xclass; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3115 int foreground_p; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3116 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3117 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3118 Lisp_Object tem; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3119 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3120 tem = x_get_arg (dpyinfo, alist, prop, xprop, xclass, RES_TYPE_STRING); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3121 if (EQ (tem, Qunbound)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3122 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3123 #ifdef USE_TOOLKIT_SCROLL_BARS |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3124 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3125 /* See if an X resource for the scroll bar color has been |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3126 specified. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3127 tem = display_x_get_resource (dpyinfo, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3128 build_string (foreground_p |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3129 ? "foreground" |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3130 : "background"), |
39812
66e0816837a8
Update calls to openp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
3131 empty_string, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3132 build_string ("verticalScrollBar"), |
39812
66e0816837a8
Update calls to openp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
3133 empty_string); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3134 if (!STRINGP (tem)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3135 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3136 /* If nothing has been specified, scroll bars will use a |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3137 toolkit-dependent default. Because these defaults are |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3138 difficult to get at without actually creating a scroll |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3139 bar, use nil to indicate that no color has been |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3140 specified. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3141 tem = Qnil; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3142 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3143 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3144 #else /* not USE_TOOLKIT_SCROLL_BARS */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3145 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3146 tem = Qnil; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3147 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3148 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3149 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3150 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3151 x_set_frame_parameters (f, Fcons (Fcons (prop, tem), Qnil)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3152 return tem; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3153 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3154 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3155 |
389 | 3156 |
2328
82e4fed9cdd6
* xfns.c (Fx_parse_geometry): Renamed from Fx_geometry.
Jim Blandy <jimb@redhat.com>
parents:
2295
diff
changeset
|
3157 DEFUN ("x-parse-geometry", Fx_parse_geometry, Sx_parse_geometry, 1, 1, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
3158 doc: /* Parse an X-style geometry string STRING. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
3159 Returns an alist of the form ((top . TOP), (left . LEFT) ... ). |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
3160 The properties returned may include `top', `left', `height', and `width'. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
3161 The value of `left' or `top' may be an integer, |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
3162 or a list (+ N) meaning N pixels relative to top/left corner, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
3163 or a list (- N) meaning -N pixels relative to bottom/right corner. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
3164 (string) |
1528
924c8a609582
* xfns.c (x_decode_color, Fx_color_display_p): x_screen_planes is
Jim Blandy <jimb@redhat.com>
parents:
1438
diff
changeset
|
3165 Lisp_Object string; |
389 | 3166 { |
3167 int geometry, x, y; | |
3168 unsigned int width, height; | |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3169 Lisp_Object result; |
389 | 3170 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
3171 CHECK_STRING (string); |
389 | 3172 |
3173 geometry = XParseGeometry ((char *) XSTRING (string)->data, | |
3174 &x, &y, &width, &height); | |
3175 | |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3176 #if 0 |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3177 if (!!(geometry & XValue) != !!(geometry & YValue)) |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3178 error ("Must specify both x and y position, or neither"); |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3179 #endif |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3180 |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3181 result = Qnil; |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3182 if (geometry & XValue) |
389 | 3183 { |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3184 Lisp_Object element; |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3185 |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
3186 if (x >= 0 && (geometry & XNegative)) |
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
3187 element = Fcons (Qleft, Fcons (Qminus, Fcons (make_number (-x), Qnil))); |
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
3188 else if (x < 0 && ! (geometry & XNegative)) |
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
3189 element = Fcons (Qleft, Fcons (Qplus, Fcons (make_number (x), Qnil))); |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3190 else |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3191 element = Fcons (Qleft, make_number (x)); |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3192 result = Fcons (element, result); |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3193 } |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3194 |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3195 if (geometry & YValue) |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3196 { |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3197 Lisp_Object element; |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3198 |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
3199 if (y >= 0 && (geometry & YNegative)) |
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
3200 element = Fcons (Qtop, Fcons (Qminus, Fcons (make_number (-y), Qnil))); |
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
3201 else if (y < 0 && ! (geometry & YNegative)) |
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
3202 element = Fcons (Qtop, Fcons (Qplus, Fcons (make_number (y), Qnil))); |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3203 else |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3204 element = Fcons (Qtop, make_number (y)); |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3205 result = Fcons (element, result); |
389 | 3206 } |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3207 |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3208 if (geometry & WidthValue) |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3209 result = Fcons (Fcons (Qwidth, make_number (width)), result); |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3210 if (geometry & HeightValue) |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3211 result = Fcons (Fcons (Qheight, make_number (height)), result); |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3212 |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3213 return result; |
389 | 3214 } |
3215 | |
3216 /* Calculate the desired size and position of this window, | |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3217 and return the flags saying which aspects were specified. |
6790
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3218 |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3219 This function does not make the coordinates positive. */ |
389 | 3220 |
3221 #define DEFAULT_ROWS 40 | |
3222 #define DEFAULT_COLS 80 | |
3223 | |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
3224 static int |
771 | 3225 x_figure_window_size (f, parms) |
3226 struct frame *f; | |
389 | 3227 Lisp_Object parms; |
3228 { | |
7251
02cc4eee5928
(x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents:
7209
diff
changeset
|
3229 register Lisp_Object tem0, tem1, tem2; |
389 | 3230 long window_prompting = 0; |
17779
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
3231 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
389 | 3232 |
3233 /* Default values if we fall through. | |
3234 Actually, if that happens we should get | |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
3235 window manager prompting. */ |
16254
3e8b16badf3d
(Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents:
16156
diff
changeset
|
3236 SET_FRAME_WIDTH (f, DEFAULT_COLS); |
771 | 3237 f->height = DEFAULT_ROWS; |
3108
461470daafaa
(x_figure_window_size): Make the default frame coords (0,0).
Richard M. Stallman <rms@gnu.org>
parents:
3080
diff
changeset
|
3238 /* Window managers expect that if program-specified |
461470daafaa
(x_figure_window_size): Make the default frame coords (0,0).
Richard M. Stallman <rms@gnu.org>
parents:
3080
diff
changeset
|
3239 positions are not (0,0), they're intentional, not defaults. */ |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3240 f->output_data.x->top_pos = 0; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3241 f->output_data.x->left_pos = 0; |
389 | 3242 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3243 tem0 = x_get_arg (dpyinfo, parms, Qheight, 0, 0, RES_TYPE_NUMBER); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3244 tem1 = x_get_arg (dpyinfo, parms, Qwidth, 0, 0, RES_TYPE_NUMBER); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3245 tem2 = x_get_arg (dpyinfo, parms, Quser_size, 0, 0, RES_TYPE_NUMBER); |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3246 if (! EQ (tem0, Qunbound) || ! EQ (tem1, Qunbound)) |
389 | 3247 { |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3248 if (!EQ (tem0, Qunbound)) |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3249 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
3250 CHECK_NUMBER (tem0); |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3251 f->height = XINT (tem0); |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3252 } |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3253 if (!EQ (tem1, Qunbound)) |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3254 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
3255 CHECK_NUMBER (tem1); |
16254
3e8b16badf3d
(Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents:
16156
diff
changeset
|
3256 SET_FRAME_WIDTH (f, XINT (tem1)); |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3257 } |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3258 if (!NILP (tem2) && !EQ (tem2, Qunbound)) |
7251
02cc4eee5928
(x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents:
7209
diff
changeset
|
3259 window_prompting |= USSize; |
02cc4eee5928
(x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents:
7209
diff
changeset
|
3260 else |
02cc4eee5928
(x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents:
7209
diff
changeset
|
3261 window_prompting |= PSize; |
389 | 3262 } |
3263 | |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3264 f->output_data.x->vertical_scroll_bar_extra |
9240
60497ceed71a
(x_figure_window_size): Use new formula for scroll bar width.
Karl Heuer <kwzh@gnu.org>
parents:
9231
diff
changeset
|
3265 = (!FRAME_HAS_VERTICAL_SCROLL_BARS (f) |
60497ceed71a
(x_figure_window_size): Use new formula for scroll bar width.
Karl Heuer <kwzh@gnu.org>
parents:
9231
diff
changeset
|
3266 ? 0 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3267 : (FRAME_SCROLL_BAR_COLS (f) * FONT_WIDTH (f->output_data.x->font))); |
41722
fd499c5c75d2
(x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents:
41449
diff
changeset
|
3268 |
fd499c5c75d2
(x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents:
41449
diff
changeset
|
3269 x_compute_fringe_widths (f, 0); |
fd499c5c75d2
(x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents:
41449
diff
changeset
|
3270 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3271 f->output_data.x->pixel_width = CHAR_TO_PIXEL_WIDTH (f, f->width); |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3272 f->output_data.x->pixel_height = CHAR_TO_PIXEL_HEIGHT (f, f->height); |
389 | 3273 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3274 tem0 = x_get_arg (dpyinfo, parms, Qtop, 0, 0, RES_TYPE_NUMBER); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3275 tem1 = x_get_arg (dpyinfo, parms, Qleft, 0, 0, RES_TYPE_NUMBER); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3276 tem2 = x_get_arg (dpyinfo, parms, Quser_position, 0, 0, RES_TYPE_NUMBER); |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3277 if (! EQ (tem0, Qunbound) || ! EQ (tem1, Qunbound)) |
389 | 3278 { |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3279 if (EQ (tem0, Qminus)) |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3280 { |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3281 f->output_data.x->top_pos = 0; |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3282 window_prompting |= YNegative; |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3283 } |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
3284 else if (CONSP (tem0) && EQ (XCAR (tem0), Qminus) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
3285 && CONSP (XCDR (tem0)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
3286 && INTEGERP (XCAR (XCDR (tem0)))) |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
3287 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
3288 f->output_data.x->top_pos = - XINT (XCAR (XCDR (tem0))); |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
3289 window_prompting |= YNegative; |
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
3290 } |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
3291 else if (CONSP (tem0) && EQ (XCAR (tem0), Qplus) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
3292 && CONSP (XCDR (tem0)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
3293 && INTEGERP (XCAR (XCDR (tem0)))) |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
3294 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
3295 f->output_data.x->top_pos = XINT (XCAR (XCDR (tem0))); |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
3296 } |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3297 else if (EQ (tem0, Qunbound)) |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3298 f->output_data.x->top_pos = 0; |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3299 else |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3300 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
3301 CHECK_NUMBER (tem0); |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3302 f->output_data.x->top_pos = XINT (tem0); |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3303 if (f->output_data.x->top_pos < 0) |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3304 window_prompting |= YNegative; |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3305 } |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3306 |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3307 if (EQ (tem1, Qminus)) |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3308 { |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3309 f->output_data.x->left_pos = 0; |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3310 window_prompting |= XNegative; |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3311 } |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
3312 else if (CONSP (tem1) && EQ (XCAR (tem1), Qminus) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
3313 && CONSP (XCDR (tem1)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
3314 && INTEGERP (XCAR (XCDR (tem1)))) |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
3315 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
3316 f->output_data.x->left_pos = - XINT (XCAR (XCDR (tem1))); |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
3317 window_prompting |= XNegative; |
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
3318 } |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
3319 else if (CONSP (tem1) && EQ (XCAR (tem1), Qplus) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
3320 && CONSP (XCDR (tem1)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
3321 && INTEGERP (XCAR (XCDR (tem1)))) |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
3322 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
3323 f->output_data.x->left_pos = XINT (XCAR (XCDR (tem1))); |
9022
10fa443c671a
(Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents:
9014
diff
changeset
|
3324 } |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3325 else if (EQ (tem1, Qunbound)) |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3326 f->output_data.x->left_pos = 0; |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3327 else |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3328 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
3329 CHECK_NUMBER (tem1); |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3330 f->output_data.x->left_pos = XINT (tem1); |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3331 if (f->output_data.x->left_pos < 0) |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3332 window_prompting |= XNegative; |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3333 } |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3334 |
10264
92dcc001aa20
(x_figure_window_size): Treat missing user-position parm as nil.
Richard M. Stallman <rms@gnu.org>
parents:
10222
diff
changeset
|
3335 if (!NILP (tem2) && ! EQ (tem2, Qunbound)) |
7251
02cc4eee5928
(x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents:
7209
diff
changeset
|
3336 window_prompting |= USPosition; |
02cc4eee5928
(x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents:
7209
diff
changeset
|
3337 else |
02cc4eee5928
(x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents:
7209
diff
changeset
|
3338 window_prompting |= PPosition; |
389 | 3339 } |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
3340 |
42721
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
3341 if (f->output_data.x->want_fullscreen != FULLSCREEN_NONE) |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
3342 { |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
3343 int left, top; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
3344 int width, height; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
3345 |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
3346 /* It takes both for some WM:s to place it where we want */ |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
3347 window_prompting = USPosition | PPosition; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
3348 x_fullscreen_adjust (f, &width, &height, &top, &left); |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
3349 f->width = width; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
3350 f->height = height; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
3351 f->output_data.x->pixel_width = CHAR_TO_PIXEL_WIDTH (f, f->width); |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
3352 f->output_data.x->pixel_height = CHAR_TO_PIXEL_HEIGHT (f, f->height); |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
3353 f->output_data.x->left_pos = left; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
3354 f->output_data.x->top_pos = top; |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
3355 } |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
3356 |
3293
03e4cad68481
(Fx_close_current_connection): Clear x_current_display.
Richard M. Stallman <rms@gnu.org>
parents:
3203
diff
changeset
|
3357 return window_prompting; |
389 | 3358 } |
3359 | |
5229
110539a25499
(Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents:
5193
diff
changeset
|
3360 #if !defined (HAVE_X11R4) && !defined (HAVE_XSETWMPROTOCOLS) |
110539a25499
(Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents:
5193
diff
changeset
|
3361 |
110539a25499
(Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents:
5193
diff
changeset
|
3362 Status |
110539a25499
(Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents:
5193
diff
changeset
|
3363 XSetWMProtocols (dpy, w, protocols, count) |
110539a25499
(Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents:
5193
diff
changeset
|
3364 Display *dpy; |
110539a25499
(Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents:
5193
diff
changeset
|
3365 Window w; |
110539a25499
(Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents:
5193
diff
changeset
|
3366 Atom *protocols; |
110539a25499
(Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents:
5193
diff
changeset
|
3367 int count; |
110539a25499
(Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents:
5193
diff
changeset
|
3368 { |
110539a25499
(Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents:
5193
diff
changeset
|
3369 Atom prop; |
110539a25499
(Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents:
5193
diff
changeset
|
3370 prop = XInternAtom (dpy, "WM_PROTOCOLS", False); |
110539a25499
(Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents:
5193
diff
changeset
|
3371 if (prop == None) return False; |
110539a25499
(Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents:
5193
diff
changeset
|
3372 XChangeProperty (dpy, w, prop, XA_ATOM, 32, PropModeReplace, |
110539a25499
(Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents:
5193
diff
changeset
|
3373 (unsigned char *) protocols, count); |
110539a25499
(Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents:
5193
diff
changeset
|
3374 return True; |
110539a25499
(Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents:
5193
diff
changeset
|
3375 } |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3376 #endif /* not HAVE_X11R4 && not HAVE_XSETWMPROTOCOLS */ |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3377 |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3378 #ifdef USE_X_TOOLKIT |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3379 |
9528
db02bc274f20
(Fx_create_frame): Init the FRAME_X_SCREEN as soon as can be done.
Richard M. Stallman <rms@gnu.org>
parents:
9353
diff
changeset
|
3380 /* If the WM_PROTOCOLS property does not already contain WM_TAKE_FOCUS, |
db02bc274f20
(Fx_create_frame): Init the FRAME_X_SCREEN as soon as can be done.
Richard M. Stallman <rms@gnu.org>
parents:
9353
diff
changeset
|
3381 WM_DELETE_WINDOW, and WM_SAVE_YOURSELF, then add them. (They may |
8845
c4b7fda8f611
(hack_wm_protocols): Arrange to handle WM_SAVE_YOURSELF.
Richard M. Stallman <rms@gnu.org>
parents:
8782
diff
changeset
|
3382 already be present because of the toolkit (Motif adds some of them, |
c4b7fda8f611
(hack_wm_protocols): Arrange to handle WM_SAVE_YOURSELF.
Richard M. Stallman <rms@gnu.org>
parents:
8782
diff
changeset
|
3383 for example, but Xt doesn't). */ |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3384 |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3385 static void |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
3386 hack_wm_protocols (f, widget) |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
3387 FRAME_PTR f; |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3388 Widget widget; |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3389 { |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3390 Display *dpy = XtDisplay (widget); |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3391 Window w = XtWindow (widget); |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3392 int need_delete = 1; |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3393 int need_focus = 1; |
8845
c4b7fda8f611
(hack_wm_protocols): Arrange to handle WM_SAVE_YOURSELF.
Richard M. Stallman <rms@gnu.org>
parents:
8782
diff
changeset
|
3394 int need_save = 1; |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3395 |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3396 BLOCK_INPUT; |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3397 { |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3398 Atom type, *atoms = 0; |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3399 int format = 0; |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3400 unsigned long nitems = 0; |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3401 unsigned long bytes_after; |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3402 |
11882
8b3575269610
(hack_wm_protocols): Cast args of XGetWindowProperty.
Karl Heuer <kwzh@gnu.org>
parents:
11774
diff
changeset
|
3403 if ((XGetWindowProperty (dpy, w, |
8b3575269610
(hack_wm_protocols): Cast args of XGetWindowProperty.
Karl Heuer <kwzh@gnu.org>
parents:
11774
diff
changeset
|
3404 FRAME_X_DISPLAY_INFO (f)->Xatom_wm_protocols, |
11894
b20c45d49063
(hack_wm_protocols): Use cast instead of suffix.
Karl Heuer <kwzh@gnu.org>
parents:
11893
diff
changeset
|
3405 (long)0, (long)100, False, XA_ATOM, |
11882
8b3575269610
(hack_wm_protocols): Cast args of XGetWindowProperty.
Karl Heuer <kwzh@gnu.org>
parents:
11774
diff
changeset
|
3406 &type, &format, &nitems, &bytes_after, |
8b3575269610
(hack_wm_protocols): Cast args of XGetWindowProperty.
Karl Heuer <kwzh@gnu.org>
parents:
11774
diff
changeset
|
3407 (unsigned char **) &atoms) |
8b3575269610
(hack_wm_protocols): Cast args of XGetWindowProperty.
Karl Heuer <kwzh@gnu.org>
parents:
11774
diff
changeset
|
3408 == Success) |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3409 && format == 32 && type == XA_ATOM) |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3410 while (nitems > 0) |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3411 { |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3412 nitems--; |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
3413 if (atoms[nitems] == FRAME_X_DISPLAY_INFO (f)->Xatom_wm_delete_window) |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
3414 need_delete = 0; |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
3415 else if (atoms[nitems] == FRAME_X_DISPLAY_INFO (f)->Xatom_wm_take_focus) |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
3416 need_focus = 0; |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
3417 else if (atoms[nitems] == FRAME_X_DISPLAY_INFO (f)->Xatom_wm_save_yourself) |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
3418 need_save = 0; |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3419 } |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3420 if (atoms) XFree ((char *) atoms); |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3421 } |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3422 { |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3423 Atom props [10]; |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3424 int count = 0; |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
3425 if (need_delete) |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
3426 props[count++] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_delete_window; |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
3427 if (need_focus) |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
3428 props[count++] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_take_focus; |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
3429 if (need_save) |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
3430 props[count++] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_save_yourself; |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3431 if (count) |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
3432 XChangeProperty (dpy, w, FRAME_X_DISPLAY_INFO (f)->Xatom_wm_protocols, |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
3433 XA_ATOM, 32, PropModeAppend, |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3434 (unsigned char *) props, count); |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3435 } |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3436 UNBLOCK_INPUT; |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3437 } |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3438 #endif |
27157
3dafddaefc2c
(x_create_im): New function to set IM and IC of a frame.
Gerd Moellmann <gerd@gnu.org>
parents:
27153
diff
changeset
|
3439 |
3dafddaefc2c
(x_create_im): New function to set IM and IC of a frame.
Gerd Moellmann <gerd@gnu.org>
parents:
27153
diff
changeset
|
3440 |
27502
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3441 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3442 /* Support routines for XIC (X Input Context). */ |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3443 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3444 #ifdef HAVE_X_I18N |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3445 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3446 static XFontSet xic_create_xfontset P_ ((struct frame *, char *)); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3447 static XIMStyle best_xim_style P_ ((XIMStyles *, XIMStyles *)); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3448 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3449 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3450 /* Supported XIM styles, ordered by preferenc. */ |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3451 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3452 static XIMStyle supported_xim_styles[] = |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3453 { |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3454 XIMPreeditPosition | XIMStatusArea, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3455 XIMPreeditPosition | XIMStatusNothing, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3456 XIMPreeditPosition | XIMStatusNone, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3457 XIMPreeditNothing | XIMStatusArea, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3458 XIMPreeditNothing | XIMStatusNothing, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3459 XIMPreeditNothing | XIMStatusNone, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3460 XIMPreeditNone | XIMStatusArea, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3461 XIMPreeditNone | XIMStatusNothing, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3462 XIMPreeditNone | XIMStatusNone, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3463 0, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3464 }; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3465 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3466 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3467 /* Create an X fontset on frame F with base font name |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3468 BASE_FONTNAME.. */ |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3469 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3470 static XFontSet |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3471 xic_create_xfontset (f, base_fontname) |
27157
3dafddaefc2c
(x_create_im): New function to set IM and IC of a frame.
Gerd Moellmann <gerd@gnu.org>
parents:
27153
diff
changeset
|
3472 struct frame *f; |
27502
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3473 char *base_fontname; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3474 { |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3475 XFontSet xfs; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3476 char **missing_list; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3477 int missing_count; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3478 char *def_string; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3479 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3480 xfs = XCreateFontSet (FRAME_X_DISPLAY (f), |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3481 base_fontname, &missing_list, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3482 &missing_count, &def_string); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3483 if (missing_list) |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3484 XFreeStringList (missing_list); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3485 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3486 /* No need to free def_string. */ |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3487 return xfs; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3488 } |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3489 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3490 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3491 /* Value is the best input style, given user preferences USER (already |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3492 checked to be supported by Emacs), and styles supported by the |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3493 input method XIM. */ |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3494 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3495 static XIMStyle |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3496 best_xim_style (user, xim) |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3497 XIMStyles *user; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3498 XIMStyles *xim; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3499 { |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3500 int i, j; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3501 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3502 for (i = 0; i < user->count_styles; ++i) |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3503 for (j = 0; j < xim->count_styles; ++j) |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3504 if (user->supported_styles[i] == xim->supported_styles[j]) |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3505 return user->supported_styles[i]; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3506 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3507 /* Return the default style. */ |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3508 return XIMPreeditNothing | XIMStatusNothing; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3509 } |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3510 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3511 /* Create XIC for frame F. */ |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3512 |
35592 | 3513 static XIMStyle xic_style; |
3514 | |
27502
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3515 void |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3516 create_frame_xic (f) |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3517 struct frame *f; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3518 { |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3519 XIM xim; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3520 XIC xic = NULL; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3521 XFontSet xfs = NULL; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3522 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3523 if (FRAME_XIC (f)) |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3524 return; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3525 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3526 xim = FRAME_X_XIM (f); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3527 if (xim) |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3528 { |
27659
4137c807296b
(create_frame_xic): Fix initialization of automatic aggregates for pcc.
Dave Love <fx@gnu.org>
parents:
27502
diff
changeset
|
3529 XRectangle s_area; |
4137c807296b
(create_frame_xic): Fix initialization of automatic aggregates for pcc.
Dave Love <fx@gnu.org>
parents:
27502
diff
changeset
|
3530 XPoint spot; |
27502
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3531 XVaNestedList preedit_attr; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3532 XVaNestedList status_attr; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3533 char *base_fontname; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3534 int fontset; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3535 |
27659
4137c807296b
(create_frame_xic): Fix initialization of automatic aggregates for pcc.
Dave Love <fx@gnu.org>
parents:
27502
diff
changeset
|
3536 s_area.x = 0; s_area.y = 0; s_area.width = 1; s_area.height = 1; |
4137c807296b
(create_frame_xic): Fix initialization of automatic aggregates for pcc.
Dave Love <fx@gnu.org>
parents:
27502
diff
changeset
|
3537 spot.x = 0; spot.y = 1; |
27502
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3538 /* Create X fontset. */ |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3539 fontset = FRAME_FONTSET (f); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3540 if (fontset < 0) |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3541 base_fontname = "-*-*-*-r-normal--14-*-*-*-*-*-*-*"; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3542 else |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3543 { |
28229
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3544 /* Determine the base fontname from the ASCII font name of |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3545 FONTSET. */ |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3546 char *ascii_font = (char *) XSTRING (fontset_ascii (fontset))->data; |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3547 char *p = ascii_font; |
27502
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3548 int i; |
28229
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3549 |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3550 for (i = 0; *p; p++) |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3551 if (*p == '-') i++; |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3552 if (i != 14) |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3553 /* As the font name doesn't conform to XLFD, we can't |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3554 modify it to get a suitable base fontname for the |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3555 frame. */ |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3556 base_fontname = "-*-*-*-r-normal--14-*-*-*-*-*-*-*"; |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3557 else |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3558 { |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3559 int len = strlen (ascii_font) + 1; |
31543
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
3560 char *p1 = NULL; |
28229
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3561 |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3562 for (i = 0, p = ascii_font; i < 8; p++) |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3563 { |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3564 if (*p == '-') |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3565 { |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3566 i++; |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3567 if (i == 3) |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3568 p1 = p + 1; |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3569 } |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3570 } |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3571 base_fontname = (char *) alloca (len); |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3572 bzero (base_fontname, len); |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3573 strcpy (base_fontname, "-*-*-"); |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3574 bcopy (p1, base_fontname + 5, p - p1); |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3575 strcat (base_fontname, "*-*-*-*-*-*-*"); |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
3576 } |
27502
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3577 } |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3578 xfs = xic_create_xfontset (f, base_fontname); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3579 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3580 /* Determine XIC style. */ |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3581 if (xic_style == 0) |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3582 { |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3583 XIMStyles supported_list; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3584 supported_list.count_styles = (sizeof supported_xim_styles |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3585 / sizeof supported_xim_styles[0]); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3586 supported_list.supported_styles = supported_xim_styles; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3587 xic_style = best_xim_style (&supported_list, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3588 FRAME_X_XIM_STYLES (f)); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3589 } |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3590 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3591 preedit_attr = XVaCreateNestedList (0, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3592 XNFontSet, xfs, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3593 XNForeground, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3594 FRAME_FOREGROUND_PIXEL (f), |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3595 XNBackground, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3596 FRAME_BACKGROUND_PIXEL (f), |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3597 (xic_style & XIMPreeditPosition |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3598 ? XNSpotLocation |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3599 : NULL), |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3600 &spot, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3601 NULL); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3602 status_attr = XVaCreateNestedList (0, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3603 XNArea, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3604 &s_area, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3605 XNFontSet, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3606 xfs, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3607 XNForeground, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3608 FRAME_FOREGROUND_PIXEL (f), |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3609 XNBackground, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3610 FRAME_BACKGROUND_PIXEL (f), |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3611 NULL); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3612 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3613 xic = XCreateIC (xim, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3614 XNInputStyle, xic_style, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3615 XNClientWindow, FRAME_X_WINDOW(f), |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3616 XNFocusWindow, FRAME_X_WINDOW(f), |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3617 XNStatusAttributes, status_attr, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3618 XNPreeditAttributes, preedit_attr, |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3619 NULL); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3620 XFree (preedit_attr); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3621 XFree (status_attr); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3622 } |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3623 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3624 FRAME_XIC (f) = xic; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3625 FRAME_XIC_STYLE (f) = xic_style; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3626 FRAME_XIC_FONTSET (f) = xfs; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3627 } |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3628 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3629 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3630 /* Destroy XIC and free XIC fontset of frame F, if any. */ |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3631 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3632 void |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3633 free_frame_xic (f) |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3634 struct frame *f; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3635 { |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3636 if (FRAME_XIC (f) == NULL) |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3637 return; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3638 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3639 XDestroyIC (FRAME_XIC (f)); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3640 if (FRAME_XIC_FONTSET (f)) |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3641 XFreeFontSet (FRAME_X_DISPLAY (f), FRAME_XIC_FONTSET (f)); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3642 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3643 FRAME_XIC (f) = NULL; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3644 FRAME_XIC_FONTSET (f) = NULL; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3645 } |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3646 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3647 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3648 /* Place preedit area for XIC of window W's frame to specified |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3649 pixel position X/Y. X and Y are relative to window W. */ |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3650 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3651 void |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3652 xic_set_preeditarea (w, x, y) |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3653 struct window *w; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3654 int x, y; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3655 { |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3656 struct frame *f = XFRAME (w->frame); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3657 XVaNestedList attr; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3658 XPoint spot; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3659 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3660 spot.x = WINDOW_TO_FRAME_PIXEL_X (w, x); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3661 spot.y = WINDOW_TO_FRAME_PIXEL_Y (w, y) + FONT_BASE (FRAME_FONT (f)); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3662 attr = XVaCreateNestedList (0, XNSpotLocation, &spot, NULL); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3663 XSetICValues (FRAME_XIC (f), XNPreeditAttributes, attr, NULL); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3664 XFree (attr); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3665 } |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3666 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3667 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3668 /* Place status area for XIC in bottom right corner of frame F.. */ |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3669 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3670 void |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3671 xic_set_statusarea (f) |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3672 struct frame *f; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3673 { |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3674 XIC xic = FRAME_XIC (f); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3675 XVaNestedList attr; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3676 XRectangle area; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3677 XRectangle *needed; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3678 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3679 /* Negotiate geometry of status area. If input method has existing |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3680 status area, use its current size. */ |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3681 area.x = area.y = area.width = area.height = 0; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3682 attr = XVaCreateNestedList (0, XNAreaNeeded, &area, NULL); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3683 XSetICValues (xic, XNStatusAttributes, attr, NULL); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3684 XFree (attr); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3685 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3686 attr = XVaCreateNestedList (0, XNAreaNeeded, &needed, NULL); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3687 XGetICValues (xic, XNStatusAttributes, attr, NULL); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3688 XFree (attr); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3689 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3690 if (needed->width == 0) /* Use XNArea instead of XNAreaNeeded */ |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3691 { |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3692 attr = XVaCreateNestedList (0, XNArea, &needed, NULL); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3693 XGetICValues (xic, XNStatusAttributes, attr, NULL); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3694 XFree (attr); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3695 } |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3696 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3697 area.width = needed->width; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3698 area.height = needed->height; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3699 area.x = PIXEL_WIDTH (f) - area.width - FRAME_INTERNAL_BORDER_WIDTH (f); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3700 area.y = (PIXEL_HEIGHT (f) - area.height |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3701 - FRAME_MENUBAR_HEIGHT (f) - FRAME_INTERNAL_BORDER_WIDTH (f)); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3702 XFree (needed); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3703 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3704 attr = XVaCreateNestedList (0, XNArea, &area, NULL); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3705 XSetICValues(xic, XNStatusAttributes, attr, NULL); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3706 XFree (attr); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3707 } |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3708 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3709 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3710 /* Set X fontset for XIC of frame F, using base font name |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3711 BASE_FONTNAME. Called when a new Emacs fontset is chosen. */ |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3712 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3713 void |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3714 xic_set_xfontset (f, base_fontname) |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3715 struct frame *f; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3716 char *base_fontname; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3717 { |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3718 XVaNestedList attr; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3719 XFontSet xfs; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3720 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3721 xfs = xic_create_xfontset (f, base_fontname); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3722 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3723 attr = XVaCreateNestedList (0, XNFontSet, xfs, NULL); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3724 if (FRAME_XIC_STYLE (f) & XIMPreeditPosition) |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3725 XSetICValues (FRAME_XIC (f), XNPreeditAttributes, attr, NULL); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3726 if (FRAME_XIC_STYLE (f) & XIMStatusArea) |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3727 XSetICValues (FRAME_XIC (f), XNStatusAttributes, attr, NULL); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3728 XFree (attr); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3729 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3730 if (FRAME_XIC_FONTSET (f)) |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3731 XFreeFontSet (FRAME_X_DISPLAY (f), FRAME_XIC_FONTSET (f)); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3732 FRAME_XIC_FONTSET (f) = xfs; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3733 } |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3734 |
27157
3dafddaefc2c
(x_create_im): New function to set IM and IC of a frame.
Gerd Moellmann <gerd@gnu.org>
parents:
27153
diff
changeset
|
3735 #endif /* HAVE_X_I18N */ |
27502
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3736 |
27157
3dafddaefc2c
(x_create_im): New function to set IM and IC of a frame.
Gerd Moellmann <gerd@gnu.org>
parents:
27153
diff
changeset
|
3737 |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3738 |
6790
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3739 #ifdef USE_X_TOOLKIT |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3740 |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3741 /* Create and set up the X widget for frame F. */ |
5229
110539a25499
(Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents:
5193
diff
changeset
|
3742 |
389 | 3743 static void |
6604
bb11213734d6
(x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6523
diff
changeset
|
3744 x_window (f, window_prompting, minibuffer_only) |
bb11213734d6
(x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6523
diff
changeset
|
3745 struct frame *f; |
bb11213734d6
(x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6523
diff
changeset
|
3746 long window_prompting; |
bb11213734d6
(x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6523
diff
changeset
|
3747 int minibuffer_only; |
389 | 3748 { |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3749 XClassHint class_hints; |
6059
0021cbdc591b
(x_window): Call XChangeWindowAttributes with the standard
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6011
diff
changeset
|
3750 XSetWindowAttributes attributes; |
0021cbdc591b
(x_window): Call XChangeWindowAttributes with the standard
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6011
diff
changeset
|
3751 unsigned long attribute_mask; |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3752 Widget shell_widget; |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3753 Widget pane_widget; |
9231
eeb35369e536
(HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents:
9182
diff
changeset
|
3754 Widget frame_widget; |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3755 Arg al [25]; |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3756 int ac; |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3757 |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3758 BLOCK_INPUT; |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3759 |
11917
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
3760 /* Use the resource name as the top-level widget name |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
3761 for looking up resources. Make a non-Lisp copy |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
3762 for the window manager, so GC relocation won't bother it. |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
3763 |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
3764 Elsewhere we specify the window name for the window manager. */ |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
3765 |
11496
db02849ee365
(x_window): Use (or reuse) frame's namebuf instead of a
Karl Heuer <kwzh@gnu.org>
parents:
11483
diff
changeset
|
3766 { |
11917
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
3767 char *str = (char *) XSTRING (Vx_resource_name)->data; |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
3768 f->namebuf = (char *) xmalloc (strlen (str) + 1); |
11496
db02849ee365
(x_window): Use (or reuse) frame's namebuf instead of a
Karl Heuer <kwzh@gnu.org>
parents:
11483
diff
changeset
|
3769 strcpy (f->namebuf, str); |
db02849ee365
(x_window): Use (or reuse) frame's namebuf instead of a
Karl Heuer <kwzh@gnu.org>
parents:
11483
diff
changeset
|
3770 } |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3771 |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3772 ac = 0; |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3773 XtSetArg (al[ac], XtNallowShellResize, 1); ac++; |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3774 XtSetArg (al[ac], XtNinput, 1); ac++; |
11707
b0cb8129be58
[USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents:
11611
diff
changeset
|
3775 XtSetArg (al[ac], XtNmappedWhenManaged, 0); ac++; |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3776 XtSetArg (al[ac], XtNborderWidth, f->output_data.x->border_width); ac++; |
27987
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
3777 XtSetArg (al[ac], XtNvisual, FRAME_X_VISUAL (f)); ac++; |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
3778 XtSetArg (al[ac], XtNdepth, FRAME_X_DISPLAY_INFO (f)->n_planes); ac++; |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
3779 XtSetArg (al[ac], XtNcolormap, FRAME_X_COLORMAP (f)); ac++; |
11496
db02849ee365
(x_window): Use (or reuse) frame's namebuf instead of a
Karl Heuer <kwzh@gnu.org>
parents:
11483
diff
changeset
|
3780 shell_widget = XtAppCreateShell (f->namebuf, EMACS_CLASS, |
12019
63ee64941021
(x_top_window_to_frame): Don't match menu-bar widget.
Karl Heuer <kwzh@gnu.org>
parents:
12011
diff
changeset
|
3781 applicationShellWidgetClass, |
9742
fe7653791d28
(Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents:
9703
diff
changeset
|
3782 FRAME_X_DISPLAY (f), al, ac); |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3783 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3784 f->output_data.x->widget = shell_widget; |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3785 /* maybe_set_screen_title_format (shell_widget); */ |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3786 |
9231
eeb35369e536
(HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents:
9182
diff
changeset
|
3787 pane_widget = lw_create_widget ("main", "pane", widget_id_tick++, |
eeb35369e536
(HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents:
9182
diff
changeset
|
3788 (widget_value *) NULL, |
eeb35369e536
(HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents:
9182
diff
changeset
|
3789 shell_widget, False, |
eeb35369e536
(HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents:
9182
diff
changeset
|
3790 (lw_callback) NULL, |
eeb35369e536
(HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents:
9182
diff
changeset
|
3791 (lw_callback) NULL, |
27343
43230463dfcf
(x_window): Call lw_create_widget with new parameter
Gerd Moellmann <gerd@gnu.org>
parents:
27157
diff
changeset
|
3792 (lw_callback) NULL, |
9231
eeb35369e536
(HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents:
9182
diff
changeset
|
3793 (lw_callback) NULL); |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3794 |
27987
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
3795 ac = 0; |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
3796 XtSetArg (al[ac], XtNvisual, FRAME_X_VISUAL (f)); ac++; |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
3797 XtSetArg (al[ac], XtNdepth, FRAME_X_DISPLAY_INFO (f)->n_planes); ac++; |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
3798 XtSetArg (al[ac], XtNcolormap, FRAME_X_COLORMAP (f)); ac++; |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
3799 XtSetValues (pane_widget, al, ac); |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3800 f->output_data.x->column_widget = pane_widget; |
6604
bb11213734d6
(x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6523
diff
changeset
|
3801 |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3802 /* mappedWhenManaged to false tells to the paned window to not map/unmap |
7040
cd4dd38925f9
(x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents:
6940
diff
changeset
|
3803 the emacs screen when changing menubar. This reduces flickering. */ |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3804 |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3805 ac = 0; |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3806 XtSetArg (al[ac], XtNmappedWhenManaged, 0); ac++; |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3807 XtSetArg (al[ac], XtNshowGrip, 0); ac++; |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3808 XtSetArg (al[ac], XtNallowResize, 1); ac++; |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3809 XtSetArg (al[ac], XtNresizeToPreferred, 1); ac++; |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3810 XtSetArg (al[ac], XtNemacsFrame, f); ac++; |
27987
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
3811 XtSetArg (al[ac], XtNvisual, FRAME_X_VISUAL (f)); ac++; |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
3812 XtSetArg (al[ac], XtNdepth, FRAME_X_DISPLAY_INFO (f)->n_planes); ac++; |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
3813 XtSetArg (al[ac], XtNcolormap, FRAME_X_COLORMAP (f)); ac++; |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
3814 frame_widget = XtCreateWidget (f->namebuf, emacsFrameClass, pane_widget, |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
3815 al, ac); |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3816 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3817 f->output_data.x->edit_widget = frame_widget; |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3818 |
9231
eeb35369e536
(HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents:
9182
diff
changeset
|
3819 XtManageChild (frame_widget); |
6604
bb11213734d6
(x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6523
diff
changeset
|
3820 |
bb11213734d6
(x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6523
diff
changeset
|
3821 /* Do some needed geometry management. */ |
bb11213734d6
(x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6523
diff
changeset
|
3822 { |
bb11213734d6
(x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6523
diff
changeset
|
3823 int len; |
bb11213734d6
(x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6523
diff
changeset
|
3824 char *tem, shell_position[32]; |
bb11213734d6
(x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6523
diff
changeset
|
3825 Arg al[2]; |
bb11213734d6
(x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6523
diff
changeset
|
3826 int ac = 0; |
12190
e0abe30899a9
[USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents:
12111
diff
changeset
|
3827 int extra_borders = 0; |
6790
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3828 int menubar_size |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3829 = (f->output_data.x->menubar_widget |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3830 ? (f->output_data.x->menubar_widget->core.height |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3831 + f->output_data.x->menubar_widget->core.border_width) |
6790
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3832 : 0); |
6604
bb11213734d6
(x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6523
diff
changeset
|
3833 |
15942
ff30ec8aab54
(x_window): Don't add ibw to menubar_size.
Richard M. Stallman <rms@gnu.org>
parents:
15891
diff
changeset
|
3834 #if 0 /* Experimentally, we now get the right results |
ff30ec8aab54
(x_window): Don't add ibw to menubar_size.
Richard M. Stallman <rms@gnu.org>
parents:
15891
diff
changeset
|
3835 for -geometry -0-0 without this. 24 Aug 96, rms. */ |
7969
7f15f77cb644
(x_window): Take account of pane widget internal border width.
Richard M. Stallman <rms@gnu.org>
parents:
7946
diff
changeset
|
3836 if (FRAME_EXTERNAL_MENU_BAR (f)) |
7f15f77cb644
(x_window): Take account of pane widget internal border width.
Richard M. Stallman <rms@gnu.org>
parents:
7946
diff
changeset
|
3837 { |
9808
4c43c9dbe130
(x_window): Make ibw 0 by default.
Richard M. Stallman <rms@gnu.org>
parents:
9742
diff
changeset
|
3838 Dimension ibw = 0; |
7969
7f15f77cb644
(x_window): Take account of pane widget internal border width.
Richard M. Stallman <rms@gnu.org>
parents:
7946
diff
changeset
|
3839 XtVaGetValues (pane_widget, XtNinternalBorderWidth, &ibw, NULL); |
7f15f77cb644
(x_window): Take account of pane widget internal border width.
Richard M. Stallman <rms@gnu.org>
parents:
7946
diff
changeset
|
3840 menubar_size += ibw; |
7f15f77cb644
(x_window): Take account of pane widget internal border width.
Richard M. Stallman <rms@gnu.org>
parents:
7946
diff
changeset
|
3841 } |
15942
ff30ec8aab54
(x_window): Don't add ibw to menubar_size.
Richard M. Stallman <rms@gnu.org>
parents:
15891
diff
changeset
|
3842 #endif |
7969
7f15f77cb644
(x_window): Take account of pane widget internal border width.
Richard M. Stallman <rms@gnu.org>
parents:
7946
diff
changeset
|
3843 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3844 f->output_data.x->menubar_height = menubar_size; |
11897
cbd3724a9696
(x_window) [both versions]: Set menubar_height.
Karl Heuer <kwzh@gnu.org>
parents:
11894
diff
changeset
|
3845 |
16305
00e57c8adaba
(x_window): With Motif, double extra_borders.
Richard M. Stallman <rms@gnu.org>
parents:
16302
diff
changeset
|
3846 #ifndef USE_LUCID |
12190
e0abe30899a9
[USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents:
12111
diff
changeset
|
3847 /* Motif seems to need this amount added to the sizes |
e0abe30899a9
[USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents:
12111
diff
changeset
|
3848 specified for the shell widget. The Athena/Lucid widgets don't. |
e0abe30899a9
[USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents:
12111
diff
changeset
|
3849 Both conclusions reached experimentally. -- rms. */ |
16305
00e57c8adaba
(x_window): With Motif, double extra_borders.
Richard M. Stallman <rms@gnu.org>
parents:
16302
diff
changeset
|
3850 XtVaGetValues (f->output_data.x->edit_widget, XtNinternalBorderWidth, |
00e57c8adaba
(x_window): With Motif, double extra_borders.
Richard M. Stallman <rms@gnu.org>
parents:
16302
diff
changeset
|
3851 &extra_borders, NULL); |
00e57c8adaba
(x_window): With Motif, double extra_borders.
Richard M. Stallman <rms@gnu.org>
parents:
16302
diff
changeset
|
3852 extra_borders *= 2; |
00e57c8adaba
(x_window): With Motif, double extra_borders.
Richard M. Stallman <rms@gnu.org>
parents:
16302
diff
changeset
|
3853 #endif |
12190
e0abe30899a9
[USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents:
12111
diff
changeset
|
3854 |
11707
b0cb8129be58
[USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents:
11611
diff
changeset
|
3855 /* Convert our geometry parameters into a geometry string |
b0cb8129be58
[USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents:
11611
diff
changeset
|
3856 and specify it. |
b0cb8129be58
[USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents:
11611
diff
changeset
|
3857 Note that we do not specify here whether the position |
b0cb8129be58
[USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents:
11611
diff
changeset
|
3858 is a user-specified or program-specified one. |
b0cb8129be58
[USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents:
11611
diff
changeset
|
3859 We pass that information later, in x_wm_set_size_hints. */ |
b0cb8129be58
[USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents:
11611
diff
changeset
|
3860 { |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3861 int left = f->output_data.x->left_pos; |
11707
b0cb8129be58
[USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents:
11611
diff
changeset
|
3862 int xneg = window_prompting & XNegative; |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3863 int top = f->output_data.x->top_pos; |
11707
b0cb8129be58
[USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents:
11611
diff
changeset
|
3864 int yneg = window_prompting & YNegative; |
b0cb8129be58
[USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents:
11611
diff
changeset
|
3865 if (xneg) |
b0cb8129be58
[USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents:
11611
diff
changeset
|
3866 left = -left; |
b0cb8129be58
[USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents:
11611
diff
changeset
|
3867 if (yneg) |
b0cb8129be58
[USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents:
11611
diff
changeset
|
3868 top = -top; |
11893
1f70ffad3d6d
[USE_X_TOOLKIT] (x_window): Pass position to toolkit
Karl Heuer <kwzh@gnu.org>
parents:
11882
diff
changeset
|
3869 |
1f70ffad3d6d
[USE_X_TOOLKIT] (x_window): Pass position to toolkit
Karl Heuer <kwzh@gnu.org>
parents:
11882
diff
changeset
|
3870 if (window_prompting & USPosition) |
12190
e0abe30899a9
[USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents:
12111
diff
changeset
|
3871 sprintf (shell_position, "=%dx%d%c%d%c%d", |
e0abe30899a9
[USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents:
12111
diff
changeset
|
3872 PIXEL_WIDTH (f) + extra_borders, |
e0abe30899a9
[USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents:
12111
diff
changeset
|
3873 PIXEL_HEIGHT (f) + menubar_size + extra_borders, |
11893
1f70ffad3d6d
[USE_X_TOOLKIT] (x_window): Pass position to toolkit
Karl Heuer <kwzh@gnu.org>
parents:
11882
diff
changeset
|
3874 (xneg ? '-' : '+'), left, |
1f70ffad3d6d
[USE_X_TOOLKIT] (x_window): Pass position to toolkit
Karl Heuer <kwzh@gnu.org>
parents:
11882
diff
changeset
|
3875 (yneg ? '-' : '+'), top); |
1f70ffad3d6d
[USE_X_TOOLKIT] (x_window): Pass position to toolkit
Karl Heuer <kwzh@gnu.org>
parents:
11882
diff
changeset
|
3876 else |
12190
e0abe30899a9
[USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents:
12111
diff
changeset
|
3877 sprintf (shell_position, "=%dx%d", |
e0abe30899a9
[USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents:
12111
diff
changeset
|
3878 PIXEL_WIDTH (f) + extra_borders, |
e0abe30899a9
[USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents:
12111
diff
changeset
|
3879 PIXEL_HEIGHT (f) + menubar_size + extra_borders); |
11707
b0cb8129be58
[USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents:
11611
diff
changeset
|
3880 } |
b0cb8129be58
[USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents:
11611
diff
changeset
|
3881 |
6604
bb11213734d6
(x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6523
diff
changeset
|
3882 len = strlen (shell_position) + 1; |
17579 | 3883 /* We don't free this because we don't know whether |
3884 it is safe to free it while the frame exists. | |
3885 It isn't worth the trouble of arranging to free it | |
3886 when the frame is deleted. */ | |
6604
bb11213734d6
(x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6523
diff
changeset
|
3887 tem = (char *) xmalloc (len); |
bb11213734d6
(x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6523
diff
changeset
|
3888 strncpy (tem, shell_position, len); |
bb11213734d6
(x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6523
diff
changeset
|
3889 XtSetArg (al[ac], XtNgeometry, tem); ac++; |
bb11213734d6
(x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6523
diff
changeset
|
3890 XtSetValues (shell_widget, al, ac); |
bb11213734d6
(x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6523
diff
changeset
|
3891 } |
bb11213734d6
(x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6523
diff
changeset
|
3892 |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3893 XtManageChild (pane_widget); |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3894 XtRealizeWidget (shell_widget); |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3895 |
9231
eeb35369e536
(HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents:
9182
diff
changeset
|
3896 FRAME_X_WINDOW (f) = XtWindow (frame_widget); |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3897 |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3898 validate_x_resource_name (); |
11917
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
3899 |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3900 class_hints.res_name = (char *) XSTRING (Vx_resource_name)->data; |
16966
df9f838f255a
(Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16732
diff
changeset
|
3901 class_hints.res_class = (char *) XSTRING (Vx_resource_class)->data; |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
3902 XSetClassHint (FRAME_X_DISPLAY (f), XtWindow (shell_widget), &class_hints); |
27502
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3903 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3904 #ifdef HAVE_X_I18N |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3905 FRAME_XIC (f) = NULL; |
29947
b7556fa4c05b
(x_window) [!USE_XIM]: Don't call create_frame_ic.
Gerd Moellmann <gerd@gnu.org>
parents:
29938
diff
changeset
|
3906 #ifdef USE_XIM |
27502
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3907 create_frame_xic (f); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3908 #endif |
29947
b7556fa4c05b
(x_window) [!USE_XIM]: Don't call create_frame_ic.
Gerd Moellmann <gerd@gnu.org>
parents:
29938
diff
changeset
|
3909 #endif |
13227
d8af44485b3c
(x_window, both versions): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13083
diff
changeset
|
3910 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3911 f->output_data.x->wm_hints.input = True; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3912 f->output_data.x->wm_hints.flags |= InputHint; |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
3913 XSetWMHints (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3914 &f->output_data.x->wm_hints); |
7172
f9eeb75c2b76
(x_window) [USE_X_TOOLKIT]: Call XSetWMHints.
Richard M. Stallman <rms@gnu.org>
parents:
7040
diff
changeset
|
3915 |
9703
85ac0e4030d4
(x_window): Pass new arg f to hack_wm_protocols.
Richard M. Stallman <rms@gnu.org>
parents:
9690
diff
changeset
|
3916 hack_wm_protocols (f, shell_widget); |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3917 |
9231
eeb35369e536
(HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents:
9182
diff
changeset
|
3918 #ifdef HACK_EDITRES |
eeb35369e536
(HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents:
9182
diff
changeset
|
3919 XtAddEventHandler (shell_widget, 0, True, _XEditResCheckMessages, 0); |
eeb35369e536
(HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents:
9182
diff
changeset
|
3920 #endif |
eeb35369e536
(HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents:
9182
diff
changeset
|
3921 |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3922 /* Do a stupid property change to force the server to generate a |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
3923 PropertyNotify event so that the event_stream server timestamp will |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3924 be initialized to something relevant to the time we created the window. |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3925 */ |
9231
eeb35369e536
(HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents:
9182
diff
changeset
|
3926 XChangeProperty (XtDisplay (frame_widget), XtWindow (frame_widget), |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
3927 FRAME_X_DISPLAY_INFO (f)->Xatom_wm_protocols, |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
3928 XA_ATOM, 32, PropModeAppend, |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3929 (unsigned char*) NULL, 0); |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3930 |
27502
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3931 /* Make all the standard events reach the Emacs frame. */ |
6059
0021cbdc591b
(x_window): Call XChangeWindowAttributes with the standard
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6011
diff
changeset
|
3932 attributes.event_mask = STANDARD_EVENT_SET; |
27502
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3933 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3934 #ifdef HAVE_X_I18N |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3935 if (FRAME_XIC (f)) |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3936 { |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3937 /* XIM server might require some X events. */ |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3938 unsigned long fevent = NoEventMask; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3939 XGetICValues(FRAME_XIC (f), XNFilterEvents, &fevent, NULL); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3940 attributes.event_mask |= fevent; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3941 } |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3942 #endif /* HAVE_X_I18N */ |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
3943 |
6059
0021cbdc591b
(x_window): Call XChangeWindowAttributes with the standard
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6011
diff
changeset
|
3944 attribute_mask = CWEventMask; |
0021cbdc591b
(x_window): Call XChangeWindowAttributes with the standard
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6011
diff
changeset
|
3945 XChangeWindowAttributes (XtDisplay (shell_widget), XtWindow (shell_widget), |
0021cbdc591b
(x_window): Call XChangeWindowAttributes with the standard
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6011
diff
changeset
|
3946 attribute_mask, &attributes); |
0021cbdc591b
(x_window): Call XChangeWindowAttributes with the standard
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6011
diff
changeset
|
3947 |
9231
eeb35369e536
(HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents:
9182
diff
changeset
|
3948 XtMapWidget (frame_widget); |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3949 |
6790
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3950 /* x_set_name normally ignores requests to set the name if the |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3951 requested name is the same as the current name. This is the one |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3952 place where that assumption isn't correct; f->name is set, but |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3953 the X server hasn't been told. */ |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3954 { |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3955 Lisp_Object name; |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3956 int explicit = f->explicit_name; |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3957 |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3958 f->explicit_name = 0; |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3959 name = f->name; |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3960 f->name = Qnil; |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3961 x_set_name (f, name, explicit); |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3962 } |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3963 |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
3964 XDefineCursor (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3965 f->output_data.x->text_cursor); |
6790
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3966 |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3967 UNBLOCK_INPUT; |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3968 |
25320
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
3969 /* This is a no-op, except under Motif. Make sure main areas are |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
3970 set to something reasonable, in case we get an error later. */ |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
3971 lw_set_main_areas (pane_widget, 0, frame_widget); |
6790
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3972 } |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3973 |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3974 #else /* not USE_X_TOOLKIT */ |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
3975 |
6790
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3976 /* Create and set up the X window for frame F. */ |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3977 |
21846 | 3978 void |
6790
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3979 x_window (f) |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3980 struct frame *f; |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3981 |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3982 { |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3983 XClassHint class_hints; |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3984 XSetWindowAttributes attributes; |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3985 unsigned long attribute_mask; |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
3986 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3987 attributes.background_pixel = f->output_data.x->background_pixel; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
3988 attributes.border_pixel = f->output_data.x->border_pixel; |
389 | 3989 attributes.bit_gravity = StaticGravity; |
3990 attributes.backing_store = NotUseful; | |
3991 attributes.save_under = True; | |
3992 attributes.event_mask = STANDARD_EVENT_SET; | |
27987
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
3993 attributes.colormap = FRAME_X_COLORMAP (f); |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
3994 attribute_mask = (CWBackPixel | CWBorderPixel | CWBitGravity | CWEventMask |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
3995 | CWColormap); |
389 | 3996 |
3997 BLOCK_INPUT; | |
1050
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
3998 FRAME_X_WINDOW (f) |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
3999 = XCreateWindow (FRAME_X_DISPLAY (f), |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4000 f->output_data.x->parent_desc, |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4001 f->output_data.x->left_pos, |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4002 f->output_data.x->top_pos, |
771 | 4003 PIXEL_WIDTH (f), PIXEL_HEIGHT (f), |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4004 f->output_data.x->border_width, |
389 | 4005 CopyFromParent, /* depth */ |
4006 InputOutput, /* class */ | |
28144
71ebba3566ec
(X_I18N_INHIBITED): Don't define.
Gerd Moellmann <gerd@gnu.org>
parents:
28096
diff
changeset
|
4007 FRAME_X_VISUAL (f), |
389 | 4008 attribute_mask, &attributes); |
27502
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
4009 |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
4010 #ifdef HAVE_X_I18N |
29947
b7556fa4c05b
(x_window) [!USE_XIM]: Don't call create_frame_ic.
Gerd Moellmann <gerd@gnu.org>
parents:
29938
diff
changeset
|
4011 #ifdef USE_XIM |
27502
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
4012 create_frame_xic (f); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
4013 if (FRAME_XIC (f)) |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
4014 { |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
4015 /* XIM server might require some X events. */ |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
4016 unsigned long fevent = NoEventMask; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
4017 XGetICValues(FRAME_XIC (f), XNFilterEvents, &fevent, NULL); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
4018 attributes.event_mask |= fevent; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
4019 attribute_mask = CWEventMask; |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
4020 XChangeWindowAttributes (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
4021 attribute_mask, &attributes); |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
4022 } |
29947
b7556fa4c05b
(x_window) [!USE_XIM]: Don't call create_frame_ic.
Gerd Moellmann <gerd@gnu.org>
parents:
29938
diff
changeset
|
4023 #endif |
27502
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
4024 #endif /* HAVE_X_I18N */ |
52e8cb1333f2
(xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents:
27343
diff
changeset
|
4025 |
4146
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
4026 validate_x_resource_name (); |
11917
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
4027 |
4146
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
4028 class_hints.res_name = (char *) XSTRING (Vx_resource_name)->data; |
16966
df9f838f255a
(Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16732
diff
changeset
|
4029 class_hints.res_class = (char *) XSTRING (Vx_resource_class)->data; |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4030 XSetClassHint (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), &class_hints); |
771 | 4031 |
11897
cbd3724a9696
(x_window) [both versions]: Set menubar_height.
Karl Heuer <kwzh@gnu.org>
parents:
11894
diff
changeset
|
4032 /* The menubar is part of the ordinary display; |
cbd3724a9696
(x_window) [both versions]: Set menubar_height.
Karl Heuer <kwzh@gnu.org>
parents:
11894
diff
changeset
|
4033 it does not count in addition to the height of the window. */ |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4034 f->output_data.x->menubar_height = 0; |
11897
cbd3724a9696
(x_window) [both versions]: Set menubar_height.
Karl Heuer <kwzh@gnu.org>
parents:
11894
diff
changeset
|
4035 |
1719
48f539ac6921
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1657
diff
changeset
|
4036 /* This indicates that we use the "Passive Input" input model. |
48f539ac6921
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1657
diff
changeset
|
4037 Unless we do this, we don't get the Focus{In,Out} events that we |
48f539ac6921
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1657
diff
changeset
|
4038 need to draw the cursor correctly. Accursed bureaucrats. |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4039 XWhipsAndChains (FRAME_X_DISPLAY (f), IronMaiden, &TheRack); */ |
1719
48f539ac6921
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1657
diff
changeset
|
4040 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4041 f->output_data.x->wm_hints.input = True; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4042 f->output_data.x->wm_hints.flags |= InputHint; |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4043 XSetWMHints (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4044 &f->output_data.x->wm_hints); |
15081
ab8c81feacf9
(x_window) [! USE_X_TOOLKIT]: Initialize wm_hints.icon_pixmap.
Richard M. Stallman <rms@gnu.org>
parents:
15079
diff
changeset
|
4045 f->output_data.x->wm_hints.icon_pixmap = None; |
7860
26a1d7b2670b
(x_window): Request "save yourself" commands.
Richard M. Stallman <rms@gnu.org>
parents:
7802
diff
changeset
|
4046 |
26a1d7b2670b
(x_window): Request "save yourself" commands.
Richard M. Stallman <rms@gnu.org>
parents:
7802
diff
changeset
|
4047 /* Request "save yourself" and "delete window" commands from wm. */ |
26a1d7b2670b
(x_window): Request "save yourself" commands.
Richard M. Stallman <rms@gnu.org>
parents:
7802
diff
changeset
|
4048 { |
26a1d7b2670b
(x_window): Request "save yourself" commands.
Richard M. Stallman <rms@gnu.org>
parents:
7802
diff
changeset
|
4049 Atom protocols[2]; |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4050 protocols[0] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_delete_window; |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4051 protocols[1] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_save_yourself; |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4052 XSetWMProtocols (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), protocols, 2); |
7860
26a1d7b2670b
(x_window): Request "save yourself" commands.
Richard M. Stallman <rms@gnu.org>
parents:
7802
diff
changeset
|
4053 } |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
4054 |
817 | 4055 /* x_set_name normally ignores requests to set the name if the |
4056 requested name is the same as the current name. This is the one | |
4057 place where that assumption isn't correct; f->name is set, but | |
4058 the X server hasn't been told. */ | |
4059 { | |
6519
22c56514eeb3
(x_set_frame_parameters, x_get_arg, x_window, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents:
6506
diff
changeset
|
4060 Lisp_Object name; |
1786
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4061 int explicit = f->explicit_name; |
817 | 4062 |
6519
22c56514eeb3
(x_set_frame_parameters, x_get_arg, x_window, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents:
6506
diff
changeset
|
4063 f->explicit_name = 0; |
22c56514eeb3
(x_set_frame_parameters, x_get_arg, x_window, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents:
6506
diff
changeset
|
4064 name = f->name; |
817 | 4065 f->name = Qnil; |
1786
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4066 x_set_name (f, name, explicit); |
817 | 4067 } |
4068 | |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4069 XDefineCursor (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4070 f->output_data.x->text_cursor); |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
4071 |
389 | 4072 UNBLOCK_INPUT; |
4073 | |
1050
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
4074 if (FRAME_X_WINDOW (f) == 0) |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
4075 error ("Unable to create window"); |
389 | 4076 } |
4077 | |
6790
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
4078 #endif /* not USE_X_TOOLKIT */ |
ee8090b47ea6
(x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents:
6783
diff
changeset
|
4079 |
389 | 4080 /* Handle the icon stuff for this window. Perhaps later we might |
4081 want an x_set_icon_position which can be called interactively as | |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4082 well. */ |
389 | 4083 |
4084 static void | |
771 | 4085 x_icon (f, parms) |
4086 struct frame *f; | |
389 | 4087 Lisp_Object parms; |
4088 { | |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
4089 Lisp_Object icon_x, icon_y; |
17779
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
4090 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
389 | 4091 |
4092 /* Set the position of the icon. Note that twm groups all | |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4093 icons in an icon window. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4094 icon_x = x_get_and_record_arg (f, parms, Qicon_left, 0, 0, RES_TYPE_NUMBER); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4095 icon_y = x_get_and_record_arg (f, parms, Qicon_top, 0, 0, RES_TYPE_NUMBER); |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
4096 if (!EQ (icon_x, Qunbound) && !EQ (icon_y, Qunbound)) |
389 | 4097 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
4098 CHECK_NUMBER (icon_x); |
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
4099 CHECK_NUMBER (icon_y); |
389 | 4100 } |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
4101 else if (!EQ (icon_x, Qunbound) || !EQ (icon_y, Qunbound)) |
389 | 4102 error ("Both left and top icon corners of icon must be specified"); |
4103 | |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
4104 BLOCK_INPUT; |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
4105 |
1050
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
4106 if (! EQ (icon_x, Qunbound)) |
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
4107 x_wm_set_icon_position (f, XINT (icon_x), XINT (icon_y)); |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
4108 |
389 | 4109 /* Start up iconic or window? */ |
2294
9bce20507666
Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents:
2283
diff
changeset
|
4110 x_wm_set_window_state |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4111 (f, (EQ (x_get_arg (dpyinfo, parms, Qvisibility, 0, 0, RES_TYPE_SYMBOL), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4112 Qicon) |
2294
9bce20507666
Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents:
2283
diff
changeset
|
4113 ? IconicState |
9bce20507666
Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents:
2283
diff
changeset
|
4114 : NormalState)); |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
4115 |
12276
2e376a4397bc
(x_report_frame_params, x_set_icon_type, x_set_icon_name)
Richard M. Stallman <rms@gnu.org>
parents:
12209
diff
changeset
|
4116 x_text_icon (f, (char *) XSTRING ((!NILP (f->icon_name) |
2e376a4397bc
(x_report_frame_params, x_set_icon_type, x_set_icon_name)
Richard M. Stallman <rms@gnu.org>
parents:
12209
diff
changeset
|
4117 ? f->icon_name |
2e376a4397bc
(x_report_frame_params, x_set_icon_type, x_set_icon_name)
Richard M. Stallman <rms@gnu.org>
parents:
12209
diff
changeset
|
4118 : f->name))->data); |
12073 | 4119 |
389 | 4120 UNBLOCK_INPUT; |
4121 } | |
4122 | |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
4123 /* Make the GCs needed for this window, setting the |
389 | 4124 background, border and mouse colors; also create the |
4125 mouse cursor and the gray border tile. */ | |
4126 | |
1018
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
4127 static char cursor_bits[] = |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
4128 { |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
4129 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
4130 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
4131 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
4132 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
4133 }; |
5fd29acd3db7
* xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents:
974
diff
changeset
|
4134 |
389 | 4135 static void |
771 | 4136 x_make_gc (f) |
4137 struct frame *f; | |
389 | 4138 { |
4139 XGCValues gc_values; | |
4140 | |
2341
1982e2983822
* xfns.c (x_make_gc): Don't forget to block X input around the
Jim Blandy <jimb@redhat.com>
parents:
2328
diff
changeset
|
4141 BLOCK_INPUT; |
1982e2983822
* xfns.c (x_make_gc): Don't forget to block X input around the
Jim Blandy <jimb@redhat.com>
parents:
2328
diff
changeset
|
4142 |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
4143 /* Create the GCs of this frame. |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
4144 Note that many default values are used. */ |
389 | 4145 |
4146 /* Normal video */ | |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4147 gc_values.font = f->output_data.x->font->fid; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4148 gc_values.foreground = f->output_data.x->foreground_pixel; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4149 gc_values.background = f->output_data.x->background_pixel; |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
4150 gc_values.line_width = 0; /* Means 1 using fast algorithm. */ |
34321
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4151 f->output_data.x->normal_gc |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4152 = XCreateGC (FRAME_X_DISPLAY (f), |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4153 FRAME_X_WINDOW (f), |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4154 GCLineWidth | GCFont | GCForeground | GCBackground, |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4155 &gc_values); |
389 | 4156 |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4157 /* Reverse video style. */ |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4158 gc_values.foreground = f->output_data.x->background_pixel; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4159 gc_values.background = f->output_data.x->foreground_pixel; |
34321
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4160 f->output_data.x->reverse_gc |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4161 = XCreateGC (FRAME_X_DISPLAY (f), |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4162 FRAME_X_WINDOW (f), |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4163 GCFont | GCForeground | GCBackground | GCLineWidth, |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4164 &gc_values); |
389 | 4165 |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
4166 /* Cursor has cursor-color background, background-color foreground. */ |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4167 gc_values.foreground = f->output_data.x->background_pixel; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4168 gc_values.background = f->output_data.x->cursor_pixel; |
389 | 4169 gc_values.fill_style = FillOpaqueStippled; |
4170 gc_values.stipple | |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4171 = XCreateBitmapFromData (FRAME_X_DISPLAY (f), |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4172 FRAME_X_DISPLAY_INFO (f)->root_window, |
389 | 4173 cursor_bits, 16, 16); |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4174 f->output_data.x->cursor_gc |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4175 = XCreateGC (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
389 | 4176 (GCFont | GCForeground | GCBackground |
24905
2c79eecad64d
(x_make_gc): Turn off GCStipple when setting up cursor_gc.
Richard M. Stallman <rms@gnu.org>
parents:
24677
diff
changeset
|
4177 | GCFillStyle /* | GCStipple */ | GCLineWidth), |
389 | 4178 &gc_values); |
4179 | |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4180 /* Reliefs. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4181 f->output_data.x->white_relief.gc = 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4182 f->output_data.x->black_relief.gc = 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4183 |
389 | 4184 /* Create the gray border tile used when the pointer is not in |
771 | 4185 the frame. Since this depends on the frame's pixel values, |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
4186 this must be done on a per-frame basis. */ |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4187 f->output_data.x->border_tile |
2136
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
4188 = (XCreatePixmapFromBitmapData |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4189 (FRAME_X_DISPLAY (f), FRAME_X_DISPLAY_INFO (f)->root_window, |
2136
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
4190 gray_bits, gray_width, gray_height, |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4191 f->output_data.x->foreground_pixel, |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4192 f->output_data.x->background_pixel, |
37253
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
4193 DefaultDepth (FRAME_X_DISPLAY (f), FRAME_X_SCREEN_NUMBER (f)))); |
2341
1982e2983822
* xfns.c (x_make_gc): Don't forget to block X input around the
Jim Blandy <jimb@redhat.com>
parents:
2328
diff
changeset
|
4194 |
1982e2983822
* xfns.c (x_make_gc): Don't forget to block X input around the
Jim Blandy <jimb@redhat.com>
parents:
2328
diff
changeset
|
4195 UNBLOCK_INPUT; |
389 | 4196 } |
4197 | |
34321
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4198 |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4199 /* Free what was was allocated in x_make_gc. */ |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4200 |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4201 void |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4202 x_free_gcs (f) |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4203 struct frame *f; |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4204 { |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4205 Display *dpy = FRAME_X_DISPLAY (f); |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4206 |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4207 BLOCK_INPUT; |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4208 |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4209 if (f->output_data.x->normal_gc) |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4210 { |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4211 XFreeGC (dpy, f->output_data.x->normal_gc); |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4212 f->output_data.x->normal_gc = 0; |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4213 } |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4214 |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4215 if (f->output_data.x->reverse_gc) |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4216 { |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4217 XFreeGC (dpy, f->output_data.x->reverse_gc); |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4218 f->output_data.x->reverse_gc = 0; |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4219 } |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4220 |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4221 if (f->output_data.x->cursor_gc) |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4222 { |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4223 XFreeGC (dpy, f->output_data.x->cursor_gc); |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4224 f->output_data.x->cursor_gc = 0; |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4225 } |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4226 |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4227 if (f->output_data.x->border_tile) |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4228 { |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4229 XFreePixmap (dpy, f->output_data.x->border_tile); |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4230 f->output_data.x->border_tile = 0; |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4231 } |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4232 |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4233 UNBLOCK_INPUT; |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4234 } |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4235 |
41ecc8525dbc
(x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
33994
diff
changeset
|
4236 |
34524
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4237 /* Handler for signals raised during x_create_frame and |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4238 x_create_top_frame. FRAME is the frame which is partially |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4239 constructed. */ |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4240 |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4241 static Lisp_Object |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4242 unwind_create_frame (frame) |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4243 Lisp_Object frame; |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4244 { |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4245 struct frame *f = XFRAME (frame); |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4246 |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4247 /* If frame is ``official'', nothing to do. */ |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4248 if (!CONSP (Vframe_list) || !EQ (XCAR (Vframe_list), frame)) |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4249 { |
34895
53e52b3525bf
Use #if GLYPH_DEBUG instead of #ifdef GLYPH_DEBUG.
Gerd Moellmann <gerd@gnu.org>
parents:
34662
diff
changeset
|
4250 #if GLYPH_DEBUG |
34524
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4251 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4252 #endif |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4253 |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4254 x_free_frame_resources (f); |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4255 |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4256 /* Check that reference counts are indeed correct. */ |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4257 xassert (dpyinfo->reference_count == dpyinfo_refcount); |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4258 xassert (dpyinfo->image_cache->refcount == image_cache_refcount); |
34638
abb4510a89f6
(unwind_create_frame): Return t if frame was deleted.
Gerd Moellmann <gerd@gnu.org>
parents:
34598
diff
changeset
|
4259 return Qt; |
34524
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4260 } |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4261 |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4262 return Qnil; |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4263 } |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4264 |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4265 |
771 | 4266 DEFUN ("x-create-frame", Fx_create_frame, Sx_create_frame, |
389 | 4267 1, 1, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4268 doc: /* Make a new X window, which is called a "frame" in Emacs terms. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4269 Returns an Emacs frame object. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4270 ALIST is an alist of frame parameters. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4271 If the parameters specify that the frame should not have a minibuffer, |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4272 and do not specify a specific minibuffer window to use, |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4273 then `default-minibuffer-frame' must be a frame whose minibuffer can |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4274 be shared by the new frame. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4275 |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4276 This function is an internal primitive--use `make-frame' instead. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4277 (parms) |
389 | 4278 Lisp_Object parms; |
4279 { | |
771 | 4280 struct frame *f; |
6935
675e4ec5f14f
(Fx_create_frame): Delete excess args to x_wm_set_size_hint.
Richard M. Stallman <rms@gnu.org>
parents:
6882
diff
changeset
|
4281 Lisp_Object frame, tem; |
389 | 4282 Lisp_Object name; |
4283 int minibuffer_only = 0; | |
4284 long window_prompting = 0; | |
4285 int width, height; | |
34524
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4286 int count = BINDING_STACK_SIZE (); |
15566
3d03a3fb8757
(Fx_create_frame): Gcpro parms, parent, and name.
Richard M. Stallman <rms@gnu.org>
parents:
15495
diff
changeset
|
4287 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4288 Lisp_Object display; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4289 struct x_display_info *dpyinfo = NULL; |
10222
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4290 Lisp_Object parent; |
11774
0b5cb5170084
(Fx_create_frame): Pass kb to make_frame_without_minibuffer.
Karl Heuer <kwzh@gnu.org>
parents:
11772
diff
changeset
|
4291 struct kboard *kb; |
389 | 4292 |
2999
33c820044087
(check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2964
diff
changeset
|
4293 check_x (); |
389 | 4294 |
11917
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
4295 /* Use this general default value to start with |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
4296 until we know if this frame has a specified name. */ |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
4297 Vx_resource_name = Vinvocation_name; |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
4298 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4299 display = x_get_arg (dpyinfo, parms, Qdisplay, 0, 0, RES_TYPE_STRING); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4300 if (EQ (display, Qunbound)) |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4301 display = Qnil; |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4302 dpyinfo = check_x_display_info (display); |
11774
0b5cb5170084
(Fx_create_frame): Pass kb to make_frame_without_minibuffer.
Karl Heuer <kwzh@gnu.org>
parents:
11772
diff
changeset
|
4303 #ifdef MULTI_KBOARD |
0b5cb5170084
(Fx_create_frame): Pass kb to make_frame_without_minibuffer.
Karl Heuer <kwzh@gnu.org>
parents:
11772
diff
changeset
|
4304 kb = dpyinfo->kboard; |
0b5cb5170084
(Fx_create_frame): Pass kb to make_frame_without_minibuffer.
Karl Heuer <kwzh@gnu.org>
parents:
11772
diff
changeset
|
4305 #else |
0b5cb5170084
(Fx_create_frame): Pass kb to make_frame_without_minibuffer.
Karl Heuer <kwzh@gnu.org>
parents:
11772
diff
changeset
|
4306 kb = &the_only_kboard; |
0b5cb5170084
(Fx_create_frame): Pass kb to make_frame_without_minibuffer.
Karl Heuer <kwzh@gnu.org>
parents:
11772
diff
changeset
|
4307 #endif |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4308 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4309 name = x_get_arg (dpyinfo, parms, Qname, "name", "Name", RES_TYPE_STRING); |
9103
948e8acb6990
(x_set_frame_parameters, x_set_menu_bar_lines, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents:
9022
diff
changeset
|
4310 if (!STRINGP (name) |
1786
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4311 && ! EQ (name, Qunbound) |
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4312 && ! NILP (name)) |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4313 error ("Invalid frame name--not a string or nil"); |
398 | 4314 |
11917
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
4315 if (STRINGP (name)) |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
4316 Vx_resource_name = name; |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
4317 |
10222
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4318 /* See if parent window is specified. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4319 parent = x_get_arg (dpyinfo, parms, Qparent_id, NULL, NULL, RES_TYPE_NUMBER); |
10222
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4320 if (EQ (parent, Qunbound)) |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4321 parent = Qnil; |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4322 if (! NILP (parent)) |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
4323 CHECK_NUMBER (parent); |
10222
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4324 |
15566
3d03a3fb8757
(Fx_create_frame): Gcpro parms, parent, and name.
Richard M. Stallman <rms@gnu.org>
parents:
15495
diff
changeset
|
4325 /* make_frame_without_minibuffer can run Lisp code and garbage collect. */ |
3d03a3fb8757
(Fx_create_frame): Gcpro parms, parent, and name.
Richard M. Stallman <rms@gnu.org>
parents:
15495
diff
changeset
|
4326 /* No need to protect DISPLAY because that's not used after passing |
3d03a3fb8757
(Fx_create_frame): Gcpro parms, parent, and name.
Richard M. Stallman <rms@gnu.org>
parents:
15495
diff
changeset
|
4327 it to make_frame_without_minibuffer. */ |
3d03a3fb8757
(Fx_create_frame): Gcpro parms, parent, and name.
Richard M. Stallman <rms@gnu.org>
parents:
15495
diff
changeset
|
4328 frame = Qnil; |
3d03a3fb8757
(Fx_create_frame): Gcpro parms, parent, and name.
Richard M. Stallman <rms@gnu.org>
parents:
15495
diff
changeset
|
4329 GCPRO4 (parms, parent, name, frame); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4330 tem = x_get_arg (dpyinfo, parms, Qminibuffer, "minibuffer", "Minibuffer", |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4331 RES_TYPE_SYMBOL); |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
4332 if (EQ (tem, Qnone) || NILP (tem)) |
12011
854e396aabed
(Fx_create_frame): Pass new arg to make_frame_without_minibuffer.
Karl Heuer <kwzh@gnu.org>
parents:
11989
diff
changeset
|
4333 f = make_frame_without_minibuffer (Qnil, kb, display); |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
4334 else if (EQ (tem, Qonly)) |
389 | 4335 { |
771 | 4336 f = make_minibuffer_frame (); |
389 | 4337 minibuffer_only = 1; |
4338 } | |
9103
948e8acb6990
(x_set_frame_parameters, x_set_menu_bar_lines, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents:
9022
diff
changeset
|
4339 else if (WINDOWP (tem)) |
12011
854e396aabed
(Fx_create_frame): Pass new arg to make_frame_without_minibuffer.
Karl Heuer <kwzh@gnu.org>
parents:
11989
diff
changeset
|
4340 f = make_frame_without_minibuffer (tem, kb, display); |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
4341 else |
771 | 4342 f = make_frame (1); |
4343 | |
15566
3d03a3fb8757
(Fx_create_frame): Gcpro parms, parent, and name.
Richard M. Stallman <rms@gnu.org>
parents:
15495
diff
changeset
|
4344 XSETFRAME (frame, f); |
3d03a3fb8757
(Fx_create_frame): Gcpro parms, parent, and name.
Richard M. Stallman <rms@gnu.org>
parents:
15495
diff
changeset
|
4345 |
1994
73ce9dd21093
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1932
diff
changeset
|
4346 /* Note that X Windows does support scroll bars. */ |
73ce9dd21093
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1932
diff
changeset
|
4347 FRAME_CAN_HAVE_SCROLL_BARS (f) = 1; |
1719
48f539ac6921
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1657
diff
changeset
|
4348 |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4349 f->output_method = output_x_window; |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4350 f->output_data.x = (struct x_output *) xmalloc (sizeof (struct x_output)); |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4351 bzero (f->output_data.x, sizeof (struct x_output)); |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4352 f->output_data.x->icon_bitmap = -1; |
19026
db6728252ce2
(Fx_create_frame): Initialize fontset in output_data.
Richard M. Stallman <rms@gnu.org>
parents:
18947
diff
changeset
|
4353 f->output_data.x->fontset = -1; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4354 f->output_data.x->scroll_bar_foreground_pixel = -1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4355 f->output_data.x->scroll_bar_background_pixel = -1; |
39619
1e12db2b25f0
(x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents:
39591
diff
changeset
|
4356 #ifdef USE_TOOLKIT_SCROLL_BARS |
1e12db2b25f0
(x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents:
39591
diff
changeset
|
4357 f->output_data.x->scroll_bar_top_shadow_pixel = -1; |
1e12db2b25f0
(x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents:
39591
diff
changeset
|
4358 f->output_data.x->scroll_bar_bottom_shadow_pixel = -1; |
1e12db2b25f0
(x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents:
39591
diff
changeset
|
4359 #endif /* USE_TOOLKIT_SCROLL_BARS */ |
34524
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4360 record_unwind_protect (unwind_create_frame, frame); |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4361 |
12276
2e376a4397bc
(x_report_frame_params, x_set_icon_type, x_set_icon_name)
Richard M. Stallman <rms@gnu.org>
parents:
12209
diff
changeset
|
4362 f->icon_name |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4363 = x_get_arg (dpyinfo, parms, Qicon_name, "iconName", "Title", |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4364 RES_TYPE_STRING); |
12276
2e376a4397bc
(x_report_frame_params, x_set_icon_type, x_set_icon_name)
Richard M. Stallman <rms@gnu.org>
parents:
12209
diff
changeset
|
4365 if (! STRINGP (f->icon_name)) |
2e376a4397bc
(x_report_frame_params, x_set_icon_type, x_set_icon_name)
Richard M. Stallman <rms@gnu.org>
parents:
12209
diff
changeset
|
4366 f->icon_name = Qnil; |
12073 | 4367 |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4368 FRAME_X_DISPLAY_INFO (f) = dpyinfo; |
34895
53e52b3525bf
Use #if GLYPH_DEBUG instead of #ifdef GLYPH_DEBUG.
Gerd Moellmann <gerd@gnu.org>
parents:
34662
diff
changeset
|
4369 #if GLYPH_DEBUG |
34524
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4370 image_cache_refcount = FRAME_X_IMAGE_CACHE (f)->refcount; |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4371 dpyinfo_refcount = dpyinfo->reference_count; |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4372 #endif /* GLYPH_DEBUG */ |
11014
634a98104921
(Fx_create_frame): set the frame's kboard member.
Karl Heuer <kwzh@gnu.org>
parents:
10920
diff
changeset
|
4373 #ifdef MULTI_KBOARD |
11774
0b5cb5170084
(Fx_create_frame): Pass kb to make_frame_without_minibuffer.
Karl Heuer <kwzh@gnu.org>
parents:
11772
diff
changeset
|
4374 FRAME_KBOARD (f) = kb; |
11014
634a98104921
(Fx_create_frame): set the frame's kboard member.
Karl Heuer <kwzh@gnu.org>
parents:
10920
diff
changeset
|
4375 #endif |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4376 |
27987
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
4377 /* These colors will be set anyway later, but it's important |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
4378 to get the color reference counts right, so initialize them! */ |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
4379 { |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
4380 Lisp_Object black; |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
4381 struct gcpro gcpro1; |
38345
3238db7bdfef
(Fx_create_frame): Initialize frame colors to -1,
Gerd Moellmann <gerd@gnu.org>
parents:
38183
diff
changeset
|
4382 |
3238db7bdfef
(Fx_create_frame): Initialize frame colors to -1,
Gerd Moellmann <gerd@gnu.org>
parents:
38183
diff
changeset
|
4383 /* Function x_decode_color can signal an error. Make |
3238db7bdfef
(Fx_create_frame): Initialize frame colors to -1,
Gerd Moellmann <gerd@gnu.org>
parents:
38183
diff
changeset
|
4384 sure to initialize color slots so that we won't try |
3238db7bdfef
(Fx_create_frame): Initialize frame colors to -1,
Gerd Moellmann <gerd@gnu.org>
parents:
38183
diff
changeset
|
4385 to free colors we haven't allocated. */ |
3238db7bdfef
(Fx_create_frame): Initialize frame colors to -1,
Gerd Moellmann <gerd@gnu.org>
parents:
38183
diff
changeset
|
4386 f->output_data.x->foreground_pixel = -1; |
3238db7bdfef
(Fx_create_frame): Initialize frame colors to -1,
Gerd Moellmann <gerd@gnu.org>
parents:
38183
diff
changeset
|
4387 f->output_data.x->background_pixel = -1; |
3238db7bdfef
(Fx_create_frame): Initialize frame colors to -1,
Gerd Moellmann <gerd@gnu.org>
parents:
38183
diff
changeset
|
4388 f->output_data.x->cursor_pixel = -1; |
3238db7bdfef
(Fx_create_frame): Initialize frame colors to -1,
Gerd Moellmann <gerd@gnu.org>
parents:
38183
diff
changeset
|
4389 f->output_data.x->cursor_foreground_pixel = -1; |
3238db7bdfef
(Fx_create_frame): Initialize frame colors to -1,
Gerd Moellmann <gerd@gnu.org>
parents:
38183
diff
changeset
|
4390 f->output_data.x->border_pixel = -1; |
3238db7bdfef
(Fx_create_frame): Initialize frame colors to -1,
Gerd Moellmann <gerd@gnu.org>
parents:
38183
diff
changeset
|
4391 f->output_data.x->mouse_pixel = -1; |
27987
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
4392 |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
4393 black = build_string ("black"); |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
4394 GCPRO1 (black); |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
4395 f->output_data.x->foreground_pixel |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
4396 = x_decode_color (f, black, BLACK_PIX_DEFAULT (f)); |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
4397 f->output_data.x->background_pixel |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
4398 = x_decode_color (f, black, BLACK_PIX_DEFAULT (f)); |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
4399 f->output_data.x->cursor_pixel |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
4400 = x_decode_color (f, black, BLACK_PIX_DEFAULT (f)); |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
4401 f->output_data.x->cursor_foreground_pixel |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
4402 = x_decode_color (f, black, BLACK_PIX_DEFAULT (f)); |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
4403 f->output_data.x->border_pixel |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
4404 = x_decode_color (f, black, BLACK_PIX_DEFAULT (f)); |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
4405 f->output_data.x->mouse_pixel |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
4406 = x_decode_color (f, black, BLACK_PIX_DEFAULT (f)); |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
4407 UNGCPRO; |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
4408 } |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
4409 |
10222
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4410 /* Specify the parent under which to make this X window. */ |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4411 |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4412 if (!NILP (parent)) |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4413 { |
18612
88efccff8970
Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents:
18594
diff
changeset
|
4414 f->output_data.x->parent_desc = (Window) XFASTINT (parent); |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4415 f->output_data.x->explicit_parent = 1; |
10222
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4416 } |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4417 else |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4418 { |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4419 f->output_data.x->parent_desc = FRAME_X_DISPLAY_INFO (f)->root_window; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4420 f->output_data.x->explicit_parent = 0; |
10222
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4421 } |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4422 |
1786
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4423 /* Set the name; the functions to which we pass f expect the name to |
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4424 be set. */ |
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4425 if (EQ (name, Qunbound) || NILP (name)) |
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4426 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4427 f->name = build_string (dpyinfo->x_id_name); |
1786
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4428 f->explicit_name = 0; |
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4429 } |
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4430 else |
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4431 { |
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4432 f->name = name; |
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4433 f->explicit_name = 1; |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
4434 /* use the frame's title when getting resources for this frame. */ |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
4435 specbind (Qx_resource_name, name); |
1786
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4436 } |
771 | 4437 |
389 | 4438 /* Extract the window parameters from the supplied values |
4439 that are needed to determine window geometry. */ | |
4146
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
4440 { |
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
4441 Lisp_Object font; |
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
4442 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4443 font = x_get_arg (dpyinfo, parms, Qfont, "font", "Font", RES_TYPE_STRING); |
18947
386d68191907
(Fx_create_frame): Don't fail to initialize `font'.
Richard M. Stallman <rms@gnu.org>
parents:
18893
diff
changeset
|
4444 |
4150
e2e92cd737bf
* xfns.c (Fx_create_frame): Block input around call to
Jim Blandy <jimb@redhat.com>
parents:
4146
diff
changeset
|
4445 BLOCK_INPUT; |
4259
085095792d99
(Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents:
4195
diff
changeset
|
4446 /* First, try whatever font the caller has specified. */ |
085095792d99
(Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents:
4195
diff
changeset
|
4447 if (STRINGP (font)) |
17048
2da4e24ceee5
Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16966
diff
changeset
|
4448 { |
21555
0927f341e390
(x_set_font): Give 2nd arg nil to Fquery_fontset.
Kenichi Handa <handa@m17n.org>
parents:
21549
diff
changeset
|
4449 tem = Fquery_fontset (font, Qnil); |
17722
27df69e20b98
(Fx_create_frame): Delete code for handling the X
Kenichi Handa <handa@m17n.org>
parents:
17629
diff
changeset
|
4450 if (STRINGP (tem)) |
27df69e20b98
(Fx_create_frame): Delete code for handling the X
Kenichi Handa <handa@m17n.org>
parents:
17629
diff
changeset
|
4451 font = x_new_fontset (f, XSTRING (tem)->data); |
17048
2da4e24ceee5
Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16966
diff
changeset
|
4452 else |
2da4e24ceee5
Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16966
diff
changeset
|
4453 font = x_new_font (f, XSTRING (font)->data); |
2da4e24ceee5
Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16966
diff
changeset
|
4454 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4455 |
4259
085095792d99
(Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents:
4195
diff
changeset
|
4456 /* Try out a font which we hope has bold and italic variations. */ |
085095792d99
(Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents:
4195
diff
changeset
|
4457 if (!STRINGP (font)) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4458 font = x_new_font (f, "-adobe-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-1"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4459 if (!STRINGP (font)) |
8270
1a0af0f4fb1d
(Fx_create_frame): Use 140 as default font size.
Richard M. Stallman <rms@gnu.org>
parents:
8192
diff
changeset
|
4460 font = x_new_font (f, "-misc-fixed-medium-r-normal-*-*-140-*-*-c-*-iso8859-1"); |
4259
085095792d99
(Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents:
4195
diff
changeset
|
4461 if (! STRINGP (font)) |
8270
1a0af0f4fb1d
(Fx_create_frame): Use 140 as default font size.
Richard M. Stallman <rms@gnu.org>
parents:
8192
diff
changeset
|
4462 font = x_new_font (f, "-*-*-medium-r-normal-*-*-140-*-*-c-*-iso8859-1"); |
4259
085095792d99
(Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents:
4195
diff
changeset
|
4463 if (! STRINGP (font)) |
085095792d99
(Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents:
4195
diff
changeset
|
4464 /* This was formerly the first thing tried, but it finds too many fonts |
085095792d99
(Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents:
4195
diff
changeset
|
4465 and takes too long. */ |
085095792d99
(Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents:
4195
diff
changeset
|
4466 font = x_new_font (f, "-*-*-medium-r-*-*-*-*-*-*-c-*-iso8859-1"); |
085095792d99
(Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents:
4195
diff
changeset
|
4467 /* If those didn't work, look for something which will at least work. */ |
085095792d99
(Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents:
4195
diff
changeset
|
4468 if (! STRINGP (font)) |
8270
1a0af0f4fb1d
(Fx_create_frame): Use 140 as default font size.
Richard M. Stallman <rms@gnu.org>
parents:
8192
diff
changeset
|
4469 font = x_new_font (f, "-*-fixed-*-*-*-*-*-140-*-*-c-*-iso8859-1"); |
4150
e2e92cd737bf
* xfns.c (Fx_create_frame): Block input around call to
Jim Blandy <jimb@redhat.com>
parents:
4146
diff
changeset
|
4470 UNBLOCK_INPUT; |
e2e92cd737bf
* xfns.c (Fx_create_frame): Block input around call to
Jim Blandy <jimb@redhat.com>
parents:
4146
diff
changeset
|
4471 if (! STRINGP (font)) |
4259
085095792d99
(Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents:
4195
diff
changeset
|
4472 font = build_string ("fixed"); |
085095792d99
(Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents:
4195
diff
changeset
|
4473 |
17722
27df69e20b98
(Fx_create_frame): Delete code for handling the X
Kenichi Handa <handa@m17n.org>
parents:
17629
diff
changeset
|
4474 x_default_parameter (f, parms, Qfont, font, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4475 "font", "Font", RES_TYPE_STRING); |
4146
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
4476 } |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
4477 |
15720
f1549b7501af
(Fx_create_frame): Do xlwmenu hack only if USE_LUCID.
Karl Heuer <kwzh@gnu.org>
parents:
15706
diff
changeset
|
4478 #ifdef USE_LUCID |
9742
fe7653791d28
(Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents:
9703
diff
changeset
|
4479 /* Prevent lwlib/xlwmenu.c from crashing because of a bug |
fe7653791d28
(Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents:
9703
diff
changeset
|
4480 whereby it fails to get any font. */ |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4481 xlwmenu_default_font = f->output_data.x->font; |
9808
4c43c9dbe130
(x_window): Make ibw 0 by default.
Richard M. Stallman <rms@gnu.org>
parents:
9742
diff
changeset
|
4482 #endif |
9742
fe7653791d28
(Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents:
9703
diff
changeset
|
4483 |
1786
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4484 x_default_parameter (f, parms, Qborder_width, make_number (2), |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4485 "borderWidth", "BorderWidth", RES_TYPE_NUMBER); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4486 |
40715 | 4487 /* This defaults to 1 in order to match xterm. We recognize either |
3923
cb16ebff1c44
* xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents:
3888
diff
changeset
|
4488 internalBorderWidth or internalBorder (which is what xterm calls |
cb16ebff1c44
* xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents:
3888
diff
changeset
|
4489 it). */ |
cb16ebff1c44
* xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents:
3888
diff
changeset
|
4490 if (NILP (Fassq (Qinternal_border_width, parms))) |
cb16ebff1c44
* xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents:
3888
diff
changeset
|
4491 { |
cb16ebff1c44
* xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents:
3888
diff
changeset
|
4492 Lisp_Object value; |
cb16ebff1c44
* xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents:
3888
diff
changeset
|
4493 |
17779
094e5efd262d
(Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents:
17722
diff
changeset
|
4494 value = x_get_arg (dpyinfo, parms, Qinternal_border_width, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4495 "internalBorder", "internalBorder", RES_TYPE_NUMBER); |
3923
cb16ebff1c44
* xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents:
3888
diff
changeset
|
4496 if (! EQ (value, Qunbound)) |
cb16ebff1c44
* xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents:
3888
diff
changeset
|
4497 parms = Fcons (Fcons (Qinternal_border_width, value), |
cb16ebff1c44
* xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents:
3888
diff
changeset
|
4498 parms); |
cb16ebff1c44
* xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents:
3888
diff
changeset
|
4499 } |
16302
025b3dc7a6ba
(Fx_create_frame): Default Qinternal_border_width to 1.
Richard M. Stallman <rms@gnu.org>
parents:
16254
diff
changeset
|
4500 x_default_parameter (f, parms, Qinternal_border_width, make_number (1), |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4501 "internalBorderWidth", "internalBorderWidth", |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4502 RES_TYPE_NUMBER); |
16254
3e8b16badf3d
(Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents:
16156
diff
changeset
|
4503 x_default_parameter (f, parms, Qvertical_scroll_bars, Qleft, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4504 "verticalScrollBars", "ScrollBars", |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4505 RES_TYPE_SYMBOL); |
389 | 4506 |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4507 /* Also do the stuff which must be set before the window exists. */ |
1786
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4508 x_default_parameter (f, parms, Qforeground_color, build_string ("black"), |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4509 "foreground", "Foreground", RES_TYPE_STRING); |
1786
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4510 x_default_parameter (f, parms, Qbackground_color, build_string ("white"), |
26808 | 4511 "background", "Background", RES_TYPE_STRING); |
1786
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4512 x_default_parameter (f, parms, Qmouse_color, build_string ("black"), |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4513 "pointerColor", "Foreground", RES_TYPE_STRING); |
1786
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4514 x_default_parameter (f, parms, Qcursor_color, build_string ("black"), |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4515 "cursorColor", "Foreground", RES_TYPE_STRING); |
1786
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4516 x_default_parameter (f, parms, Qborder_color, build_string ("black"), |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4517 "borderColor", "BorderColor", RES_TYPE_STRING); |
25528
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
4518 x_default_parameter (f, parms, Qscreen_gamma, Qnil, |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
4519 "screenGamma", "ScreenGamma", RES_TYPE_FLOAT); |
28690
01a3287bb747
(x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28597
diff
changeset
|
4520 x_default_parameter (f, parms, Qline_spacing, Qnil, |
01a3287bb747
(x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28597
diff
changeset
|
4521 "lineSpacing", "LineSpacing", RES_TYPE_NUMBER); |
41722
fd499c5c75d2
(x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents:
41449
diff
changeset
|
4522 x_default_parameter (f, parms, Qleft_fringe, Qnil, |
fd499c5c75d2
(x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents:
41449
diff
changeset
|
4523 "leftFringe", "LeftFringe", RES_TYPE_NUMBER); |
fd499c5c75d2
(x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents:
41449
diff
changeset
|
4524 x_default_parameter (f, parms, Qright_fringe, Qnil, |
fd499c5c75d2
(x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents:
41449
diff
changeset
|
4525 "rightFringe", "RightFringe", RES_TYPE_NUMBER); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4526 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4527 x_default_scroll_bar_color_parameter (f, parms, Qscroll_bar_foreground, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4528 "scrollBarForeground", |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4529 "ScrollBarForeground", 1); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4530 x_default_scroll_bar_color_parameter (f, parms, Qscroll_bar_background, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4531 "scrollBarBackground", |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4532 "ScrollBarBackground", 0); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4533 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4534 /* Init faces before x_default_parameter is called for scroll-bar |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4535 parameters because that function calls x_set_scroll_bar_width, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4536 which calls change_frame_size, which calls Fset_window_buffer, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4537 which runs hooks, which call Fvertical_motion. At the end, we |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4538 end up in init_iterator with a null face cache, which should not |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4539 happen. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4540 init_frame_faces (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4541 |
8758
fac1c4722677
(Fx_create_frame): Make 1 the default for menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
8675
diff
changeset
|
4542 x_default_parameter (f, parms, Qmenu_bar_lines, make_number (1), |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4543 "menuBar", "MenuBar", RES_TYPE_NUMBER); |
31824
b3295c7e7a60
(Fx_create_frame): Set default frame parameter value
Gerd Moellmann <gerd@gnu.org>
parents:
31768
diff
changeset
|
4544 x_default_parameter (f, parms, Qtool_bar_lines, make_number (1), |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4545 "toolBar", "ToolBar", RES_TYPE_NUMBER); |
13083
16638ebb209f
(Fx_create_frame): Set up buffer-predicate slot.
Richard M. Stallman <rms@gnu.org>
parents:
12832
diff
changeset
|
4546 x_default_parameter (f, parms, Qbuffer_predicate, Qnil, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4547 "bufferPredicate", "BufferPredicate", |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4548 RES_TYPE_SYMBOL); |
14381 | 4549 x_default_parameter (f, parms, Qtitle, Qnil, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4550 "title", "Title", RES_TYPE_STRING); |
38183
3ef7b5a020b2
(Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37946
diff
changeset
|
4551 x_default_parameter (f, parms, Qwait_for_wm, Qt, |
3ef7b5a020b2
(Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37946
diff
changeset
|
4552 "waitForWM", "WaitForWM", RES_TYPE_BOOLEAN); |
42721
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
4553 x_default_parameter (f, parms, Qfullscreen, Qnil, |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
4554 "fullscreen", "Fullscreen", RES_TYPE_SYMBOL); |
6882
3096a6f7fffb
(Fx_list_fonts): Error if non-X frame used.
Richard M. Stallman <rms@gnu.org>
parents:
6790
diff
changeset
|
4555 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4556 f->output_data.x->parent_desc = FRAME_X_DISPLAY_INFO (f)->root_window; |
36459
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4557 |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4558 /* Add the tool-bar height to the initial frame height so that the |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4559 user gets a text display area of the size he specified with -g or |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4560 via .Xdefaults. Later changes of the tool-bar height don't |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4561 change the frame size. This is done so that users can create |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4562 tall Emacs frames without having to guess how tall the tool-bar |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4563 will get. */ |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4564 if (FRAME_TOOL_BAR_LINES (f)) |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4565 { |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4566 int margin, relief, bar_height; |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4567 |
41087
cec842fa938e
(Fx_create_frame): Accept zero tool_bar_button_relief.
Gerd Moellmann <gerd@gnu.org>
parents:
40802
diff
changeset
|
4568 relief = (tool_bar_button_relief >= 0 |
36459
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4569 ? tool_bar_button_relief |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4570 : DEFAULT_TOOL_BAR_BUTTON_RELIEF); |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4571 |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4572 if (INTEGERP (Vtool_bar_button_margin) |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4573 && XINT (Vtool_bar_button_margin) > 0) |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4574 margin = XFASTINT (Vtool_bar_button_margin); |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4575 else if (CONSP (Vtool_bar_button_margin) |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4576 && INTEGERP (XCDR (Vtool_bar_button_margin)) |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4577 && XINT (XCDR (Vtool_bar_button_margin)) > 0) |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4578 margin = XFASTINT (XCDR (Vtool_bar_button_margin)); |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4579 else |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4580 margin = 0; |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4581 |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4582 bar_height = DEFAULT_TOOL_BAR_IMAGE_HEIGHT + 2 * margin + 2 * relief; |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4583 f->height += (bar_height + CANON_Y_UNIT (f) - 1) / CANON_Y_UNIT (f); |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4584 } |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4585 |
919d77f8d0ff
(Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents:
36448
diff
changeset
|
4586 /* Compute the size of the X window. */ |
771 | 4587 window_prompting = x_figure_window_size (f, parms); |
4588 | |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
4589 if (window_prompting & XNegative) |
6935
675e4ec5f14f
(Fx_create_frame): Delete excess args to x_wm_set_size_hint.
Richard M. Stallman <rms@gnu.org>
parents:
6882
diff
changeset
|
4590 { |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
4591 if (window_prompting & YNegative) |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4592 f->output_data.x->win_gravity = SouthEastGravity; |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
4593 else |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4594 f->output_data.x->win_gravity = NorthEastGravity; |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
4595 } |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
4596 else |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
4597 { |
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
4598 if (window_prompting & YNegative) |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4599 f->output_data.x->win_gravity = SouthWestGravity; |
7261
a752899939f7
(x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents:
7251
diff
changeset
|
4600 else |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4601 f->output_data.x->win_gravity = NorthWestGravity; |
6935
675e4ec5f14f
(Fx_create_frame): Delete excess args to x_wm_set_size_hint.
Richard M. Stallman <rms@gnu.org>
parents:
6882
diff
changeset
|
4602 } |
675e4ec5f14f
(Fx_create_frame): Delete excess args to x_wm_set_size_hint.
Richard M. Stallman <rms@gnu.org>
parents:
6882
diff
changeset
|
4603 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4604 f->output_data.x->size_hint_flags = window_prompting; |
7263
b7025b4bf659
(Fx_create_frame): Set the size_hint_flags field.
Richard M. Stallman <rms@gnu.org>
parents:
7261
diff
changeset
|
4605 |
25320
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4606 tem = x_get_arg (dpyinfo, parms, Qunsplittable, 0, 0, RES_TYPE_BOOLEAN); |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4607 f->no_split = minibuffer_only || EQ (tem, Qt); |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4608 |
35733
4f422aadd415
(Fx_create_frame): Add the tool bar height to the frame
Gerd Moellmann <gerd@gnu.org>
parents:
35592
diff
changeset
|
4609 /* Create the X widget or window. */ |
6604
bb11213734d6
(x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6523
diff
changeset
|
4610 #ifdef USE_X_TOOLKIT |
bb11213734d6
(x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6523
diff
changeset
|
4611 x_window (f, window_prompting, minibuffer_only); |
bb11213734d6
(x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6523
diff
changeset
|
4612 #else |
771 | 4613 x_window (f); |
6604
bb11213734d6
(x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6523
diff
changeset
|
4614 #endif |
25320
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4615 |
771 | 4616 x_icon (f, parms); |
4617 x_make_gc (f); | |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4618 |
25320
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4619 /* Now consider the frame official. */ |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4620 FRAME_X_DISPLAY_INFO (f)->reference_count++; |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4621 Vframe_list = Fcons (frame, Vframe_list); |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4622 |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
4623 /* We need to do this after creating the X window, so that the |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
4624 icon-creation functions can say whose icon they're describing. */ |
1786
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4625 x_default_parameter (f, parms, Qicon_type, Qnil, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4626 "bitmapIcon", "BitmapIcon", RES_TYPE_SYMBOL); |
1786
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4627 |
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4628 x_default_parameter (f, parms, Qauto_raise, Qnil, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4629 "autoRaise", "AutoRaiseLower", RES_TYPE_BOOLEAN); |
1786
5179baee010b
* xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents:
1733
diff
changeset
|
4630 x_default_parameter (f, parms, Qauto_lower, Qnil, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4631 "autoLower", "AutoRaiseLower", RES_TYPE_BOOLEAN); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1786
diff
changeset
|
4632 x_default_parameter (f, parms, Qcursor_type, Qbox, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4633 "cursorType", "CursorType", RES_TYPE_SYMBOL); |
26978
06f887a1c834
(Fx_create_frame): Move x_default_parameter calls that
Gerd Moellmann <gerd@gnu.org>
parents:
26954
diff
changeset
|
4634 x_default_parameter (f, parms, Qscroll_bar_width, Qnil, |
06f887a1c834
(Fx_create_frame): Move x_default_parameter calls that
Gerd Moellmann <gerd@gnu.org>
parents:
26954
diff
changeset
|
4635 "scrollBarWidth", "ScrollBarWidth", |
06f887a1c834
(Fx_create_frame): Move x_default_parameter calls that
Gerd Moellmann <gerd@gnu.org>
parents:
26954
diff
changeset
|
4636 RES_TYPE_NUMBER); |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
4637 |
771 | 4638 /* Dimensions, especially f->height, must be done via change_frame_size. |
389 | 4639 Change will not be effected unless different from the current |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4640 f->height. */ |
771 | 4641 width = f->width; |
4642 height = f->height; | |
35733
4f422aadd415
(Fx_create_frame): Add the tool bar height to the frame
Gerd Moellmann <gerd@gnu.org>
parents:
35592
diff
changeset
|
4643 |
16254
3e8b16badf3d
(Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents:
16156
diff
changeset
|
4644 f->height = 0; |
3e8b16badf3d
(Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents:
16156
diff
changeset
|
4645 SET_FRAME_WIDTH (f, 0); |
25363
bf0488244270
Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents:
25335
diff
changeset
|
4646 change_frame_size (f, height, width, 1, 0, 0); |
2136
17ab6ed0f98b
(x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents:
2067
diff
changeset
|
4647 |
33994
c7396fdd8d6b
(Fx_create_frame): Reintroduce the call to
Gerd Moellmann <gerd@gnu.org>
parents:
33960
diff
changeset
|
4648 /* Set up faces after all frame parameters are known. This call |
c7396fdd8d6b
(Fx_create_frame): Reintroduce the call to
Gerd Moellmann <gerd@gnu.org>
parents:
33960
diff
changeset
|
4649 also merges in face attributes specified for new frames. If we |
c7396fdd8d6b
(Fx_create_frame): Reintroduce the call to
Gerd Moellmann <gerd@gnu.org>
parents:
33960
diff
changeset
|
4650 don't do this, the `menu' face for instance won't have the right |
c7396fdd8d6b
(Fx_create_frame): Reintroduce the call to
Gerd Moellmann <gerd@gnu.org>
parents:
33960
diff
changeset
|
4651 colors, and the menu bar won't appear in the specified colors for |
c7396fdd8d6b
(Fx_create_frame): Reintroduce the call to
Gerd Moellmann <gerd@gnu.org>
parents:
33960
diff
changeset
|
4652 new frames. */ |
c7396fdd8d6b
(Fx_create_frame): Reintroduce the call to
Gerd Moellmann <gerd@gnu.org>
parents:
33960
diff
changeset
|
4653 call1 (Qface_set_after_frame_default, frame); |
c7396fdd8d6b
(Fx_create_frame): Reintroduce the call to
Gerd Moellmann <gerd@gnu.org>
parents:
33960
diff
changeset
|
4654 |
25320
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4655 #ifdef USE_X_TOOLKIT |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4656 /* Create the menu bar. */ |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4657 if (!minibuffer_only && FRAME_EXTERNAL_MENU_BAR (f)) |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4658 { |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4659 /* If this signals an error, we haven't set size hints for the |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4660 frame and we didn't make it visible. */ |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4661 initialize_frame_menubar (f); |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4662 |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4663 /* This is a no-op, except under Motif where it arranges the |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4664 main window for the widgets on it. */ |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4665 lw_set_main_areas (f->output_data.x->column_widget, |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4666 f->output_data.x->menubar_widget, |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4667 f->output_data.x->edit_widget); |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4668 } |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4669 #endif /* USE_X_TOOLKIT */ |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4670 |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4671 /* Tell the server what size and position, etc, we want, and how |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4672 badly we want them. This should be done after we have the menu |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4673 bar so that its size can be taken into account. */ |
389 | 4674 BLOCK_INPUT; |
7209
ca5e04c9795c
(Fx_create_frame): Pass 0 as 3rd arg to x_wm_set_size_hint.
Richard M. Stallman <rms@gnu.org>
parents:
7172
diff
changeset
|
4675 x_wm_set_size_hint (f, window_prompting, 0); |
389 | 4676 UNBLOCK_INPUT; |
4677 | |
25320
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4678 /* Make the window appear on the frame and enable display, unless |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4679 the caller says not to. However, with explicit parent, Emacs |
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4680 cannot control visibility, so don't try. */ |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
4681 if (! f->output_data.x->explicit_parent) |
10222
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4682 { |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4683 Lisp_Object visibility; |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4684 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4685 visibility = x_get_arg (dpyinfo, parms, Qvisibility, 0, 0, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
4686 RES_TYPE_SYMBOL); |
10222
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4687 if (EQ (visibility, Qunbound)) |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4688 visibility = Qt; |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4689 |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4690 if (EQ (visibility, Qicon)) |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4691 x_iconify_frame (f); |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4692 else if (! NILP (visibility)) |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4693 x_make_frame_visible (f); |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4694 else |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4695 /* Must have been Qnil. */ |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4696 ; |
617bee0c64f6
(x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents:
10080
diff
changeset
|
4697 } |
771 | 4698 |
25320
107c9221181c
(x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents:
25289
diff
changeset
|
4699 UNGCPRO; |
36594
756c28377036
(Fx_create_frame): Clear Vwindow_list.
Gerd Moellmann <gerd@gnu.org>
parents:
36459
diff
changeset
|
4700 |
756c28377036
(Fx_create_frame): Clear Vwindow_list.
Gerd Moellmann <gerd@gnu.org>
parents:
36459
diff
changeset
|
4701 /* Make sure windows on this frame appear in calls to next-window |
756c28377036
(Fx_create_frame): Clear Vwindow_list.
Gerd Moellmann <gerd@gnu.org>
parents:
36459
diff
changeset
|
4702 and similar functions. */ |
756c28377036
(Fx_create_frame): Clear Vwindow_list.
Gerd Moellmann <gerd@gnu.org>
parents:
36459
diff
changeset
|
4703 Vwindow_list = Qnil; |
756c28377036
(Fx_create_frame): Clear Vwindow_list.
Gerd Moellmann <gerd@gnu.org>
parents:
36459
diff
changeset
|
4704 |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
4705 return unbind_to (count, frame); |
389 | 4706 } |
4707 | |
34524
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
4708 |
11537
9d4df3cf95b3
(x_get_focus_frame): New arg FRAME. Callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
11496
diff
changeset
|
4709 /* FRAME is used only to get a handle on the X display. We don't pass the |
9d4df3cf95b3
(x_get_focus_frame): New arg FRAME. Callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
11496
diff
changeset
|
4710 display info directly because we're called from frame.c, which doesn't |
9d4df3cf95b3
(x_get_focus_frame): New arg FRAME. Callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
11496
diff
changeset
|
4711 know about that structure. */ |
16156
d435199e529d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16041
diff
changeset
|
4712 |
6485
b0825eef18b1
(x_get_focus_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
6480
diff
changeset
|
4713 Lisp_Object |
11537
9d4df3cf95b3
(x_get_focus_frame): New arg FRAME. Callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
11496
diff
changeset
|
4714 x_get_focus_frame (frame) |
9d4df3cf95b3
(x_get_focus_frame): New arg FRAME. Callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
11496
diff
changeset
|
4715 struct frame *frame; |
6485
b0825eef18b1
(x_get_focus_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
6480
diff
changeset
|
4716 { |
11537
9d4df3cf95b3
(x_get_focus_frame): New arg FRAME. Callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
11496
diff
changeset
|
4717 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (frame); |
6485
b0825eef18b1
(x_get_focus_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
6480
diff
changeset
|
4718 Lisp_Object xfocus; |
11537
9d4df3cf95b3
(x_get_focus_frame): New arg FRAME. Callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
11496
diff
changeset
|
4719 if (! dpyinfo->x_focus_frame) |
6485
b0825eef18b1
(x_get_focus_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
6480
diff
changeset
|
4720 return Qnil; |
b0825eef18b1
(x_get_focus_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
6480
diff
changeset
|
4721 |
11537
9d4df3cf95b3
(x_get_focus_frame): New arg FRAME. Callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
11496
diff
changeset
|
4722 XSETFRAME (xfocus, dpyinfo->x_focus_frame); |
6485
b0825eef18b1
(x_get_focus_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
6480
diff
changeset
|
4723 return xfocus; |
b0825eef18b1
(x_get_focus_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents:
6480
diff
changeset
|
4724 } |
3048
96ff8e5744b2
* xfns.c (select_visual): Include the screen number in the
Jim Blandy <jimb@redhat.com>
parents:
3015
diff
changeset
|
4725 |
28044
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4726 |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4727 /* In certain situations, when the window manager follows a |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4728 click-to-focus policy, there seems to be no way around calling |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4729 XSetInputFocus to give another frame the input focus . |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4730 |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4731 In an ideal world, XSetInputFocus should generally be avoided so |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4732 that applications don't interfere with the window manager's focus |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4733 policy. But I think it's okay to use when it's clearly done |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4734 following a user-command. */ |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4735 |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4736 DEFUN ("x-focus-frame", Fx_focus_frame, Sx_focus_frame, 1, 1, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4737 doc: /* Set the input focus to FRAME. |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4738 FRAME nil means use the selected frame. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4739 (frame) |
28044
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4740 Lisp_Object frame; |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4741 { |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4742 struct frame *f = check_x_frame (frame); |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4743 Display *dpy = FRAME_X_DISPLAY (f); |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4744 int count; |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4745 |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4746 BLOCK_INPUT; |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4747 count = x_catch_errors (dpy); |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4748 XSetInputFocus (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4749 RevertToParent, CurrentTime); |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4750 x_uncatch_errors (dpy, count); |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4751 UNBLOCK_INPUT; |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4752 |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4753 return Qnil; |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4754 } |
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
4755 |
3048
96ff8e5744b2
* xfns.c (select_visual): Include the screen number in the
Jim Blandy <jimb@redhat.com>
parents:
3015
diff
changeset
|
4756 |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26571
diff
changeset
|
4757 DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4758 doc: /* Internal function called by `color-defined-p', which see. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4759 (color, frame) |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4760 Lisp_Object color, frame; |
389 | 4761 { |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4762 XColor foo; |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4763 FRAME_PTR f = check_x_frame (frame); |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4764 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
4765 CHECK_STRING (color); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4766 |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26571
diff
changeset
|
4767 if (x_defined_color (f, XSTRING (color)->data, &foo, 0)) |
8675
1fe413b0a916
(defined_color): New arg ALLOC--optionally don't allocate the color.
Richard M. Stallman <rms@gnu.org>
parents:
8655
diff
changeset
|
4768 return Qt; |
1fe413b0a916
(defined_color): New arg ALLOC--optionally don't allocate the color.
Richard M. Stallman <rms@gnu.org>
parents:
8655
diff
changeset
|
4769 else |
1fe413b0a916
(defined_color): New arg ALLOC--optionally don't allocate the color.
Richard M. Stallman <rms@gnu.org>
parents:
8655
diff
changeset
|
4770 return Qnil; |
1fe413b0a916
(defined_color): New arg ALLOC--optionally don't allocate the color.
Richard M. Stallman <rms@gnu.org>
parents:
8655
diff
changeset
|
4771 } |
1fe413b0a916
(defined_color): New arg ALLOC--optionally don't allocate the color.
Richard M. Stallman <rms@gnu.org>
parents:
8655
diff
changeset
|
4772 |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26571
diff
changeset
|
4773 DEFUN ("xw-color-values", Fxw_color_values, Sxw_color_values, 1, 2, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4774 doc: /* Internal function called by `color-values', which see. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4775 (color, frame) |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4776 Lisp_Object color, frame; |
8675
1fe413b0a916
(defined_color): New arg ALLOC--optionally don't allocate the color.
Richard M. Stallman <rms@gnu.org>
parents:
8655
diff
changeset
|
4777 { |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4778 XColor foo; |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4779 FRAME_PTR f = check_x_frame (frame); |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4780 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
4781 CHECK_STRING (color); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4782 |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26571
diff
changeset
|
4783 if (x_defined_color (f, XSTRING (color)->data, &foo, 0)) |
8655
4c69fcaaa037
(Fx_color_defined_p): Return list of RGB values, not just t.
Richard M. Stallman <rms@gnu.org>
parents:
8405
diff
changeset
|
4784 { |
4c69fcaaa037
(Fx_color_defined_p): Return list of RGB values, not just t.
Richard M. Stallman <rms@gnu.org>
parents:
8405
diff
changeset
|
4785 Lisp_Object rgb[3]; |
4c69fcaaa037
(Fx_color_defined_p): Return list of RGB values, not just t.
Richard M. Stallman <rms@gnu.org>
parents:
8405
diff
changeset
|
4786 |
4c69fcaaa037
(Fx_color_defined_p): Return list of RGB values, not just t.
Richard M. Stallman <rms@gnu.org>
parents:
8405
diff
changeset
|
4787 rgb[0] = make_number (foo.red); |
4c69fcaaa037
(Fx_color_defined_p): Return list of RGB values, not just t.
Richard M. Stallman <rms@gnu.org>
parents:
8405
diff
changeset
|
4788 rgb[1] = make_number (foo.green); |
4c69fcaaa037
(Fx_color_defined_p): Return list of RGB values, not just t.
Richard M. Stallman <rms@gnu.org>
parents:
8405
diff
changeset
|
4789 rgb[2] = make_number (foo.blue); |
4c69fcaaa037
(Fx_color_defined_p): Return list of RGB values, not just t.
Richard M. Stallman <rms@gnu.org>
parents:
8405
diff
changeset
|
4790 return Flist (3, rgb); |
4c69fcaaa037
(Fx_color_defined_p): Return list of RGB values, not just t.
Richard M. Stallman <rms@gnu.org>
parents:
8405
diff
changeset
|
4791 } |
389 | 4792 else |
4793 return Qnil; | |
4794 } | |
4795 | |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26571
diff
changeset
|
4796 DEFUN ("xw-display-color-p", Fxw_display_color_p, Sxw_display_color_p, 0, 1, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4797 doc: /* Internal function called by `display-color-p', which see. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4798 (display) |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4799 Lisp_Object display; |
389 | 4800 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4801 struct x_display_info *dpyinfo = check_x_display_info (display); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4802 |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4803 if (dpyinfo->n_planes <= 2) |
389 | 4804 return Qnil; |
4805 | |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4806 switch (dpyinfo->visual->class) |
389 | 4807 { |
4808 case StaticColor: | |
4809 case PseudoColor: | |
4810 case TrueColor: | |
4811 case DirectColor: | |
4812 return Qt; | |
4813 | |
4814 default: | |
4815 return Qnil; | |
4816 } | |
4817 } | |
4818 | |
8779
12c6296bbb4b
(Fx_display_grayscale_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8758
diff
changeset
|
4819 DEFUN ("x-display-grayscale-p", Fx_display_grayscale_p, Sx_display_grayscale_p, |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4820 0, 1, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4821 doc: /* Return t if the X display supports shades of gray. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4822 Note that color displays do support shades of gray. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4823 The optional argument DISPLAY specifies which display to ask about. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4824 DISPLAY should be either a frame or a display name (a string). |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4825 If omitted or nil, that stands for the selected frame's display. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4826 (display) |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4827 Lisp_Object display; |
8779
12c6296bbb4b
(Fx_display_grayscale_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8758
diff
changeset
|
4828 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4829 struct x_display_info *dpyinfo = check_x_display_info (display); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4830 |
12347
0731c1ec96ad
(Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents:
12316
diff
changeset
|
4831 if (dpyinfo->n_planes <= 1) |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4832 return Qnil; |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4833 |
12347
0731c1ec96ad
(Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents:
12316
diff
changeset
|
4834 switch (dpyinfo->visual->class) |
0731c1ec96ad
(Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents:
12316
diff
changeset
|
4835 { |
0731c1ec96ad
(Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents:
12316
diff
changeset
|
4836 case StaticColor: |
0731c1ec96ad
(Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents:
12316
diff
changeset
|
4837 case PseudoColor: |
0731c1ec96ad
(Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents:
12316
diff
changeset
|
4838 case TrueColor: |
0731c1ec96ad
(Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents:
12316
diff
changeset
|
4839 case DirectColor: |
0731c1ec96ad
(Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents:
12316
diff
changeset
|
4840 case StaticGray: |
0731c1ec96ad
(Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents:
12316
diff
changeset
|
4841 case GrayScale: |
0731c1ec96ad
(Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents:
12316
diff
changeset
|
4842 return Qt; |
0731c1ec96ad
(Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents:
12316
diff
changeset
|
4843 |
0731c1ec96ad
(Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents:
12316
diff
changeset
|
4844 default: |
0731c1ec96ad
(Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents:
12316
diff
changeset
|
4845 return Qnil; |
0731c1ec96ad
(Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents:
12316
diff
changeset
|
4846 } |
8779
12c6296bbb4b
(Fx_display_grayscale_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8758
diff
changeset
|
4847 } |
12c6296bbb4b
(Fx_display_grayscale_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8758
diff
changeset
|
4848 |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4849 DEFUN ("x-display-pixel-width", Fx_display_pixel_width, Sx_display_pixel_width, |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4850 0, 1, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4851 doc: /* Returns the width in pixels of the X display DISPLAY. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4852 The optional argument DISPLAY specifies which display to ask about. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4853 DISPLAY should be either a frame or a display name (a string). |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4854 If omitted or nil, that stands for the selected frame's display. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4855 (display) |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4856 Lisp_Object display; |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4857 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4858 struct x_display_info *dpyinfo = check_x_display_info (display); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4859 |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4860 return make_number (dpyinfo->width); |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4861 } |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4862 |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4863 DEFUN ("x-display-pixel-height", Fx_display_pixel_height, |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4864 Sx_display_pixel_height, 0, 1, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4865 doc: /* Returns the height in pixels of the X display DISPLAY. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4866 The optional argument DISPLAY specifies which display to ask about. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4867 DISPLAY should be either a frame or a display name (a string). |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4868 If omitted or nil, that stands for the selected frame's display. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4869 (display) |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4870 Lisp_Object display; |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4871 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4872 struct x_display_info *dpyinfo = check_x_display_info (display); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4873 |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4874 return make_number (dpyinfo->height); |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4875 } |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4876 |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4877 DEFUN ("x-display-planes", Fx_display_planes, Sx_display_planes, |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4878 0, 1, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4879 doc: /* Returns the number of bitplanes of the X display DISPLAY. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4880 The optional argument DISPLAY specifies which display to ask about. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4881 DISPLAY should be either a frame or a display name (a string). |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4882 If omitted or nil, that stands for the selected frame's display. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4883 (display) |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4884 Lisp_Object display; |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4885 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4886 struct x_display_info *dpyinfo = check_x_display_info (display); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4887 |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4888 return make_number (dpyinfo->n_planes); |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4889 } |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4890 |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4891 DEFUN ("x-display-color-cells", Fx_display_color_cells, Sx_display_color_cells, |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4892 0, 1, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4893 doc: /* Returns the number of color cells of the X display DISPLAY. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4894 The optional argument DISPLAY specifies which display to ask about. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4895 DISPLAY should be either a frame or a display name (a string). |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4896 If omitted or nil, that stands for the selected frame's display. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4897 (display) |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4898 Lisp_Object display; |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4899 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4900 struct x_display_info *dpyinfo = check_x_display_info (display); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4901 |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4902 return make_number (DisplayCells (dpyinfo->display, |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4903 XScreenNumberOfScreen (dpyinfo->screen))); |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4904 } |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4905 |
4279 | 4906 DEFUN ("x-server-max-request-size", Fx_server_max_request_size, |
4907 Sx_server_max_request_size, | |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4908 0, 1, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4909 doc: /* Returns the maximum request size of the X server of display DISPLAY. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4910 The optional argument DISPLAY specifies which display to ask about. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4911 DISPLAY should be either a frame or a display name (a string). |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4912 If omitted or nil, that stands for the selected frame's display. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4913 (display) |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4914 Lisp_Object display; |
4279 | 4915 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4916 struct x_display_info *dpyinfo = check_x_display_info (display); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4917 |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4918 return make_number (MAXREQUEST (dpyinfo->display)); |
4279 | 4919 } |
4920 | |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4921 DEFUN ("x-server-vendor", Fx_server_vendor, Sx_server_vendor, 0, 1, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4922 doc: /* Returns the vendor ID string of the X server of display DISPLAY. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4923 The optional argument DISPLAY specifies which display to ask about. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4924 DISPLAY should be either a frame or a display name (a string). |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4925 If omitted or nil, that stands for the selected frame's display. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4926 (display) |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4927 Lisp_Object display; |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4928 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4929 struct x_display_info *dpyinfo = check_x_display_info (display); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4930 char *vendor = ServerVendor (dpyinfo->display); |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4931 |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4932 if (! vendor) vendor = ""; |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4933 return build_string (vendor); |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4934 } |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4935 |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4936 DEFUN ("x-server-version", Fx_server_version, Sx_server_version, 0, 1, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4937 doc: /* Returns the version numbers of the X server of display DISPLAY. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4938 The value is a list of three integers: the major and minor |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4939 version numbers of the X Protocol in use, and the vendor-specific release |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4940 number. See also the function `x-server-vendor'. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4941 |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4942 The optional argument DISPLAY specifies which display to ask about. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4943 DISPLAY should be either a frame or a display name (a string). |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4944 If omitted or nil, that stands for the selected frame's display. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4945 (display) |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4946 Lisp_Object display; |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4947 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4948 struct x_display_info *dpyinfo = check_x_display_info (display); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4949 Display *dpy = dpyinfo->display; |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4950 |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4951 return Fcons (make_number (ProtocolVersion (dpy)), |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4952 Fcons (make_number (ProtocolRevision (dpy)), |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4953 Fcons (make_number (VendorRelease (dpy)), Qnil))); |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4954 } |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4955 |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4956 DEFUN ("x-display-screens", Fx_display_screens, Sx_display_screens, 0, 1, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4957 doc: /* Return the number of screens on the X server of display DISPLAY. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4958 The optional argument DISPLAY specifies which display to ask about. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4959 DISPLAY should be either a frame or a display name (a string). |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4960 If omitted or nil, that stands for the selected frame's display. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4961 (display) |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4962 Lisp_Object display; |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4963 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4964 struct x_display_info *dpyinfo = check_x_display_info (display); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4965 |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4966 return make_number (ScreenCount (dpyinfo->display)); |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4967 } |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4968 |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4969 DEFUN ("x-display-mm-height", Fx_display_mm_height, Sx_display_mm_height, 0, 1, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4970 doc: /* Return the height in millimeters of the X display DISPLAY. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4971 The optional argument DISPLAY specifies which display to ask about. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4972 DISPLAY should be either a frame or a display name (a string). |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4973 If omitted or nil, that stands for the selected frame's display. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4974 (display) |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4975 Lisp_Object display; |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4976 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4977 struct x_display_info *dpyinfo = check_x_display_info (display); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4978 |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4979 return make_number (HeightMMOfScreen (dpyinfo->screen)); |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4980 } |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4981 |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4982 DEFUN ("x-display-mm-width", Fx_display_mm_width, Sx_display_mm_width, 0, 1, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4983 doc: /* Return the width in millimeters of the X display DISPLAY. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4984 The optional argument DISPLAY specifies which display to ask about. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4985 DISPLAY should be either a frame or a display name (a string). |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4986 If omitted or nil, that stands for the selected frame's display. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4987 (display) |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4988 Lisp_Object display; |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4989 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
4990 struct x_display_info *dpyinfo = check_x_display_info (display); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4991 |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
4992 return make_number (WidthMMOfScreen (dpyinfo->screen)); |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4993 } |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4994 |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
4995 DEFUN ("x-display-backing-store", Fx_display_backing_store, |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4996 Sx_display_backing_store, 0, 1, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
4997 doc: /* Returns an indication of whether X display DISPLAY does backing store. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4998 The value may be `always', `when-mapped', or `not-useful'. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
4999 The optional argument DISPLAY specifies which display to ask about. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5000 DISPLAY should be either a frame or a display name (a string). |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5001 If omitted or nil, that stands for the selected frame's display. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5002 (display) |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5003 Lisp_Object display; |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5004 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5005 struct x_display_info *dpyinfo = check_x_display_info (display); |
31543
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5006 Lisp_Object result; |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5007 |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5008 switch (DoesBackingStore (dpyinfo->screen)) |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5009 { |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5010 case Always: |
31543
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5011 result = intern ("always"); |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5012 break; |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5013 |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5014 case WhenMapped: |
31543
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5015 result = intern ("when-mapped"); |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5016 break; |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5017 |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5018 case NotUseful: |
31543
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5019 result = intern ("not-useful"); |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5020 break; |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5021 |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5022 default: |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5023 error ("Strange value for BackingStore parameter of screen"); |
31543
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5024 result = Qnil; |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5025 } |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5026 |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5027 return result; |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5028 } |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5029 |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5030 DEFUN ("x-display-visual-class", Fx_display_visual_class, |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5031 Sx_display_visual_class, 0, 1, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5032 doc: /* Return the visual class of the X display DISPLAY. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5033 The value is one of the symbols `static-gray', `gray-scale', |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5034 `static-color', `pseudo-color', `true-color', or `direct-color'. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5035 |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5036 The optional argument DISPLAY specifies which display to ask about. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5037 DISPLAY should be either a frame or a display name (a string). |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5038 If omitted or nil, that stands for the selected frame's display. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5039 (display) |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5040 Lisp_Object display; |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5041 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5042 struct x_display_info *dpyinfo = check_x_display_info (display); |
31543
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5043 Lisp_Object result; |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5044 |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5045 switch (dpyinfo->visual->class) |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5046 { |
31543
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5047 case StaticGray: |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5048 result = intern ("static-gray"); |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5049 break; |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5050 case GrayScale: |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5051 result = intern ("gray-scale"); |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5052 break; |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5053 case StaticColor: |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5054 result = intern ("static-color"); |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5055 break; |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5056 case PseudoColor: |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5057 result = intern ("pseudo-color"); |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5058 break; |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5059 case TrueColor: |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5060 result = intern ("true-color"); |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5061 break; |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5062 case DirectColor: |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5063 result = intern ("direct-color"); |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5064 break; |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5065 default: |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5066 error ("Display has an unknown visual class"); |
31543
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5067 result = Qnil; |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5068 } |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5069 |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
5070 return result; |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5071 } |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5072 |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5073 DEFUN ("x-display-save-under", Fx_display_save_under, |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5074 Sx_display_save_under, 0, 1, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5075 doc: /* Returns t if the X display DISPLAY supports the save-under feature. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5076 The optional argument DISPLAY specifies which display to ask about. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5077 DISPLAY should be either a frame or a display name (a string). |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5078 If omitted or nil, that stands for the selected frame's display. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5079 (display) |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5080 Lisp_Object display; |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5081 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5082 struct x_display_info *dpyinfo = check_x_display_info (display); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5083 |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5084 if (DoesSaveUnders (dpyinfo->screen) == True) |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5085 return Qt; |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5086 else |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5087 return Qnil; |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5088 } |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
5089 |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5090 int |
2067
0a353ddd4bf4
(Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents:
1994
diff
changeset
|
5091 x_pixel_width (f) |
0a353ddd4bf4
(Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents:
1994
diff
changeset
|
5092 register struct frame *f; |
389 | 5093 { |
2067
0a353ddd4bf4
(Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents:
1994
diff
changeset
|
5094 return PIXEL_WIDTH (f); |
0a353ddd4bf4
(Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents:
1994
diff
changeset
|
5095 } |
0a353ddd4bf4
(Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents:
1994
diff
changeset
|
5096 |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5097 int |
2067
0a353ddd4bf4
(Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents:
1994
diff
changeset
|
5098 x_pixel_height (f) |
0a353ddd4bf4
(Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents:
1994
diff
changeset
|
5099 register struct frame *f; |
0a353ddd4bf4
(Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents:
1994
diff
changeset
|
5100 { |
0a353ddd4bf4
(Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents:
1994
diff
changeset
|
5101 return PIXEL_HEIGHT (f); |
389 | 5102 } |
5103 | |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5104 int |
2067
0a353ddd4bf4
(Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents:
1994
diff
changeset
|
5105 x_char_width (f) |
0a353ddd4bf4
(Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents:
1994
diff
changeset
|
5106 register struct frame *f; |
389 | 5107 { |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
5108 return FONT_WIDTH (f->output_data.x->font); |
2067
0a353ddd4bf4
(Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents:
1994
diff
changeset
|
5109 } |
0a353ddd4bf4
(Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents:
1994
diff
changeset
|
5110 |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5111 int |
2067
0a353ddd4bf4
(Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents:
1994
diff
changeset
|
5112 x_char_height (f) |
0a353ddd4bf4
(Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents:
1994
diff
changeset
|
5113 register struct frame *f; |
0a353ddd4bf4
(Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents:
1994
diff
changeset
|
5114 { |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12656
diff
changeset
|
5115 return f->output_data.x->line_height; |
389 | 5116 } |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5117 |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5118 int |
19825
cdfaf8ce5208
(x_screen_planes): Fix type of argument.
Richard M. Stallman <rms@gnu.org>
parents:
19095
diff
changeset
|
5119 x_screen_planes (f) |
cdfaf8ce5208
(x_screen_planes): Fix type of argument.
Richard M. Stallman <rms@gnu.org>
parents:
19095
diff
changeset
|
5120 register struct frame *f; |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5121 { |
19825
cdfaf8ce5208
(x_screen_planes): Fix type of argument.
Richard M. Stallman <rms@gnu.org>
parents:
19095
diff
changeset
|
5122 return FRAME_X_DISPLAY_INFO (f)->n_planes; |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5123 } |
28044
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
5124 |
27993
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5125 |
389 | 5126 |
27993
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5127 /************************************************************************ |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5128 X Displays |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5129 ************************************************************************/ |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5130 |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5131 |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5132 /* Mapping visual names to visuals. */ |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5133 |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5134 static struct visual_class |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5135 { |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5136 char *name; |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5137 int class; |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5138 } |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5139 visual_classes[] = |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5140 { |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5141 {"StaticGray", StaticGray}, |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5142 {"GrayScale", GrayScale}, |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5143 {"StaticColor", StaticColor}, |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5144 {"PseudoColor", PseudoColor}, |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5145 {"TrueColor", TrueColor}, |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5146 {"DirectColor", DirectColor}, |
42123
7f5f06b97bfc
(x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents:
42006
diff
changeset
|
5147 {NULL, 0} |
27993
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5148 }; |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5149 |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5150 |
4606
0866f021a2cc
(XScreenNumberOfScreen): New function.
Richard M. Stallman <rms@gnu.org>
parents:
4571
diff
changeset
|
5151 #ifndef HAVE_XSCREENNUMBEROFSCREEN |
27993
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5152 |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5153 /* Value is the screen number of screen SCR. This is a substitute for |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5154 the X function with the same name when that doesn't exist. */ |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5155 |
4606
0866f021a2cc
(XScreenNumberOfScreen): New function.
Richard M. Stallman <rms@gnu.org>
parents:
4571
diff
changeset
|
5156 int |
0866f021a2cc
(XScreenNumberOfScreen): New function.
Richard M. Stallman <rms@gnu.org>
parents:
4571
diff
changeset
|
5157 XScreenNumberOfScreen (scr) |
0866f021a2cc
(XScreenNumberOfScreen): New function.
Richard M. Stallman <rms@gnu.org>
parents:
4571
diff
changeset
|
5158 register Screen *scr; |
0866f021a2cc
(XScreenNumberOfScreen): New function.
Richard M. Stallman <rms@gnu.org>
parents:
4571
diff
changeset
|
5159 { |
27993
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5160 Display *dpy = scr->display; |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5161 int i; |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5162 |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5163 for (i = 0; i < dpy->nscreens; ++i) |
40325
2eb0395c1697
(XScreenNumberOfScreen): Fix struct to pointer
Gerd Moellmann <gerd@gnu.org>
parents:
40279
diff
changeset
|
5164 if (scr == dpy->screens + i) |
27993
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5165 break; |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5166 |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5167 return i; |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5168 } |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5169 |
4606
0866f021a2cc
(XScreenNumberOfScreen): New function.
Richard M. Stallman <rms@gnu.org>
parents:
4571
diff
changeset
|
5170 #endif /* not HAVE_XSCREENNUMBEROFSCREEN */ |
0866f021a2cc
(XScreenNumberOfScreen): New function.
Richard M. Stallman <rms@gnu.org>
parents:
4571
diff
changeset
|
5171 |
27993
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5172 |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5173 /* Select the visual that should be used on display DPYINFO. Set |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5174 members of DPYINFO appropriately. Called from x_term_init. */ |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5175 |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5176 void |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5177 select_visual (dpyinfo) |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5178 struct x_display_info *dpyinfo; |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5179 { |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5180 Display *dpy = dpyinfo->display; |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5181 Screen *screen = dpyinfo->screen; |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5182 Lisp_Object value; |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5183 |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5184 /* See if a visual is specified. */ |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5185 value = display_x_get_resource (dpyinfo, |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5186 build_string ("visualClass"), |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5187 build_string ("VisualClass"), |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5188 Qnil, Qnil); |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5189 if (STRINGP (value)) |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5190 { |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5191 /* VALUE should be of the form CLASS-DEPTH, where CLASS is one |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5192 of `PseudoColor', `TrueColor' etc. and DEPTH is the color |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5193 depth, a decimal number. NAME is compared with case ignored. */ |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5194 char *s = (char *) alloca (STRING_BYTES (XSTRING (value)) + 1); |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5195 char *dash; |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5196 int i, class = -1; |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5197 XVisualInfo vinfo; |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5198 |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5199 strcpy (s, XSTRING (value)->data); |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5200 dash = index (s, '-'); |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5201 if (dash) |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5202 { |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5203 dpyinfo->n_planes = atoi (dash + 1); |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5204 *dash = '\0'; |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5205 } |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5206 else |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5207 /* We won't find a matching visual with depth 0, so that |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5208 an error will be printed below. */ |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5209 dpyinfo->n_planes = 0; |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5210 |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5211 /* Determine the visual class. */ |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5212 for (i = 0; visual_classes[i].name; ++i) |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5213 if (xstricmp (s, visual_classes[i].name) == 0) |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5214 { |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5215 class = visual_classes[i].class; |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5216 break; |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5217 } |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5218 |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5219 /* Look up a matching visual for the specified class. */ |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5220 if (class == -1 |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5221 || !XMatchVisualInfo (dpy, XScreenNumberOfScreen (screen), |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5222 dpyinfo->n_planes, class, &vinfo)) |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5223 fatal ("Invalid visual specification `%s'", XSTRING (value)->data); |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5224 |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5225 dpyinfo->visual = vinfo.visual; |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5226 } |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5227 else |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5228 { |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5229 int n_visuals; |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5230 XVisualInfo *vinfo, vinfo_template; |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5231 |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5232 dpyinfo->visual = DefaultVisualOfScreen (screen); |
1050
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
5233 |
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
5234 #ifdef HAVE_X11R4 |
27993
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5235 vinfo_template.visualid = XVisualIDFromVisual (dpyinfo->visual); |
1050
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
5236 #else |
27993
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5237 vinfo_template.visualid = dpyinfo->visual->visualid; |
1050
133bad38bde1
* xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents:
1018
diff
changeset
|
5238 #endif |
27993
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5239 vinfo_template.screen = XScreenNumberOfScreen (screen); |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5240 vinfo = XGetVisualInfo (dpy, VisualIDMask | VisualScreenMask, |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5241 &vinfo_template, &n_visuals); |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5242 if (n_visuals != 1) |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5243 fatal ("Can't get proper X visual info"); |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5244 |
28199
56a776500341
* xfns.c (select_visual): Don't set dpyinfo->n_planes to the
Gerd Moellmann <gerd@gnu.org>
parents:
28144
diff
changeset
|
5245 dpyinfo->n_planes = vinfo->depth; |
27993
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5246 XFree ((char *) vinfo); |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5247 } |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5248 } |
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5249 |
389 | 5250 |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5251 /* Return the X display structure for the display named NAME. |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5252 Open a new connection if necessary. */ |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5253 |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5254 struct x_display_info * |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5255 x_display_info_for_name (name) |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5256 Lisp_Object name; |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5257 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5258 Lisp_Object names; |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5259 struct x_display_info *dpyinfo; |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5260 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
5261 CHECK_STRING (name); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5262 |
12381
67cb86bbdb55
(Fx_open_connection, x_display_info_for_name):
Richard M. Stallman <rms@gnu.org>
parents:
12347
diff
changeset
|
5263 if (! EQ (Vwindow_system, intern ("x"))) |
67cb86bbdb55
(Fx_open_connection, x_display_info_for_name):
Richard M. Stallman <rms@gnu.org>
parents:
12347
diff
changeset
|
5264 error ("Not using X Windows"); |
67cb86bbdb55
(Fx_open_connection, x_display_info_for_name):
Richard M. Stallman <rms@gnu.org>
parents:
12347
diff
changeset
|
5265 |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5266 for (dpyinfo = x_display_list, names = x_display_name_list; |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5267 dpyinfo; |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
5268 dpyinfo = dpyinfo->next, names = XCDR (names)) |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5269 { |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5270 Lisp_Object tem; |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
5271 tem = Fstring_equal (XCAR (XCAR (names)), name); |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5272 if (!NILP (tem)) |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5273 return dpyinfo; |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5274 } |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5275 |
11917
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
5276 /* Use this general default value to start with. */ |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
5277 Vx_resource_name = Vinvocation_name; |
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
5278 |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5279 validate_x_resource_name (); |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5280 |
34976
05c36b1fa618
(x_display_info_for_name): Cast 0 to "char *" in the call
Eli Zaretskii <eliz@gnu.org>
parents:
34911
diff
changeset
|
5281 dpyinfo = x_term_init (name, (char *)0, |
11917
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
5282 (char *) XSTRING (Vx_resource_name)->data); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5283 |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5284 if (dpyinfo == 0) |
12046
d23f2c9990b2
(x_display_info_for_name): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents:
12036
diff
changeset
|
5285 error ("Cannot connect to X server %s", XSTRING (name)->data); |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5286 |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5287 x_in_use = 1; |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5288 XSETFASTINT (Vwindow_system_version, 11); |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5289 |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5290 return dpyinfo; |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5291 } |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5292 |
27993
3a34e2d1bf3c
(select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents:
27987
diff
changeset
|
5293 |
389 | 5294 DEFUN ("x-open-connection", Fx_open_connection, Sx_open_connection, |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5295 1, 3, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5296 doc: /* Open a connection to an X server. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5297 DISPLAY is the name of the display to connect to. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5298 Optional second arg XRM-STRING is a string of resources in xrdb format. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5299 If the optional third arg MUST-SUCCEED is non-nil, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5300 terminate Emacs if we can't open the connection. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5301 (display, xrm_string, must_succeed) |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5302 Lisp_Object display, xrm_string, must_succeed; |
389 | 5303 { |
5304 unsigned char *xrm_option; | |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5305 struct x_display_info *dpyinfo; |
389 | 5306 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
5307 CHECK_STRING (display); |
4146
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
5308 if (! NILP (xrm_string)) |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
5309 CHECK_STRING (xrm_string); |
389 | 5310 |
12381
67cb86bbdb55
(Fx_open_connection, x_display_info_for_name):
Richard M. Stallman <rms@gnu.org>
parents:
12347
diff
changeset
|
5311 if (! EQ (Vwindow_system, intern ("x"))) |
67cb86bbdb55
(Fx_open_connection, x_display_info_for_name):
Richard M. Stallman <rms@gnu.org>
parents:
12347
diff
changeset
|
5312 error ("Not using X Windows"); |
67cb86bbdb55
(Fx_open_connection, x_display_info_for_name):
Richard M. Stallman <rms@gnu.org>
parents:
12347
diff
changeset
|
5313 |
4146
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
5314 if (! NILP (xrm_string)) |
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
5315 xrm_option = (unsigned char *) XSTRING (xrm_string)->data; |
389 | 5316 else |
5317 xrm_option = (unsigned char *) 0; | |
4146
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
5318 |
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
5319 validate_x_resource_name (); |
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
5320 |
7802
d687e885fa6a
(Fx_open_connection): Set up Vx_resource_name and xrm_option
Richard M. Stallman <rms@gnu.org>
parents:
7797
diff
changeset
|
5321 /* This is what opens the connection and sets x_current_display. |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5322 This also initializes many symbols, such as those used for input. */ |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5323 dpyinfo = x_term_init (display, xrm_option, |
11917
2314b62ca4ab
(Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents:
11900
diff
changeset
|
5324 (char *) XSTRING (Vx_resource_name)->data); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5325 |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5326 if (dpyinfo == 0) |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5327 { |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5328 if (!NILP (must_succeed)) |
39907 | 5329 fatal ("Cannot connect to X server %s.\n\ |
5330 Check the DISPLAY environment variable or use `-d'.\n\ | |
5331 Also use the `xhost' program to verify that it is set to permit\n\ | |
12046
d23f2c9990b2
(x_display_info_for_name): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents:
12036
diff
changeset
|
5332 connections from your machine.\n", |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5333 XSTRING (display)->data); |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5334 else |
12046
d23f2c9990b2
(x_display_info_for_name): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents:
12036
diff
changeset
|
5335 error ("Cannot connect to X server %s", XSTRING (display)->data); |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5336 } |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5337 |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5338 x_in_use = 1; |
7802
d687e885fa6a
(Fx_open_connection): Set up Vx_resource_name and xrm_option
Richard M. Stallman <rms@gnu.org>
parents:
7797
diff
changeset
|
5339 |
9327
b3398cf56fba
(Fx_open_connection): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents:
9285
diff
changeset
|
5340 XSETFASTINT (Vwindow_system_version, 11); |
389 | 5341 return Qnil; |
5342 } | |
5343 | |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5344 DEFUN ("x-close-connection", Fx_close_connection, |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5345 Sx_close_connection, 1, 1, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5346 doc: /* Close the connection to DISPLAY's X server. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5347 For DISPLAY, specify either a frame or a display name (a string). |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5348 If DISPLAY is nil, that stands for the selected frame's display. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5349 (display) |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5350 Lisp_Object display; |
389 | 5351 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5352 struct x_display_info *dpyinfo = check_x_display_info (display); |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5353 int i; |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5354 |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5355 if (dpyinfo->reference_count > 0) |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5356 error ("Display still has frames on it"); |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5357 |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5358 BLOCK_INPUT; |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5359 /* Free the fonts in the font table. */ |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5360 for (i = 0; i < dpyinfo->n_fonts; i++) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5361 if (dpyinfo->font_table[i].name) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5362 { |
28229
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
5363 if (dpyinfo->font_table[i].name != dpyinfo->font_table[i].full_name) |
5a0af67169a7
(Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents:
28199
diff
changeset
|
5364 xfree (dpyinfo->font_table[i].full_name); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5365 xfree (dpyinfo->font_table[i].name); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5366 XFreeFont (dpyinfo->display, dpyinfo->font_table[i].font); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5367 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5368 |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5369 x_destroy_all_bitmaps (dpyinfo); |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5370 XSetCloseDownMode (dpyinfo->display, DestroyAll); |
9742
fe7653791d28
(Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents:
9703
diff
changeset
|
5371 |
fe7653791d28
(Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents:
9703
diff
changeset
|
5372 #ifdef USE_X_TOOLKIT |
fe7653791d28
(Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents:
9703
diff
changeset
|
5373 XtCloseDisplay (dpyinfo->display); |
fe7653791d28
(Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents:
9703
diff
changeset
|
5374 #else |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5375 XCloseDisplay (dpyinfo->display); |
9742
fe7653791d28
(Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents:
9703
diff
changeset
|
5376 #endif |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5377 |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5378 x_delete_display (dpyinfo); |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5379 UNBLOCK_INPUT; |
8782
51241477cfc5
Delete X11 conditionals.
Richard M. Stallman <rms@gnu.org>
parents:
8780
diff
changeset
|
5380 |
389 | 5381 return Qnil; |
5382 } | |
5383 | |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5384 DEFUN ("x-display-list", Fx_display_list, Sx_display_list, 0, 0, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5385 doc: /* Return the list of display names that Emacs has connections to. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5386 () |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5387 { |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5388 Lisp_Object tail, result; |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5389 |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5390 result = Qnil; |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
5391 for (tail = x_display_name_list; ! NILP (tail); tail = XCDR (tail)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25628
diff
changeset
|
5392 result = Fcons (XCAR (XCAR (tail)), result); |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5393 |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5394 return result; |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5395 } |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5396 |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5397 DEFUN ("x-synchronize", Fx_synchronize, Sx_synchronize, 1, 2, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5398 doc: /* If ON is non-nil, report X errors as soon as the erring request is made. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5399 If ON is nil, allow buffering of requests. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5400 Turning on synchronization prohibits the Xlib routines from buffering |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5401 requests and seriously degrades performance, but makes debugging much |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5402 easier. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5403 The optional second argument DISPLAY specifies which display to act on. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5404 DISPLAY should be either a frame or a display name (a string). |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5405 If DISPLAY is omitted or nil, that stands for the selected frame's display. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5406 (on, display) |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5407 Lisp_Object display, on; |
389 | 5408 { |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
5409 struct x_display_info *dpyinfo = check_x_display_info (display); |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5410 |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5411 XSynchronize (dpyinfo->display, !EQ (on, Qnil)); |
389 | 5412 |
5413 return Qnil; | |
5414 } | |
5415 | |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5416 /* Wait for responses to all X commands issued so far for frame F. */ |
5536 | 5417 |
5418 void | |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5419 x_sync (f) |
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5420 FRAME_PTR f; |
5536 | 5421 { |
5558 | 5422 BLOCK_INPUT; |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
5423 XSync (FRAME_X_DISPLAY (f), False); |
5558 | 5424 UNBLOCK_INPUT; |
5536 | 5425 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5426 |
389 | 5427 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5428 /*********************************************************************** |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5429 Image types |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5430 ***********************************************************************/ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5431 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5432 /* Value is the number of elements of vector VECTOR. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5433 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5434 #define DIM(VECTOR) (sizeof (VECTOR) / sizeof *(VECTOR)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5435 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5436 /* List of supported image types. Use define_image_type to add new |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5437 types. Use lookup_image_type to find a type for a given symbol. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5438 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5439 static struct image_type *image_types; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5440 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5441 /* The symbol `image' which is the car of the lists used to represent |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5442 images in Lisp. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5443 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5444 extern Lisp_Object Qimage; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5445 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5446 /* The symbol `xbm' which is used as the type symbol for XBM images. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5447 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5448 Lisp_Object Qxbm; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5449 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5450 /* Keywords. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5451 |
25679
8b09c5927f1c
(QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5452 extern Lisp_Object QCwidth, QCheight, QCforeground, QCbackground, QCfile; |
28001
fed7f17af8c1
(QCdata): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents:
27993
diff
changeset
|
5453 extern Lisp_Object QCdata; |
fed7f17af8c1
(QCdata): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents:
27993
diff
changeset
|
5454 Lisp_Object QCtype, QCascent, QCmargin, QCrelief; |
35360
ba490eed8f66
(QCconversion): Replaces QCalgorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
35275
diff
changeset
|
5455 Lisp_Object QCconversion, QCcolor_symbols, QCheuristic_mask; |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
5456 Lisp_Object QCindex, QCmatrix, QCcolor_adjustment, QCmask; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5457 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5458 /* Other symbols. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5459 |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
5460 Lisp_Object Qlaplace, Qemboss, Qedge_detection, Qheuristic; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5461 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5462 /* Time in seconds after which images should be removed from the cache |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5463 if not displayed. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5464 |
25628
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
5465 Lisp_Object Vimage_cache_eviction_delay; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5466 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5467 /* Function prototypes. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5468 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5469 static void define_image_type P_ ((struct image_type *type)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5470 static struct image_type *lookup_image_type P_ ((Lisp_Object symbol)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5471 static void image_error P_ ((char *format, Lisp_Object, Lisp_Object)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5472 static void x_laplace P_ ((struct frame *, struct image *)); |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
5473 static void x_emboss P_ ((struct frame *, struct image *)); |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
5474 static int x_build_heuristic_mask P_ ((struct frame *, struct image *, |
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
5475 Lisp_Object)); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5476 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5477 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5478 /* Define a new image type from TYPE. This adds a copy of TYPE to |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5479 image_types and adds the symbol *TYPE->type to Vimage_types. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5480 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5481 static void |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5482 define_image_type (type) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5483 struct image_type *type; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5484 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5485 /* Make a copy of TYPE to avoid a bus error in a dumped Emacs. |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5486 The initialized data segment is read-only. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5487 struct image_type *p = (struct image_type *) xmalloc (sizeof *p); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5488 bcopy (type, p, sizeof *p); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5489 p->next = image_types; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5490 image_types = p; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5491 Vimage_types = Fcons (*p->type, Vimage_types); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5492 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5493 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5494 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5495 /* Look up image type SYMBOL, and return a pointer to its image_type |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5496 structure. Value is null if SYMBOL is not a known image type. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5497 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5498 static INLINE struct image_type * |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5499 lookup_image_type (symbol) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5500 Lisp_Object symbol; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5501 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5502 struct image_type *type; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5503 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5504 for (type = image_types; type; type = type->next) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5505 if (EQ (symbol, *type->type)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5506 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5507 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5508 return type; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5509 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5510 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5511 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5512 /* Value is non-zero if OBJECT is a valid Lisp image specification. A |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5513 valid image specification is a list whose car is the symbol |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5514 `image', and whose rest is a property list. The property list must |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5515 contain a value for key `:type'. That value must be the name of a |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5516 supported image type. The rest of the property list depends on the |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5517 image type. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5518 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5519 int |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5520 valid_image_p (object) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5521 Lisp_Object object; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5522 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5523 int valid_p = 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5524 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5525 if (CONSP (object) && EQ (XCAR (object), Qimage)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5526 { |
38542
27905f0c73b7
(valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents:
38345
diff
changeset
|
5527 Lisp_Object tem; |
27905f0c73b7
(valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents:
38345
diff
changeset
|
5528 |
27905f0c73b7
(valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents:
38345
diff
changeset
|
5529 for (tem = XCDR (object); CONSP (tem); tem = XCDR (tem)) |
27905f0c73b7
(valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents:
38345
diff
changeset
|
5530 if (EQ (XCAR (tem), QCtype)) |
27905f0c73b7
(valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents:
38345
diff
changeset
|
5531 { |
27905f0c73b7
(valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents:
38345
diff
changeset
|
5532 tem = XCDR (tem); |
27905f0c73b7
(valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents:
38345
diff
changeset
|
5533 if (CONSP (tem) && SYMBOLP (XCAR (tem))) |
27905f0c73b7
(valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents:
38345
diff
changeset
|
5534 { |
27905f0c73b7
(valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents:
38345
diff
changeset
|
5535 struct image_type *type; |
27905f0c73b7
(valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents:
38345
diff
changeset
|
5536 type = lookup_image_type (XCAR (tem)); |
27905f0c73b7
(valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents:
38345
diff
changeset
|
5537 if (type) |
27905f0c73b7
(valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents:
38345
diff
changeset
|
5538 valid_p = type->valid_p (object); |
27905f0c73b7
(valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents:
38345
diff
changeset
|
5539 } |
27905f0c73b7
(valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents:
38345
diff
changeset
|
5540 |
27905f0c73b7
(valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents:
38345
diff
changeset
|
5541 break; |
27905f0c73b7
(valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents:
38345
diff
changeset
|
5542 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5543 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5544 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5545 return valid_p; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5546 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5547 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5548 |
25800
609695887d08
(image_error): Use add_to_log.
Gerd Moellmann <gerd@gnu.org>
parents:
25715
diff
changeset
|
5549 /* Log error message with format string FORMAT and argument ARG. |
609695887d08
(image_error): Use add_to_log.
Gerd Moellmann <gerd@gnu.org>
parents:
25715
diff
changeset
|
5550 Signaling an error, e.g. when an image cannot be loaded, is not a |
609695887d08
(image_error): Use add_to_log.
Gerd Moellmann <gerd@gnu.org>
parents:
25715
diff
changeset
|
5551 good idea because this would interrupt redisplay, and the error |
609695887d08
(image_error): Use add_to_log.
Gerd Moellmann <gerd@gnu.org>
parents:
25715
diff
changeset
|
5552 message display would lead to another redisplay. This function |
609695887d08
(image_error): Use add_to_log.
Gerd Moellmann <gerd@gnu.org>
parents:
25715
diff
changeset
|
5553 therefore simply displays a message. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5554 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5555 static void |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5556 image_error (format, arg1, arg2) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5557 char *format; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5558 Lisp_Object arg1, arg2; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5559 { |
25800
609695887d08
(image_error): Use add_to_log.
Gerd Moellmann <gerd@gnu.org>
parents:
25715
diff
changeset
|
5560 add_to_log (format, arg1, arg2); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5561 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5562 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5563 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5564 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5565 /*********************************************************************** |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5566 Image specifications |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5567 ***********************************************************************/ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5568 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5569 enum image_value_type |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5570 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5571 IMAGE_DONT_CHECK_VALUE_TYPE, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5572 IMAGE_STRING_VALUE, |
37946
fe4457964ac0
(enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents:
37762
diff
changeset
|
5573 IMAGE_STRING_OR_NIL_VALUE, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5574 IMAGE_SYMBOL_VALUE, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5575 IMAGE_POSITIVE_INTEGER_VALUE, |
35275
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
5576 IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5577 IMAGE_NON_NEGATIVE_INTEGER_VALUE, |
28787 | 5578 IMAGE_ASCENT_VALUE, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5579 IMAGE_INTEGER_VALUE, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5580 IMAGE_FUNCTION_VALUE, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5581 IMAGE_NUMBER_VALUE, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5582 IMAGE_BOOL_VALUE |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5583 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5584 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5585 /* Structure used when parsing image specifications. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5586 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5587 struct image_keyword |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5588 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5589 /* Name of keyword. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5590 char *name; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5591 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5592 /* The type of value allowed. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5593 enum image_value_type type; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5594 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5595 /* Non-zero means key must be present. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5596 int mandatory_p; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5597 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5598 /* Used to recognize duplicate keywords in a property list. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5599 int count; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5600 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5601 /* The value that was found. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5602 Lisp_Object value; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5603 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5604 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5605 |
26401 | 5606 static int parse_image_spec P_ ((Lisp_Object, struct image_keyword *, |
5607 int, Lisp_Object)); | |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5608 static Lisp_Object image_spec_value P_ ((Lisp_Object, Lisp_Object, int *)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5609 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5610 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5611 /* Parse image spec SPEC according to KEYWORDS. A valid image spec |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5612 has the format (image KEYWORD VALUE ...). One of the keyword/ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5613 value pairs must be `:type TYPE'. KEYWORDS is a vector of |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5614 image_keywords structures of size NKEYWORDS describing other |
26401 | 5615 allowed keyword/value pairs. Value is non-zero if SPEC is valid. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5616 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5617 static int |
26401 | 5618 parse_image_spec (spec, keywords, nkeywords, type) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5619 Lisp_Object spec; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5620 struct image_keyword *keywords; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5621 int nkeywords; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5622 Lisp_Object type; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5623 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5624 int i; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5625 Lisp_Object plist; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5626 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5627 if (!CONSP (spec) || !EQ (XCAR (spec), Qimage)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5628 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5629 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5630 plist = XCDR (spec); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5631 while (CONSP (plist)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5632 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5633 Lisp_Object key, value; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5634 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5635 /* First element of a pair must be a symbol. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5636 key = XCAR (plist); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5637 plist = XCDR (plist); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5638 if (!SYMBOLP (key)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5639 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5640 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5641 /* There must follow a value. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5642 if (!CONSP (plist)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5643 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5644 value = XCAR (plist); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5645 plist = XCDR (plist); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5646 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5647 /* Find key in KEYWORDS. Error if not found. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5648 for (i = 0; i < nkeywords; ++i) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5649 if (strcmp (keywords[i].name, XSYMBOL (key)->name->data) == 0) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5650 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5651 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5652 if (i == nkeywords) |
26401 | 5653 continue; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5654 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5655 /* Record that we recognized the keyword. If a keywords |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5656 was found more than once, it's an error. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5657 keywords[i].value = value; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5658 ++keywords[i].count; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5659 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5660 if (keywords[i].count > 1) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5661 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5662 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5663 /* Check type of value against allowed type. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5664 switch (keywords[i].type) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5665 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5666 case IMAGE_STRING_VALUE: |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5667 if (!STRINGP (value)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5668 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5669 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5670 |
37946
fe4457964ac0
(enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents:
37762
diff
changeset
|
5671 case IMAGE_STRING_OR_NIL_VALUE: |
fe4457964ac0
(enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents:
37762
diff
changeset
|
5672 if (!STRINGP (value) && !NILP (value)) |
fe4457964ac0
(enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents:
37762
diff
changeset
|
5673 return 0; |
fe4457964ac0
(enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents:
37762
diff
changeset
|
5674 break; |
fe4457964ac0
(enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents:
37762
diff
changeset
|
5675 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5676 case IMAGE_SYMBOL_VALUE: |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5677 if (!SYMBOLP (value)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5678 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5679 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5680 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5681 case IMAGE_POSITIVE_INTEGER_VALUE: |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5682 if (!INTEGERP (value) || XINT (value) <= 0) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5683 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5684 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5685 |
35275
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
5686 case IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR: |
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
5687 if (INTEGERP (value) && XINT (value) >= 0) |
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
5688 break; |
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
5689 if (CONSP (value) |
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
5690 && INTEGERP (XCAR (value)) && INTEGERP (XCDR (value)) |
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
5691 && XINT (XCAR (value)) >= 0 && XINT (XCDR (value)) >= 0) |
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
5692 break; |
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
5693 return 0; |
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
5694 |
28787 | 5695 case IMAGE_ASCENT_VALUE: |
5696 if (SYMBOLP (value) && EQ (value, Qcenter)) | |
5697 break; | |
5698 else if (INTEGERP (value) | |
5699 && XINT (value) >= 0 | |
5700 && XINT (value) <= 100) | |
5701 break; | |
5702 return 0; | |
5703 | |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5704 case IMAGE_NON_NEGATIVE_INTEGER_VALUE: |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5705 if (!INTEGERP (value) || XINT (value) < 0) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5706 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5707 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5708 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5709 case IMAGE_DONT_CHECK_VALUE_TYPE: |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5710 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5711 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5712 case IMAGE_FUNCTION_VALUE: |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5713 value = indirect_function (value); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5714 if (SUBRP (value) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5715 || COMPILEDP (value) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5716 || (CONSP (value) && EQ (XCAR (value), Qlambda))) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5717 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5718 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5719 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5720 case IMAGE_NUMBER_VALUE: |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5721 if (!INTEGERP (value) && !FLOATP (value)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5722 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5723 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5724 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5725 case IMAGE_INTEGER_VALUE: |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5726 if (!INTEGERP (value)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5727 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5728 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5729 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5730 case IMAGE_BOOL_VALUE: |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5731 if (!NILP (value) && !EQ (value, Qt)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5732 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5733 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5734 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5735 default: |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5736 abort (); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5737 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5738 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5739 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5740 if (EQ (key, QCtype) && !EQ (type, value)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5741 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5742 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5743 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5744 /* Check that all mandatory fields are present. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5745 for (i = 0; i < nkeywords; ++i) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5746 if (keywords[i].mandatory_p && keywords[i].count == 0) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5747 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5748 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5749 return NILP (plist); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5750 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5751 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5752 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5753 /* Return the value of KEY in image specification SPEC. Value is nil |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5754 if KEY is not present in SPEC. if FOUND is not null, set *FOUND |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5755 to 1 if KEY was found in SPEC, set it to 0 otherwise. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5756 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5757 static Lisp_Object |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5758 image_spec_value (spec, key, found) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5759 Lisp_Object spec, key; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5760 int *found; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5761 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5762 Lisp_Object tail; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5763 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5764 xassert (valid_image_p (spec)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5765 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5766 for (tail = XCDR (spec); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5767 CONSP (tail) && CONSP (XCDR (tail)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5768 tail = XCDR (XCDR (tail))) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5769 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5770 if (EQ (XCAR (tail), key)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5771 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5772 if (found) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5773 *found = 1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5774 return XCAR (XCDR (tail)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5775 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5776 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5777 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5778 if (found) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5779 *found = 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5780 return Qnil; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5781 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5782 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5783 |
29938
be81ae7e0218
(Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29882
diff
changeset
|
5784 DEFUN ("image-size", Fimage_size, Simage_size, 1, 3, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5785 doc: /* Return the size of image SPEC as pair (WIDTH . HEIGHT). |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5786 PIXELS non-nil means return the size in pixels, otherwise return the |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5787 size in canonical character units. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5788 FRAME is the frame on which the image will be displayed. FRAME nil |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5789 or omitted means use the selected frame. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5790 (spec, pixels, frame) |
29938
be81ae7e0218
(Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29882
diff
changeset
|
5791 Lisp_Object spec, pixels, frame; |
be81ae7e0218
(Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29882
diff
changeset
|
5792 { |
be81ae7e0218
(Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29882
diff
changeset
|
5793 Lisp_Object size; |
be81ae7e0218
(Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29882
diff
changeset
|
5794 |
be81ae7e0218
(Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29882
diff
changeset
|
5795 size = Qnil; |
be81ae7e0218
(Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29882
diff
changeset
|
5796 if (valid_image_p (spec)) |
be81ae7e0218
(Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29882
diff
changeset
|
5797 { |
be81ae7e0218
(Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29882
diff
changeset
|
5798 struct frame *f = check_x_frame (frame); |
32536 | 5799 int id = lookup_image (f, spec); |
29938
be81ae7e0218
(Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29882
diff
changeset
|
5800 struct image *img = IMAGE_FROM_ID (f, id); |
35275
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
5801 int width = img->width + 2 * img->hmargin; |
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
5802 int height = img->height + 2 * img->vmargin; |
29938
be81ae7e0218
(Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29882
diff
changeset
|
5803 |
be81ae7e0218
(Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29882
diff
changeset
|
5804 if (NILP (pixels)) |
be81ae7e0218
(Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29882
diff
changeset
|
5805 size = Fcons (make_float ((double) width / CANON_X_UNIT (f)), |
be81ae7e0218
(Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29882
diff
changeset
|
5806 make_float ((double) height / CANON_Y_UNIT (f))); |
be81ae7e0218
(Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29882
diff
changeset
|
5807 else |
be81ae7e0218
(Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29882
diff
changeset
|
5808 size = Fcons (make_number (width), make_number (height)); |
be81ae7e0218
(Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29882
diff
changeset
|
5809 } |
be81ae7e0218
(Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29882
diff
changeset
|
5810 else |
be81ae7e0218
(Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29882
diff
changeset
|
5811 error ("Invalid image specification"); |
be81ae7e0218
(Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29882
diff
changeset
|
5812 |
be81ae7e0218
(Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29882
diff
changeset
|
5813 return size; |
be81ae7e0218
(Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29882
diff
changeset
|
5814 } |
be81ae7e0218
(Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29882
diff
changeset
|
5815 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5816 |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
5817 DEFUN ("image-mask-p", Fimage_mask_p, Simage_mask_p, 1, 2, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5818 doc: /* Return t if image SPEC has a mask bitmap. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
5819 FRAME is the frame on which the image will be displayed. FRAME nil |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5820 or omitted means use the selected frame. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
5821 (spec, frame) |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
5822 Lisp_Object spec, frame; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
5823 { |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
5824 Lisp_Object mask; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
5825 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
5826 mask = Qnil; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
5827 if (valid_image_p (spec)) |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
5828 { |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
5829 struct frame *f = check_x_frame (frame); |
32536 | 5830 int id = lookup_image (f, spec); |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
5831 struct image *img = IMAGE_FROM_ID (f, id); |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
5832 if (img->mask) |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
5833 mask = Qt; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
5834 } |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
5835 else |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
5836 error ("Invalid image specification"); |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
5837 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
5838 return mask; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
5839 } |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
5840 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
5841 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5842 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5843 /*********************************************************************** |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5844 Image type independent image structures |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5845 ***********************************************************************/ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5846 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5847 static struct image *make_image P_ ((Lisp_Object spec, unsigned hash)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5848 static void free_image P_ ((struct frame *f, struct image *img)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5849 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5850 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5851 /* Allocate and return a new image structure for image specification |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5852 SPEC. SPEC has a hash value of HASH. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5853 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5854 static struct image * |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5855 make_image (spec, hash) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5856 Lisp_Object spec; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5857 unsigned hash; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5858 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5859 struct image *img = (struct image *) xmalloc (sizeof *img); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5860 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5861 xassert (valid_image_p (spec)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5862 bzero (img, sizeof *img); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5863 img->type = lookup_image_type (image_spec_value (spec, QCtype, NULL)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5864 xassert (img->type != NULL); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5865 img->spec = spec; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5866 img->data.lisp_val = Qnil; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5867 img->ascent = DEFAULT_IMAGE_ASCENT; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5868 img->hash = hash; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5869 return img; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5870 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5871 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5872 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5873 /* Free image IMG which was used on frame F, including its resources. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5874 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5875 static void |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5876 free_image (f, img) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5877 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5878 struct image *img; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5879 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5880 if (img) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5881 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5882 struct image_cache *c = FRAME_X_IMAGE_CACHE (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5883 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5884 /* Remove IMG from the hash table of its cache. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5885 if (img->prev) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5886 img->prev->next = img->next; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5887 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5888 c->buckets[img->hash % IMAGE_CACHE_BUCKETS_SIZE] = img->next; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5889 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5890 if (img->next) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5891 img->next->prev = img->prev; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5892 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5893 c->images[img->id] = NULL; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5894 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5895 /* Free resources, then free IMG. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5896 img->type->free (f, img); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5897 xfree (img); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5898 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5899 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5900 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5901 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5902 /* Prepare image IMG for display on frame F. Must be called before |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5903 drawing an image. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5904 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5905 void |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5906 prepare_image_for_display (f, img) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5907 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5908 struct image *img; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5909 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5910 EMACS_TIME t; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5911 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5912 /* We're about to display IMG, so set its timestamp to `now'. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5913 EMACS_GET_TIME (t); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5914 img->timestamp = EMACS_SECS (t); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5915 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5916 /* If IMG doesn't have a pixmap yet, load it now, using the image |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5917 type dependent loader function. */ |
31693
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
5918 if (img->pixmap == None && !img->load_failed_p) |
25955
3daaee890b1e
(prepare_image_for_display): Don't try to load image if
Gerd Moellmann <gerd@gnu.org>
parents:
25817
diff
changeset
|
5919 img->load_failed_p = img->type->load (f, img) == 0; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5920 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5921 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
5922 |
28787 | 5923 /* Value is the number of pixels for the ascent of image IMG when |
5924 drawn in face FACE. */ | |
5925 | |
5926 int | |
5927 image_ascent (img, face) | |
5928 struct image *img; | |
5929 struct face *face; | |
5930 { | |
35275
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
5931 int height = img->height + img->vmargin; |
28787 | 5932 int ascent; |
5933 | |
5934 if (img->ascent == CENTERED_IMAGE_ASCENT) | |
5935 { | |
5936 if (face->font) | |
32160
0abb3c153331
(image_ascent): Rearrange ascent calculation for the has-a-font case.
Miles Bader <miles@gnu.org>
parents:
31999
diff
changeset
|
5937 /* This expression is arranged so that if the image can't be |
0abb3c153331
(image_ascent): Rearrange ascent calculation for the has-a-font case.
Miles Bader <miles@gnu.org>
parents:
31999
diff
changeset
|
5938 exactly centered, it will be moved slightly up. This is |
0abb3c153331
(image_ascent): Rearrange ascent calculation for the has-a-font case.
Miles Bader <miles@gnu.org>
parents:
31999
diff
changeset
|
5939 because a typical font is `top-heavy' (due to the presence |
0abb3c153331
(image_ascent): Rearrange ascent calculation for the has-a-font case.
Miles Bader <miles@gnu.org>
parents:
31999
diff
changeset
|
5940 uppercase letters), so the image placement should err towards |
0abb3c153331
(image_ascent): Rearrange ascent calculation for the has-a-font case.
Miles Bader <miles@gnu.org>
parents:
31999
diff
changeset
|
5941 being top-heavy too. It also just generally looks better. */ |
0abb3c153331
(image_ascent): Rearrange ascent calculation for the has-a-font case.
Miles Bader <miles@gnu.org>
parents:
31999
diff
changeset
|
5942 ascent = (height + face->font->ascent - face->font->descent + 1) / 2; |
28787 | 5943 else |
5944 ascent = height / 2; | |
5945 } | |
5946 else | |
5947 ascent = height * img->ascent / 100.0; | |
5948 | |
5949 return ascent; | |
5950 } | |
5951 | |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5952 |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5953 /* Image background colors. */ |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5954 |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5955 static unsigned long |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5956 four_corners_best (ximg, width, height) |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5957 XImage *ximg; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5958 unsigned long width, height; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5959 { |
40606
d590ec395dcd
(four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents:
40599
diff
changeset
|
5960 unsigned long corners[4], best; |
d590ec395dcd
(four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents:
40599
diff
changeset
|
5961 int i, best_count; |
d590ec395dcd
(four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents:
40599
diff
changeset
|
5962 |
d590ec395dcd
(four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents:
40599
diff
changeset
|
5963 /* Get the colors at the corners of ximg. */ |
d590ec395dcd
(four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents:
40599
diff
changeset
|
5964 corners[0] = XGetPixel (ximg, 0, 0); |
d590ec395dcd
(four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents:
40599
diff
changeset
|
5965 corners[1] = XGetPixel (ximg, width - 1, 0); |
d590ec395dcd
(four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents:
40599
diff
changeset
|
5966 corners[2] = XGetPixel (ximg, width - 1, height - 1); |
d590ec395dcd
(four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents:
40599
diff
changeset
|
5967 corners[3] = XGetPixel (ximg, 0, height - 1); |
d590ec395dcd
(four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents:
40599
diff
changeset
|
5968 |
d590ec395dcd
(four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents:
40599
diff
changeset
|
5969 /* Choose the most frequently found color as background. */ |
d590ec395dcd
(four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents:
40599
diff
changeset
|
5970 for (i = best_count = 0; i < 4; ++i) |
d590ec395dcd
(four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents:
40599
diff
changeset
|
5971 { |
d590ec395dcd
(four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents:
40599
diff
changeset
|
5972 int j, n; |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5973 |
40606
d590ec395dcd
(four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents:
40599
diff
changeset
|
5974 for (j = n = 0; j < 4; ++j) |
d590ec395dcd
(four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents:
40599
diff
changeset
|
5975 if (corners[i] == corners[j]) |
d590ec395dcd
(four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents:
40599
diff
changeset
|
5976 ++n; |
d590ec395dcd
(four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents:
40599
diff
changeset
|
5977 |
d590ec395dcd
(four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents:
40599
diff
changeset
|
5978 if (n > best_count) |
d590ec395dcd
(four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents:
40599
diff
changeset
|
5979 best = corners[i], best_count = n; |
d590ec395dcd
(four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents:
40599
diff
changeset
|
5980 } |
d590ec395dcd
(four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents:
40599
diff
changeset
|
5981 |
d590ec395dcd
(four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents:
40599
diff
changeset
|
5982 return best; |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5983 } |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5984 |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5985 /* Return the `background' field of IMG. If IMG doesn't have one yet, |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5986 it is guessed heuristically. If non-zero, XIMG is an existing XImage |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5987 object to use for the heuristic. */ |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5988 |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5989 unsigned long |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5990 image_background (img, f, ximg) |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5991 struct image *img; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5992 struct frame *f; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5993 XImage *ximg; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5994 { |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5995 if (! img->background_valid) |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5996 /* IMG doesn't have a background yet, try to guess a reasonable value. */ |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5997 { |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5998 int free_ximg = !ximg; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
5999 |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6000 if (! ximg) |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6001 ximg = XGetImage (FRAME_X_DISPLAY (f), img->pixmap, |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6002 0, 0, img->width, img->height, ~0, ZPixmap); |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6003 |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6004 img->background = four_corners_best (ximg, img->width, img->height); |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6005 |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6006 if (free_ximg) |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6007 XDestroyImage (ximg); |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6008 |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6009 img->background_valid = 1; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6010 } |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6011 |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6012 return img->background; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6013 } |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6014 |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6015 /* Return the `background_transparent' field of IMG. If IMG doesn't |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6016 have one yet, it is guessed heuristically. If non-zero, MASK is an |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6017 existing XImage object to use for the heuristic. */ |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6018 |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6019 int |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6020 image_background_transparent (img, f, mask) |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6021 struct image *img; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6022 struct frame *f; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6023 XImage *mask; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6024 { |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6025 if (! img->background_transparent_valid) |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6026 /* IMG doesn't have a background yet, try to guess a reasonable value. */ |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6027 { |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6028 if (img->mask) |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6029 { |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6030 int free_mask = !mask; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6031 |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6032 if (! mask) |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6033 mask = XGetImage (FRAME_X_DISPLAY (f), img->mask, |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6034 0, 0, img->width, img->height, ~0, ZPixmap); |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6035 |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6036 img->background_transparent |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6037 = !four_corners_best (mask, img->width, img->height); |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6038 |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6039 if (free_mask) |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6040 XDestroyImage (mask); |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6041 } |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6042 else |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6043 img->background_transparent = 0; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6044 |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6045 img->background_transparent_valid = 1; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6046 } |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6047 |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6048 return img->background_transparent; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6049 } |
28787 | 6050 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6051 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6052 /*********************************************************************** |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6053 Helper functions for X image types |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6054 ***********************************************************************/ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6055 |
31693
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6056 static void x_clear_image_1 P_ ((struct frame *, struct image *, int, |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6057 int, int)); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6058 static void x_clear_image P_ ((struct frame *f, struct image *img)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6059 static unsigned long x_alloc_image_color P_ ((struct frame *f, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6060 struct image *img, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6061 Lisp_Object color_name, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6062 unsigned long dflt)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6063 |
31693
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6064 |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6065 /* Clear X resources of image IMG on frame F. PIXMAP_P non-zero means |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6066 free the pixmap if any. MASK_P non-zero means clear the mask |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6067 pixmap if any. COLORS_P non-zero means free colors allocated for |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6068 the image, if any. */ |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6069 |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6070 static void |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6071 x_clear_image_1 (f, img, pixmap_p, mask_p, colors_p) |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6072 struct frame *f; |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6073 struct image *img; |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6074 int pixmap_p, mask_p, colors_p; |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6075 { |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6076 if (pixmap_p && img->pixmap) |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6077 { |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6078 XFreePixmap (FRAME_X_DISPLAY (f), img->pixmap); |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6079 img->pixmap = None; |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6080 img->background_valid = 0; |
31693
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6081 } |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6082 |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6083 if (mask_p && img->mask) |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6084 { |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6085 XFreePixmap (FRAME_X_DISPLAY (f), img->mask); |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6086 img->mask = None; |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6087 img->background_transparent_valid = 0; |
31693
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6088 } |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6089 |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6090 if (colors_p && img->ncolors) |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6091 { |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6092 x_free_colors (f, img->colors, img->ncolors); |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6093 xfree (img->colors); |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6094 img->colors = NULL; |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6095 img->ncolors = 0; |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6096 } |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6097 } |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6098 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6099 /* Free X resources of image IMG which is used on frame F. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6100 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6101 static void |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6102 x_clear_image (f, img) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6103 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6104 struct image *img; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6105 { |
31688
437830e83b45
(clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents:
31686
diff
changeset
|
6106 BLOCK_INPUT; |
31693
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6107 x_clear_image_1 (f, img, 1, 1, 1); |
31688
437830e83b45
(clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents:
31686
diff
changeset
|
6108 UNBLOCK_INPUT; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6109 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6110 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6111 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6112 /* Allocate color COLOR_NAME for image IMG on frame F. If color |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6113 cannot be allocated, use DFLT. Add a newly allocated color to |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6114 IMG->colors, so that it can be freed again. Value is the pixel |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6115 color. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6116 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6117 static unsigned long |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6118 x_alloc_image_color (f, img, color_name, dflt) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6119 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6120 struct image *img; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6121 Lisp_Object color_name; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6122 unsigned long dflt; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6123 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6124 XColor color; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6125 unsigned long result; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6126 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6127 xassert (STRINGP (color_name)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6128 |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26571
diff
changeset
|
6129 if (x_defined_color (f, XSTRING (color_name)->data, &color, 1)) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6130 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6131 /* This isn't called frequently so we get away with simply |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6132 reallocating the color vector to the needed size, here. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6133 ++img->ncolors; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6134 img->colors = |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6135 (unsigned long *) xrealloc (img->colors, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6136 img->ncolors * sizeof *img->colors); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6137 img->colors[img->ncolors - 1] = color.pixel; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6138 result = color.pixel; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6139 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6140 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6141 result = dflt; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6142 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6143 return result; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6144 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6145 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6146 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6147 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6148 /*********************************************************************** |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6149 Image Cache |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6150 ***********************************************************************/ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6151 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6152 static void cache_image P_ ((struct frame *f, struct image *img)); |
37173
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6153 static void postprocess_image P_ ((struct frame *, struct image *)); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6154 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6155 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6156 /* Return a new, initialized image cache that is allocated from the |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6157 heap. Call free_image_cache to free an image cache. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6158 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6159 struct image_cache * |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6160 make_image_cache () |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6161 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6162 struct image_cache *c = (struct image_cache *) xmalloc (sizeof *c); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6163 int size; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6164 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6165 bzero (c, sizeof *c); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6166 c->size = 50; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6167 c->images = (struct image **) xmalloc (c->size * sizeof *c->images); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6168 size = IMAGE_CACHE_BUCKETS_SIZE * sizeof *c->buckets; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6169 c->buckets = (struct image **) xmalloc (size); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6170 bzero (c->buckets, size); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6171 return c; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6172 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6173 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6174 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6175 /* Free image cache of frame F. Be aware that X frames share images |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6176 caches. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6177 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6178 void |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6179 free_image_cache (f) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6180 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6181 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6182 struct image_cache *c = FRAME_X_IMAGE_CACHE (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6183 if (c) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6184 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6185 int i; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6186 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6187 /* Cache should not be referenced by any frame when freed. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6188 xassert (c->refcount == 0); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6189 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6190 for (i = 0; i < c->used; ++i) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6191 free_image (f, c->images[i]); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6192 xfree (c->images); |
28410
2812a333e746
(free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents:
28355
diff
changeset
|
6193 xfree (c->buckets); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6194 xfree (c); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6195 FRAME_X_IMAGE_CACHE (f) = NULL; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6196 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6197 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6198 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6199 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6200 /* Clear image cache of frame F. FORCE_P non-zero means free all |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6201 images. FORCE_P zero means clear only images that haven't been |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6202 displayed for some time. Should be called from time to time to |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6203 reduce the number of loaded images. If image-eviction-seconds is |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6204 non-nil, this frees images in the cache which weren't displayed for |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6205 at least that many seconds. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6206 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6207 void |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6208 clear_image_cache (f, force_p) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6209 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6210 int force_p; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6211 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6212 struct image_cache *c = FRAME_X_IMAGE_CACHE (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6213 |
32536 | 6214 if (c && INTEGERP (Vimage_cache_eviction_delay)) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6215 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6216 EMACS_TIME t; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6217 unsigned long old; |
31688
437830e83b45
(clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents:
31686
diff
changeset
|
6218 int i, nfreed; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6219 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6220 EMACS_GET_TIME (t); |
25628
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
6221 old = EMACS_SECS (t) - XFASTINT (Vimage_cache_eviction_delay); |
31688
437830e83b45
(clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents:
31686
diff
changeset
|
6222 |
437830e83b45
(clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents:
31686
diff
changeset
|
6223 /* Block input so that we won't be interrupted by a SIGIO |
437830e83b45
(clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents:
31686
diff
changeset
|
6224 while being in an inconsistent state. */ |
437830e83b45
(clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents:
31686
diff
changeset
|
6225 BLOCK_INPUT; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6226 |
31688
437830e83b45
(clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents:
31686
diff
changeset
|
6227 for (i = nfreed = 0; i < c->used; ++i) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6228 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6229 struct image *img = c->images[i]; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6230 if (img != NULL |
31688
437830e83b45
(clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents:
31686
diff
changeset
|
6231 && (force_p || img->timestamp < old)) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6232 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6233 free_image (f, img); |
31688
437830e83b45
(clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents:
31686
diff
changeset
|
6234 ++nfreed; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6235 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6236 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6237 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6238 /* We may be clearing the image cache because, for example, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6239 Emacs was iconified for a longer period of time. In that |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6240 case, current matrices may still contain references to |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6241 images freed above. So, clear these matrices. */ |
31688
437830e83b45
(clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents:
31686
diff
changeset
|
6242 if (nfreed) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6243 { |
31688
437830e83b45
(clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents:
31686
diff
changeset
|
6244 Lisp_Object tail, frame; |
437830e83b45
(clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents:
31686
diff
changeset
|
6245 |
437830e83b45
(clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents:
31686
diff
changeset
|
6246 FOR_EACH_FRAME (tail, frame) |
437830e83b45
(clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents:
31686
diff
changeset
|
6247 { |
437830e83b45
(clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents:
31686
diff
changeset
|
6248 struct frame *f = XFRAME (frame); |
437830e83b45
(clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents:
31686
diff
changeset
|
6249 if (FRAME_X_P (f) |
437830e83b45
(clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents:
31686
diff
changeset
|
6250 && FRAME_X_IMAGE_CACHE (f) == c) |
32536 | 6251 clear_current_matrices (f); |
31688
437830e83b45
(clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents:
31686
diff
changeset
|
6252 } |
437830e83b45
(clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents:
31686
diff
changeset
|
6253 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6254 ++windows_or_buffers_changed; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6255 } |
31688
437830e83b45
(clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents:
31686
diff
changeset
|
6256 |
437830e83b45
(clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents:
31686
diff
changeset
|
6257 UNBLOCK_INPUT; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6258 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6259 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6260 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6261 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6262 DEFUN ("clear-image-cache", Fclear_image_cache, Sclear_image_cache, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6263 0, 1, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
6264 doc: /* Clear the image cache of FRAME. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
6265 FRAME nil or omitted means use the selected frame. |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
6266 FRAME t means clear the image caches of all frames. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
6267 (frame) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6268 Lisp_Object frame; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6269 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6270 if (EQ (frame, Qt)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6271 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6272 Lisp_Object tail; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6273 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6274 FOR_EACH_FRAME (tail, frame) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6275 if (FRAME_X_P (XFRAME (frame))) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6276 clear_image_cache (XFRAME (frame), 1); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6277 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6278 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6279 clear_image_cache (check_x_frame (frame), 1); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6280 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6281 return Qnil; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6282 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6283 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6284 |
37173
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6285 /* Compute masks and transform image IMG on frame F, as specified |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6286 by the image's specification, */ |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6287 |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6288 static void |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6289 postprocess_image (f, img) |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6290 struct frame *f; |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6291 struct image *img; |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6292 { |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6293 /* Manipulation of the image's mask. */ |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6294 if (img->pixmap) |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6295 { |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6296 Lisp_Object conversion, spec; |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6297 Lisp_Object mask; |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6298 |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6299 spec = img->spec; |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6300 |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6301 /* `:heuristic-mask t' |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6302 `:mask heuristic' |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6303 means build a mask heuristically. |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6304 `:heuristic-mask (R G B)' |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6305 `:mask (heuristic (R G B))' |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6306 means build a mask from color (R G B) in the |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6307 image. |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6308 `:mask nil' |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6309 means remove a mask, if any. */ |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6310 |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6311 mask = image_spec_value (spec, QCheuristic_mask, NULL); |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6312 if (!NILP (mask)) |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6313 x_build_heuristic_mask (f, img, mask); |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6314 else |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6315 { |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6316 int found_p; |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6317 |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6318 mask = image_spec_value (spec, QCmask, &found_p); |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6319 |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6320 if (EQ (mask, Qheuristic)) |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6321 x_build_heuristic_mask (f, img, Qt); |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6322 else if (CONSP (mask) |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6323 && EQ (XCAR (mask), Qheuristic)) |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6324 { |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6325 if (CONSP (XCDR (mask))) |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6326 x_build_heuristic_mask (f, img, XCAR (XCDR (mask))); |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6327 else |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6328 x_build_heuristic_mask (f, img, XCDR (mask)); |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6329 } |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6330 else if (NILP (mask) && found_p && img->mask) |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6331 { |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6332 XFreePixmap (FRAME_X_DISPLAY (f), img->mask); |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6333 img->mask = None; |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6334 } |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6335 } |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6336 |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6337 |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6338 /* Should we apply an image transformation algorithm? */ |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6339 conversion = image_spec_value (spec, QCconversion, NULL); |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6340 if (EQ (conversion, Qdisabled)) |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6341 x_disable_image (f, img); |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6342 else if (EQ (conversion, Qlaplace)) |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6343 x_laplace (f, img); |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6344 else if (EQ (conversion, Qemboss)) |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6345 x_emboss (f, img); |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6346 else if (CONSP (conversion) |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6347 && EQ (XCAR (conversion), Qedge_detection)) |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6348 { |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6349 Lisp_Object tem; |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6350 tem = XCDR (conversion); |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6351 if (CONSP (tem)) |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6352 x_edge_detection (f, img, |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6353 Fplist_get (tem, QCmatrix), |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6354 Fplist_get (tem, QCcolor_adjustment)); |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6355 } |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6356 } |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6357 } |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6358 |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6359 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6360 /* Return the id of image with Lisp specification SPEC on frame F. |
32536 | 6361 SPEC must be a valid Lisp image specification (see valid_image_p). */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6362 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6363 int |
32536 | 6364 lookup_image (f, spec) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6365 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6366 Lisp_Object spec; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6367 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6368 struct image_cache *c = FRAME_X_IMAGE_CACHE (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6369 struct image *img; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6370 int i; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6371 unsigned hash; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6372 struct gcpro gcpro1; |
25817
190a99688b53
(lookup_image): Set image's timestamp because it's
Gerd Moellmann <gerd@gnu.org>
parents:
25800
diff
changeset
|
6373 EMACS_TIME now; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6374 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6375 /* F must be a window-system frame, and SPEC must be a valid image |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6376 specification. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6377 xassert (FRAME_WINDOW_P (f)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6378 xassert (valid_image_p (spec)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6379 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6380 GCPRO1 (spec); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6381 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6382 /* Look up SPEC in the hash table of the image cache. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6383 hash = sxhash (spec, 0); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6384 i = hash % IMAGE_CACHE_BUCKETS_SIZE; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6385 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6386 for (img = c->buckets[i]; img; img = img->next) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6387 if (img->hash == hash && !NILP (Fequal (img->spec, spec))) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6388 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6389 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6390 /* If not found, create a new image and cache it. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6391 if (img == NULL) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6392 { |
37173
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6393 extern Lisp_Object Qpostscript; |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6394 |
31686
577372d71de8
(lookup_image): Block input while loading the image so
Gerd Moellmann <gerd@gnu.org>
parents:
31651
diff
changeset
|
6395 BLOCK_INPUT; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6396 img = make_image (spec, hash); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6397 cache_image (f, img); |
32536 | 6398 img->load_failed_p = img->type->load (f, img) == 0; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6399 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6400 /* If we can't load the image, and we don't have a width and |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6401 height, use some arbitrary width and height so that we can |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6402 draw a rectangle for it. */ |
32536 | 6403 if (img->load_failed_p) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6404 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6405 Lisp_Object value; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6406 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6407 value = image_spec_value (spec, QCwidth, NULL); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6408 img->width = (INTEGERP (value) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6409 ? XFASTINT (value) : DEFAULT_IMAGE_WIDTH); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6410 value = image_spec_value (spec, QCheight, NULL); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6411 img->height = (INTEGERP (value) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6412 ? XFASTINT (value) : DEFAULT_IMAGE_HEIGHT); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6413 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6414 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6415 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6416 /* Handle image type independent image attributes |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6417 `:ascent ASCENT', `:margin MARGIN', `:relief RELIEF', |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6418 `:background COLOR'. */ |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6419 Lisp_Object ascent, margin, relief, bg; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6420 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6421 ascent = image_spec_value (spec, QCascent, NULL); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6422 if (INTEGERP (ascent)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6423 img->ascent = XFASTINT (ascent); |
28787 | 6424 else if (EQ (ascent, Qcenter)) |
6425 img->ascent = CENTERED_IMAGE_ASCENT; | |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6426 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6427 margin = image_spec_value (spec, QCmargin, NULL); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6428 if (INTEGERP (margin) && XINT (margin) >= 0) |
35275
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
6429 img->vmargin = img->hmargin = XFASTINT (margin); |
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
6430 else if (CONSP (margin) && INTEGERP (XCAR (margin)) |
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
6431 && INTEGERP (XCDR (margin))) |
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
6432 { |
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
6433 if (XINT (XCAR (margin)) > 0) |
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
6434 img->hmargin = XFASTINT (XCAR (margin)); |
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
6435 if (XINT (XCDR (margin)) > 0) |
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
6436 img->vmargin = XFASTINT (XCDR (margin)); |
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
6437 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6438 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6439 relief = image_spec_value (spec, QCrelief, NULL); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6440 if (INTEGERP (relief)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6441 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6442 img->relief = XINT (relief); |
35275
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
6443 img->hmargin += abs (img->relief); |
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
6444 img->vmargin += abs (img->relief); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6445 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6446 |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6447 if (! img->background_valid) |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6448 { |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6449 bg = image_spec_value (img->spec, QCbackground, NULL); |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6450 if (!NILP (bg)) |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6451 { |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6452 img->background |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6453 = x_alloc_image_color (f, img, bg, |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6454 FRAME_BACKGROUND_PIXEL (f)); |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6455 img->background_valid = 1; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6456 } |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6457 } |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
6458 |
37173
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6459 /* Do image transformations and compute masks, unless we |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6460 don't have the image yet. */ |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6461 if (!EQ (*img->type->type, Qpostscript)) |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
6462 postprocess_image (f, img); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6463 } |
31693
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6464 |
31686
577372d71de8
(lookup_image): Block input while loading the image so
Gerd Moellmann <gerd@gnu.org>
parents:
31651
diff
changeset
|
6465 UNBLOCK_INPUT; |
577372d71de8
(lookup_image): Block input while loading the image so
Gerd Moellmann <gerd@gnu.org>
parents:
31651
diff
changeset
|
6466 xassert (!interrupt_input_blocked); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6467 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6468 |
25817
190a99688b53
(lookup_image): Set image's timestamp because it's
Gerd Moellmann <gerd@gnu.org>
parents:
25800
diff
changeset
|
6469 /* We're using IMG, so set its timestamp to `now'. */ |
190a99688b53
(lookup_image): Set image's timestamp because it's
Gerd Moellmann <gerd@gnu.org>
parents:
25800
diff
changeset
|
6470 EMACS_GET_TIME (now); |
190a99688b53
(lookup_image): Set image's timestamp because it's
Gerd Moellmann <gerd@gnu.org>
parents:
25800
diff
changeset
|
6471 img->timestamp = EMACS_SECS (now); |
190a99688b53
(lookup_image): Set image's timestamp because it's
Gerd Moellmann <gerd@gnu.org>
parents:
25800
diff
changeset
|
6472 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6473 UNGCPRO; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6474 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6475 /* Value is the image id. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6476 return img->id; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6477 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6478 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6479 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6480 /* Cache image IMG in the image cache of frame F. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6481 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6482 static void |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6483 cache_image (f, img) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6484 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6485 struct image *img; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6486 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6487 struct image_cache *c = FRAME_X_IMAGE_CACHE (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6488 int i; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6489 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6490 /* Find a free slot in c->images. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6491 for (i = 0; i < c->used; ++i) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6492 if (c->images[i] == NULL) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6493 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6494 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6495 /* If no free slot found, maybe enlarge c->images. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6496 if (i == c->used && c->used == c->size) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6497 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6498 c->size *= 2; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6499 c->images = (struct image **) xrealloc (c->images, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6500 c->size * sizeof *c->images); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6501 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6502 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6503 /* Add IMG to c->images, and assign IMG an id. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6504 c->images[i] = img; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6505 img->id = i; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6506 if (i == c->used) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6507 ++c->used; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6508 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6509 /* Add IMG to the cache's hash table. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6510 i = img->hash % IMAGE_CACHE_BUCKETS_SIZE; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6511 img->next = c->buckets[i]; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6512 if (img->next) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6513 img->next->prev = img; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6514 img->prev = NULL; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6515 c->buckets[i] = img; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6516 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6517 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6518 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6519 /* Call FN on every image in the image cache of frame F. Used to mark |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6520 Lisp Objects in the image cache. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6521 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6522 void |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6523 forall_images_in_image_cache (f, fn) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6524 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6525 void (*fn) P_ ((struct image *img)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6526 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6527 if (FRAME_LIVE_P (f) && FRAME_X_P (f)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6528 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6529 struct image_cache *c = FRAME_X_IMAGE_CACHE (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6530 if (c) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6531 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6532 int i; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6533 for (i = 0; i < c->used; ++i) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6534 if (c->images[i]) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6535 fn (c->images[i]); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6536 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6537 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6538 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6539 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6540 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6541 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6542 /*********************************************************************** |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6543 X support code |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6544 ***********************************************************************/ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6545 |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
6546 static int x_create_x_image_and_pixmap P_ ((struct frame *, int, int, int, |
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
6547 XImage **, Pixmap *)); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6548 static void x_destroy_x_image P_ ((XImage *)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6549 static void x_put_x_image P_ ((struct frame *, XImage *, Pixmap, int, int)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6550 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6551 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6552 /* Create an XImage and a pixmap of size WIDTH x HEIGHT for use on |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6553 frame F. Set *XIMG and *PIXMAP to the XImage and Pixmap created. |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6554 Set (*XIMG)->data to a raster of WIDTH x HEIGHT pixels allocated |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6555 via xmalloc. Print error messages via image_error if an error |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
6556 occurs. Value is non-zero if successful. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6557 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6558 static int |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
6559 x_create_x_image_and_pixmap (f, width, height, depth, ximg, pixmap) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6560 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6561 int width, height, depth; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6562 XImage **ximg; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6563 Pixmap *pixmap; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6564 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6565 Display *display = FRAME_X_DISPLAY (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6566 Screen *screen = FRAME_X_SCREEN (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6567 Window window = FRAME_X_WINDOW (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6568 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6569 xassert (interrupt_input_blocked); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6570 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6571 if (depth <= 0) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6572 depth = DefaultDepthOfScreen (screen); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6573 *ximg = XCreateImage (display, DefaultVisualOfScreen (screen), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6574 depth, ZPixmap, 0, NULL, width, height, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6575 depth > 16 ? 32 : depth > 8 ? 16 : 8, 0); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6576 if (*ximg == NULL) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6577 { |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
6578 image_error ("Unable to allocate X image", Qnil, Qnil); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6579 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6580 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6581 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6582 /* Allocate image raster. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6583 (*ximg)->data = (char *) xmalloc ((*ximg)->bytes_per_line * height); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6584 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6585 /* Allocate a pixmap of the same size. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6586 *pixmap = XCreatePixmap (display, window, width, height, depth); |
31693
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
6587 if (*pixmap == None) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6588 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6589 x_destroy_x_image (*ximg); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6590 *ximg = NULL; |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
6591 image_error ("Unable to create X pixmap", Qnil, Qnil); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6592 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6593 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6594 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6595 return 1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6596 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6597 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6598 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6599 /* Destroy XImage XIMG. Free XIMG->data. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6600 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6601 static void |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6602 x_destroy_x_image (ximg) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6603 XImage *ximg; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6604 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6605 xassert (interrupt_input_blocked); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6606 if (ximg) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6607 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6608 xfree (ximg->data); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6609 ximg->data = NULL; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6610 XDestroyImage (ximg); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6611 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6612 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6613 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6614 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6615 /* Put XImage XIMG into pixmap PIXMAP on frame F. WIDTH and HEIGHT |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6616 are width and height of both the image and pixmap. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6617 |
25691
815efc48a80b
(x_put_x_image): Make type consistent with declaration.
Dave Love <fx@gnu.org>
parents:
25679
diff
changeset
|
6618 static void |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6619 x_put_x_image (f, ximg, pixmap, width, height) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6620 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6621 XImage *ximg; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6622 Pixmap pixmap; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6623 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6624 GC gc; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6625 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6626 xassert (interrupt_input_blocked); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6627 gc = XCreateGC (FRAME_X_DISPLAY (f), pixmap, 0, NULL); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6628 XPutImage (FRAME_X_DISPLAY (f), pixmap, gc, ximg, 0, 0, 0, 0, width, height); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6629 XFreeGC (FRAME_X_DISPLAY (f), gc); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6630 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6631 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6632 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6633 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6634 /*********************************************************************** |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6635 File Handling |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6636 ***********************************************************************/ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6637 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6638 static Lisp_Object x_find_image_file P_ ((Lisp_Object)); |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6639 static char *slurp_file P_ ((char *, int *)); |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6640 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6641 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6642 /* Find image file FILE. Look in data-directory, then |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6643 x-bitmap-file-path. Value is the full name of the file found, or |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6644 nil if not found. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6645 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6646 static Lisp_Object |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6647 x_find_image_file (file) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6648 Lisp_Object file; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6649 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6650 Lisp_Object file_found, search_path; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6651 struct gcpro gcpro1, gcpro2; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6652 int fd; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6653 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6654 file_found = Qnil; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6655 search_path = Fcons (Vdata_directory, Vx_bitmap_file_path); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6656 GCPRO2 (file_found, search_path); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6657 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6658 /* Try to find FILE in data-directory, then x-bitmap-file-path. */ |
39812
66e0816837a8
Update calls to openp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
6659 fd = openp (search_path, file, Qnil, &file_found, 0); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6660 |
33443
2c60aa5cd386
(x_create_bitmap_from_file, x_find_image_file): Use new openp return protocol.
Miles Bader <miles@gnu.org>
parents:
33242
diff
changeset
|
6661 if (fd == -1) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6662 file_found = Qnil; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6663 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6664 close (fd); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6665 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6666 UNGCPRO; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6667 return file_found; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6668 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6669 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6670 |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6671 /* Read FILE into memory. Value is a pointer to a buffer allocated |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6672 with xmalloc holding FILE's contents. Value is null if an error |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
6673 occurred. *SIZE is set to the size of the file. */ |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6674 |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6675 static char * |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6676 slurp_file (file, size) |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6677 char *file; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6678 int *size; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6679 { |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6680 FILE *fp = NULL; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6681 char *buf = NULL; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6682 struct stat st; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6683 |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6684 if (stat (file, &st) == 0 |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6685 && (fp = fopen (file, "r")) != NULL |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6686 && (buf = (char *) xmalloc (st.st_size), |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6687 fread (buf, 1, st.st_size, fp) == st.st_size)) |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6688 { |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6689 *size = st.st_size; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6690 fclose (fp); |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6691 } |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6692 else |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6693 { |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6694 if (fp) |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6695 fclose (fp); |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6696 if (buf) |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6697 { |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6698 xfree (buf); |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6699 buf = NULL; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6700 } |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6701 } |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6702 |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6703 return buf; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6704 } |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6705 |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6706 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6707 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6708 /*********************************************************************** |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6709 XBM images |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6710 ***********************************************************************/ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6711 |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6712 static int xbm_scan P_ ((char **, char *, char *, int *)); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6713 static int xbm_load P_ ((struct frame *f, struct image *img)); |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6714 static int xbm_load_image P_ ((struct frame *f, struct image *img, |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6715 char *, char *)); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6716 static int xbm_image_p P_ ((Lisp_Object object)); |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6717 static int xbm_read_bitmap_data P_ ((char *, char *, int *, int *, |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6718 unsigned char **)); |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6719 static int xbm_file_p P_ ((Lisp_Object)); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6720 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6721 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6722 /* Indices of image specification fields in xbm_format, below. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6723 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6724 enum xbm_keyword_index |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6725 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6726 XBM_TYPE, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6727 XBM_FILE, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6728 XBM_WIDTH, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6729 XBM_HEIGHT, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6730 XBM_DATA, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6731 XBM_FOREGROUND, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6732 XBM_BACKGROUND, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6733 XBM_ASCENT, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6734 XBM_MARGIN, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6735 XBM_RELIEF, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6736 XBM_ALGORITHM, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6737 XBM_HEURISTIC_MASK, |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
6738 XBM_MASK, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6739 XBM_LAST |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6740 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6741 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6742 /* Vector of image_keyword structures describing the format |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6743 of valid XBM image specifications. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6744 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6745 static struct image_keyword xbm_format[XBM_LAST] = |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6746 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6747 {":type", IMAGE_SYMBOL_VALUE, 1}, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6748 {":file", IMAGE_STRING_VALUE, 0}, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6749 {":width", IMAGE_POSITIVE_INTEGER_VALUE, 0}, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6750 {":height", IMAGE_POSITIVE_INTEGER_VALUE, 0}, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6751 {":data", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
37946
fe4457964ac0
(enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents:
37762
diff
changeset
|
6752 {":foreground", IMAGE_STRING_OR_NIL_VALUE, 0}, |
fe4457964ac0
(enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents:
37762
diff
changeset
|
6753 {":background", IMAGE_STRING_OR_NIL_VALUE, 0}, |
28787 | 6754 {":ascent", IMAGE_ASCENT_VALUE, 0}, |
35275
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
6755 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0}, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6756 {":relief", IMAGE_INTEGER_VALUE, 0}, |
35360
ba490eed8f66
(QCconversion): Replaces QCalgorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
35275
diff
changeset
|
6757 {":conversion", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
6758 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
6759 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0} |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6760 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6761 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6762 /* Structure describing the image type XBM. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6763 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6764 static struct image_type xbm_type = |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6765 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6766 &Qxbm, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6767 xbm_image_p, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6768 xbm_load, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6769 x_clear_image, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6770 NULL |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6771 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6772 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6773 /* Tokens returned from xbm_scan. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6774 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6775 enum xbm_token |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6776 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6777 XBM_TK_IDENT = 256, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6778 XBM_TK_NUMBER |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6779 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6780 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6781 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6782 /* Return non-zero if OBJECT is a valid XBM-type image specification. |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6783 A valid specification is a list starting with the symbol `image' |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6784 The rest of the list is a property list which must contain an |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6785 entry `:type xbm.. |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6786 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6787 If the specification specifies a file to load, it must contain |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6788 an entry `:file FILENAME' where FILENAME is a string. |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6789 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6790 If the specification is for a bitmap loaded from memory it must |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6791 contain `:width WIDTH', `:height HEIGHT', and `:data DATA', where |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6792 WIDTH and HEIGHT are integers > 0. DATA may be: |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6793 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6794 1. a string large enough to hold the bitmap data, i.e. it must |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6795 have a size >= (WIDTH + 7) / 8 * HEIGHT |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6796 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6797 2. a bool-vector of size >= WIDTH * HEIGHT |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6798 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6799 3. a vector of strings or bool-vectors, one for each line of the |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6800 bitmap. |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6801 |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6802 4. A string containing an in-memory XBM file. WIDTH and HEIGHT |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6803 may not be specified in this case because they are defined in the |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6804 XBM file. |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6805 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6806 Both the file and data forms may contain the additional entries |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6807 `:background COLOR' and `:foreground COLOR'. If not present, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6808 foreground and background of the frame on which the image is |
28410
2812a333e746
(free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents:
28355
diff
changeset
|
6809 displayed is used. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6810 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6811 static int |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6812 xbm_image_p (object) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6813 Lisp_Object object; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6814 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6815 struct image_keyword kw[XBM_LAST]; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6816 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6817 bcopy (xbm_format, kw, sizeof kw); |
26401 | 6818 if (!parse_image_spec (object, kw, XBM_LAST, Qxbm)) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6819 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6820 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6821 xassert (EQ (kw[XBM_TYPE].value, Qxbm)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6822 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6823 if (kw[XBM_FILE].count) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6824 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6825 if (kw[XBM_WIDTH].count || kw[XBM_HEIGHT].count || kw[XBM_DATA].count) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6826 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6827 } |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6828 else if (kw[XBM_DATA].count && xbm_file_p (kw[XBM_DATA].value)) |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6829 { |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6830 /* In-memory XBM file. */ |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6831 if (kw[XBM_WIDTH].count || kw[XBM_HEIGHT].count || kw[XBM_FILE].count) |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6832 return 0; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6833 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6834 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6835 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6836 Lisp_Object data; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6837 int width, height; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6838 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6839 /* Entries for `:width', `:height' and `:data' must be present. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6840 if (!kw[XBM_WIDTH].count |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6841 || !kw[XBM_HEIGHT].count |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6842 || !kw[XBM_DATA].count) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6843 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6844 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6845 data = kw[XBM_DATA].value; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6846 width = XFASTINT (kw[XBM_WIDTH].value); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6847 height = XFASTINT (kw[XBM_HEIGHT].value); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6848 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6849 /* Check type of data, and width and height against contents of |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6850 data. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6851 if (VECTORP (data)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6852 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6853 int i; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6854 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6855 /* Number of elements of the vector must be >= height. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6856 if (XVECTOR (data)->size < height) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6857 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6858 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6859 /* Each string or bool-vector in data must be large enough |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6860 for one line of the image. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6861 for (i = 0; i < height; ++i) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6862 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6863 Lisp_Object elt = XVECTOR (data)->contents[i]; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6864 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6865 if (STRINGP (elt)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6866 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6867 if (XSTRING (elt)->size |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6868 < (width + BITS_PER_CHAR - 1) / BITS_PER_CHAR) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6869 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6870 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6871 else if (BOOL_VECTOR_P (elt)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6872 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6873 if (XBOOL_VECTOR (elt)->size < width) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6874 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6875 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6876 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6877 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6878 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6879 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6880 else if (STRINGP (data)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6881 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6882 if (XSTRING (data)->size |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6883 < (width + BITS_PER_CHAR - 1) / BITS_PER_CHAR * height) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6884 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6885 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6886 else if (BOOL_VECTOR_P (data)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6887 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6888 if (XBOOL_VECTOR (data)->size < width * height) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6889 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6890 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6891 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6892 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6893 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6894 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6895 return 1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6896 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6897 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6898 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6899 /* Scan a bitmap file. FP is the stream to read from. Value is |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6900 either an enumerator from enum xbm_token, or a character for a |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6901 single-character token, or 0 at end of file. If scanning an |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6902 identifier, store the lexeme of the identifier in SVAL. If |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6903 scanning a number, store its value in *IVAL. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6904 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6905 static int |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6906 xbm_scan (s, end, sval, ival) |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6907 char **s, *end; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6908 char *sval; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6909 int *ival; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6910 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6911 int c; |
31768
5f91cf9127a6
(xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents:
31761
diff
changeset
|
6912 |
5f91cf9127a6
(xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents:
31761
diff
changeset
|
6913 loop: |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6914 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6915 /* Skip white space. */ |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6916 while (*s < end && (c = *(*s)++, isspace (c))) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6917 ; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6918 |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6919 if (*s >= end) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6920 c = 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6921 else if (isdigit (c)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6922 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6923 int value = 0, digit; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6924 |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6925 if (c == '0' && *s < end) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6926 { |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6927 c = *(*s)++; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6928 if (c == 'x' || c == 'X') |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6929 { |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6930 while (*s < end) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6931 { |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6932 c = *(*s)++; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6933 if (isdigit (c)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6934 digit = c - '0'; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6935 else if (c >= 'a' && c <= 'f') |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6936 digit = c - 'a' + 10; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6937 else if (c >= 'A' && c <= 'F') |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6938 digit = c - 'A' + 10; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6939 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6940 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6941 value = 16 * value + digit; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6942 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6943 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6944 else if (isdigit (c)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6945 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6946 value = c - '0'; |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6947 while (*s < end |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6948 && (c = *(*s)++, isdigit (c))) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6949 value = 8 * value + c - '0'; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6950 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6951 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6952 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6953 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6954 value = c - '0'; |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6955 while (*s < end |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6956 && (c = *(*s)++, isdigit (c))) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6957 value = 10 * value + c - '0'; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6958 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6959 |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6960 if (*s < end) |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6961 *s = *s - 1; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6962 *ival = value; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6963 c = XBM_TK_NUMBER; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6964 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6965 else if (isalpha (c) || c == '_') |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6966 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6967 *sval++ = c; |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6968 while (*s < end |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6969 && (c = *(*s)++, (isalnum (c) || c == '_'))) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6970 *sval++ = c; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6971 *sval = 0; |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6972 if (*s < end) |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6973 *s = *s - 1; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6974 c = XBM_TK_IDENT; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6975 } |
31768
5f91cf9127a6
(xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents:
31761
diff
changeset
|
6976 else if (c == '/' && **s == '*') |
5f91cf9127a6
(xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents:
31761
diff
changeset
|
6977 { |
5f91cf9127a6
(xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents:
31761
diff
changeset
|
6978 /* C-style comment. */ |
5f91cf9127a6
(xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents:
31761
diff
changeset
|
6979 ++*s; |
5f91cf9127a6
(xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents:
31761
diff
changeset
|
6980 while (**s && (**s != '*' || *(*s + 1) != '/')) |
5f91cf9127a6
(xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents:
31761
diff
changeset
|
6981 ++*s; |
5f91cf9127a6
(xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents:
31761
diff
changeset
|
6982 if (**s) |
5f91cf9127a6
(xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents:
31761
diff
changeset
|
6983 { |
5f91cf9127a6
(xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents:
31761
diff
changeset
|
6984 *s += 2; |
5f91cf9127a6
(xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents:
31761
diff
changeset
|
6985 goto loop; |
5f91cf9127a6
(xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents:
31761
diff
changeset
|
6986 } |
5f91cf9127a6
(xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents:
31761
diff
changeset
|
6987 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6988 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6989 return c; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6990 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6991 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6992 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6993 /* Replacement for XReadBitmapFileData which isn't available under old |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6994 X versions. CONTENTS is a pointer to a buffer to parse; END is the |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6995 buffer's end. Set *WIDTH and *HEIGHT to the width and height of |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6996 the image. Return in *DATA the bitmap data allocated with xmalloc. |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
6997 Value is non-zero if successful. DATA null means just test if |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
6998 CONTENTS looks like an in-memory XBM file. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
6999 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7000 static int |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7001 xbm_read_bitmap_data (contents, end, width, height, data) |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7002 char *contents, *end; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7003 int *width, *height; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7004 unsigned char **data; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7005 { |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7006 char *s = contents; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7007 char buffer[BUFSIZ]; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7008 int padding_p = 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7009 int v10 = 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7010 int bytes_per_line, i, nbytes; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7011 unsigned char *p; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7012 int value; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7013 int LA1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7014 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7015 #define match() \ |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7016 LA1 = xbm_scan (&s, end, buffer, &value) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7017 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7018 #define expect(TOKEN) \ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7019 if (LA1 != (TOKEN)) \ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7020 goto failure; \ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7021 else \ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7022 match () |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7023 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7024 #define expect_ident(IDENT) \ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7025 if (LA1 == XBM_TK_IDENT && strcmp (buffer, (IDENT)) == 0) \ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7026 match (); \ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7027 else \ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7028 goto failure |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7029 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7030 *width = *height = -1; |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7031 if (data) |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7032 *data = NULL; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7033 LA1 = xbm_scan (&s, end, buffer, &value); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7034 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7035 /* Parse defines for width, height and hot-spots. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7036 while (LA1 == '#') |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7037 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7038 match (); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7039 expect_ident ("define"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7040 expect (XBM_TK_IDENT); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7041 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7042 if (LA1 == XBM_TK_NUMBER); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7043 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7044 char *p = strrchr (buffer, '_'); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7045 p = p ? p + 1 : buffer; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7046 if (strcmp (p, "width") == 0) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7047 *width = value; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7048 else if (strcmp (p, "height") == 0) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7049 *height = value; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7050 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7051 expect (XBM_TK_NUMBER); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7052 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7053 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7054 if (*width < 0 || *height < 0) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7055 goto failure; |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7056 else if (data == NULL) |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7057 goto success; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7058 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7059 /* Parse bits. Must start with `static'. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7060 expect_ident ("static"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7061 if (LA1 == XBM_TK_IDENT) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7062 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7063 if (strcmp (buffer, "unsigned") == 0) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7064 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7065 match (); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7066 expect_ident ("char"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7067 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7068 else if (strcmp (buffer, "short") == 0) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7069 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7070 match (); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7071 v10 = 1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7072 if (*width % 16 && *width % 16 < 9) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7073 padding_p = 1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7074 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7075 else if (strcmp (buffer, "char") == 0) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7076 match (); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7077 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7078 goto failure; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7079 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7080 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7081 goto failure; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7082 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7083 expect (XBM_TK_IDENT); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7084 expect ('['); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7085 expect (']'); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7086 expect ('='); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7087 expect ('{'); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7088 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7089 bytes_per_line = (*width + 7) / 8 + padding_p; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7090 nbytes = bytes_per_line * *height; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7091 p = *data = (char *) xmalloc (nbytes); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7092 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7093 if (v10) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7094 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7095 for (i = 0; i < nbytes; i += 2) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7096 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7097 int val = value; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7098 expect (XBM_TK_NUMBER); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7099 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7100 *p++ = val; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7101 if (!padding_p || ((i + 2) % bytes_per_line)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7102 *p++ = value >> 8; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7103 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7104 if (LA1 == ',' || LA1 == '}') |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7105 match (); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7106 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7107 goto failure; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7108 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7109 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7110 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7111 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7112 for (i = 0; i < nbytes; ++i) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7113 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7114 int val = value; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7115 expect (XBM_TK_NUMBER); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7116 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7117 *p++ = val; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7118 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7119 if (LA1 == ',' || LA1 == '}') |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7120 match (); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7121 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7122 goto failure; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7123 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7124 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7125 |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7126 success: |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7127 return 1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7128 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7129 failure: |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7130 |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7131 if (data && *data) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7132 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7133 xfree (*data); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7134 *data = NULL; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7135 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7136 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7137 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7138 #undef match |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7139 #undef expect |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7140 #undef expect_ident |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7141 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7142 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7143 |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7144 /* Load XBM image IMG which will be displayed on frame F from buffer |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7145 CONTENTS. END is the end of the buffer. Value is non-zero if |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7146 successful. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7147 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7148 static int |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7149 xbm_load_image (f, img, contents, end) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7150 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7151 struct image *img; |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7152 char *contents, *end; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7153 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7154 int rc; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7155 unsigned char *data; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7156 int success_p = 0; |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7157 |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7158 rc = xbm_read_bitmap_data (contents, end, &img->width, &img->height, &data); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7159 if (rc) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7160 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7161 int depth = DefaultDepthOfScreen (FRAME_X_SCREEN (f)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7162 unsigned long foreground = FRAME_FOREGROUND_PIXEL (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7163 unsigned long background = FRAME_BACKGROUND_PIXEL (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7164 Lisp_Object value; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7165 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7166 xassert (img->width > 0 && img->height > 0); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7167 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7168 /* Get foreground and background colors, maybe allocate colors. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7169 value = image_spec_value (img->spec, QCforeground, NULL); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7170 if (!NILP (value)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7171 foreground = x_alloc_image_color (f, img, value, foreground); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7172 value = image_spec_value (img->spec, QCbackground, NULL); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7173 if (!NILP (value)) |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
7174 { |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
7175 background = x_alloc_image_color (f, img, value, background); |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
7176 img->background = background; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
7177 img->background_valid = 1; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
7178 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7179 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7180 img->pixmap |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7181 = XCreatePixmapFromBitmapData (FRAME_X_DISPLAY (f), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7182 FRAME_X_WINDOW (f), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7183 data, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7184 img->width, img->height, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7185 foreground, background, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7186 depth); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7187 xfree (data); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7188 |
31693
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
7189 if (img->pixmap == None) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7190 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7191 x_clear_image (f, img); |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7192 image_error ("Unable to create X pixmap for `%s'", img->spec, Qnil); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7193 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7194 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7195 success_p = 1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7196 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7197 else |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
7198 image_error ("Error loading XBM image `%s'", img->spec, Qnil); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7199 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7200 return success_p; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7201 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7202 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7203 |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7204 /* Value is non-zero if DATA looks like an in-memory XBM file. */ |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7205 |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7206 static int |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7207 xbm_file_p (data) |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7208 Lisp_Object data; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7209 { |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7210 int w, h; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7211 return (STRINGP (data) |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7212 && xbm_read_bitmap_data (XSTRING (data)->data, |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7213 (XSTRING (data)->data |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7214 + STRING_BYTES (XSTRING (data))), |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7215 &w, &h, NULL)); |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7216 } |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7217 |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7218 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7219 /* Fill image IMG which is used on frame F with pixmap data. Value is |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7220 non-zero if successful. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7221 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7222 static int |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7223 xbm_load (f, img) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7224 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7225 struct image *img; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7226 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7227 int success_p = 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7228 Lisp_Object file_name; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7229 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7230 xassert (xbm_image_p (img->spec)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7231 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7232 /* If IMG->spec specifies a file name, create a non-file spec from it. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7233 file_name = image_spec_value (img->spec, QCfile, NULL); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7234 if (STRINGP (file_name)) |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7235 { |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7236 Lisp_Object file; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7237 char *contents; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7238 int size; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7239 struct gcpro gcpro1; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7240 |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7241 file = x_find_image_file (file_name); |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7242 GCPRO1 (file); |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7243 if (!STRINGP (file)) |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7244 { |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7245 image_error ("Cannot find image file `%s'", file_name, Qnil); |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7246 UNGCPRO; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7247 return 0; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7248 } |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7249 |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7250 contents = slurp_file (XSTRING (file)->data, &size); |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7251 if (contents == NULL) |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7252 { |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7253 image_error ("Error loading XBM image `%s'", img->spec, Qnil); |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7254 UNGCPRO; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7255 return 0; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7256 } |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7257 |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7258 success_p = xbm_load_image (f, img, contents, contents + size); |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7259 UNGCPRO; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7260 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7261 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7262 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7263 struct image_keyword fmt[XBM_LAST]; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7264 Lisp_Object data; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7265 int depth; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7266 unsigned long foreground = FRAME_FOREGROUND_PIXEL (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7267 unsigned long background = FRAME_BACKGROUND_PIXEL (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7268 char *bits; |
34976
05c36b1fa618
(x_display_info_for_name): Cast 0 to "char *" in the call
Eli Zaretskii <eliz@gnu.org>
parents:
34911
diff
changeset
|
7269 int parsed_p; |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7270 int in_memory_file_p = 0; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7271 |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7272 /* See if data looks like an in-memory XBM file. */ |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7273 data = image_spec_value (img->spec, QCdata, NULL); |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7274 in_memory_file_p = xbm_file_p (data); |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7275 |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7276 /* Parse the image specification. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7277 bcopy (xbm_format, fmt, sizeof fmt); |
26401 | 7278 parsed_p = parse_image_spec (img->spec, fmt, XBM_LAST, Qxbm); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7279 xassert (parsed_p); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7280 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7281 /* Get specified width, and height. */ |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7282 if (!in_memory_file_p) |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7283 { |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7284 img->width = XFASTINT (fmt[XBM_WIDTH].value); |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7285 img->height = XFASTINT (fmt[XBM_HEIGHT].value); |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7286 xassert (img->width > 0 && img->height > 0); |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7287 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7288 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7289 /* Get foreground and background colors, maybe allocate colors. */ |
37946
fe4457964ac0
(enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents:
37762
diff
changeset
|
7290 if (fmt[XBM_FOREGROUND].count |
fe4457964ac0
(enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents:
37762
diff
changeset
|
7291 && STRINGP (fmt[XBM_FOREGROUND].value)) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7292 foreground = x_alloc_image_color (f, img, fmt[XBM_FOREGROUND].value, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7293 foreground); |
37946
fe4457964ac0
(enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents:
37762
diff
changeset
|
7294 if (fmt[XBM_BACKGROUND].count |
fe4457964ac0
(enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents:
37762
diff
changeset
|
7295 && STRINGP (fmt[XBM_BACKGROUND].value)) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7296 background = x_alloc_image_color (f, img, fmt[XBM_BACKGROUND].value, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7297 background); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7298 |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7299 if (in_memory_file_p) |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7300 success_p = xbm_load_image (f, img, XSTRING (data)->data, |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7301 (XSTRING (data)->data |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7302 + STRING_BYTES (XSTRING (data)))); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7303 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7304 { |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7305 if (VECTORP (data)) |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7306 { |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7307 int i; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7308 char *p; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7309 int nbytes = (img->width + BITS_PER_CHAR - 1) / BITS_PER_CHAR; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7310 |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7311 p = bits = (char *) alloca (nbytes * img->height); |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7312 for (i = 0; i < img->height; ++i, p += nbytes) |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7313 { |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7314 Lisp_Object line = XVECTOR (data)->contents[i]; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7315 if (STRINGP (line)) |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7316 bcopy (XSTRING (line)->data, p, nbytes); |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7317 else |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7318 bcopy (XBOOL_VECTOR (line)->data, p, nbytes); |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7319 } |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7320 } |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7321 else if (STRINGP (data)) |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7322 bits = XSTRING (data)->data; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7323 else |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7324 bits = XBOOL_VECTOR (data)->data; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7325 |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7326 /* Create the pixmap. */ |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7327 depth = DefaultDepthOfScreen (FRAME_X_SCREEN (f)); |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7328 img->pixmap |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7329 = XCreatePixmapFromBitmapData (FRAME_X_DISPLAY (f), |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7330 FRAME_X_WINDOW (f), |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7331 bits, |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7332 img->width, img->height, |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7333 foreground, background, |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7334 depth); |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7335 if (img->pixmap) |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7336 success_p = 1; |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7337 else |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7338 { |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7339 image_error ("Unable to create pixmap for XBM image `%s'", |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7340 img->spec, Qnil); |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7341 x_clear_image (f, img); |
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
7342 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7343 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7344 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7345 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7346 return success_p; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7347 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7348 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7349 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7350 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7351 /*********************************************************************** |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7352 XPM images |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7353 ***********************************************************************/ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7354 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7355 #if HAVE_XPM |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7356 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7357 static int xpm_image_p P_ ((Lisp_Object object)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7358 static int xpm_load P_ ((struct frame *f, struct image *img)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7359 static int xpm_valid_color_symbols_p P_ ((Lisp_Object)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7360 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7361 #include "X11/xpm.h" |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7362 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7363 /* The symbol `xpm' identifying XPM-format images. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7364 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7365 Lisp_Object Qxpm; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7366 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7367 /* Indices of image specification fields in xpm_format, below. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7368 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7369 enum xpm_keyword_index |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7370 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7371 XPM_TYPE, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7372 XPM_FILE, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7373 XPM_DATA, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7374 XPM_ASCENT, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7375 XPM_MARGIN, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7376 XPM_RELIEF, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7377 XPM_ALGORITHM, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7378 XPM_HEURISTIC_MASK, |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
7379 XPM_MASK, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7380 XPM_COLOR_SYMBOLS, |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
7381 XPM_BACKGROUND, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7382 XPM_LAST |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7383 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7384 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7385 /* Vector of image_keyword structures describing the format |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7386 of valid XPM image specifications. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7387 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7388 static struct image_keyword xpm_format[XPM_LAST] = |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7389 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7390 {":type", IMAGE_SYMBOL_VALUE, 1}, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7391 {":file", IMAGE_STRING_VALUE, 0}, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7392 {":data", IMAGE_STRING_VALUE, 0}, |
28787 | 7393 {":ascent", IMAGE_ASCENT_VALUE, 0}, |
35275
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
7394 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0}, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7395 {":relief", IMAGE_INTEGER_VALUE, 0}, |
35360
ba490eed8f66
(QCconversion): Replaces QCalgorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
35275
diff
changeset
|
7396 {":conversion", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7397 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
7398 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
7399 {":color-symbols", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
7400 {":background", IMAGE_STRING_OR_NIL_VALUE, 0} |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7401 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7402 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7403 /* Structure describing the image type XBM. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7404 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7405 static struct image_type xpm_type = |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7406 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7407 &Qxpm, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7408 xpm_image_p, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7409 xpm_load, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7410 x_clear_image, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7411 NULL |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7412 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7413 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7414 |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7415 /* Define ALLOC_XPM_COLORS if we can use Emacs' own color allocation |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7416 functions for allocating image colors. Our own functions handle |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7417 color allocation failures more gracefully than the ones on the XPM |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7418 lib. */ |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7419 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7420 #if defined XpmAllocColor && defined XpmFreeColors && defined XpmColorClosure |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7421 #define ALLOC_XPM_COLORS |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7422 #endif |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7423 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7424 #ifdef ALLOC_XPM_COLORS |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7425 |
31761
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7426 static void xpm_init_color_cache P_ ((struct frame *, XpmAttributes *)); |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7427 static void xpm_free_color_cache P_ ((void)); |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7428 static int xpm_lookup_color P_ ((struct frame *, char *, XColor *)); |
31761
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7429 static int xpm_color_bucket P_ ((char *)); |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7430 static struct xpm_cached_color *xpm_cache_color P_ ((struct frame *, char *, |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7431 XColor *, int)); |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7432 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7433 /* An entry in a hash table used to cache color definitions of named |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7434 colors. This cache is necessary to speed up XPM image loading in |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7435 case we do color allocations ourselves. Without it, we would need |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7436 a call to XParseColor per pixel in the image. */ |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7437 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7438 struct xpm_cached_color |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7439 { |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7440 /* Next in collision chain. */ |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7441 struct xpm_cached_color *next; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7442 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7443 /* Color definition (RGB and pixel color). */ |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7444 XColor color; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7445 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7446 /* Color name. */ |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7447 char name[1]; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7448 }; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7449 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7450 /* The hash table used for the color cache, and its bucket vector |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7451 size. */ |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7452 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7453 #define XPM_COLOR_CACHE_BUCKETS 1001 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7454 struct xpm_cached_color **xpm_color_cache; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7455 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7456 /* Initialize the color cache. */ |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7457 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7458 static void |
31761
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7459 xpm_init_color_cache (f, attrs) |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7460 struct frame *f; |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7461 XpmAttributes *attrs; |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7462 { |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7463 size_t nbytes = XPM_COLOR_CACHE_BUCKETS * sizeof *xpm_color_cache; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7464 xpm_color_cache = (struct xpm_cached_color **) xmalloc (nbytes); |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7465 memset (xpm_color_cache, 0, nbytes); |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7466 init_color_table (); |
31761
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7467 |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7468 if (attrs->valuemask & XpmColorSymbols) |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7469 { |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7470 int i; |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7471 XColor color; |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7472 |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7473 for (i = 0; i < attrs->numsymbols; ++i) |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7474 if (XParseColor (FRAME_X_DISPLAY (f), FRAME_X_COLORMAP (f), |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7475 attrs->colorsymbols[i].value, &color)) |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7476 { |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7477 color.pixel = lookup_rgb_color (f, color.red, color.green, |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7478 color.blue); |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7479 xpm_cache_color (f, attrs->colorsymbols[i].name, &color, -1); |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7480 } |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7481 } |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7482 } |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7483 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7484 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7485 /* Free the color cache. */ |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7486 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7487 static void |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7488 xpm_free_color_cache () |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7489 { |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7490 struct xpm_cached_color *p, *next; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7491 int i; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7492 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7493 for (i = 0; i < XPM_COLOR_CACHE_BUCKETS; ++i) |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7494 for (p = xpm_color_cache[i]; p; p = next) |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7495 { |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7496 next = p->next; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7497 xfree (p); |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7498 } |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7499 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7500 xfree (xpm_color_cache); |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7501 xpm_color_cache = NULL; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7502 free_color_table (); |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7503 } |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7504 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7505 |
31761
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7506 /* Return the bucket index for color named COLOR_NAME in the color |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7507 cache. */ |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7508 |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7509 static int |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7510 xpm_color_bucket (color_name) |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7511 char *color_name; |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7512 { |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7513 unsigned h = 0; |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7514 char *s; |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7515 |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7516 for (s = color_name; *s; ++s) |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7517 h = (h << 2) ^ *s; |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7518 return h %= XPM_COLOR_CACHE_BUCKETS; |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7519 } |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7520 |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7521 |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7522 /* On frame F, cache values COLOR for color with name COLOR_NAME. |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7523 BUCKET, if >= 0, is a precomputed bucket index. Value is the cache |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7524 entry added. */ |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7525 |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7526 static struct xpm_cached_color * |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7527 xpm_cache_color (f, color_name, color, bucket) |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7528 struct frame *f; |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7529 char *color_name; |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7530 XColor *color; |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7531 int bucket; |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7532 { |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7533 size_t nbytes; |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7534 struct xpm_cached_color *p; |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7535 |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7536 if (bucket < 0) |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7537 bucket = xpm_color_bucket (color_name); |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7538 |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7539 nbytes = sizeof *p + strlen (color_name); |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7540 p = (struct xpm_cached_color *) xmalloc (nbytes); |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7541 strcpy (p->name, color_name); |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7542 p->color = *color; |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7543 p->next = xpm_color_cache[bucket]; |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7544 xpm_color_cache[bucket] = p; |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7545 return p; |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7546 } |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7547 |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7548 |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7549 /* Look up color COLOR_NAME for frame F in the color cache. If found, |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7550 return the cached definition in *COLOR. Otherwise, make a new |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7551 entry in the cache and allocate the color. Value is zero if color |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7552 allocation failed. */ |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7553 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7554 static int |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7555 xpm_lookup_color (f, color_name, color) |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7556 struct frame *f; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7557 char *color_name; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7558 XColor *color; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7559 { |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7560 struct xpm_cached_color *p; |
32536 | 7561 int h = xpm_color_bucket (color_name); |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7562 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7563 for (p = xpm_color_cache[h]; p; p = p->next) |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7564 if (strcmp (p->name, color_name) == 0) |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7565 break; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7566 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7567 if (p != NULL) |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7568 *color = p->color; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7569 else if (XParseColor (FRAME_X_DISPLAY (f), FRAME_X_COLORMAP (f), |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7570 color_name, color)) |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7571 { |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7572 color->pixel = lookup_rgb_color (f, color->red, color->green, |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7573 color->blue); |
31761
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7574 p = xpm_cache_color (f, color_name, color, h); |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7575 } |
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7576 |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7577 return p != NULL; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7578 } |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7579 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7580 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7581 /* Callback for allocating color COLOR_NAME. Called from the XPM lib. |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7582 CLOSURE is a pointer to the frame on which we allocate the |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7583 color. Return in *COLOR the allocated color. Value is non-zero |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7584 if successful. */ |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7585 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7586 static int |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7587 xpm_alloc_color (dpy, cmap, color_name, color, closure) |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7588 Display *dpy; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7589 Colormap cmap; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7590 char *color_name; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7591 XColor *color; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7592 void *closure; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7593 { |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7594 return xpm_lookup_color ((struct frame *) closure, color_name, color); |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7595 } |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7596 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7597 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7598 /* Callback for freeing NPIXELS colors contained in PIXELS. CLOSURE |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7599 is a pointer to the frame on which we allocate the color. Value is |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7600 non-zero if successful. */ |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7601 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7602 static int |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7603 xpm_free_colors (dpy, cmap, pixels, npixels, closure) |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7604 Display *dpy; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7605 Colormap cmap; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7606 Pixel *pixels; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7607 int npixels; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7608 void *closure; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7609 { |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7610 return 1; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7611 } |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7612 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7613 #endif /* ALLOC_XPM_COLORS */ |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7614 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7615 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7616 /* Value is non-zero if COLOR_SYMBOLS is a valid color symbols list |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7617 for XPM images. Such a list must consist of conses whose car and |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7618 cdr are strings. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7619 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7620 static int |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7621 xpm_valid_color_symbols_p (color_symbols) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7622 Lisp_Object color_symbols; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7623 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7624 while (CONSP (color_symbols)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7625 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7626 Lisp_Object sym = XCAR (color_symbols); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7627 if (!CONSP (sym) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7628 || !STRINGP (XCAR (sym)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7629 || !STRINGP (XCDR (sym))) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7630 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7631 color_symbols = XCDR (color_symbols); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7632 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7633 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7634 return NILP (color_symbols); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7635 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7636 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7637 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7638 /* Value is non-zero if OBJECT is a valid XPM image specification. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7639 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7640 static int |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7641 xpm_image_p (object) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7642 Lisp_Object object; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7643 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7644 struct image_keyword fmt[XPM_LAST]; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7645 bcopy (xpm_format, fmt, sizeof fmt); |
26401 | 7646 return (parse_image_spec (object, fmt, XPM_LAST, Qxpm) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7647 /* Either `:file' or `:data' must be present. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7648 && fmt[XPM_FILE].count + fmt[XPM_DATA].count == 1 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7649 /* Either no `:color-symbols' or it's a list of conses |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7650 whose car and cdr are strings. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7651 && (fmt[XPM_COLOR_SYMBOLS].count == 0 |
28787 | 7652 || xpm_valid_color_symbols_p (fmt[XPM_COLOR_SYMBOLS].value))); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7653 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7654 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7655 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7656 /* Load image IMG which will be displayed on frame F. Value is |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7657 non-zero if successful. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7658 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7659 static int |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7660 xpm_load (f, img) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7661 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7662 struct image *img; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7663 { |
34976
05c36b1fa618
(x_display_info_for_name): Cast 0 to "char *" in the call
Eli Zaretskii <eliz@gnu.org>
parents:
34911
diff
changeset
|
7664 int rc; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7665 XpmAttributes attrs; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7666 Lisp_Object specified_file, color_symbols; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7667 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7668 /* Configure the XPM lib. Use the visual of frame F. Allocate |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7669 close colors. Return colors allocated. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7670 bzero (&attrs, sizeof attrs); |
27987
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
7671 attrs.visual = FRAME_X_VISUAL (f); |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
7672 attrs.colormap = FRAME_X_COLORMAP (f); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7673 attrs.valuemask |= XpmVisual; |
27987
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
7674 attrs.valuemask |= XpmColormap; |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7675 |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7676 #ifdef ALLOC_XPM_COLORS |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7677 /* Allocate colors with our own functions which handle |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7678 failing color allocation more gracefully. */ |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7679 attrs.color_closure = f; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7680 attrs.alloc_color = xpm_alloc_color; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7681 attrs.free_colors = xpm_free_colors; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7682 attrs.valuemask |= XpmAllocColor | XpmFreeColors | XpmColorClosure; |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7683 #else /* not ALLOC_XPM_COLORS */ |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7684 /* Let the XPM lib allocate colors. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7685 attrs.valuemask |= XpmReturnAllocPixels; |
25200
8ab4da818dc0
(xpm_load) [!XpmAllocCloseColors]:
Richard M. Stallman <rms@gnu.org>
parents:
25153
diff
changeset
|
7686 #ifdef XpmAllocCloseColors |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7687 attrs.alloc_close_colors = 1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7688 attrs.valuemask |= XpmAllocCloseColors; |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7689 #else /* not XpmAllocCloseColors */ |
25200
8ab4da818dc0
(xpm_load) [!XpmAllocCloseColors]:
Richard M. Stallman <rms@gnu.org>
parents:
25153
diff
changeset
|
7690 attrs.closeness = 600; |
8ab4da818dc0
(xpm_load) [!XpmAllocCloseColors]:
Richard M. Stallman <rms@gnu.org>
parents:
25153
diff
changeset
|
7691 attrs.valuemask |= XpmCloseness; |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7692 #endif /* not XpmAllocCloseColors */ |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7693 #endif /* ALLOC_XPM_COLORS */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7694 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7695 /* If image specification contains symbolic color definitions, add |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7696 these to `attrs'. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7697 color_symbols = image_spec_value (img->spec, QCcolor_symbols, NULL); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7698 if (CONSP (color_symbols)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7699 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7700 Lisp_Object tail; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7701 XpmColorSymbol *xpm_syms; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7702 int i, size; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7703 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7704 attrs.valuemask |= XpmColorSymbols; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7705 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7706 /* Count number of symbols. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7707 attrs.numsymbols = 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7708 for (tail = color_symbols; CONSP (tail); tail = XCDR (tail)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7709 ++attrs.numsymbols; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7710 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7711 /* Allocate an XpmColorSymbol array. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7712 size = attrs.numsymbols * sizeof *xpm_syms; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7713 xpm_syms = (XpmColorSymbol *) alloca (size); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7714 bzero (xpm_syms, size); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7715 attrs.colorsymbols = xpm_syms; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7716 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7717 /* Fill the color symbol array. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7718 for (tail = color_symbols, i = 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7719 CONSP (tail); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7720 ++i, tail = XCDR (tail)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7721 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7722 Lisp_Object name = XCAR (XCAR (tail)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7723 Lisp_Object color = XCDR (XCAR (tail)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7724 xpm_syms[i].name = (char *) alloca (XSTRING (name)->size + 1); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7725 strcpy (xpm_syms[i].name, XSTRING (name)->data); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7726 xpm_syms[i].value = (char *) alloca (XSTRING (color)->size + 1); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7727 strcpy (xpm_syms[i].value, XSTRING (color)->data); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7728 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7729 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7730 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7731 /* Create a pixmap for the image, either from a file, or from a |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7732 string buffer containing data in the same format as an XPM file. */ |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7733 #ifdef ALLOC_XPM_COLORS |
31761
d9efa91b06ab
(xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents:
31693
diff
changeset
|
7734 xpm_init_color_cache (f, &attrs); |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7735 #endif |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7736 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7737 specified_file = image_spec_value (img->spec, QCfile, NULL); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7738 if (STRINGP (specified_file)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7739 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7740 Lisp_Object file = x_find_image_file (specified_file); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7741 if (!STRINGP (file)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7742 { |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
7743 image_error ("Cannot find image file `%s'", specified_file, Qnil); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7744 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7745 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7746 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7747 rc = XpmReadFileToPixmap (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7748 XSTRING (file)->data, &img->pixmap, &img->mask, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7749 &attrs); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7750 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7751 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7752 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7753 Lisp_Object buffer = image_spec_value (img->spec, QCdata, NULL); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7754 rc = XpmCreatePixmapFromBuffer (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7755 XSTRING (buffer)->data, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7756 &img->pixmap, &img->mask, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7757 &attrs); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7758 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7759 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7760 if (rc == XpmSuccess) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7761 { |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7762 #ifdef ALLOC_XPM_COLORS |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7763 img->colors = colors_in_color_table (&img->ncolors); |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7764 #else /* not ALLOC_XPM_COLORS */ |
35146
9b49ba6631c5
* xfns.c (xpm_load) [!ALLOC_XPM_COLORS]: Declare local variable I in inner block.
Ken Raeburn <raeburn@raeburn.org>
parents:
35068
diff
changeset
|
7765 int i; |
9b49ba6631c5
* xfns.c (xpm_load) [!ALLOC_XPM_COLORS]: Declare local variable I in inner block.
Ken Raeburn <raeburn@raeburn.org>
parents:
35068
diff
changeset
|
7766 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7767 img->ncolors = attrs.nalloc_pixels; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7768 img->colors = (unsigned long *) xmalloc (img->ncolors |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7769 * sizeof *img->colors); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7770 for (i = 0; i < attrs.nalloc_pixels; ++i) |
28597
6bbcb7e674b1
(xpm_load) [DEBUG_X_COLORS]: Register colors.
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
7771 { |
6bbcb7e674b1
(xpm_load) [DEBUG_X_COLORS]: Register colors.
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
7772 img->colors[i] = attrs.alloc_pixels[i]; |
6bbcb7e674b1
(xpm_load) [DEBUG_X_COLORS]: Register colors.
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
7773 #ifdef DEBUG_X_COLORS |
6bbcb7e674b1
(xpm_load) [DEBUG_X_COLORS]: Register colors.
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
7774 register_color (img->colors[i]); |
6bbcb7e674b1
(xpm_load) [DEBUG_X_COLORS]: Register colors.
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
7775 #endif |
6bbcb7e674b1
(xpm_load) [DEBUG_X_COLORS]: Register colors.
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
7776 } |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7777 #endif /* not ALLOC_XPM_COLORS */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7778 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7779 img->width = attrs.width; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7780 img->height = attrs.height; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7781 xassert (img->width > 0 && img->height > 0); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7782 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7783 /* The call to XpmFreeAttributes below frees attrs.alloc_pixels. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7784 XpmFreeAttributes (&attrs); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7785 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7786 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7787 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7788 switch (rc) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7789 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7790 case XpmOpenFailed: |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7791 image_error ("Error opening XPM file (%s)", img->spec, Qnil); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7792 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7793 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7794 case XpmFileInvalid: |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7795 image_error ("Invalid XPM file (%s)", img->spec, Qnil); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7796 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7797 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7798 case XpmNoMemory: |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7799 image_error ("Out of memory (%s)", img->spec, Qnil); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7800 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7801 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7802 case XpmColorFailed: |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7803 image_error ("Color allocation error (%s)", img->spec, Qnil); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7804 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7805 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7806 default: |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7807 image_error ("Unknown error (%s)", img->spec, Qnil); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7808 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7809 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7810 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7811 |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7812 #ifdef ALLOC_XPM_COLORS |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7813 xpm_free_color_cache (); |
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
7814 #endif |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7815 return rc == XpmSuccess; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7816 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7817 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7818 #endif /* HAVE_XPM != 0 */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7819 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7820 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7821 /*********************************************************************** |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7822 Color table |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7823 ***********************************************************************/ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7824 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7825 /* An entry in the color table mapping an RGB color to a pixel color. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7826 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7827 struct ct_color |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7828 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7829 int r, g, b; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7830 unsigned long pixel; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7831 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7832 /* Next in color table collision list. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7833 struct ct_color *next; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7834 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7835 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7836 /* The bucket vector size to use. Must be prime. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7837 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7838 #define CT_SIZE 101 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7839 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7840 /* Value is a hash of the RGB color given by R, G, and B. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7841 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7842 #define CT_HASH_RGB(R, G, B) (((R) << 16) ^ ((G) << 8) ^ (B)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7843 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7844 /* The color hash table. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7845 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7846 struct ct_color **ct_table; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7847 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7848 /* Number of entries in the color table. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7849 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7850 int ct_colors_allocated; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7851 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7852 /* Initialize the color table. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7853 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7854 static void |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7855 init_color_table () |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7856 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7857 int size = CT_SIZE * sizeof (*ct_table); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7858 ct_table = (struct ct_color **) xmalloc (size); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7859 bzero (ct_table, size); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7860 ct_colors_allocated = 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7861 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7862 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7863 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7864 /* Free memory associated with the color table. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7865 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7866 static void |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7867 free_color_table () |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7868 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7869 int i; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7870 struct ct_color *p, *next; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7871 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7872 for (i = 0; i < CT_SIZE; ++i) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7873 for (p = ct_table[i]; p; p = next) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7874 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7875 next = p->next; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7876 xfree (p); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7877 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7878 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7879 xfree (ct_table); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7880 ct_table = NULL; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7881 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7882 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7883 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7884 /* Value is a pixel color for RGB color R, G, B on frame F. If an |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7885 entry for that color already is in the color table, return the |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7886 pixel color of that entry. Otherwise, allocate a new color for R, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7887 G, B, and make an entry in the color table. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7888 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7889 static unsigned long |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7890 lookup_rgb_color (f, r, g, b) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7891 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7892 int r, g, b; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7893 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7894 unsigned hash = CT_HASH_RGB (r, g, b); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7895 int i = hash % CT_SIZE; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7896 struct ct_color *p; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7897 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7898 for (p = ct_table[i]; p; p = p->next) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7899 if (p->r == r && p->g == g && p->b == b) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7900 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7901 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7902 if (p == NULL) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7903 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7904 XColor color; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7905 Colormap cmap; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7906 int rc; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7907 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7908 color.red = r; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7909 color.green = g; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7910 color.blue = b; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7911 |
27987
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
7912 cmap = FRAME_X_COLORMAP (f); |
25528
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
7913 rc = x_alloc_nearest_color (f, cmap, &color); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7914 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7915 if (rc) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7916 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7917 ++ct_colors_allocated; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7918 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7919 p = (struct ct_color *) xmalloc (sizeof *p); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7920 p->r = r; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7921 p->g = g; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7922 p->b = b; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7923 p->pixel = color.pixel; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7924 p->next = ct_table[i]; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7925 ct_table[i] = p; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7926 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7927 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7928 return FRAME_FOREGROUND_PIXEL (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7929 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7930 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7931 return p->pixel; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7932 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7933 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7934 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7935 /* Look up pixel color PIXEL which is used on frame F in the color |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7936 table. If not already present, allocate it. Value is PIXEL. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7937 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7938 static unsigned long |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7939 lookup_pixel_color (f, pixel) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7940 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7941 unsigned long pixel; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7942 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7943 int i = pixel % CT_SIZE; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7944 struct ct_color *p; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7945 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7946 for (p = ct_table[i]; p; p = p->next) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7947 if (p->pixel == pixel) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7948 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7949 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7950 if (p == NULL) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7951 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7952 XColor color; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7953 Colormap cmap; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7954 int rc; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7955 |
27987
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
7956 cmap = FRAME_X_COLORMAP (f); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7957 color.pixel = pixel; |
32606
78b4e9f31087
(x_to_xcolors, x_set_mouse_color, lookup_pixel_color)
Gerd Moellmann <gerd@gnu.org>
parents:
32549
diff
changeset
|
7958 x_query_color (f, &color); |
25528
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
7959 rc = x_alloc_nearest_color (f, cmap, &color); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7960 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7961 if (rc) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7962 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7963 ++ct_colors_allocated; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7964 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7965 p = (struct ct_color *) xmalloc (sizeof *p); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7966 p->r = color.red; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7967 p->g = color.green; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7968 p->b = color.blue; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7969 p->pixel = pixel; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7970 p->next = ct_table[i]; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7971 ct_table[i] = p; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7972 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7973 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7974 return FRAME_FOREGROUND_PIXEL (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7975 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7976 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7977 return p->pixel; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7978 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7979 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7980 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7981 /* Value is a vector of all pixel colors contained in the color table, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7982 allocated via xmalloc. Set *N to the number of colors. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7983 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7984 static unsigned long * |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7985 colors_in_color_table (n) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7986 int *n; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7987 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7988 int i, j; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7989 struct ct_color *p; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7990 unsigned long *colors; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7991 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7992 if (ct_colors_allocated == 0) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7993 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7994 *n = 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7995 colors = NULL; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7996 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7997 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7998 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
7999 colors = (unsigned long *) xmalloc (ct_colors_allocated |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8000 * sizeof *colors); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8001 *n = ct_colors_allocated; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8002 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8003 for (i = j = 0; i < CT_SIZE; ++i) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8004 for (p = ct_table[i]; p; p = p->next) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8005 colors[j++] = p->pixel; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8006 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8007 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8008 return colors; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8009 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8010 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8011 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8012 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8013 /*********************************************************************** |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8014 Algorithms |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8015 ***********************************************************************/ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8016 |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8017 static XColor *x_to_xcolors P_ ((struct frame *, struct image *, int)); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8018 static void x_from_xcolors P_ ((struct frame *, struct image *, XColor *)); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8019 static void x_detect_edges P_ ((struct frame *, struct image *, int[9], int)); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8020 |
35360
ba490eed8f66
(QCconversion): Replaces QCalgorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
35275
diff
changeset
|
8021 /* Non-zero means draw a cross on images having `:conversion |
31651
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8022 disabled'. */ |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8023 |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8024 int cross_disabled_images; |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8025 |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8026 /* Edge detection matrices for different edge-detection |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8027 strategies. */ |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8028 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8029 static int emboss_matrix[9] = { |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8030 /* x - 1 x x + 1 */ |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8031 2, -1, 0, /* y - 1 */ |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8032 -1, 0, 1, /* y */ |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8033 0, 1, -2 /* y + 1 */ |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8034 }; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8035 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8036 static int laplace_matrix[9] = { |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8037 /* x - 1 x x + 1 */ |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8038 1, 0, 0, /* y - 1 */ |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8039 0, 0, 0, /* y */ |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8040 0, 0, -1 /* y + 1 */ |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8041 }; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8042 |
31651
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8043 /* Value is the intensity of the color whose red/green/blue values |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8044 are R, G, and B. */ |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8045 |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8046 #define COLOR_INTENSITY(R, G, B) ((2 * (R) + 3 * (G) + (B)) / 6) |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8047 |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8048 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8049 /* On frame F, return an array of XColor structures describing image |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8050 IMG->pixmap. Each XColor structure has its pixel color set. RGB_P |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8051 non-zero means also fill the red/green/blue members of the XColor |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8052 structures. Value is a pointer to the array of XColors structures, |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8053 allocated with xmalloc; it must be freed by the caller. */ |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8054 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8055 static XColor * |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8056 x_to_xcolors (f, img, rgb_p) |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8057 struct frame *f; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8058 struct image *img; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8059 int rgb_p; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8060 { |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8061 int x, y; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8062 XColor *colors, *p; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8063 XImage *ximg; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8064 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8065 colors = (XColor *) xmalloc (img->width * img->height * sizeof *colors); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8066 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8067 /* Get the X image IMG->pixmap. */ |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8068 ximg = XGetImage (FRAME_X_DISPLAY (f), img->pixmap, |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8069 0, 0, img->width, img->height, ~0, ZPixmap); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8070 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8071 /* Fill the `pixel' members of the XColor array. I wished there |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8072 were an easy and portable way to circumvent XGetPixel. */ |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8073 p = colors; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8074 for (y = 0; y < img->height; ++y) |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8075 { |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8076 XColor *row = p; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8077 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8078 for (x = 0; x < img->width; ++x, ++p) |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8079 p->pixel = XGetPixel (ximg, x, y); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8080 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8081 if (rgb_p) |
32606
78b4e9f31087
(x_to_xcolors, x_set_mouse_color, lookup_pixel_color)
Gerd Moellmann <gerd@gnu.org>
parents:
32549
diff
changeset
|
8082 x_query_colors (f, row, img->width); |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8083 } |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8084 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8085 XDestroyImage (ximg); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8086 return colors; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8087 } |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8088 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8089 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8090 /* Create IMG->pixmap from an array COLORS of XColor structures, whose |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8091 RGB members are set. F is the frame on which this all happens. |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8092 COLORS will be freed; an existing IMG->pixmap will be freed, too. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8093 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8094 static void |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8095 x_from_xcolors (f, img, colors) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8096 struct frame *f; |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8097 struct image *img; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8098 XColor *colors; |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8099 { |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8100 int x, y; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8101 XImage *oimg; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8102 Pixmap pixmap; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8103 XColor *p; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8104 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8105 init_color_table (); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8106 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8107 x_create_x_image_and_pixmap (f, img->width, img->height, 0, |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8108 &oimg, &pixmap); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8109 p = colors; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8110 for (y = 0; y < img->height; ++y) |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8111 for (x = 0; x < img->width; ++x, ++p) |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8112 { |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8113 unsigned long pixel; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8114 pixel = lookup_rgb_color (f, p->red, p->green, p->blue); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8115 XPutPixel (oimg, x, y, pixel); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8116 } |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8117 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8118 xfree (colors); |
31693
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
8119 x_clear_image_1 (f, img, 1, 0, 1); |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8120 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8121 x_put_x_image (f, oimg, pixmap, img->width, img->height); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8122 x_destroy_x_image (oimg); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8123 img->pixmap = pixmap; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8124 img->colors = colors_in_color_table (&img->ncolors); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8125 free_color_table (); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8126 } |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8127 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8128 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8129 /* On frame F, perform edge-detection on image IMG. |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8130 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8131 MATRIX is a nine-element array specifying the transformation |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8132 matrix. See emboss_matrix for an example. |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8133 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8134 COLOR_ADJUST is a color adjustment added to each pixel of the |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8135 outgoing image. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8136 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8137 static void |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8138 x_detect_edges (f, img, matrix, color_adjust) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8139 struct frame *f; |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8140 struct image *img; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8141 int matrix[9], color_adjust; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8142 { |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8143 XColor *colors = x_to_xcolors (f, img, 1); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8144 XColor *new, *p; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8145 int x, y, i, sum; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8146 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8147 for (i = sum = 0; i < 9; ++i) |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8148 sum += abs (matrix[i]); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8149 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8150 #define COLOR(A, X, Y) ((A) + (Y) * img->width + (X)) |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8151 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8152 new = (XColor *) xmalloc (img->width * img->height * sizeof *new); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8153 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8154 for (y = 0; y < img->height; ++y) |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8155 { |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8156 p = COLOR (new, 0, y); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8157 p->red = p->green = p->blue = 0xffff/2; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8158 p = COLOR (new, img->width - 1, y); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8159 p->red = p->green = p->blue = 0xffff/2; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8160 } |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8161 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8162 for (x = 1; x < img->width - 1; ++x) |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8163 { |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8164 p = COLOR (new, x, 0); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8165 p->red = p->green = p->blue = 0xffff/2; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8166 p = COLOR (new, x, img->height - 1); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8167 p->red = p->green = p->blue = 0xffff/2; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8168 } |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8169 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8170 for (y = 1; y < img->height - 1; ++y) |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8171 { |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8172 p = COLOR (new, 1, y); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8173 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8174 for (x = 1; x < img->width - 1; ++x, ++p) |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8175 { |
31651
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8176 int r, g, b, y1, x1; |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8177 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8178 r = g = b = i = 0; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8179 for (y1 = y - 1; y1 < y + 2; ++y1) |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8180 for (x1 = x - 1; x1 < x + 2; ++x1, ++i) |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8181 if (matrix[i]) |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8182 { |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8183 XColor *t = COLOR (colors, x1, y1); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8184 r += matrix[i] * t->red; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8185 g += matrix[i] * t->green; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8186 b += matrix[i] * t->blue; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8187 } |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8188 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8189 r = (r / sum + color_adjust) & 0xffff; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8190 g = (g / sum + color_adjust) & 0xffff; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8191 b = (b / sum + color_adjust) & 0xffff; |
31651
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8192 p->red = p->green = p->blue = COLOR_INTENSITY (r, g, b); |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8193 } |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8194 } |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8195 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8196 xfree (colors); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8197 x_from_xcolors (f, img, new); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8198 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8199 #undef COLOR |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8200 } |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8201 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8202 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8203 /* Perform the pre-defined `emboss' edge-detection on image IMG |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8204 on frame F. */ |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8205 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8206 static void |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8207 x_emboss (f, img) |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8208 struct frame *f; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8209 struct image *img; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8210 { |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8211 x_detect_edges (f, img, emboss_matrix, 0xffff / 2); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8212 } |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8213 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8214 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8215 /* Perform the pre-defined `laplace' edge-detection on image IMG |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8216 on frame F. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8217 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8218 static void |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8219 x_laplace (f, img) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8220 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8221 struct image *img; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8222 { |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8223 x_detect_edges (f, img, laplace_matrix, 45000); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8224 } |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8225 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8226 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8227 /* Perform edge-detection on image IMG on frame F, with specified |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8228 transformation matrix MATRIX and color-adjustment COLOR_ADJUST. |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8229 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8230 MATRIX must be either |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8231 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8232 - a list of at least 9 numbers in row-major form |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8233 - a vector of at least 9 numbers |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8234 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8235 COLOR_ADJUST nil means use a default; otherwise it must be a |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8236 number. */ |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8237 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8238 static void |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8239 x_edge_detection (f, img, matrix, color_adjust) |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8240 struct frame *f; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8241 struct image *img; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8242 Lisp_Object matrix, color_adjust; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8243 { |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8244 int i = 0; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8245 int trans[9]; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8246 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8247 if (CONSP (matrix)) |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8248 { |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8249 for (i = 0; |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8250 i < 9 && CONSP (matrix) && NUMBERP (XCAR (matrix)); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8251 ++i, matrix = XCDR (matrix)) |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8252 trans[i] = XFLOATINT (XCAR (matrix)); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8253 } |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8254 else if (VECTORP (matrix) && ASIZE (matrix) >= 9) |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8255 { |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8256 for (i = 0; i < 9 && NUMBERP (AREF (matrix, i)); ++i) |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8257 trans[i] = XFLOATINT (AREF (matrix, i)); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8258 } |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8259 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8260 if (NILP (color_adjust)) |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8261 color_adjust = make_number (0xffff / 2); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8262 |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8263 if (i == 9 && NUMBERP (color_adjust)) |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8264 x_detect_edges (f, img, trans, (int) XFLOATINT (color_adjust)); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8265 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8266 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8267 |
31651
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8268 /* Transform image IMG on frame F so that it looks disabled. */ |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8269 |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8270 static void |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8271 x_disable_image (f, img) |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8272 struct frame *f; |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8273 struct image *img; |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8274 { |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8275 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
31693
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
8276 |
31651
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8277 if (dpyinfo->n_planes >= 2) |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8278 { |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8279 /* Color (or grayscale). Convert to gray, and equalize. Just |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8280 drawing such images with a stipple can look very odd, so |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8281 we're using this method instead. */ |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8282 XColor *colors = x_to_xcolors (f, img, 1); |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8283 XColor *p, *end; |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8284 const int h = 15000; |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8285 const int l = 30000; |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8286 |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8287 for (p = colors, end = colors + img->width * img->height; |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8288 p < end; |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8289 ++p) |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8290 { |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8291 int i = COLOR_INTENSITY (p->red, p->green, p->blue); |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8292 int i2 = (0xffff - h - l) * i / 0xffff + l; |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8293 p->red = p->green = p->blue = i2; |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8294 } |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8295 |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8296 x_from_xcolors (f, img, colors); |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8297 } |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8298 |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8299 /* Draw a cross over the disabled image, if we must or if we |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8300 should. */ |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8301 if (dpyinfo->n_planes < 2 || cross_disabled_images) |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8302 { |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8303 Display *dpy = FRAME_X_DISPLAY (f); |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8304 GC gc; |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8305 |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8306 gc = XCreateGC (dpy, img->pixmap, 0, NULL); |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8307 XSetForeground (dpy, gc, BLACK_PIX_DEFAULT (f)); |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8308 XDrawLine (dpy, img->pixmap, gc, 0, 0, |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8309 img->width - 1, img->height - 1); |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8310 XDrawLine (dpy, img->pixmap, gc, 0, img->height - 1, |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8311 img->width - 1, 0); |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8312 XFreeGC (dpy, gc); |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8313 |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8314 if (img->mask) |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8315 { |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8316 gc = XCreateGC (dpy, img->mask, 0, NULL); |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8317 XSetForeground (dpy, gc, WHITE_PIX_DEFAULT (f)); |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8318 XDrawLine (dpy, img->mask, gc, 0, 0, |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8319 img->width - 1, img->height - 1); |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8320 XDrawLine (dpy, img->mask, gc, 0, img->height - 1, |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8321 img->width - 1, 0); |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8322 XFreeGC (dpy, gc); |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8323 } |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8324 } |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8325 } |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8326 |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
8327 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8328 /* Build a mask for image IMG which is used on frame F. FILE is the |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8329 name of an image file, for error messages. HOW determines how to |
25628
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
8330 determine the background color of IMG. If it is a list '(R G B)', |
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
8331 with R, G, and B being integers >= 0, take that as the color of the |
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
8332 background. Otherwise, determine the background color of IMG |
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
8333 heuristically. Value is non-zero if successful. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8334 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8335 static int |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
8336 x_build_heuristic_mask (f, img, how) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8337 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8338 struct image *img; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8339 Lisp_Object how; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8340 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8341 Display *dpy = FRAME_X_DISPLAY (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8342 XImage *ximg, *mask_img; |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
8343 int x, y, rc, use_img_background; |
31543
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
8344 unsigned long bg = 0; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8345 |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8346 if (img->mask) |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8347 { |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8348 XFreePixmap (FRAME_X_DISPLAY (f), img->mask); |
31693
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
8349 img->mask = None; |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
8350 img->background_transparent_valid = 0; |
31693
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
8351 } |
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
8352 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8353 /* Create an image and pixmap serving as mask. */ |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
8354 rc = x_create_x_image_and_pixmap (f, img->width, img->height, 1, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8355 &mask_img, &img->mask); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8356 if (!rc) |
31686
577372d71de8
(lookup_image): Block input while loading the image so
Gerd Moellmann <gerd@gnu.org>
parents:
31651
diff
changeset
|
8357 return 0; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8358 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8359 /* Get the X image of IMG->pixmap. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8360 ximg = XGetImage (dpy, img->pixmap, 0, 0, img->width, img->height, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8361 ~0, ZPixmap); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8362 |
25628
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
8363 /* Determine the background color of ximg. If HOW is `(R G B)' |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
8364 take that as color. Otherwise, use the image's background color. */ |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
8365 use_img_background = 1; |
25628
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
8366 |
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
8367 if (CONSP (how)) |
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
8368 { |
40421
1eec9125d32e
(x_build_heuristic_mask): Fix a bug not incrementing
Gerd Moellmann <gerd@gnu.org>
parents:
40325
diff
changeset
|
8369 int rgb[3], i; |
1eec9125d32e
(x_build_heuristic_mask): Fix a bug not incrementing
Gerd Moellmann <gerd@gnu.org>
parents:
40325
diff
changeset
|
8370 |
1eec9125d32e
(x_build_heuristic_mask): Fix a bug not incrementing
Gerd Moellmann <gerd@gnu.org>
parents:
40325
diff
changeset
|
8371 for (i = 0; i < 3 && CONSP (how) && NATNUMP (XCAR (how)); ++i) |
25628
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
8372 { |
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
8373 rgb[i] = XFASTINT (XCAR (how)) & 0xffff; |
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
8374 how = XCDR (how); |
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
8375 } |
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
8376 |
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
8377 if (i == 3 && NILP (how)) |
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
8378 { |
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
8379 char color_name[30]; |
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
8380 sprintf (color_name, "#%04x%04x%04x", rgb[0], rgb[1], rgb[2]); |
40427
979757645800
(x_build_heuristic_mask): Use x_alloc_image_color.
Gerd Moellmann <gerd@gnu.org>
parents:
40421
diff
changeset
|
8381 bg = x_alloc_image_color (f, img, build_string (color_name), 0); |
979757645800
(x_build_heuristic_mask): Use x_alloc_image_color.
Gerd Moellmann <gerd@gnu.org>
parents:
40421
diff
changeset
|
8382 use_img_background = 0; |
25628
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
8383 } |
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
8384 } |
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
8385 |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
8386 if (use_img_background) |
40608
134b236ad704
(x_build_heuristic_mask): Use four_corners_best
Gerd Moellmann <gerd@gnu.org>
parents:
40606
diff
changeset
|
8387 bg = four_corners_best (ximg, img->width, img->height); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8388 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8389 /* Set all bits in mask_img to 1 whose color in ximg is different |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8390 from the background color bg. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8391 for (y = 0; y < img->height; ++y) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8392 for (x = 0; x < img->width; ++x) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8393 XPutPixel (mask_img, x, y, XGetPixel (ximg, x, y) != bg); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8394 |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
8395 /* Fill in the background_transparent field while we have the mask handy. */ |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
8396 image_background_transparent (img, f, mask_img); |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
8397 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8398 /* Put mask_img into img->mask. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8399 x_put_x_image (f, mask_img, img->mask, img->width, img->height); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8400 x_destroy_x_image (mask_img); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8401 XDestroyImage (ximg); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8402 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8403 return 1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8404 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8405 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8406 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8407 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8408 /*********************************************************************** |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8409 PBM (mono, gray, color) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8410 ***********************************************************************/ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8411 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8412 static int pbm_image_p P_ ((Lisp_Object object)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8413 static int pbm_load P_ ((struct frame *f, struct image *img)); |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8414 static int pbm_scan_number P_ ((unsigned char **, unsigned char *)); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8415 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8416 /* The symbol `pbm' identifying images of this type. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8417 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8418 Lisp_Object Qpbm; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8419 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8420 /* Indices of image specification fields in gs_format, below. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8421 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8422 enum pbm_keyword_index |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8423 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8424 PBM_TYPE, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8425 PBM_FILE, |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8426 PBM_DATA, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8427 PBM_ASCENT, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8428 PBM_MARGIN, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8429 PBM_RELIEF, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8430 PBM_ALGORITHM, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8431 PBM_HEURISTIC_MASK, |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8432 PBM_MASK, |
32549
73521ea30674
(pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents:
32536
diff
changeset
|
8433 PBM_FOREGROUND, |
73521ea30674
(pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents:
32536
diff
changeset
|
8434 PBM_BACKGROUND, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8435 PBM_LAST |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8436 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8437 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8438 /* Vector of image_keyword structures describing the format |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8439 of valid user-defined image specifications. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8440 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8441 static struct image_keyword pbm_format[PBM_LAST] = |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8442 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8443 {":type", IMAGE_SYMBOL_VALUE, 1}, |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8444 {":file", IMAGE_STRING_VALUE, 0}, |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8445 {":data", IMAGE_STRING_VALUE, 0}, |
28787 | 8446 {":ascent", IMAGE_ASCENT_VALUE, 0}, |
35275
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
8447 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0}, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8448 {":relief", IMAGE_INTEGER_VALUE, 0}, |
35360
ba490eed8f66
(QCconversion): Replaces QCalgorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
35275
diff
changeset
|
8449 {":conversion", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8450 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
32549
73521ea30674
(pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents:
32536
diff
changeset
|
8451 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
37946
fe4457964ac0
(enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents:
37762
diff
changeset
|
8452 {":foreground", IMAGE_STRING_OR_NIL_VALUE, 0}, |
fe4457964ac0
(enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents:
37762
diff
changeset
|
8453 {":background", IMAGE_STRING_OR_NIL_VALUE, 0} |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8454 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8455 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8456 /* Structure describing the image type `pbm'. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8457 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8458 static struct image_type pbm_type = |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8459 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8460 &Qpbm, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8461 pbm_image_p, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8462 pbm_load, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8463 x_clear_image, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8464 NULL |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8465 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8466 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8467 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8468 /* Return non-zero if OBJECT is a valid PBM image specification. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8469 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8470 static int |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8471 pbm_image_p (object) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8472 Lisp_Object object; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8473 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8474 struct image_keyword fmt[PBM_LAST]; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8475 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8476 bcopy (pbm_format, fmt, sizeof fmt); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8477 |
28787 | 8478 if (!parse_image_spec (object, fmt, PBM_LAST, Qpbm)) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8479 return 0; |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8480 |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8481 /* Must specify either :data or :file. */ |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8482 return fmt[PBM_DATA].count + fmt[PBM_FILE].count == 1; |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8483 } |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8484 |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8485 |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8486 /* Scan a decimal number from *S and return it. Advance *S while |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8487 reading the number. END is the end of the string. Value is -1 at |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8488 end of input. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8489 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8490 static int |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8491 pbm_scan_number (s, end) |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8492 unsigned char **s, *end; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8493 { |
31543
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
8494 int c = 0, val = -1; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8495 |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8496 while (*s < end) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8497 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8498 /* Skip white-space. */ |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8499 while (*s < end && (c = *(*s)++, isspace (c))) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8500 ; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8501 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8502 if (c == '#') |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8503 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8504 /* Skip comment to end of line. */ |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8505 while (*s < end && (c = *(*s)++, c != '\n')) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8506 ; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8507 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8508 else if (isdigit (c)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8509 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8510 /* Read decimal number. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8511 val = c - '0'; |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8512 while (*s < end && (c = *(*s)++, isdigit (c))) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8513 val = 10 * val + c - '0'; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8514 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8515 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8516 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8517 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8518 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8519 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8520 return val; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8521 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8522 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8523 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8524 /* Load PBM image IMG for use on frame F. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8525 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8526 static int |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8527 pbm_load (f, img) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8528 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8529 struct image *img; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8530 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8531 int raw_p, x, y; |
25715
feaedc03dbc8
(x_set_background_color): Remove unused variable(s).
Gerd Moellmann <gerd@gnu.org>
parents:
25691
diff
changeset
|
8532 int width, height, max_color_idx = 0; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8533 XImage *ximg; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8534 Lisp_Object file, specified_file; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8535 enum {PBM_MONO, PBM_GRAY, PBM_COLOR} type; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8536 struct gcpro gcpro1; |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8537 unsigned char *contents = NULL; |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8538 unsigned char *end, *p; |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8539 int size; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8540 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8541 specified_file = image_spec_value (img->spec, QCfile, NULL); |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8542 file = Qnil; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8543 GCPRO1 (file); |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8544 |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8545 if (STRINGP (specified_file)) |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8546 { |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8547 file = x_find_image_file (specified_file); |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8548 if (!STRINGP (file)) |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8549 { |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8550 image_error ("Cannot find image file `%s'", specified_file, Qnil); |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8551 UNGCPRO; |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8552 return 0; |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8553 } |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8554 |
28747
6f90293e6ccb
(slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28690
diff
changeset
|
8555 contents = slurp_file (XSTRING (file)->data, &size); |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8556 if (contents == NULL) |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8557 { |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8558 image_error ("Error reading `%s'", file, Qnil); |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8559 UNGCPRO; |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8560 return 0; |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8561 } |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8562 |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8563 p = contents; |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8564 end = contents + size; |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8565 } |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8566 else |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8567 { |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8568 Lisp_Object data; |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8569 data = image_spec_value (img->spec, QCdata, NULL); |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8570 p = XSTRING (data)->data; |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8571 end = p + STRING_BYTES (XSTRING (data)); |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8572 } |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8573 |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8574 /* Check magic number. */ |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8575 if (end - p < 2 || *p++ != 'P') |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8576 { |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
8577 image_error ("Not a PBM image: `%s'", img->spec, Qnil); |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8578 error: |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8579 xfree (contents); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8580 UNGCPRO; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8581 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8582 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8583 |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8584 switch (*p++) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8585 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8586 case '1': |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8587 raw_p = 0, type = PBM_MONO; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8588 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8589 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8590 case '2': |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8591 raw_p = 0, type = PBM_GRAY; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8592 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8593 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8594 case '3': |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8595 raw_p = 0, type = PBM_COLOR; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8596 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8597 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8598 case '4': |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8599 raw_p = 1, type = PBM_MONO; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8600 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8601 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8602 case '5': |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8603 raw_p = 1, type = PBM_GRAY; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8604 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8605 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8606 case '6': |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8607 raw_p = 1, type = PBM_COLOR; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8608 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8609 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8610 default: |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
8611 image_error ("Not a PBM image: `%s'", img->spec, Qnil); |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8612 goto error; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8613 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8614 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8615 /* Read width, height, maximum color-component. Characters |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8616 starting with `#' up to the end of a line are ignored. */ |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8617 width = pbm_scan_number (&p, end); |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8618 height = pbm_scan_number (&p, end); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8619 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8620 if (type != PBM_MONO) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8621 { |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8622 max_color_idx = pbm_scan_number (&p, end); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8623 if (raw_p && max_color_idx > 255) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8624 max_color_idx = 255; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8625 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8626 |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8627 if (width < 0 |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8628 || height < 0 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8629 || (type != PBM_MONO && max_color_idx < 0)) |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8630 goto error; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8631 |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
8632 if (!x_create_x_image_and_pixmap (f, width, height, 0, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8633 &ximg, &img->pixmap)) |
31686
577372d71de8
(lookup_image): Block input while loading the image so
Gerd Moellmann <gerd@gnu.org>
parents:
31651
diff
changeset
|
8634 goto error; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8635 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8636 /* Initialize the color hash table. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8637 init_color_table (); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8638 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8639 if (type == PBM_MONO) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8640 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8641 int c = 0, g; |
32549
73521ea30674
(pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents:
32536
diff
changeset
|
8642 struct image_keyword fmt[PBM_LAST]; |
73521ea30674
(pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents:
32536
diff
changeset
|
8643 unsigned long fg = FRAME_FOREGROUND_PIXEL (f); |
73521ea30674
(pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents:
32536
diff
changeset
|
8644 unsigned long bg = FRAME_BACKGROUND_PIXEL (f); |
73521ea30674
(pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents:
32536
diff
changeset
|
8645 |
73521ea30674
(pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents:
32536
diff
changeset
|
8646 /* Parse the image specification. */ |
73521ea30674
(pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents:
32536
diff
changeset
|
8647 bcopy (pbm_format, fmt, sizeof fmt); |
73521ea30674
(pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents:
32536
diff
changeset
|
8648 parse_image_spec (img->spec, fmt, PBM_LAST, Qpbm); |
73521ea30674
(pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents:
32536
diff
changeset
|
8649 |
73521ea30674
(pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents:
32536
diff
changeset
|
8650 /* Get foreground and background colors, maybe allocate colors. */ |
37946
fe4457964ac0
(enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents:
37762
diff
changeset
|
8651 if (fmt[PBM_FOREGROUND].count |
fe4457964ac0
(enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents:
37762
diff
changeset
|
8652 && STRINGP (fmt[PBM_FOREGROUND].value)) |
32549
73521ea30674
(pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents:
32536
diff
changeset
|
8653 fg = x_alloc_image_color (f, img, fmt[PBM_FOREGROUND].value, fg); |
37946
fe4457964ac0
(enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents:
37762
diff
changeset
|
8654 if (fmt[PBM_BACKGROUND].count |
fe4457964ac0
(enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents:
37762
diff
changeset
|
8655 && STRINGP (fmt[PBM_BACKGROUND].value)) |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
8656 { |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
8657 bg = x_alloc_image_color (f, img, fmt[PBM_BACKGROUND].value, bg); |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
8658 img->background = bg; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
8659 img->background_valid = 1; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
8660 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8661 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8662 for (y = 0; y < height; ++y) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8663 for (x = 0; x < width; ++x) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8664 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8665 if (raw_p) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8666 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8667 if ((x & 7) == 0) |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8668 c = *p++; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8669 g = c & 0x80; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8670 c <<= 1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8671 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8672 else |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8673 g = pbm_scan_number (&p, end); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8674 |
32549
73521ea30674
(pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents:
32536
diff
changeset
|
8675 XPutPixel (ximg, x, y, g ? fg : bg); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8676 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8677 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8678 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8679 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8680 for (y = 0; y < height; ++y) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8681 for (x = 0; x < width; ++x) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8682 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8683 int r, g, b; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8684 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8685 if (type == PBM_GRAY) |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8686 r = g = b = raw_p ? *p++ : pbm_scan_number (&p, end); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8687 else if (raw_p) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8688 { |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8689 r = *p++; |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8690 g = *p++; |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8691 b = *p++; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8692 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8693 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8694 { |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8695 r = pbm_scan_number (&p, end); |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8696 g = pbm_scan_number (&p, end); |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8697 b = pbm_scan_number (&p, end); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8698 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8699 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8700 if (r < 0 || g < 0 || b < 0) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8701 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8702 xfree (ximg->data); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8703 ximg->data = NULL; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8704 XDestroyImage (ximg); |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
8705 image_error ("Invalid pixel value in image `%s'", |
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
8706 img->spec, Qnil); |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8707 goto error; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8708 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8709 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8710 /* RGB values are now in the range 0..max_color_idx. |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8711 Scale this to the range 0..0xffff supported by X. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8712 r = (double) r * 65535 / max_color_idx; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8713 g = (double) g * 65535 / max_color_idx; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8714 b = (double) b * 65535 / max_color_idx; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8715 XPutPixel (ximg, x, y, lookup_rgb_color (f, r, g, b)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8716 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8717 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8718 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8719 /* Store in IMG->colors the colors allocated for the image, and |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8720 free the color table. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8721 img->colors = colors_in_color_table (&img->ncolors); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8722 free_color_table (); |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
8723 |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
8724 /* Maybe fill in the background field while we have ximg handy. */ |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
8725 if (NILP (image_spec_value (img->spec, QCbackground, NULL))) |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
8726 IMAGE_BACKGROUND (img, f, ximg); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8727 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8728 /* Put the image into a pixmap. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8729 x_put_x_image (f, ximg, img->pixmap, width, height); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8730 x_destroy_x_image (ximg); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8731 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8732 img->width = width; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8733 img->height = height; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8734 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8735 UNGCPRO; |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8736 xfree (contents); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8737 return 1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8738 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8739 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8740 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8741 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8742 /*********************************************************************** |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8743 PNG |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8744 ***********************************************************************/ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8745 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8746 #if HAVE_PNG |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8747 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8748 #include <png.h> |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8749 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8750 /* Function prototypes. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8751 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8752 static int png_image_p P_ ((Lisp_Object object)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8753 static int png_load P_ ((struct frame *f, struct image *img)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8754 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8755 /* The symbol `png' identifying images of this type. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8756 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8757 Lisp_Object Qpng; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8758 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8759 /* Indices of image specification fields in png_format, below. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8760 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8761 enum png_keyword_index |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8762 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8763 PNG_TYPE, |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
8764 PNG_DATA, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8765 PNG_FILE, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8766 PNG_ASCENT, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8767 PNG_MARGIN, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8768 PNG_RELIEF, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8769 PNG_ALGORITHM, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8770 PNG_HEURISTIC_MASK, |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8771 PNG_MASK, |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
8772 PNG_BACKGROUND, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8773 PNG_LAST |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8774 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8775 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8776 /* Vector of image_keyword structures describing the format |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8777 of valid user-defined image specifications. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8778 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8779 static struct image_keyword png_format[PNG_LAST] = |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8780 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8781 {":type", IMAGE_SYMBOL_VALUE, 1}, |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8782 {":data", IMAGE_STRING_VALUE, 0}, |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
8783 {":file", IMAGE_STRING_VALUE, 0}, |
28787 | 8784 {":ascent", IMAGE_ASCENT_VALUE, 0}, |
35275
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
8785 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0}, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8786 {":relief", IMAGE_INTEGER_VALUE, 0}, |
35360
ba490eed8f66
(QCconversion): Replaces QCalgorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
35275
diff
changeset
|
8787 {":conversion", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
8788 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
40279
1adbc1480e83
(png_load): Make sure SPECIFIED_BG is a string.
Miles Bader <miles@gnu.org>
parents:
40264
diff
changeset
|
8789 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
8790 {":background", IMAGE_STRING_OR_NIL_VALUE, 0} |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8791 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8792 |
26032
6a349a18b1ad
(gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents:
25955
diff
changeset
|
8793 /* Structure describing the image type `png'. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8794 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8795 static struct image_type png_type = |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8796 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8797 &Qpng, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8798 png_image_p, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8799 png_load, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8800 x_clear_image, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8801 NULL |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8802 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8803 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8804 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8805 /* Return non-zero if OBJECT is a valid PNG image specification. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8806 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8807 static int |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8808 png_image_p (object) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8809 Lisp_Object object; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8810 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8811 struct image_keyword fmt[PNG_LAST]; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8812 bcopy (png_format, fmt, sizeof fmt); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8813 |
28787 | 8814 if (!parse_image_spec (object, fmt, PNG_LAST, Qpng)) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8815 return 0; |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
8816 |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8817 /* Must specify either the :data or :file keyword. */ |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
8818 return fmt[PNG_FILE].count + fmt[PNG_DATA].count == 1; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8819 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8820 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8821 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8822 /* Error and warning handlers installed when the PNG library |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8823 is initialized. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8824 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8825 static void |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8826 my_png_error (png_ptr, msg) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8827 png_struct *png_ptr; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8828 char *msg; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8829 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8830 xassert (png_ptr != NULL); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8831 image_error ("PNG error: %s", build_string (msg), Qnil); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8832 longjmp (png_ptr->jmpbuf, 1); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8833 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8834 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8835 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8836 static void |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8837 my_png_warning (png_ptr, msg) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8838 png_struct *png_ptr; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8839 char *msg; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8840 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8841 xassert (png_ptr != NULL); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8842 image_error ("PNG warning: %s", build_string (msg), Qnil); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8843 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8844 |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8845 /* Memory source for PNG decoding. */ |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8846 |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
8847 struct png_memory_storage |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
8848 { |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8849 unsigned char *bytes; /* The data */ |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8850 size_t len; /* How big is it? */ |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8851 int index; /* Where are we? */ |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
8852 }; |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
8853 |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8854 |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8855 /* Function set as reader function when reading PNG image from memory. |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8856 PNG_PTR is a pointer to the PNG control structure. Copy LENGTH |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8857 bytes from the input to DATA. */ |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8858 |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
8859 static void |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8860 png_read_from_memory (png_ptr, data, length) |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8861 png_structp png_ptr; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8862 png_bytep data; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8863 png_size_t length; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8864 { |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8865 struct png_memory_storage *tbr |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8866 = (struct png_memory_storage *) png_get_io_ptr (png_ptr); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8867 |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8868 if (length > tbr->len - tbr->index) |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8869 png_error (png_ptr, "Read error"); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8870 |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8871 bcopy (tbr->bytes + tbr->index, data, length); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8872 tbr->index = tbr->index + length; |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
8873 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8874 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8875 /* Load PNG image IMG for use on frame F. Value is non-zero if |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8876 successful. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8877 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8878 static int |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8879 png_load (f, img) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8880 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8881 struct image *img; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8882 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8883 Lisp_Object file, specified_file; |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
8884 Lisp_Object specified_data; |
25715
feaedc03dbc8
(x_set_background_color): Remove unused variable(s).
Gerd Moellmann <gerd@gnu.org>
parents:
25691
diff
changeset
|
8885 int x, y, i; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8886 XImage *ximg, *mask_img = NULL; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8887 struct gcpro gcpro1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8888 png_struct *png_ptr = NULL; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8889 png_info *info_ptr = NULL, *end_info = NULL; |
31543
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
8890 FILE *volatile fp = NULL; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8891 png_byte sig[8]; |
31543
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
8892 png_byte * volatile pixels = NULL; |
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
8893 png_byte ** volatile rows = NULL; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8894 png_uint_32 width, height; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8895 int bit_depth, color_type, interlace_type; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8896 png_byte channels; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8897 png_uint_32 row_bytes; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8898 int transparent_p; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8899 char *gamma_str; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8900 double screen_gamma, image_gamma; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8901 int intent; |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
8902 struct png_memory_storage tbr; /* Data to be read */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8903 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8904 /* Find out what file to load. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8905 specified_file = image_spec_value (img->spec, QCfile, NULL); |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
8906 specified_data = image_spec_value (img->spec, QCdata, NULL); |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8907 file = Qnil; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8908 GCPRO1 (file); |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
8909 |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
8910 if (NILP (specified_data)) |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8911 { |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8912 file = x_find_image_file (specified_file); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8913 if (!STRINGP (file)) |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
8914 { |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
8915 image_error ("Cannot find image file `%s'", specified_file, Qnil); |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8916 UNGCPRO; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8917 return 0; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8918 } |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8919 |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8920 /* Open the image file. */ |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8921 fp = fopen (XSTRING (file)->data, "rb"); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8922 if (!fp) |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8923 { |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
8924 image_error ("Cannot open image file `%s'", file, Qnil); |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8925 UNGCPRO; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8926 fclose (fp); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8927 return 0; |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
8928 } |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8929 |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8930 /* Check PNG signature. */ |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8931 if (fread (sig, 1, sizeof sig, fp) != sizeof sig |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8932 || !png_check_sig (sig, sizeof sig)) |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
8933 { |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
8934 image_error ("Not a PNG file: `%s'", file, Qnil); |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8935 UNGCPRO; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8936 fclose (fp); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8937 return 0; |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
8938 } |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8939 } |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8940 else |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8941 { |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8942 /* Read from memory. */ |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8943 tbr.bytes = XSTRING (specified_data)->data; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8944 tbr.len = STRING_BYTES (XSTRING (specified_data)); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8945 tbr.index = 0; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8946 |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8947 /* Check PNG signature. */ |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8948 if (tbr.len < sizeof sig |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8949 || !png_check_sig (tbr.bytes, sizeof sig)) |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8950 { |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
8951 image_error ("Not a PNG image: `%s'", img->spec, Qnil); |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8952 UNGCPRO; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8953 return 0; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8954 } |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8955 |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8956 /* Need to skip past the signature. */ |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8957 tbr.bytes += sizeof (sig); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
8958 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8959 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8960 /* Initialize read and info structs for PNG lib. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8961 png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8962 my_png_error, my_png_warning); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8963 if (!png_ptr) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8964 { |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
8965 if (fp) fclose (fp); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8966 UNGCPRO; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8967 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8968 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8969 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8970 info_ptr = png_create_info_struct (png_ptr); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8971 if (!info_ptr) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8972 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8973 png_destroy_read_struct (&png_ptr, NULL, NULL); |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
8974 if (fp) fclose (fp); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8975 UNGCPRO; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8976 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8977 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8978 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8979 end_info = png_create_info_struct (png_ptr); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8980 if (!end_info) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8981 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8982 png_destroy_read_struct (&png_ptr, &info_ptr, NULL); |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
8983 if (fp) fclose (fp); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8984 UNGCPRO; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8985 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8986 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8987 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8988 /* Set error jump-back. We come back here when the PNG library |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8989 detects an error. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8990 if (setjmp (png_ptr->jmpbuf)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8991 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8992 error: |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8993 if (png_ptr) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8994 png_destroy_read_struct (&png_ptr, &info_ptr, &end_info); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8995 xfree (pixels); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8996 xfree (rows); |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
8997 if (fp) fclose (fp); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8998 UNGCPRO; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
8999 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9000 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9001 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9002 /* Read image info. */ |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9003 if (!NILP (specified_data)) |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9004 png_set_read_fn (png_ptr, (void *) &tbr, png_read_from_memory); |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9005 else |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9006 png_init_io (png_ptr, fp); |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9007 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9008 png_set_sig_bytes (png_ptr, sizeof sig); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9009 png_read_info (png_ptr, info_ptr); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9010 png_get_IHDR (png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9011 &interlace_type, NULL, NULL); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9012 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9013 /* If image contains simply transparency data, we prefer to |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9014 construct a clipping mask. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9015 if (png_get_valid (png_ptr, info_ptr, PNG_INFO_tRNS)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9016 transparent_p = 1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9017 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9018 transparent_p = 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9019 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9020 /* This function is easier to write if we only have to handle |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9021 one data format: RGB or RGBA with 8 bits per channel. Let's |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9022 transform other formats into that format. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9023 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9024 /* Strip more than 8 bits per channel. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9025 if (bit_depth == 16) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9026 png_set_strip_16 (png_ptr); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9027 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9028 /* Expand data to 24 bit RGB, or 8 bit grayscale, with alpha channel |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9029 if available. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9030 png_set_expand (png_ptr); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9031 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9032 /* Convert grayscale images to RGB. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9033 if (color_type == PNG_COLOR_TYPE_GRAY |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9034 || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9035 png_set_gray_to_rgb (png_ptr); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9036 |
43670
5505d571541b
(png_load): Set screen_gamma based on f->gamma.
Richard M. Stallman <rms@gnu.org>
parents:
43452
diff
changeset
|
9037 screen_gamma = (f->gamma ? 1 / f->gamma / 0.45455 : 2.2); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9038 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9039 /* Tell the PNG lib to handle gamma correction for us. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9040 |
26293
65861669b393
(png_load) [PNG_READ_sRGB_SUPPORTED]: Put code using
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
9041 #if defined(PNG_READ_sRGB_SUPPORTED) || defined(PNG_WRITE_sRGB_SUPPORTED) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9042 if (png_get_sRGB (png_ptr, info_ptr, &intent)) |
43670
5505d571541b
(png_load): Set screen_gamma based on f->gamma.
Richard M. Stallman <rms@gnu.org>
parents:
43452
diff
changeset
|
9043 /* The libpng documentation says this is right in this case. */ |
5505d571541b
(png_load): Set screen_gamma based on f->gamma.
Richard M. Stallman <rms@gnu.org>
parents:
43452
diff
changeset
|
9044 png_set_gamma (png_ptr, screen_gamma, 0.45455); |
26293
65861669b393
(png_load) [PNG_READ_sRGB_SUPPORTED]: Put code using
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
9045 else |
65861669b393
(png_load) [PNG_READ_sRGB_SUPPORTED]: Put code using
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
9046 #endif |
65861669b393
(png_load) [PNG_READ_sRGB_SUPPORTED]: Put code using
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
9047 if (png_get_gAMA (png_ptr, info_ptr, &image_gamma)) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9048 /* Image contains gamma information. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9049 png_set_gamma (png_ptr, screen_gamma, image_gamma); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9050 else |
43670
5505d571541b
(png_load): Set screen_gamma based on f->gamma.
Richard M. Stallman <rms@gnu.org>
parents:
43452
diff
changeset
|
9051 /* Use the standard default for the image gamma. */ |
5505d571541b
(png_load): Set screen_gamma based on f->gamma.
Richard M. Stallman <rms@gnu.org>
parents:
43452
diff
changeset
|
9052 png_set_gamma (png_ptr, screen_gamma, 0.45455); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9053 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9054 /* Handle alpha channel by combining the image with a background |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9055 color. Do this only if a real alpha channel is supplied. For |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9056 simple transparency, we prefer a clipping mask. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9057 if (!transparent_p) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9058 { |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9059 png_color_16 *image_bg; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9060 Lisp_Object specified_bg |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9061 = image_spec_value (img->spec, QCbackground, NULL); |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9062 |
40279
1adbc1480e83
(png_load): Make sure SPECIFIED_BG is a string.
Miles Bader <miles@gnu.org>
parents:
40264
diff
changeset
|
9063 if (STRINGP (specified_bg)) |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9064 /* The user specified `:background', use that. */ |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9065 { |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9066 XColor color; |
40279
1adbc1480e83
(png_load): Make sure SPECIFIED_BG is a string.
Miles Bader <miles@gnu.org>
parents:
40264
diff
changeset
|
9067 if (x_defined_color (f, XSTRING (specified_bg)->data, &color, 0)) |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9068 { |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9069 png_color_16 user_bg; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9070 |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9071 bzero (&user_bg, sizeof user_bg); |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9072 user_bg.red = color.red; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9073 user_bg.green = color.green; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9074 user_bg.blue = color.blue; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9075 |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9076 png_set_background (png_ptr, &user_bg, |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9077 PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0); |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9078 } |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9079 } |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9080 else if (png_get_bKGD (png_ptr, info_ptr, &image_bg)) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9081 /* Image contains a background color with which to |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9082 combine the image. */ |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9083 png_set_background (png_ptr, image_bg, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9084 PNG_BACKGROUND_GAMMA_FILE, 1, 1.0); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9085 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9086 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9087 /* Image does not contain a background color with which |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9088 to combine the image data via an alpha channel. Use |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9089 the frame's background instead. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9090 XColor color; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9091 Colormap cmap; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9092 png_color_16 frame_background; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9093 |
27987
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
9094 cmap = FRAME_X_COLORMAP (f); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9095 color.pixel = FRAME_BACKGROUND_PIXEL (f); |
32606
78b4e9f31087
(x_to_xcolors, x_set_mouse_color, lookup_pixel_color)
Gerd Moellmann <gerd@gnu.org>
parents:
32549
diff
changeset
|
9096 x_query_color (f, &color); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9097 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9098 bzero (&frame_background, sizeof frame_background); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9099 frame_background.red = color.red; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9100 frame_background.green = color.green; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9101 frame_background.blue = color.blue; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9102 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9103 png_set_background (png_ptr, &frame_background, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9104 PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9105 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9106 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9107 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9108 /* Update info structure. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9109 png_read_update_info (png_ptr, info_ptr); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9110 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9111 /* Get number of channels. Valid values are 1 for grayscale images |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9112 and images with a palette, 2 for grayscale images with transparency |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9113 information (alpha channel), 3 for RGB images, and 4 for RGB |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9114 images with alpha channel, i.e. RGBA. If conversions above were |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9115 sufficient we should only have 3 or 4 channels here. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9116 channels = png_get_channels (png_ptr, info_ptr); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9117 xassert (channels == 3 || channels == 4); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9118 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9119 /* Number of bytes needed for one row of the image. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9120 row_bytes = png_get_rowbytes (png_ptr, info_ptr); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9121 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9122 /* Allocate memory for the image. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9123 pixels = (png_byte *) xmalloc (row_bytes * height * sizeof *pixels); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9124 rows = (png_byte **) xmalloc (height * sizeof *rows); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9125 for (i = 0; i < height; ++i) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9126 rows[i] = pixels + i * row_bytes; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9127 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9128 /* Read the entire image. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9129 png_read_image (png_ptr, rows); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9130 png_read_end (png_ptr, info_ptr); |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9131 if (fp) |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9132 { |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9133 fclose (fp); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9134 fp = NULL; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9135 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9136 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9137 /* Create the X image and pixmap. */ |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
9138 if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9139 &img->pixmap)) |
31686
577372d71de8
(lookup_image): Block input while loading the image so
Gerd Moellmann <gerd@gnu.org>
parents:
31651
diff
changeset
|
9140 goto error; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9141 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9142 /* Create an image and pixmap serving as mask if the PNG image |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9143 contains an alpha channel. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9144 if (channels == 4 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9145 && !transparent_p |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
9146 && !x_create_x_image_and_pixmap (f, width, height, 1, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9147 &mask_img, &img->mask)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9148 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9149 x_destroy_x_image (ximg); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9150 XFreePixmap (FRAME_X_DISPLAY (f), img->pixmap); |
31693
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
9151 img->pixmap = None; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9152 goto error; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9153 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9154 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9155 /* Fill the X image and mask from PNG data. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9156 init_color_table (); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9157 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9158 for (y = 0; y < height; ++y) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9159 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9160 png_byte *p = rows[y]; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9161 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9162 for (x = 0; x < width; ++x) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9163 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9164 unsigned r, g, b; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9165 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9166 r = *p++ << 8; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9167 g = *p++ << 8; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9168 b = *p++ << 8; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9169 XPutPixel (ximg, x, y, lookup_rgb_color (f, r, g, b)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9170 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9171 /* An alpha channel, aka mask channel, associates variable |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9172 transparency with an image. Where other image formats |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9173 support binary transparency---fully transparent or fully |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9174 opaque---PNG allows up to 254 levels of partial transparency. |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9175 The PNG library implements partial transparency by combining |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9176 the image with a specified background color. |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9177 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9178 I'm not sure how to handle this here nicely: because the |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9179 background on which the image is displayed may change, for |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9180 real alpha channel support, it would be necessary to create |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9181 a new image for each possible background. |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9182 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9183 What I'm doing now is that a mask is created if we have |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9184 boolean transparency information. Otherwise I'm using |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9185 the frame's background color to combine the image with. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9186 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9187 if (channels == 4) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9188 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9189 if (mask_img) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9190 XPutPixel (mask_img, x, y, *p > 0); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9191 ++p; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9192 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9193 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9194 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9195 |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9196 if (NILP (image_spec_value (img->spec, QCbackground, NULL))) |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9197 /* Set IMG's background color from the PNG image, unless the user |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9198 overrode it. */ |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9199 { |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9200 png_color_16 *bg; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9201 if (png_get_bKGD (png_ptr, info_ptr, &bg)) |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9202 { |
40279
1adbc1480e83
(png_load): Make sure SPECIFIED_BG is a string.
Miles Bader <miles@gnu.org>
parents:
40264
diff
changeset
|
9203 img->background = lookup_rgb_color (f, bg->red, bg->green, bg->blue); |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9204 img->background_valid = 1; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9205 } |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9206 } |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9207 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9208 /* Remember colors allocated for this image. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9209 img->colors = colors_in_color_table (&img->ncolors); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9210 free_color_table (); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9211 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9212 /* Clean up. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9213 png_destroy_read_struct (&png_ptr, &info_ptr, &end_info); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9214 xfree (rows); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9215 xfree (pixels); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9216 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9217 img->width = width; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9218 img->height = height; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9219 |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9220 /* Maybe fill in the background field while we have ximg handy. */ |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9221 IMAGE_BACKGROUND (img, f, ximg); |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9222 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9223 /* Put the image into the pixmap, then free the X image and its buffer. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9224 x_put_x_image (f, ximg, img->pixmap, width, height); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9225 x_destroy_x_image (ximg); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9226 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9227 /* Same for the mask. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9228 if (mask_img) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9229 { |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9230 /* Fill in the background_transparent field while we have the mask |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9231 handy. */ |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9232 image_background_transparent (img, f, mask_img); |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9233 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9234 x_put_x_image (f, mask_img, img->mask, img->width, img->height); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9235 x_destroy_x_image (mask_img); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9236 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9237 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9238 UNGCPRO; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9239 return 1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9240 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9241 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9242 #endif /* HAVE_PNG != 0 */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9243 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9244 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9245 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9246 /*********************************************************************** |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9247 JPEG |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9248 ***********************************************************************/ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9249 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9250 #if HAVE_JPEG |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9251 |
25390
4404ab9c802b
[HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents:
25363
diff
changeset
|
9252 /* Work around a warning about HAVE_STDLIB_H being redefined in |
4404ab9c802b
[HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents:
25363
diff
changeset
|
9253 jconfig.h. */ |
4404ab9c802b
[HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents:
25363
diff
changeset
|
9254 #ifdef HAVE_STDLIB_H |
4404ab9c802b
[HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents:
25363
diff
changeset
|
9255 #define HAVE_STDLIB_H_1 |
4404ab9c802b
[HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents:
25363
diff
changeset
|
9256 #undef HAVE_STDLIB_H |
4404ab9c802b
[HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents:
25363
diff
changeset
|
9257 #endif /* HAVE_STLIB_H */ |
4404ab9c802b
[HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents:
25363
diff
changeset
|
9258 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9259 #include <jpeglib.h> |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9260 #include <jerror.h> |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9261 #include <setjmp.h> |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9262 |
25390
4404ab9c802b
[HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents:
25363
diff
changeset
|
9263 #ifdef HAVE_STLIB_H_1 |
4404ab9c802b
[HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents:
25363
diff
changeset
|
9264 #define HAVE_STDLIB_H 1 |
4404ab9c802b
[HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents:
25363
diff
changeset
|
9265 #endif |
4404ab9c802b
[HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents:
25363
diff
changeset
|
9266 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9267 static int jpeg_image_p P_ ((Lisp_Object object)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9268 static int jpeg_load P_ ((struct frame *f, struct image *img)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9269 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9270 /* The symbol `jpeg' identifying images of this type. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9271 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9272 Lisp_Object Qjpeg; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9273 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9274 /* Indices of image specification fields in gs_format, below. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9275 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9276 enum jpeg_keyword_index |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9277 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9278 JPEG_TYPE, |
27053
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9279 JPEG_DATA, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9280 JPEG_FILE, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9281 JPEG_ASCENT, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9282 JPEG_MARGIN, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9283 JPEG_RELIEF, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9284 JPEG_ALGORITHM, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9285 JPEG_HEURISTIC_MASK, |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
9286 JPEG_MASK, |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9287 JPEG_BACKGROUND, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9288 JPEG_LAST |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9289 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9290 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9291 /* Vector of image_keyword structures describing the format |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9292 of valid user-defined image specifications. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9293 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9294 static struct image_keyword jpeg_format[JPEG_LAST] = |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9295 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9296 {":type", IMAGE_SYMBOL_VALUE, 1}, |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9297 {":data", IMAGE_STRING_VALUE, 0}, |
27053
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9298 {":file", IMAGE_STRING_VALUE, 0}, |
28787 | 9299 {":ascent", IMAGE_ASCENT_VALUE, 0}, |
35275
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
9300 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0}, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9301 {":relief", IMAGE_INTEGER_VALUE, 0}, |
35360
ba490eed8f66
(QCconversion): Replaces QCalgorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
35275
diff
changeset
|
9302 {":conversions", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
9303 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9304 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9305 {":background", IMAGE_STRING_OR_NIL_VALUE, 0} |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9306 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9307 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9308 /* Structure describing the image type `jpeg'. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9309 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9310 static struct image_type jpeg_type = |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9311 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9312 &Qjpeg, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9313 jpeg_image_p, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9314 jpeg_load, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9315 x_clear_image, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9316 NULL |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9317 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9318 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9319 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9320 /* Return non-zero if OBJECT is a valid JPEG image specification. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9321 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9322 static int |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9323 jpeg_image_p (object) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9324 Lisp_Object object; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9325 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9326 struct image_keyword fmt[JPEG_LAST]; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9327 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9328 bcopy (jpeg_format, fmt, sizeof fmt); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9329 |
28787 | 9330 if (!parse_image_spec (object, fmt, JPEG_LAST, Qjpeg)) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9331 return 0; |
27053
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9332 |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
9333 /* Must specify either the :data or :file keyword. */ |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
9334 return fmt[JPEG_FILE].count + fmt[JPEG_DATA].count == 1; |
27053
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9335 } |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9336 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9337 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9338 struct my_jpeg_error_mgr |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9339 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9340 struct jpeg_error_mgr pub; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9341 jmp_buf setjmp_buffer; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9342 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9343 |
28410
2812a333e746
(free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents:
28355
diff
changeset
|
9344 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9345 static void |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9346 my_error_exit (cinfo) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9347 j_common_ptr cinfo; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9348 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9349 struct my_jpeg_error_mgr *mgr = (struct my_jpeg_error_mgr *) cinfo->err; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9350 longjmp (mgr->setjmp_buffer, 1); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9351 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9352 |
28410
2812a333e746
(free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents:
28355
diff
changeset
|
9353 |
27053
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9354 /* Init source method for JPEG data source manager. Called by |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9355 jpeg_read_header() before any data is actually read. See |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9356 libjpeg.doc from the JPEG lib distribution. */ |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9357 |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9358 static void |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9359 our_init_source (cinfo) |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9360 j_decompress_ptr cinfo; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9361 { |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9362 } |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9363 |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9364 |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9365 /* Fill input buffer method for JPEG data source manager. Called |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9366 whenever more data is needed. We read the whole image in one step, |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9367 so this only adds a fake end of input marker at the end. */ |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9368 |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9369 static boolean |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9370 our_fill_input_buffer (cinfo) |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9371 j_decompress_ptr cinfo; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9372 { |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9373 /* Insert a fake EOI marker. */ |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9374 struct jpeg_source_mgr *src = cinfo->src; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9375 static JOCTET buffer[2]; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9376 |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9377 buffer[0] = (JOCTET) 0xFF; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9378 buffer[1] = (JOCTET) JPEG_EOI; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9379 |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9380 src->next_input_byte = buffer; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9381 src->bytes_in_buffer = 2; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9382 return TRUE; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9383 } |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9384 |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9385 |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9386 /* Method to skip over NUM_BYTES bytes in the image data. CINFO->src |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9387 is the JPEG data source manager. */ |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9388 |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9389 static void |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9390 our_skip_input_data (cinfo, num_bytes) |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9391 j_decompress_ptr cinfo; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9392 long num_bytes; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9393 { |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9394 struct jpeg_source_mgr *src = (struct jpeg_source_mgr *) cinfo->src; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9395 |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9396 if (src) |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9397 { |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9398 if (num_bytes > src->bytes_in_buffer) |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9399 ERREXIT (cinfo, JERR_INPUT_EOF); |
27053
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9400 |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9401 src->bytes_in_buffer -= num_bytes; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9402 src->next_input_byte += num_bytes; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9403 } |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9404 } |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9405 |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9406 |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9407 /* Method to terminate data source. Called by |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9408 jpeg_finish_decompress() after all data has been processed. */ |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9409 |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9410 static void |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9411 our_term_source (cinfo) |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9412 j_decompress_ptr cinfo; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9413 { |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9414 } |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9415 |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9416 |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9417 /* Set up the JPEG lib for reading an image from DATA which contains |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9418 LEN bytes. CINFO is the decompression info structure created for |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9419 reading the image. */ |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9420 |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9421 static void |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9422 jpeg_memory_src (cinfo, data, len) |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9423 j_decompress_ptr cinfo; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9424 JOCTET *data; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9425 unsigned int len; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9426 { |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9427 struct jpeg_source_mgr *src; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9428 |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9429 if (cinfo->src == NULL) |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9430 { |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9431 /* First time for this JPEG object? */ |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9432 cinfo->src = (struct jpeg_source_mgr *) |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9433 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9434 sizeof (struct jpeg_source_mgr)); |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9435 src = (struct jpeg_source_mgr *) cinfo->src; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9436 src->next_input_byte = data; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9437 } |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9438 |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9439 src = (struct jpeg_source_mgr *) cinfo->src; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9440 src->init_source = our_init_source; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9441 src->fill_input_buffer = our_fill_input_buffer; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9442 src->skip_input_data = our_skip_input_data; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9443 src->resync_to_restart = jpeg_resync_to_restart; /* Use default method. */ |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9444 src->term_source = our_term_source; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9445 src->bytes_in_buffer = len; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9446 src->next_input_byte = data; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9447 } |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9448 |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9449 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9450 /* Load image IMG for use on frame F. Patterned after example.c |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9451 from the JPEG lib. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9452 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9453 static int |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9454 jpeg_load (f, img) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9455 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9456 struct image *img; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9457 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9458 struct jpeg_decompress_struct cinfo; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9459 struct my_jpeg_error_mgr mgr; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9460 Lisp_Object file, specified_file; |
27053
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9461 Lisp_Object specified_data; |
31543
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
9462 FILE * volatile fp = NULL; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9463 JSAMPARRAY buffer; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9464 int row_stride, x, y; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9465 XImage *ximg = NULL; |
25715
feaedc03dbc8
(x_set_background_color): Remove unused variable(s).
Gerd Moellmann <gerd@gnu.org>
parents:
25691
diff
changeset
|
9466 int rc; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9467 unsigned long *colors; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9468 int width, height; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9469 struct gcpro gcpro1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9470 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9471 /* Open the JPEG file. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9472 specified_file = image_spec_value (img->spec, QCfile, NULL); |
27053
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9473 specified_data = image_spec_value (img->spec, QCdata, NULL); |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9474 file = Qnil; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9475 GCPRO1 (file); |
27053
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9476 |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9477 if (NILP (specified_data)) |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9478 { |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9479 file = x_find_image_file (specified_file); |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9480 if (!STRINGP (file)) |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9481 { |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
9482 image_error ("Cannot find image file `%s'", specified_file, Qnil); |
27053
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9483 UNGCPRO; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9484 return 0; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9485 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9486 |
27053
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9487 fp = fopen (XSTRING (file)->data, "r"); |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9488 if (fp == NULL) |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9489 { |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9490 image_error ("Cannot open `%s'", file, Qnil); |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9491 UNGCPRO; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9492 return 0; |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9493 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9494 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9495 |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9496 /* Customize libjpeg's error handling to call my_error_exit when an |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9497 error is detected. This function will perform a longjmp. */ |
29728
f0f1e1365670
fix jpeg error-handling setup
Ken Raeburn <raeburn@raeburn.org>
parents:
29617
diff
changeset
|
9498 cinfo.err = jpeg_std_error (&mgr.pub); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9499 mgr.pub.error_exit = my_error_exit; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9500 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9501 if ((rc = setjmp (mgr.setjmp_buffer)) != 0) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9502 { |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9503 if (rc == 1) |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9504 { |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9505 /* Called from my_error_exit. Display a JPEG error. */ |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9506 char buffer[JMSG_LENGTH_MAX]; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9507 cinfo.err->format_message ((j_common_ptr) &cinfo, buffer); |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
9508 image_error ("Error reading JPEG image `%s': %s", img->spec, |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9509 build_string (buffer)); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9510 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9511 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9512 /* Close the input file and destroy the JPEG object. */ |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9513 if (fp) |
31543
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
9514 fclose ((FILE *) fp); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9515 jpeg_destroy_decompress (&cinfo); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9516 |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9517 /* If we already have an XImage, free that. */ |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9518 x_destroy_x_image (ximg); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9519 |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9520 /* Free pixmap and colors. */ |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9521 x_clear_image (f, img); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9522 |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9523 UNGCPRO; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9524 return 0; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9525 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9526 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9527 /* Create the JPEG decompression object. Let it read from fp. |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9528 Read the JPEG image header. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9529 jpeg_create_decompress (&cinfo); |
27053
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9530 |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9531 if (NILP (specified_data)) |
31543
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
9532 jpeg_stdio_src (&cinfo, (FILE *) fp); |
27053
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9533 else |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9534 jpeg_memory_src (&cinfo, XSTRING (specified_data)->data, |
3995eec4287f
(enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents:
26980
diff
changeset
|
9535 STRING_BYTES (XSTRING (specified_data))); |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9536 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9537 jpeg_read_header (&cinfo, TRUE); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9538 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9539 /* Customize decompression so that color quantization will be used. |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9540 Start decompression. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9541 cinfo.quantize_colors = TRUE; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9542 jpeg_start_decompress (&cinfo); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9543 width = img->width = cinfo.output_width; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9544 height = img->height = cinfo.output_height; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9545 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9546 /* Create X image and pixmap. */ |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
9547 if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, &img->pixmap)) |
31686
577372d71de8
(lookup_image): Block input while loading the image so
Gerd Moellmann <gerd@gnu.org>
parents:
31651
diff
changeset
|
9548 longjmp (mgr.setjmp_buffer, 2); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9549 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9550 /* Allocate colors. When color quantization is used, |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9551 cinfo.actual_number_of_colors has been set with the number of |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9552 colors generated, and cinfo.colormap is a two-dimensional array |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9553 of color indices in the range 0..cinfo.actual_number_of_colors. |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9554 No more than 255 colors will be generated. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9555 { |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9556 int i, ir, ig, ib; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9557 |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9558 if (cinfo.out_color_components > 2) |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9559 ir = 0, ig = 1, ib = 2; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9560 else if (cinfo.out_color_components > 1) |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9561 ir = 0, ig = 1, ib = 0; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9562 else |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9563 ir = 0, ig = 0, ib = 0; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9564 |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9565 /* Use the color table mechanism because it handles colors that |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9566 cannot be allocated nicely. Such colors will be replaced with |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9567 a default color, and we don't have to care about which colors |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9568 can be freed safely, and which can't. */ |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9569 init_color_table (); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9570 colors = (unsigned long *) alloca (cinfo.actual_number_of_colors |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9571 * sizeof *colors); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9572 |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9573 for (i = 0; i < cinfo.actual_number_of_colors; ++i) |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9574 { |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9575 /* Multiply RGB values with 255 because X expects RGB values |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9576 in the range 0..0xffff. */ |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9577 int r = cinfo.colormap[ir][i] << 8; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9578 int g = cinfo.colormap[ig][i] << 8; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9579 int b = cinfo.colormap[ib][i] << 8; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9580 colors[i] = lookup_rgb_color (f, r, g, b); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9581 } |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9582 |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9583 /* Remember those colors actually allocated. */ |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9584 img->colors = colors_in_color_table (&img->ncolors); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9585 free_color_table (); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9586 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9587 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9588 /* Read pixels. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9589 row_stride = width * cinfo.output_components; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9590 buffer = cinfo.mem->alloc_sarray ((j_common_ptr) &cinfo, JPOOL_IMAGE, |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9591 row_stride, 1); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9592 for (y = 0; y < height; ++y) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9593 { |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9594 jpeg_read_scanlines (&cinfo, buffer, 1); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9595 for (x = 0; x < cinfo.output_width; ++x) |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9596 XPutPixel (ximg, x, y, colors[buffer[0][x]]); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9597 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9598 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9599 /* Clean up. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9600 jpeg_finish_decompress (&cinfo); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9601 jpeg_destroy_decompress (&cinfo); |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9602 if (fp) |
31543
9c5e42fa3ba5
(png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents:
30601
diff
changeset
|
9603 fclose ((FILE *) fp); |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9604 |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9605 /* Maybe fill in the background field while we have ximg handy. */ |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9606 if (NILP (image_spec_value (img->spec, QCbackground, NULL))) |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9607 IMAGE_BACKGROUND (img, f, ximg); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9608 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9609 /* Put the image into the pixmap. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9610 x_put_x_image (f, ximg, img->pixmap, width, height); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9611 x_destroy_x_image (ximg); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9612 UNGCPRO; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9613 return 1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9614 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9615 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9616 #endif /* HAVE_JPEG */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9617 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9618 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9619 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9620 /*********************************************************************** |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9621 TIFF |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9622 ***********************************************************************/ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9623 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9624 #if HAVE_TIFF |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9625 |
25335
2de1796b006b
remove tiff34 prefix from include.
Gerd Moellmann <gerd@gnu.org>
parents:
25320
diff
changeset
|
9626 #include <tiffio.h> |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9627 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9628 static int tiff_image_p P_ ((Lisp_Object object)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9629 static int tiff_load P_ ((struct frame *f, struct image *img)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9630 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9631 /* The symbol `tiff' identifying images of this type. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9632 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9633 Lisp_Object Qtiff; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9634 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9635 /* Indices of image specification fields in tiff_format, below. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9636 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9637 enum tiff_keyword_index |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9638 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9639 TIFF_TYPE, |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9640 TIFF_DATA, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9641 TIFF_FILE, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9642 TIFF_ASCENT, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9643 TIFF_MARGIN, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9644 TIFF_RELIEF, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9645 TIFF_ALGORITHM, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9646 TIFF_HEURISTIC_MASK, |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
9647 TIFF_MASK, |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9648 TIFF_BACKGROUND, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9649 TIFF_LAST |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9650 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9651 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9652 /* Vector of image_keyword structures describing the format |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9653 of valid user-defined image specifications. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9654 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9655 static struct image_keyword tiff_format[TIFF_LAST] = |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9656 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9657 {":type", IMAGE_SYMBOL_VALUE, 1}, |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9658 {":data", IMAGE_STRING_VALUE, 0}, |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9659 {":file", IMAGE_STRING_VALUE, 0}, |
28787 | 9660 {":ascent", IMAGE_ASCENT_VALUE, 0}, |
35275
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
9661 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0}, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9662 {":relief", IMAGE_INTEGER_VALUE, 0}, |
35360
ba490eed8f66
(QCconversion): Replaces QCalgorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
35275
diff
changeset
|
9663 {":conversions", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
9664 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9665 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9666 {":background", IMAGE_STRING_OR_NIL_VALUE, 0} |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9667 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9668 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9669 /* Structure describing the image type `tiff'. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9670 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9671 static struct image_type tiff_type = |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9672 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9673 &Qtiff, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9674 tiff_image_p, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9675 tiff_load, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9676 x_clear_image, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9677 NULL |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9678 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9679 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9680 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9681 /* Return non-zero if OBJECT is a valid TIFF image specification. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9682 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9683 static int |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9684 tiff_image_p (object) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9685 Lisp_Object object; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9686 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9687 struct image_keyword fmt[TIFF_LAST]; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9688 bcopy (tiff_format, fmt, sizeof fmt); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9689 |
28787 | 9690 if (!parse_image_spec (object, fmt, TIFF_LAST, Qtiff)) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9691 return 0; |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9692 |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
9693 /* Must specify either the :data or :file keyword. */ |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
9694 return fmt[TIFF_FILE].count + fmt[TIFF_DATA].count == 1; |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9695 } |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9696 |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9697 |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9698 /* Reading from a memory buffer for TIFF images Based on the PNG |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9699 memory source, but we have to provide a lot of extra functions. |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9700 Blah. |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9701 |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9702 We really only need to implement read and seek, but I am not |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9703 convinced that the TIFF library is smart enough not to destroy |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9704 itself if we only hand it the function pointers we need to |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9705 override. */ |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9706 |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9707 typedef struct |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9708 { |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9709 unsigned char *bytes; |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9710 size_t len; |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9711 int index; |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9712 } |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9713 tiff_memory_source; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9714 |
28410
2812a333e746
(free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents:
28355
diff
changeset
|
9715 |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9716 static size_t |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9717 tiff_read_from_memory (data, buf, size) |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9718 thandle_t data; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9719 tdata_t buf; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9720 tsize_t size; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9721 { |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9722 tiff_memory_source *src = (tiff_memory_source *) data; |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9723 |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9724 if (size > src->len - src->index) |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9725 return (size_t) -1; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9726 bcopy (src->bytes + src->index, buf, size); |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9727 src->index += size; |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9728 return size; |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9729 } |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9730 |
28410
2812a333e746
(free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents:
28355
diff
changeset
|
9731 |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9732 static size_t |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9733 tiff_write_from_memory (data, buf, size) |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9734 thandle_t data; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9735 tdata_t buf; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9736 tsize_t size; |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9737 { |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9738 return (size_t) -1; |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9739 } |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9740 |
28410
2812a333e746
(free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents:
28355
diff
changeset
|
9741 |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9742 static toff_t |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9743 tiff_seek_in_memory (data, off, whence) |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9744 thandle_t data; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9745 toff_t off; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9746 int whence; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9747 { |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9748 tiff_memory_source *src = (tiff_memory_source *) data; |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9749 int idx; |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9750 |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9751 switch (whence) |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9752 { |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9753 case SEEK_SET: /* Go from beginning of source. */ |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9754 idx = off; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9755 break; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9756 |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9757 case SEEK_END: /* Go from end of source. */ |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9758 idx = src->len + off; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9759 break; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9760 |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9761 case SEEK_CUR: /* Go from current position. */ |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9762 idx = src->index + off; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9763 break; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9764 |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9765 default: /* Invalid `whence'. */ |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9766 return -1; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9767 } |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9768 |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9769 if (idx > src->len || idx < 0) |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9770 return -1; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9771 |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9772 src->index = idx; |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9773 return src->index; |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9774 } |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9775 |
28410
2812a333e746
(free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents:
28355
diff
changeset
|
9776 |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9777 static int |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9778 tiff_close_memory (data) |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9779 thandle_t data; |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9780 { |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9781 /* NOOP */ |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9782 return 0; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9783 } |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9784 |
28410
2812a333e746
(free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents:
28355
diff
changeset
|
9785 |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9786 static int |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9787 tiff_mmap_memory (data, pbase, psize) |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9788 thandle_t data; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9789 tdata_t *pbase; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9790 toff_t *psize; |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9791 { |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9792 /* It is already _IN_ memory. */ |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9793 return 0; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9794 } |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9795 |
28410
2812a333e746
(free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents:
28355
diff
changeset
|
9796 |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9797 static void |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9798 tiff_unmap_memory (data, base, size) |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9799 thandle_t data; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9800 tdata_t base; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9801 toff_t size; |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9802 { |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9803 /* We don't need to do this. */ |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9804 } |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9805 |
28410
2812a333e746
(free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents:
28355
diff
changeset
|
9806 |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9807 static toff_t |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9808 tiff_size_of_memory (data) |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9809 thandle_t data; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9810 { |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9811 return ((tiff_memory_source *) data)->len; |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9812 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9813 |
28410
2812a333e746
(free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents:
28355
diff
changeset
|
9814 |
39591
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9815 static void |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9816 tiff_error_handler (title, format, ap) |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9817 const char *title, *format; |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9818 va_list ap; |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9819 { |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9820 char buf[512]; |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9821 int len; |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9822 |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9823 len = sprintf (buf, "TIFF error: %s ", title); |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9824 vsprintf (buf + len, format, ap); |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9825 add_to_log (buf, Qnil, Qnil); |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9826 } |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9827 |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9828 |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9829 static void |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9830 tiff_warning_handler (title, format, ap) |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9831 const char *title, *format; |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9832 va_list ap; |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9833 { |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9834 char buf[512]; |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9835 int len; |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9836 |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9837 len = sprintf (buf, "TIFF warning: %s ", title); |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9838 vsprintf (buf + len, format, ap); |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9839 add_to_log (buf, Qnil, Qnil); |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9840 } |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9841 |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9842 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9843 /* Load TIFF image IMG for use on frame F. Value is non-zero if |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9844 successful. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9845 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9846 static int |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9847 tiff_load (f, img) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9848 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9849 struct image *img; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9850 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9851 Lisp_Object file, specified_file; |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9852 Lisp_Object specified_data; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9853 TIFF *tiff; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9854 int width, height, x, y; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9855 uint32 *buf; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9856 int rc; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9857 XImage *ximg; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9858 struct gcpro gcpro1; |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9859 tiff_memory_source memsrc; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9860 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9861 specified_file = image_spec_value (img->spec, QCfile, NULL); |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9862 specified_data = image_spec_value (img->spec, QCdata, NULL); |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9863 file = Qnil; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9864 GCPRO1 (file); |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9865 |
39591
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9866 TIFFSetErrorHandler (tiff_error_handler); |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9867 TIFFSetWarningHandler (tiff_warning_handler); |
84263f0294b3
(tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents:
39442
diff
changeset
|
9868 |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9869 if (NILP (specified_data)) |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9870 { |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9871 /* Read from a file */ |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9872 file = x_find_image_file (specified_file); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9873 if (!STRINGP (file)) |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9874 { |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
9875 image_error ("Cannot find image file `%s'", file, Qnil); |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9876 UNGCPRO; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9877 return 0; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9878 } |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9879 |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9880 /* Try to open the image file. */ |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9881 tiff = TIFFOpen (XSTRING (file)->data, "r"); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9882 if (tiff == NULL) |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9883 { |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9884 image_error ("Cannot open `%s'", file, Qnil); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9885 UNGCPRO; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9886 return 0; |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9887 } |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9888 } |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9889 else |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9890 { |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9891 /* Memory source! */ |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9892 memsrc.bytes = XSTRING (specified_data)->data; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9893 memsrc.len = STRING_BYTES (XSTRING (specified_data)); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9894 memsrc.index = 0; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9895 |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9896 tiff = TIFFClientOpen ("memory_source", "r", &memsrc, |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9897 (TIFFReadWriteProc) tiff_read_from_memory, |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9898 (TIFFReadWriteProc) tiff_write_from_memory, |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9899 tiff_seek_in_memory, |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9900 tiff_close_memory, |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9901 tiff_size_of_memory, |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9902 tiff_mmap_memory, |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9903 tiff_unmap_memory); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9904 |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9905 if (!tiff) |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9906 { |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
9907 image_error ("Cannot open memory source for `%s'", img->spec, Qnil); |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9908 UNGCPRO; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9909 return 0; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9910 } |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
9911 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9912 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9913 /* Get width and height of the image, and allocate a raster buffer |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9914 of width x height 32-bit values. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9915 TIFFGetField (tiff, TIFFTAG_IMAGEWIDTH, &width); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9916 TIFFGetField (tiff, TIFFTAG_IMAGELENGTH, &height); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9917 buf = (uint32 *) xmalloc (width * height * sizeof *buf); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9918 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9919 rc = TIFFReadRGBAImage (tiff, width, height, buf, 0); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9920 TIFFClose (tiff); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9921 if (!rc) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9922 { |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
9923 image_error ("Error reading TIFF image `%s'", img->spec, Qnil); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9924 xfree (buf); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9925 UNGCPRO; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9926 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9927 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9928 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9929 /* Create the X image and pixmap. */ |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
9930 if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, &img->pixmap)) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9931 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9932 xfree (buf); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9933 UNGCPRO; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9934 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9935 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9936 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9937 /* Initialize the color table. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9938 init_color_table (); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9939 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9940 /* Process the pixel raster. Origin is in the lower-left corner. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9941 for (y = 0; y < height; ++y) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9942 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9943 uint32 *row = buf + y * width; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9944 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9945 for (x = 0; x < width; ++x) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9946 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9947 uint32 abgr = row[x]; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9948 int r = TIFFGetR (abgr) << 8; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9949 int g = TIFFGetG (abgr) << 8; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9950 int b = TIFFGetB (abgr) << 8; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9951 XPutPixel (ximg, x, height - 1 - y, lookup_rgb_color (f, r, g, b)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9952 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9953 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9954 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9955 /* Remember the colors allocated for the image. Free the color table. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9956 img->colors = colors_in_color_table (&img->ncolors); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9957 free_color_table (); |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9958 |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9959 img->width = width; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9960 img->height = height; |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9961 |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9962 /* Maybe fill in the background field while we have ximg handy. */ |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9963 if (NILP (image_spec_value (img->spec, QCbackground, NULL))) |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
9964 IMAGE_BACKGROUND (img, f, ximg); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9965 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9966 /* Put the image into the pixmap, then free the X image and its buffer. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9967 x_put_x_image (f, ximg, img->pixmap, width, height); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9968 x_destroy_x_image (ximg); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9969 xfree (buf); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9970 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9971 UNGCPRO; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9972 return 1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9973 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9974 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9975 #endif /* HAVE_TIFF != 0 */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9976 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9977 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9978 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9979 /*********************************************************************** |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9980 GIF |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9981 ***********************************************************************/ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9982 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9983 #if HAVE_GIF |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9984 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9985 #include <gif_lib.h> |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9986 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9987 static int gif_image_p P_ ((Lisp_Object object)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9988 static int gif_load P_ ((struct frame *f, struct image *img)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9989 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9990 /* The symbol `gif' identifying images of this type. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9991 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9992 Lisp_Object Qgif; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9993 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9994 /* Indices of image specification fields in gif_format, below. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9995 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9996 enum gif_keyword_index |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9997 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
9998 GIF_TYPE, |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
9999 GIF_DATA, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10000 GIF_FILE, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10001 GIF_ASCENT, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10002 GIF_MARGIN, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10003 GIF_RELIEF, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10004 GIF_ALGORITHM, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10005 GIF_HEURISTIC_MASK, |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
10006 GIF_MASK, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10007 GIF_IMAGE, |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
10008 GIF_BACKGROUND, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10009 GIF_LAST |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10010 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10011 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10012 /* Vector of image_keyword structures describing the format |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10013 of valid user-defined image specifications. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10014 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10015 static struct image_keyword gif_format[GIF_LAST] = |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10016 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10017 {":type", IMAGE_SYMBOL_VALUE, 1}, |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10018 {":data", IMAGE_STRING_VALUE, 0}, |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
10019 {":file", IMAGE_STRING_VALUE, 0}, |
28787 | 10020 {":ascent", IMAGE_ASCENT_VALUE, 0}, |
35275
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
10021 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0}, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10022 {":relief", IMAGE_INTEGER_VALUE, 0}, |
35360
ba490eed8f66
(QCconversion): Replaces QCalgorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
35275
diff
changeset
|
10023 {":conversion", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10024 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
10025 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
40279
1adbc1480e83
(png_load): Make sure SPECIFIED_BG is a string.
Miles Bader <miles@gnu.org>
parents:
40264
diff
changeset
|
10026 {":image", IMAGE_NON_NEGATIVE_INTEGER_VALUE, 0}, |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
10027 {":background", IMAGE_STRING_OR_NIL_VALUE, 0} |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10028 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10029 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10030 /* Structure describing the image type `gif'. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10031 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10032 static struct image_type gif_type = |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10033 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10034 &Qgif, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10035 gif_image_p, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10036 gif_load, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10037 x_clear_image, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10038 NULL |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10039 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10040 |
28410
2812a333e746
(free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents:
28355
diff
changeset
|
10041 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10042 /* Return non-zero if OBJECT is a valid GIF image specification. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10043 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10044 static int |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10045 gif_image_p (object) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10046 Lisp_Object object; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10047 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10048 struct image_keyword fmt[GIF_LAST]; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10049 bcopy (gif_format, fmt, sizeof fmt); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10050 |
28787 | 10051 if (!parse_image_spec (object, fmt, GIF_LAST, Qgif)) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10052 return 0; |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10053 |
27069
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
10054 /* Must specify either the :data or :file keyword. */ |
b2934c683b5e
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27066
diff
changeset
|
10055 return fmt[GIF_FILE].count + fmt[GIF_DATA].count == 1; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10056 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10057 |
28410
2812a333e746
(free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents:
28355
diff
changeset
|
10058 |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
10059 /* Reading a GIF image from memory |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
10060 Based on the PNG memory stuff to a certain extent. */ |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
10061 |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10062 typedef struct |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10063 { |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
10064 unsigned char *bytes; |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
10065 size_t len; |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
10066 int index; |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10067 } |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10068 gif_memory_source; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10069 |
28410
2812a333e746
(free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents:
28355
diff
changeset
|
10070 |
27153
31b7a2a8ea20
(current_gif_memory_src): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
27071
diff
changeset
|
10071 /* Make the current memory source available to gif_read_from_memory. |
31b7a2a8ea20
(current_gif_memory_src): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
27071
diff
changeset
|
10072 It's done this way because not all versions of libungif support |
31b7a2a8ea20
(current_gif_memory_src): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
27071
diff
changeset
|
10073 a UserData field in the GifFileType structure. */ |
31b7a2a8ea20
(current_gif_memory_src): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
27071
diff
changeset
|
10074 static gif_memory_source *current_gif_memory_src; |
31b7a2a8ea20
(current_gif_memory_src): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
27071
diff
changeset
|
10075 |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10076 static int |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10077 gif_read_from_memory (file, buf, len) |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10078 GifFileType *file; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10079 GifByteType *buf; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10080 int len; |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
10081 { |
27153
31b7a2a8ea20
(current_gif_memory_src): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
27071
diff
changeset
|
10082 gif_memory_source *src = current_gif_memory_src; |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
10083 |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10084 if (len > src->len - src->index) |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10085 return -1; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10086 |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10087 bcopy (src->bytes + src->index, buf, len); |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
10088 src->index += len; |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
10089 return len; |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
10090 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10091 |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10092 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10093 /* Load GIF image IMG for use on frame F. Value is non-zero if |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10094 successful. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10095 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10096 static int |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10097 gif_load (f, img) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10098 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10099 struct image *img; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10100 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10101 Lisp_Object file, specified_file; |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
10102 Lisp_Object specified_data; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10103 int rc, width, height, x, y, i; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10104 XImage *ximg; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10105 ColorMapObject *gif_color_map; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10106 unsigned long pixel_colors[256]; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10107 GifFileType *gif; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10108 struct gcpro gcpro1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10109 Lisp_Object image; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10110 int ino, image_left, image_top, image_width, image_height; |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
10111 gif_memory_source memsrc; |
27066
30697e7cb5a2
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27060
diff
changeset
|
10112 unsigned char *raster; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10113 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10114 specified_file = image_spec_value (img->spec, QCfile, NULL); |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
10115 specified_data = image_spec_value (img->spec, QCdata, NULL); |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10116 file = Qnil; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10117 GCPRO1 (file); |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
10118 |
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
10119 if (NILP (specified_data)) |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10120 { |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10121 file = x_find_image_file (specified_file); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10122 if (!STRINGP (file)) |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
10123 { |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
10124 image_error ("Cannot find image file `%s'", specified_file, Qnil); |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10125 UNGCPRO; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10126 return 0; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10127 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10128 |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10129 /* Open the GIF file. */ |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10130 gif = DGifOpenFileName (XSTRING (file)->data); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10131 if (gif == NULL) |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
10132 { |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10133 image_error ("Cannot open `%s'", file, Qnil); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10134 UNGCPRO; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10135 return 0; |
27058
209b24ba8ddf
Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents:
27053
diff
changeset
|
10136 } |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10137 } |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10138 else |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10139 { |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10140 /* Read from memory! */ |
27153
31b7a2a8ea20
(current_gif_memory_src): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
27071
diff
changeset
|
10141 current_gif_memory_src = &memsrc; |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10142 memsrc.bytes = XSTRING (specified_data)->data; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10143 memsrc.len = STRING_BYTES (XSTRING (specified_data)); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10144 memsrc.index = 0; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10145 |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10146 gif = DGifOpen(&memsrc, gif_read_from_memory); |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10147 if (!gif) |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10148 { |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
10149 image_error ("Cannot open memory source `%s'", img->spec, Qnil); |
27060
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10150 UNGCPRO; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10151 return 0; |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10152 } |
4960164efd1c
New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
27058
diff
changeset
|
10153 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10154 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10155 /* Read entire contents. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10156 rc = DGifSlurp (gif); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10157 if (rc == GIF_ERROR) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10158 { |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
10159 image_error ("Error reading `%s'", img->spec, Qnil); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10160 DGifCloseFile (gif); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10161 UNGCPRO; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10162 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10163 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10164 |
25620 | 10165 image = image_spec_value (img->spec, QCindex, NULL); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10166 ino = INTEGERP (image) ? XFASTINT (image) : 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10167 if (ino >= gif->ImageCount) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10168 { |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
10169 image_error ("Invalid image number `%s' in image `%s'", |
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
10170 image, img->spec); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10171 DGifCloseFile (gif); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10172 UNGCPRO; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10173 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10174 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10175 |
43426
f260f08997bc
(gif_load): Use correct width and height for GIF images.
Pavel Janík <Pavel@Janik.cz>
parents:
42894
diff
changeset
|
10176 width = img->width = max (gif->SWidth, gif->Image.Left + gif->Image.Width); |
f260f08997bc
(gif_load): Use correct width and height for GIF images.
Pavel Janík <Pavel@Janik.cz>
parents:
42894
diff
changeset
|
10177 height = img->height = max (gif->SHeight, gif->Image.Top + gif->Image.Height); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10178 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10179 /* Create the X image and pixmap. */ |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
10180 if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, &img->pixmap)) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10181 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10182 DGifCloseFile (gif); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10183 UNGCPRO; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10184 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10185 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10186 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10187 /* Allocate colors. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10188 gif_color_map = gif->SavedImages[ino].ImageDesc.ColorMap; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10189 if (!gif_color_map) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10190 gif_color_map = gif->SColorMap; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10191 init_color_table (); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10192 bzero (pixel_colors, sizeof pixel_colors); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10193 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10194 for (i = 0; i < gif_color_map->ColorCount; ++i) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10195 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10196 int r = gif_color_map->Colors[i].Red << 8; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10197 int g = gif_color_map->Colors[i].Green << 8; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10198 int b = gif_color_map->Colors[i].Blue << 8; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10199 pixel_colors[i] = lookup_rgb_color (f, r, g, b); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10200 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10201 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10202 img->colors = colors_in_color_table (&img->ncolors); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10203 free_color_table (); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10204 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10205 /* Clear the part of the screen image that are not covered by |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10206 the image from the GIF file. Full animated GIF support |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10207 requires more than can be done here (see the gif89 spec, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10208 disposal methods). Let's simply assume that the part |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10209 not covered by a sub-image is in the frame's background color. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10210 image_top = gif->SavedImages[ino].ImageDesc.Top; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10211 image_left = gif->SavedImages[ino].ImageDesc.Left; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10212 image_width = gif->SavedImages[ino].ImageDesc.Width; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10213 image_height = gif->SavedImages[ino].ImageDesc.Height; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10214 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10215 for (y = 0; y < image_top; ++y) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10216 for (x = 0; x < width; ++x) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10217 XPutPixel (ximg, x, y, FRAME_BACKGROUND_PIXEL (f)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10218 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10219 for (y = image_top + image_height; y < height; ++y) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10220 for (x = 0; x < width; ++x) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10221 XPutPixel (ximg, x, y, FRAME_BACKGROUND_PIXEL (f)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10222 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10223 for (y = image_top; y < image_top + image_height; ++y) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10224 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10225 for (x = 0; x < image_left; ++x) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10226 XPutPixel (ximg, x, y, FRAME_BACKGROUND_PIXEL (f)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10227 for (x = image_left + image_width; x < width; ++x) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10228 XPutPixel (ximg, x, y, FRAME_BACKGROUND_PIXEL (f)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10229 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10230 |
27066
30697e7cb5a2
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27060
diff
changeset
|
10231 /* Read the GIF image into the X image. We use a local variable |
30697e7cb5a2
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27060
diff
changeset
|
10232 `raster' here because RasterBits below is a char *, and invites |
30697e7cb5a2
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27060
diff
changeset
|
10233 problems with bytes >= 0x80. */ |
30697e7cb5a2
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27060
diff
changeset
|
10234 raster = (unsigned char *) gif->SavedImages[ino].RasterBits; |
30697e7cb5a2
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27060
diff
changeset
|
10235 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10236 if (gif->SavedImages[ino].ImageDesc.Interlace) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10237 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10238 static int interlace_start[] = {0, 4, 2, 1}; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10239 static int interlace_increment[] = {8, 8, 4, 2}; |
34976
05c36b1fa618
(x_display_info_for_name): Cast 0 to "char *" in the call
Eli Zaretskii <eliz@gnu.org>
parents:
34911
diff
changeset
|
10240 int pass; |
26032
6a349a18b1ad
(gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents:
25955
diff
changeset
|
10241 int row = interlace_start[0]; |
6a349a18b1ad
(gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents:
25955
diff
changeset
|
10242 |
6a349a18b1ad
(gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents:
25955
diff
changeset
|
10243 pass = 0; |
6a349a18b1ad
(gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents:
25955
diff
changeset
|
10244 |
6a349a18b1ad
(gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents:
25955
diff
changeset
|
10245 for (y = 0; y < image_height; y++) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10246 { |
26032
6a349a18b1ad
(gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents:
25955
diff
changeset
|
10247 if (row >= image_height) |
6a349a18b1ad
(gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents:
25955
diff
changeset
|
10248 { |
6a349a18b1ad
(gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents:
25955
diff
changeset
|
10249 row = interlace_start[++pass]; |
6a349a18b1ad
(gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents:
25955
diff
changeset
|
10250 while (row >= image_height) |
6a349a18b1ad
(gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents:
25955
diff
changeset
|
10251 row = interlace_start[++pass]; |
6a349a18b1ad
(gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents:
25955
diff
changeset
|
10252 } |
6a349a18b1ad
(gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents:
25955
diff
changeset
|
10253 |
6a349a18b1ad
(gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents:
25955
diff
changeset
|
10254 for (x = 0; x < image_width; x++) |
6a349a18b1ad
(gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents:
25955
diff
changeset
|
10255 { |
27066
30697e7cb5a2
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27060
diff
changeset
|
10256 int i = raster[(y * image_width) + x]; |
26032
6a349a18b1ad
(gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents:
25955
diff
changeset
|
10257 XPutPixel (ximg, x + image_left, row + image_top, |
6a349a18b1ad
(gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents:
25955
diff
changeset
|
10258 pixel_colors[i]); |
6a349a18b1ad
(gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents:
25955
diff
changeset
|
10259 } |
6a349a18b1ad
(gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents:
25955
diff
changeset
|
10260 |
6a349a18b1ad
(gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents:
25955
diff
changeset
|
10261 row += interlace_increment[pass]; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10262 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10263 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10264 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10265 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10266 for (y = 0; y < image_height; ++y) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10267 for (x = 0; x < image_width; ++x) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10268 { |
27066
30697e7cb5a2
(gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents:
27060
diff
changeset
|
10269 int i = raster[y * image_width + x]; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10270 XPutPixel (ximg, x + image_left, y + image_top, pixel_colors[i]); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10271 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10272 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10273 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10274 DGifCloseFile (gif); |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
10275 |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
10276 /* Maybe fill in the background field while we have ximg handy. */ |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
10277 if (NILP (image_spec_value (img->spec, QCbackground, NULL))) |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
10278 IMAGE_BACKGROUND (img, f, ximg); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10279 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10280 /* Put the image into the pixmap, then free the X image and its buffer. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10281 x_put_x_image (f, ximg, img->pixmap, width, height); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10282 x_destroy_x_image (ximg); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10283 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10284 UNGCPRO; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10285 return 1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10286 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10287 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10288 #endif /* HAVE_GIF != 0 */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10289 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10290 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10291 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10292 /*********************************************************************** |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10293 Ghostscript |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10294 ***********************************************************************/ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10295 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10296 static int gs_image_p P_ ((Lisp_Object object)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10297 static int gs_load P_ ((struct frame *f, struct image *img)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10298 static void gs_clear_image P_ ((struct frame *f, struct image *img)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10299 |
25628
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
10300 /* The symbol `postscript' identifying images of this type. */ |
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
10301 |
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
10302 Lisp_Object Qpostscript; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10303 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10304 /* Keyword symbols. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10305 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10306 Lisp_Object QCloader, QCbounding_box, QCpt_width, QCpt_height; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10307 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10308 /* Indices of image specification fields in gs_format, below. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10309 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10310 enum gs_keyword_index |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10311 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10312 GS_TYPE, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10313 GS_PT_WIDTH, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10314 GS_PT_HEIGHT, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10315 GS_FILE, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10316 GS_LOADER, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10317 GS_BOUNDING_BOX, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10318 GS_ASCENT, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10319 GS_MARGIN, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10320 GS_RELIEF, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10321 GS_ALGORITHM, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10322 GS_HEURISTIC_MASK, |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
10323 GS_MASK, |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
10324 GS_BACKGROUND, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10325 GS_LAST |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10326 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10327 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10328 /* Vector of image_keyword structures describing the format |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10329 of valid user-defined image specifications. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10330 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10331 static struct image_keyword gs_format[GS_LAST] = |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10332 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10333 {":type", IMAGE_SYMBOL_VALUE, 1}, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10334 {":pt-width", IMAGE_POSITIVE_INTEGER_VALUE, 1}, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10335 {":pt-height", IMAGE_POSITIVE_INTEGER_VALUE, 1}, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10336 {":file", IMAGE_STRING_VALUE, 1}, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10337 {":loader", IMAGE_FUNCTION_VALUE, 0}, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10338 {":bounding-box", IMAGE_DONT_CHECK_VALUE_TYPE, 1}, |
28787 | 10339 {":ascent", IMAGE_ASCENT_VALUE, 0}, |
35275
38e58f530a1a
(Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents:
35261
diff
changeset
|
10340 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0}, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10341 {":relief", IMAGE_INTEGER_VALUE, 0}, |
35360
ba490eed8f66
(QCconversion): Replaces QCalgorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
35275
diff
changeset
|
10342 {":conversion", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
10343 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
40264
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
10344 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
04766dd416bb
(image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents:
40204
diff
changeset
|
10345 {":background", IMAGE_STRING_OR_NIL_VALUE, 0} |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10346 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10347 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10348 /* Structure describing the image type `ghostscript'. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10349 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10350 static struct image_type gs_type = |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10351 { |
25628
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
10352 &Qpostscript, |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10353 gs_image_p, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10354 gs_load, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10355 gs_clear_image, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10356 NULL |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10357 }; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10358 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10359 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10360 /* Free X resources of Ghostscript image IMG which is used on frame F. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10361 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10362 static void |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10363 gs_clear_image (f, img) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10364 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10365 struct image *img; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10366 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10367 /* IMG->data.ptr_val may contain a recorded colormap. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10368 xfree (img->data.ptr_val); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10369 x_clear_image (f, img); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10370 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10371 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10372 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10373 /* Return non-zero if OBJECT is a valid Ghostscript image |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10374 specification. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10375 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10376 static int |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10377 gs_image_p (object) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10378 Lisp_Object object; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10379 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10380 struct image_keyword fmt[GS_LAST]; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10381 Lisp_Object tem; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10382 int i; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10383 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10384 bcopy (gs_format, fmt, sizeof fmt); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10385 |
28787 | 10386 if (!parse_image_spec (object, fmt, GS_LAST, Qpostscript)) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10387 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10388 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10389 /* Bounding box must be a list or vector containing 4 integers. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10390 tem = fmt[GS_BOUNDING_BOX].value; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10391 if (CONSP (tem)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10392 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10393 for (i = 0; i < 4; ++i, tem = XCDR (tem)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10394 if (!CONSP (tem) || !INTEGERP (XCAR (tem))) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10395 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10396 if (!NILP (tem)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10397 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10398 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10399 else if (VECTORP (tem)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10400 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10401 if (XVECTOR (tem)->size != 4) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10402 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10403 for (i = 0; i < 4; ++i) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10404 if (!INTEGERP (XVECTOR (tem)->contents[i])) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10405 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10406 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10407 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10408 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10409 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10410 return 1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10411 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10412 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10413 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10414 /* Load Ghostscript image IMG for use on frame F. Value is non-zero |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10415 if successful. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10416 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10417 static int |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10418 gs_load (f, img) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10419 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10420 struct image *img; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10421 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10422 char buffer[100]; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10423 Lisp_Object window_and_pixmap_id = Qnil, loader, pt_height, pt_width; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10424 struct gcpro gcpro1, gcpro2; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10425 Lisp_Object frame; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10426 double in_width, in_height; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10427 Lisp_Object pixel_colors = Qnil; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10428 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10429 /* Compute pixel size of pixmap needed from the given size in the |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10430 image specification. Sizes in the specification are in pt. 1 pt |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10431 = 1/72 in, xdpi and ydpi are stored in the frame's X display |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10432 info. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10433 pt_width = image_spec_value (img->spec, QCpt_width, NULL); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10434 in_width = XFASTINT (pt_width) / 72.0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10435 img->width = in_width * FRAME_X_DISPLAY_INFO (f)->resx; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10436 pt_height = image_spec_value (img->spec, QCpt_height, NULL); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10437 in_height = XFASTINT (pt_height) / 72.0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10438 img->height = in_height * FRAME_X_DISPLAY_INFO (f)->resy; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10439 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10440 /* Create the pixmap. */ |
31693
8e9fb2a048ac
(x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31688
diff
changeset
|
10441 xassert (img->pixmap == None); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10442 img->pixmap = XCreatePixmap (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10443 img->width, img->height, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10444 DefaultDepthOfScreen (FRAME_X_SCREEN (f))); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10445 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10446 if (!img->pixmap) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10447 { |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
10448 image_error ("Unable to create pixmap for `%s'", img->spec, Qnil); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10449 return 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10450 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10451 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10452 /* Call the loader to fill the pixmap. It returns a process object |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10453 if successful. We do not record_unwind_protect here because |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10454 other places in redisplay like calling window scroll functions |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10455 don't either. Let the Lisp loader use `unwind-protect' instead. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10456 GCPRO2 (window_and_pixmap_id, pixel_colors); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10457 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10458 sprintf (buffer, "%lu %lu", |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10459 (unsigned long) FRAME_X_WINDOW (f), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10460 (unsigned long) img->pixmap); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10461 window_and_pixmap_id = build_string (buffer); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10462 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10463 sprintf (buffer, "%lu %lu", |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10464 FRAME_FOREGROUND_PIXEL (f), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10465 FRAME_BACKGROUND_PIXEL (f)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10466 pixel_colors = build_string (buffer); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10467 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10468 XSETFRAME (frame, f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10469 loader = image_spec_value (img->spec, QCloader, NULL); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10470 if (NILP (loader)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10471 loader = intern ("gs-load-image"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10472 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10473 img->data.lisp_val = call6 (loader, frame, img->spec, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10474 make_number (img->width), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10475 make_number (img->height), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10476 window_and_pixmap_id, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10477 pixel_colors); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10478 UNGCPRO; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10479 return PROCESSP (img->data.lisp_val); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10480 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10481 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10482 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10483 /* Kill the Ghostscript process that was started to fill PIXMAP on |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10484 frame F. Called from XTread_socket when receiving an event |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10485 telling Emacs that Ghostscript has finished drawing. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10486 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10487 void |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10488 x_kill_gs_process (pixmap, f) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10489 Pixmap pixmap; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10490 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10491 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10492 struct image_cache *c = FRAME_X_IMAGE_CACHE (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10493 int class, i; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10494 struct image *img; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10495 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10496 /* Find the image containing PIXMAP. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10497 for (i = 0; i < c->used; ++i) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10498 if (c->images[i]->pixmap == pixmap) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10499 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10500 |
39442
0e0c30478fe3
(x_kill_gs_process): Recognize if someone has cleared
Gerd Moellmann <gerd@gnu.org>
parents:
39277
diff
changeset
|
10501 /* Should someone in between have cleared the image cache, for |
0e0c30478fe3
(x_kill_gs_process): Recognize if someone has cleared
Gerd Moellmann <gerd@gnu.org>
parents:
39277
diff
changeset
|
10502 instance, give up. */ |
0e0c30478fe3
(x_kill_gs_process): Recognize if someone has cleared
Gerd Moellmann <gerd@gnu.org>
parents:
39277
diff
changeset
|
10503 if (i == c->used) |
0e0c30478fe3
(x_kill_gs_process): Recognize if someone has cleared
Gerd Moellmann <gerd@gnu.org>
parents:
39277
diff
changeset
|
10504 return; |
0e0c30478fe3
(x_kill_gs_process): Recognize if someone has cleared
Gerd Moellmann <gerd@gnu.org>
parents:
39277
diff
changeset
|
10505 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10506 /* Kill the GS process. We should have found PIXMAP in the image |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10507 cache and its image should contain a process object. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10508 img = c->images[i]; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10509 xassert (PROCESSP (img->data.lisp_val)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10510 Fkill_process (img->data.lisp_val, Qnil); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10511 img->data.lisp_val = Qnil; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10512 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10513 /* On displays with a mutable colormap, figure out the colors |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10514 allocated for the image by looking at the pixels of an XImage for |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10515 img->pixmap. */ |
28144
71ebba3566ec
(X_I18N_INHIBITED): Don't define.
Gerd Moellmann <gerd@gnu.org>
parents:
28096
diff
changeset
|
10516 class = FRAME_X_VISUAL (f)->class; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10517 if (class != StaticColor && class != StaticGray && class != TrueColor) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10518 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10519 XImage *ximg; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10520 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10521 BLOCK_INPUT; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10522 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10523 /* Try to get an XImage for img->pixmep. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10524 ximg = XGetImage (FRAME_X_DISPLAY (f), img->pixmap, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10525 0, 0, img->width, img->height, ~0, ZPixmap); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10526 if (ximg) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10527 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10528 int x, y; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10529 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10530 /* Initialize the color table. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10531 init_color_table (); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10532 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10533 /* For each pixel of the image, look its color up in the |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10534 color table. After having done so, the color table will |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10535 contain an entry for each color used by the image. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10536 for (y = 0; y < img->height; ++y) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10537 for (x = 0; x < img->width; ++x) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10538 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10539 unsigned long pixel = XGetPixel (ximg, x, y); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10540 lookup_pixel_color (f, pixel); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10541 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10542 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10543 /* Record colors in the image. Free color table and XImage. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10544 img->colors = colors_in_color_table (&img->ncolors); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10545 free_color_table (); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10546 XDestroyImage (ximg); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10547 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10548 #if 0 /* This doesn't seem to be the case. If we free the colors |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10549 here, we get a BadAccess later in x_clear_image when |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10550 freeing the colors. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10551 /* We have allocated colors once, but Ghostscript has also |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10552 allocated colors on behalf of us. So, to get the |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10553 reference counts right, free them once. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10554 if (img->ncolors) |
27963
0e2c6e5cca6e
(x_clear_image, x_kill_gs_process): Use x_free_colors.
Gerd Moellmann <gerd@gnu.org>
parents:
27915
diff
changeset
|
10555 x_free_colors (f, img->colors, img->ncolors); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10556 #endif |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10557 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10558 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10559 image_error ("Cannot get X image of `%s'; colors will not be freed", |
27071
d647366b1464
(x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents:
27069
diff
changeset
|
10560 img->spec, Qnil); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10561 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10562 UNBLOCK_INPUT; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10563 } |
37173
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
10564 |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
10565 /* Now that we have the pixmap, compute mask and transform the |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
10566 image if requested. */ |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
10567 BLOCK_INPUT; |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
10568 postprocess_image (f, img); |
2a637d514525
(postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36869
diff
changeset
|
10569 UNBLOCK_INPUT; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10570 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10571 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10572 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10573 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10574 /*********************************************************************** |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10575 Window properties |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10576 ***********************************************************************/ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10577 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10578 DEFUN ("x-change-window-property", Fx_change_window_property, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10579 Sx_change_window_property, 2, 3, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
10580 doc: /* Change window property PROP to VALUE on the X window of FRAME. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
10581 PROP and VALUE must be strings. FRAME nil or omitted means use the |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
10582 selected frame. Value is VALUE. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
10583 (prop, value, frame) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10584 Lisp_Object frame, prop, value; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10585 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10586 struct frame *f = check_x_frame (frame); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10587 Atom prop_atom; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10588 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
10589 CHECK_STRING (prop); |
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
10590 CHECK_STRING (value); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10591 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10592 BLOCK_INPUT; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10593 prop_atom = XInternAtom (FRAME_X_DISPLAY (f), XSTRING (prop)->data, False); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10594 XChangeProperty (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10595 prop_atom, XA_STRING, 8, PropModeReplace, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10596 XSTRING (value)->data, XSTRING (value)->size); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10597 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10598 /* Make sure the property is set when we return. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10599 XFlush (FRAME_X_DISPLAY (f)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10600 UNBLOCK_INPUT; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10601 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10602 return value; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10603 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10604 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10605 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10606 DEFUN ("x-delete-window-property", Fx_delete_window_property, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10607 Sx_delete_window_property, 1, 2, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
10608 doc: /* Remove window property PROP from X window of FRAME. |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
10609 FRAME nil or omitted means use the selected frame. Value is PROP. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
10610 (prop, frame) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10611 Lisp_Object prop, frame; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10612 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10613 struct frame *f = check_x_frame (frame); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10614 Atom prop_atom; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10615 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
10616 CHECK_STRING (prop); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10617 BLOCK_INPUT; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10618 prop_atom = XInternAtom (FRAME_X_DISPLAY (f), XSTRING (prop)->data, False); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10619 XDeleteProperty (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), prop_atom); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10620 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10621 /* Make sure the property is removed when we return. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10622 XFlush (FRAME_X_DISPLAY (f)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10623 UNBLOCK_INPUT; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10624 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10625 return prop; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10626 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10627 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10628 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10629 DEFUN ("x-window-property", Fx_window_property, Sx_window_property, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10630 1, 2, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
10631 doc: /* Value is the value of window property PROP on FRAME. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
10632 If FRAME is nil or omitted, use the selected frame. Value is nil |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
10633 if FRAME hasn't a property with name PROP or if PROP has no string |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
10634 value. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
10635 (prop, frame) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10636 Lisp_Object prop, frame; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10637 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10638 struct frame *f = check_x_frame (frame); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10639 Atom prop_atom; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10640 int rc; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10641 Lisp_Object prop_value = Qnil; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10642 char *tmp_data = NULL; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10643 Atom actual_type; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10644 int actual_format; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10645 unsigned long actual_size, bytes_remaining; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10646 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
10647 CHECK_STRING (prop); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10648 BLOCK_INPUT; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10649 prop_atom = XInternAtom (FRAME_X_DISPLAY (f), XSTRING (prop)->data, False); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10650 rc = XGetWindowProperty (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10651 prop_atom, 0, 0, False, XA_STRING, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10652 &actual_type, &actual_format, &actual_size, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10653 &bytes_remaining, (unsigned char **) &tmp_data); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10654 if (rc == Success) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10655 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10656 int size = bytes_remaining; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10657 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10658 XFree (tmp_data); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10659 tmp_data = NULL; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10660 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10661 rc = XGetWindowProperty (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10662 prop_atom, 0, bytes_remaining, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10663 False, XA_STRING, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10664 &actual_type, &actual_format, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10665 &actual_size, &bytes_remaining, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10666 (unsigned char **) &tmp_data); |
39277
df33715cdcf8
(Fx_window_property): Handle case that property gets
Gerd Moellmann <gerd@gnu.org>
parents:
39159
diff
changeset
|
10667 if (rc == Success && tmp_data) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10668 prop_value = make_string (tmp_data, size); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10669 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10670 XFree (tmp_data); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10671 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10672 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10673 UNBLOCK_INPUT; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10674 return prop_value; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10675 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10676 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10677 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10678 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10679 /*********************************************************************** |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10680 Busy cursor |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10681 ***********************************************************************/ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10682 |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10683 /* If non-null, an asynchronous timer that, when it expires, displays |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10684 an hourglass cursor on all frames. */ |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10685 |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10686 static struct atimer *hourglass_atimer; |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10687 |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10688 /* Non-zero means an hourglass cursor is currently shown. */ |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10689 |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10690 static int hourglass_shown_p; |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10691 |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10692 /* Number of seconds to wait before displaying an hourglass cursor. */ |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10693 |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10694 static Lisp_Object Vhourglass_delay; |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10695 |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10696 /* Default number of seconds to wait before displaying an hourglass |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10697 cursor. */ |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10698 |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10699 #define DEFAULT_HOURGLASS_DELAY 1 |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10700 |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10701 /* Function prototypes. */ |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10702 |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10703 static void show_hourglass P_ ((struct atimer *)); |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10704 static void hide_hourglass P_ ((void)); |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10705 |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10706 |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10707 /* Cancel a currently active hourglass timer, and start a new one. */ |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10708 |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10709 void |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10710 start_hourglass () |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10711 { |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10712 EMACS_TIME delay; |
27915
e5b8e194d279
(start_busy_cursor): Allow floats for busy-cursor-delay.
Gerd Moellmann <gerd@gnu.org>
parents:
27902
diff
changeset
|
10713 int secs, usecs = 0; |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10714 |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10715 cancel_hourglass (); |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10716 |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10717 if (INTEGERP (Vhourglass_delay) |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10718 && XINT (Vhourglass_delay) > 0) |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10719 secs = XFASTINT (Vhourglass_delay); |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10720 else if (FLOATP (Vhourglass_delay) |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10721 && XFLOAT_DATA (Vhourglass_delay) > 0) |
27915
e5b8e194d279
(start_busy_cursor): Allow floats for busy-cursor-delay.
Gerd Moellmann <gerd@gnu.org>
parents:
27902
diff
changeset
|
10722 { |
e5b8e194d279
(start_busy_cursor): Allow floats for busy-cursor-delay.
Gerd Moellmann <gerd@gnu.org>
parents:
27902
diff
changeset
|
10723 Lisp_Object tem; |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10724 tem = Ftruncate (Vhourglass_delay, Qnil); |
27915
e5b8e194d279
(start_busy_cursor): Allow floats for busy-cursor-delay.
Gerd Moellmann <gerd@gnu.org>
parents:
27902
diff
changeset
|
10725 secs = XFASTINT (tem); |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10726 usecs = (XFLOAT_DATA (Vhourglass_delay) - secs) * 1000000; |
27915
e5b8e194d279
(start_busy_cursor): Allow floats for busy-cursor-delay.
Gerd Moellmann <gerd@gnu.org>
parents:
27902
diff
changeset
|
10727 } |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10728 else |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10729 secs = DEFAULT_HOURGLASS_DELAY; |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10730 |
27915
e5b8e194d279
(start_busy_cursor): Allow floats for busy-cursor-delay.
Gerd Moellmann <gerd@gnu.org>
parents:
27902
diff
changeset
|
10731 EMACS_SET_SECS_USECS (delay, secs, usecs); |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10732 hourglass_atimer = start_atimer (ATIMER_RELATIVE, delay, |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10733 show_hourglass, NULL); |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10734 } |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10735 |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10736 |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10737 /* Cancel the hourglass cursor timer if active, hide a busy cursor if |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10738 shown. */ |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10739 |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10740 void |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10741 cancel_hourglass () |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10742 { |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10743 if (hourglass_atimer) |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10744 { |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10745 cancel_atimer (hourglass_atimer); |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10746 hourglass_atimer = NULL; |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10747 } |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10748 |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10749 if (hourglass_shown_p) |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10750 hide_hourglass (); |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10751 } |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10752 |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10753 |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10754 /* Timer function of hourglass_atimer. TIMER is equal to |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10755 hourglass_atimer. |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10756 |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10757 Display an hourglass pointer on all frames by mapping the frames' |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10758 hourglass_window. Set the hourglass_p flag in the frames' |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10759 output_data.x structure to indicate that an hourglass cursor is |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10760 shown on the frames. */ |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10761 |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10762 static void |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10763 show_hourglass (timer) |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10764 struct atimer *timer; |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10765 { |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10766 /* The timer implementation will cancel this timer automatically |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10767 after this function has run. Set hourglass_atimer to null |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10768 so that we know the timer doesn't have to be canceled. */ |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10769 hourglass_atimer = NULL; |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10770 |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10771 if (!hourglass_shown_p) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10772 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10773 Lisp_Object rest, frame; |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10774 |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10775 BLOCK_INPUT; |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10776 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10777 FOR_EACH_FRAME (rest, frame) |
34662
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10778 { |
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10779 struct frame *f = XFRAME (frame); |
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10780 |
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10781 if (FRAME_LIVE_P (f) && FRAME_X_P (f) && FRAME_X_DISPLAY (f)) |
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10782 { |
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10783 Display *dpy = FRAME_X_DISPLAY (f); |
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10784 |
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10785 #ifdef USE_X_TOOLKIT |
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10786 if (f->output_data.x->widget) |
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10787 #else |
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10788 if (FRAME_OUTER_WINDOW (f)) |
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10789 #endif |
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10790 { |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10791 f->output_data.x->hourglass_p = 1; |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10792 |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10793 if (!f->output_data.x->hourglass_window) |
34662
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10794 { |
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10795 unsigned long mask = CWCursor; |
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10796 XSetWindowAttributes attrs; |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10797 |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10798 attrs.cursor = f->output_data.x->hourglass_cursor; |
34662
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10799 |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10800 f->output_data.x->hourglass_window |
34662
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10801 = XCreateWindow (dpy, FRAME_OUTER_WINDOW (f), |
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10802 0, 0, 32000, 32000, 0, 0, |
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10803 InputOnly, |
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10804 CopyFromParent, |
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10805 mask, &attrs); |
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10806 } |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10807 |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10808 XMapRaised (dpy, f->output_data.x->hourglass_window); |
34662
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10809 XFlush (dpy); |
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10810 } |
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10811 } |
d8005f5e0a23
(show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents:
34638
diff
changeset
|
10812 } |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10813 |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10814 hourglass_shown_p = 1; |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10815 UNBLOCK_INPUT; |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10816 } |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10817 } |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10818 |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10819 |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10820 /* Hide the hourglass pointer on all frames, if it is currently |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10821 shown. */ |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10822 |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10823 static void |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10824 hide_hourglass () |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10825 { |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10826 if (hourglass_shown_p) |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10827 { |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10828 Lisp_Object rest, frame; |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10829 |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10830 BLOCK_INPUT; |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10831 FOR_EACH_FRAME (rest, frame) |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10832 { |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10833 struct frame *f = XFRAME (frame); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10834 |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10835 if (FRAME_X_P (f) |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10836 /* Watch out for newly created frames. */ |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10837 && f->output_data.x->hourglass_window) |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10838 { |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10839 XUnmapWindow (FRAME_X_DISPLAY (f), |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10840 f->output_data.x->hourglass_window); |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10841 /* Sync here because XTread_socket looks at the |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10842 hourglass_p flag that is reset to zero below. */ |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10843 XSync (FRAME_X_DISPLAY (f), False); |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10844 f->output_data.x->hourglass_p = 0; |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10845 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10846 } |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10847 |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
10848 hourglass_shown_p = 0; |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10849 UNBLOCK_INPUT; |
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
10850 } |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10851 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10852 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10853 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10854 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10855 /*********************************************************************** |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10856 Tool tips |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10857 ***********************************************************************/ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10858 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10859 static Lisp_Object x_create_tip_frame P_ ((struct x_display_info *, |
36869
a9cbe17061fc
(x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents:
36594
diff
changeset
|
10860 Lisp_Object, Lisp_Object)); |
35067
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
10861 static void compute_tip_xy P_ ((struct frame *, Lisp_Object, Lisp_Object, |
37253
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
10862 Lisp_Object, int, int, int *, int *)); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10863 |
34450
5de00bff5de3
(Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents:
34321
diff
changeset
|
10864 /* The frame of a currently visible tooltip. */ |
5de00bff5de3
(Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents:
34321
diff
changeset
|
10865 |
5de00bff5de3
(Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents:
34321
diff
changeset
|
10866 Lisp_Object tip_frame; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10867 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10868 /* If non-nil, a timer started that hides the last tooltip when it |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10869 fires. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10870 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10871 Lisp_Object tip_timer; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10872 Window tip_window; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10873 |
35067
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
10874 /* If non-nil, a vector of 3 elements containing the last args |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
10875 with which x-show-tip was called. See there. */ |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
10876 |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
10877 Lisp_Object last_show_tip_args; |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
10878 |
38574
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
10879 /* Maximum size for tooltips; a cons (COLUMNS . ROWS). */ |
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
10880 |
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
10881 Lisp_Object Vx_max_tooltip_size; |
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
10882 |
34524
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
10883 |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
10884 static Lisp_Object |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
10885 unwind_create_tip_frame (frame) |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
10886 Lisp_Object frame; |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
10887 { |
34638
abb4510a89f6
(unwind_create_frame): Return t if frame was deleted.
Gerd Moellmann <gerd@gnu.org>
parents:
34598
diff
changeset
|
10888 Lisp_Object deleted; |
abb4510a89f6
(unwind_create_frame): Return t if frame was deleted.
Gerd Moellmann <gerd@gnu.org>
parents:
34598
diff
changeset
|
10889 |
abb4510a89f6
(unwind_create_frame): Return t if frame was deleted.
Gerd Moellmann <gerd@gnu.org>
parents:
34598
diff
changeset
|
10890 deleted = unwind_create_frame (frame); |
abb4510a89f6
(unwind_create_frame): Return t if frame was deleted.
Gerd Moellmann <gerd@gnu.org>
parents:
34598
diff
changeset
|
10891 if (EQ (deleted, Qt)) |
abb4510a89f6
(unwind_create_frame): Return t if frame was deleted.
Gerd Moellmann <gerd@gnu.org>
parents:
34598
diff
changeset
|
10892 { |
abb4510a89f6
(unwind_create_frame): Return t if frame was deleted.
Gerd Moellmann <gerd@gnu.org>
parents:
34598
diff
changeset
|
10893 tip_window = None; |
abb4510a89f6
(unwind_create_frame): Return t if frame was deleted.
Gerd Moellmann <gerd@gnu.org>
parents:
34598
diff
changeset
|
10894 tip_frame = Qnil; |
abb4510a89f6
(unwind_create_frame): Return t if frame was deleted.
Gerd Moellmann <gerd@gnu.org>
parents:
34598
diff
changeset
|
10895 } |
abb4510a89f6
(unwind_create_frame): Return t if frame was deleted.
Gerd Moellmann <gerd@gnu.org>
parents:
34598
diff
changeset
|
10896 |
abb4510a89f6
(unwind_create_frame): Return t if frame was deleted.
Gerd Moellmann <gerd@gnu.org>
parents:
34598
diff
changeset
|
10897 return deleted; |
34524
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
10898 } |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
10899 |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
10900 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10901 /* Create a frame for a tooltip on the display described by DPYINFO. |
36869
a9cbe17061fc
(x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents:
36594
diff
changeset
|
10902 PARMS is a list of frame parameters. TEXT is the string to |
a9cbe17061fc
(x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents:
36594
diff
changeset
|
10903 display in the tip frame. Value is the frame. |
34524
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
10904 |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
10905 Note that functions called here, esp. x_default_parameter can |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
10906 signal errors, for instance when a specified color name is |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
10907 undefined. We have to make sure that we're in a consistent state |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
10908 when this happens. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10909 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10910 static Lisp_Object |
36869
a9cbe17061fc
(x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents:
36594
diff
changeset
|
10911 x_create_tip_frame (dpyinfo, parms, text) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10912 struct x_display_info *dpyinfo; |
36869
a9cbe17061fc
(x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents:
36594
diff
changeset
|
10913 Lisp_Object parms, text; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10914 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10915 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10916 Lisp_Object frame, tem; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10917 Lisp_Object name; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10918 long window_prompting = 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10919 int width, height; |
34524
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
10920 int count = BINDING_STACK_SIZE (); |
25715
feaedc03dbc8
(x_set_background_color): Remove unused variable(s).
Gerd Moellmann <gerd@gnu.org>
parents:
25691
diff
changeset
|
10921 struct gcpro gcpro1, gcpro2, gcpro3; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10922 struct kboard *kb; |
35067
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
10923 int face_change_count_before = face_change_count; |
36869
a9cbe17061fc
(x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents:
36594
diff
changeset
|
10924 Lisp_Object buffer; |
a9cbe17061fc
(x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents:
36594
diff
changeset
|
10925 struct buffer *old_buffer; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10926 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10927 check_x (); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10928 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10929 /* Use this general default value to start with until we know if |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10930 this frame has a specified name. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10931 Vx_resource_name = Vinvocation_name; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10932 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10933 #ifdef MULTI_KBOARD |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10934 kb = dpyinfo->kboard; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10935 #else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10936 kb = &the_only_kboard; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10937 #endif |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10938 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10939 /* Get the name of the frame to use for resource lookup. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10940 name = x_get_arg (dpyinfo, parms, Qname, "name", "Name", RES_TYPE_STRING); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10941 if (!STRINGP (name) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10942 && !EQ (name, Qunbound) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10943 && !NILP (name)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10944 error ("Invalid frame name--not a string or nil"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10945 Vx_resource_name = name; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10946 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10947 frame = Qnil; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10948 GCPRO3 (parms, name, frame); |
34450
5de00bff5de3
(Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents:
34321
diff
changeset
|
10949 f = make_frame (1); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10950 XSETFRAME (frame, f); |
36869
a9cbe17061fc
(x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents:
36594
diff
changeset
|
10951 |
a9cbe17061fc
(x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents:
36594
diff
changeset
|
10952 buffer = Fget_buffer_create (build_string (" *tip*")); |
a9cbe17061fc
(x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents:
36594
diff
changeset
|
10953 Fset_window_buffer (FRAME_ROOT_WINDOW (f), buffer); |
a9cbe17061fc
(x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents:
36594
diff
changeset
|
10954 old_buffer = current_buffer; |
a9cbe17061fc
(x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents:
36594
diff
changeset
|
10955 set_buffer_internal_1 (XBUFFER (buffer)); |
38574
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
10956 current_buffer->truncate_lines = Qnil; |
36869
a9cbe17061fc
(x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents:
36594
diff
changeset
|
10957 Ferase_buffer (); |
a9cbe17061fc
(x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents:
36594
diff
changeset
|
10958 Finsert (1, &text); |
a9cbe17061fc
(x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents:
36594
diff
changeset
|
10959 set_buffer_internal_1 (old_buffer); |
a9cbe17061fc
(x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents:
36594
diff
changeset
|
10960 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10961 FRAME_CAN_HAVE_SCROLL_BARS (f) = 0; |
34598
afd90be3ed75
(x_create_tip_frame): Use unwind_create_tip_frame,
Gerd Moellmann <gerd@gnu.org>
parents:
34549
diff
changeset
|
10962 record_unwind_protect (unwind_create_tip_frame, frame); |
34524
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
10963 |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
10964 /* By setting the output method, we're essentially saying that |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
10965 the frame is live, as per FRAME_LIVE_P. If we get a signal |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
10966 from this point on, x_destroy_window might screw up reference |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
10967 counts etc. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10968 f->output_method = output_x_window; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10969 f->output_data.x = (struct x_output *) xmalloc (sizeof (struct x_output)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10970 bzero (f->output_data.x, sizeof (struct x_output)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10971 f->output_data.x->icon_bitmap = -1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10972 f->output_data.x->fontset = -1; |
29882
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
10973 f->output_data.x->scroll_bar_foreground_pixel = -1; |
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
10974 f->output_data.x->scroll_bar_background_pixel = -1; |
39619
1e12db2b25f0
(x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents:
39591
diff
changeset
|
10975 #ifdef USE_TOOLKIT_SCROLL_BARS |
1e12db2b25f0
(x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents:
39591
diff
changeset
|
10976 f->output_data.x->scroll_bar_top_shadow_pixel = -1; |
1e12db2b25f0
(x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents:
39591
diff
changeset
|
10977 f->output_data.x->scroll_bar_bottom_shadow_pixel = -1; |
1e12db2b25f0
(x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents:
39591
diff
changeset
|
10978 #endif /* USE_TOOLKIT_SCROLL_BARS */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10979 f->icon_name = Qnil; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10980 FRAME_X_DISPLAY_INFO (f) = dpyinfo; |
34895
53e52b3525bf
Use #if GLYPH_DEBUG instead of #ifdef GLYPH_DEBUG.
Gerd Moellmann <gerd@gnu.org>
parents:
34662
diff
changeset
|
10981 #if GLYPH_DEBUG |
34524
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
10982 image_cache_refcount = FRAME_X_IMAGE_CACHE (f)->refcount; |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
10983 dpyinfo_refcount = dpyinfo->reference_count; |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
10984 #endif /* GLYPH_DEBUG */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10985 #ifdef MULTI_KBOARD |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10986 FRAME_KBOARD (f) = kb; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10987 #endif |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10988 f->output_data.x->parent_desc = FRAME_X_DISPLAY_INFO (f)->root_window; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10989 f->output_data.x->explicit_parent = 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
10990 |
29882
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
10991 /* These colors will be set anyway later, but it's important |
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
10992 to get the color reference counts right, so initialize them! */ |
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
10993 { |
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
10994 Lisp_Object black; |
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
10995 struct gcpro gcpro1; |
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
10996 |
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
10997 black = build_string ("black"); |
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
10998 GCPRO1 (black); |
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
10999 f->output_data.x->foreground_pixel |
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
11000 = x_decode_color (f, black, BLACK_PIX_DEFAULT (f)); |
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
11001 f->output_data.x->background_pixel |
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
11002 = x_decode_color (f, black, BLACK_PIX_DEFAULT (f)); |
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
11003 f->output_data.x->cursor_pixel |
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
11004 = x_decode_color (f, black, BLACK_PIX_DEFAULT (f)); |
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
11005 f->output_data.x->cursor_foreground_pixel |
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
11006 = x_decode_color (f, black, BLACK_PIX_DEFAULT (f)); |
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
11007 f->output_data.x->border_pixel |
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
11008 = x_decode_color (f, black, BLACK_PIX_DEFAULT (f)); |
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
11009 f->output_data.x->mouse_pixel |
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
11010 = x_decode_color (f, black, BLACK_PIX_DEFAULT (f)); |
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
11011 UNGCPRO; |
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
11012 } |
c12b0f070cd1
(x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents:
29866
diff
changeset
|
11013 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11014 /* Set the name; the functions to which we pass f expect the name to |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11015 be set. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11016 if (EQ (name, Qunbound) || NILP (name)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11017 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11018 f->name = build_string (dpyinfo->x_id_name); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11019 f->explicit_name = 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11020 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11021 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11022 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11023 f->name = name; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11024 f->explicit_name = 1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11025 /* use the frame's title when getting resources for this frame. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11026 specbind (Qx_resource_name, name); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11027 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11028 |
34524
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
11029 /* Extract the window parameters from the supplied values that are |
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
11030 needed to determine window geometry. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11031 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11032 Lisp_Object font; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11033 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11034 font = x_get_arg (dpyinfo, parms, Qfont, "font", "Font", RES_TYPE_STRING); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11035 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11036 BLOCK_INPUT; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11037 /* First, try whatever font the caller has specified. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11038 if (STRINGP (font)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11039 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11040 tem = Fquery_fontset (font, Qnil); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11041 if (STRINGP (tem)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11042 font = x_new_fontset (f, XSTRING (tem)->data); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11043 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11044 font = x_new_font (f, XSTRING (font)->data); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11045 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11046 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11047 /* Try out a font which we hope has bold and italic variations. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11048 if (!STRINGP (font)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11049 font = x_new_font (f, "-adobe-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-1"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11050 if (!STRINGP (font)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11051 font = x_new_font (f, "-misc-fixed-medium-r-normal-*-*-140-*-*-c-*-iso8859-1"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11052 if (! STRINGP (font)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11053 font = x_new_font (f, "-*-*-medium-r-normal-*-*-140-*-*-c-*-iso8859-1"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11054 if (! STRINGP (font)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11055 /* This was formerly the first thing tried, but it finds too many fonts |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11056 and takes too long. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11057 font = x_new_font (f, "-*-*-medium-r-*-*-*-*-*-*-c-*-iso8859-1"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11058 /* If those didn't work, look for something which will at least work. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11059 if (! STRINGP (font)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11060 font = x_new_font (f, "-*-fixed-*-*-*-*-*-140-*-*-c-*-iso8859-1"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11061 UNBLOCK_INPUT; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11062 if (! STRINGP (font)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11063 font = build_string ("fixed"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11064 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11065 x_default_parameter (f, parms, Qfont, font, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11066 "font", "Font", RES_TYPE_STRING); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11067 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11068 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11069 x_default_parameter (f, parms, Qborder_width, make_number (2), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11070 "borderWidth", "BorderWidth", RES_TYPE_NUMBER); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11071 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11072 /* This defaults to 2 in order to match xterm. We recognize either |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11073 internalBorderWidth or internalBorder (which is what xterm calls |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11074 it). */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11075 if (NILP (Fassq (Qinternal_border_width, parms))) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11076 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11077 Lisp_Object value; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11078 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11079 value = x_get_arg (dpyinfo, parms, Qinternal_border_width, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11080 "internalBorder", "internalBorder", RES_TYPE_NUMBER); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11081 if (! EQ (value, Qunbound)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11082 parms = Fcons (Fcons (Qinternal_border_width, value), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11083 parms); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11084 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11085 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11086 x_default_parameter (f, parms, Qinternal_border_width, make_number (1), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11087 "internalBorderWidth", "internalBorderWidth", |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11088 RES_TYPE_NUMBER); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11089 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11090 /* Also do the stuff which must be set before the window exists. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11091 x_default_parameter (f, parms, Qforeground_color, build_string ("black"), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11092 "foreground", "Foreground", RES_TYPE_STRING); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11093 x_default_parameter (f, parms, Qbackground_color, build_string ("white"), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11094 "background", "Background", RES_TYPE_STRING); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11095 x_default_parameter (f, parms, Qmouse_color, build_string ("black"), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11096 "pointerColor", "Foreground", RES_TYPE_STRING); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11097 x_default_parameter (f, parms, Qcursor_color, build_string ("black"), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11098 "cursorColor", "Foreground", RES_TYPE_STRING); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11099 x_default_parameter (f, parms, Qborder_color, build_string ("black"), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11100 "borderColor", "BorderColor", RES_TYPE_STRING); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11101 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11102 /* Init faces before x_default_parameter is called for scroll-bar |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11103 parameters because that function calls x_set_scroll_bar_width, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11104 which calls change_frame_size, which calls Fset_window_buffer, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11105 which runs hooks, which call Fvertical_motion. At the end, we |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11106 end up in init_iterator with a null face cache, which should not |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11107 happen. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11108 init_frame_faces (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11109 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11110 f->output_data.x->parent_desc = FRAME_X_DISPLAY_INFO (f)->root_window; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11111 window_prompting = x_figure_window_size (f, parms); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11112 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11113 if (window_prompting & XNegative) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11114 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11115 if (window_prompting & YNegative) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11116 f->output_data.x->win_gravity = SouthEastGravity; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11117 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11118 f->output_data.x->win_gravity = NorthEastGravity; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11119 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11120 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11121 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11122 if (window_prompting & YNegative) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11123 f->output_data.x->win_gravity = SouthWestGravity; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11124 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11125 f->output_data.x->win_gravity = NorthWestGravity; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11126 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11127 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11128 f->output_data.x->size_hint_flags = window_prompting; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11129 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11130 XSetWindowAttributes attrs; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11131 unsigned long mask; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11132 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11133 BLOCK_INPUT; |
33657
e9cf01c7cda6
(x_create_tip_frame): Use CWSaveUnder only if the
Gerd Moellmann <gerd@gnu.org>
parents:
33601
diff
changeset
|
11134 mask = CWBackPixel | CWOverrideRedirect | CWEventMask; |
e9cf01c7cda6
(x_create_tip_frame): Use CWSaveUnder only if the
Gerd Moellmann <gerd@gnu.org>
parents:
33601
diff
changeset
|
11135 if (DoesSaveUnders (dpyinfo->screen)) |
e9cf01c7cda6
(x_create_tip_frame): Use CWSaveUnder only if the
Gerd Moellmann <gerd@gnu.org>
parents:
33601
diff
changeset
|
11136 mask |= CWSaveUnder; |
e9cf01c7cda6
(x_create_tip_frame): Use CWSaveUnder only if the
Gerd Moellmann <gerd@gnu.org>
parents:
33601
diff
changeset
|
11137 |
27987
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
11138 /* Window managers look at the override-redirect flag to determine |
ce9edc646960
(x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents:
27963
diff
changeset
|
11139 whether or net to give windows a decoration (Xlib spec, chapter |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11140 3.2.8). */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11141 attrs.override_redirect = True; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11142 attrs.save_under = True; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11143 attrs.background_pixel = FRAME_BACKGROUND_PIXEL (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11144 /* Arrange for getting MapNotify and UnmapNotify events. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11145 attrs.event_mask = StructureNotifyMask; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11146 tip_window |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11147 = FRAME_X_WINDOW (f) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11148 = XCreateWindow (FRAME_X_DISPLAY (f), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11149 FRAME_X_DISPLAY_INFO (f)->root_window, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11150 /* x, y, width, height */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11151 0, 0, 1, 1, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11152 /* Border. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11153 1, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11154 CopyFromParent, InputOutput, CopyFromParent, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11155 mask, &attrs); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11156 UNBLOCK_INPUT; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11157 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11158 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11159 x_make_gc (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11160 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11161 x_default_parameter (f, parms, Qauto_raise, Qnil, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11162 "autoRaise", "AutoRaiseLower", RES_TYPE_BOOLEAN); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11163 x_default_parameter (f, parms, Qauto_lower, Qnil, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11164 "autoLower", "AutoRaiseLower", RES_TYPE_BOOLEAN); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11165 x_default_parameter (f, parms, Qcursor_type, Qbox, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11166 "cursorType", "CursorType", RES_TYPE_SYMBOL); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11167 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11168 /* Dimensions, especially f->height, must be done via change_frame_size. |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11169 Change will not be effected unless different from the current |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11170 f->height. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11171 width = f->width; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11172 height = f->height; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11173 f->height = 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11174 SET_FRAME_WIDTH (f, 0); |
25363
bf0488244270
Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents:
25335
diff
changeset
|
11175 change_frame_size (f, height, width, 1, 0, 0); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11176 |
35042
3088c9745e92
(x_create_tip_frame): Call face-set-after-frame-default,
Gerd Moellmann <gerd@gnu.org>
parents:
34976
diff
changeset
|
11177 /* Set up faces after all frame parameters are known. This call |
35508
0bd627ce1af8
(x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents:
35402
diff
changeset
|
11178 also merges in face attributes specified for new frames. |
0bd627ce1af8
(x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents:
35402
diff
changeset
|
11179 |
0bd627ce1af8
(x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents:
35402
diff
changeset
|
11180 Frame parameters may be changed if .Xdefaults contains |
0bd627ce1af8
(x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents:
35402
diff
changeset
|
11181 specifications for the default font. For example, if there is an |
0bd627ce1af8
(x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents:
35402
diff
changeset
|
11182 `Emacs.default.attributeBackground: pink', the `background-color' |
0bd627ce1af8
(x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents:
35402
diff
changeset
|
11183 attribute of the frame get's set, which let's the internal border |
0bd627ce1af8
(x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents:
35402
diff
changeset
|
11184 of the tooltip frame appear in pink. Prevent this. */ |
0bd627ce1af8
(x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents:
35402
diff
changeset
|
11185 { |
0bd627ce1af8
(x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents:
35402
diff
changeset
|
11186 Lisp_Object bg = Fframe_parameter (frame, Qbackground_color); |
0bd627ce1af8
(x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents:
35402
diff
changeset
|
11187 |
0bd627ce1af8
(x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents:
35402
diff
changeset
|
11188 /* Set tip_frame here, so that */ |
0bd627ce1af8
(x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents:
35402
diff
changeset
|
11189 tip_frame = frame; |
0bd627ce1af8
(x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents:
35402
diff
changeset
|
11190 call1 (Qface_set_after_frame_default, frame); |
0bd627ce1af8
(x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents:
35402
diff
changeset
|
11191 |
0bd627ce1af8
(x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents:
35402
diff
changeset
|
11192 if (!EQ (bg, Fframe_parameter (frame, Qbackground_color))) |
0bd627ce1af8
(x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents:
35402
diff
changeset
|
11193 Fmodify_frame_parameters (frame, Fcons (Fcons (Qbackground_color, bg), |
0bd627ce1af8
(x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents:
35402
diff
changeset
|
11194 Qnil)); |
0bd627ce1af8
(x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents:
35402
diff
changeset
|
11195 } |
35042
3088c9745e92
(x_create_tip_frame): Call face-set-after-frame-default,
Gerd Moellmann <gerd@gnu.org>
parents:
34976
diff
changeset
|
11196 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11197 f->no_split = 1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11198 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11199 UNGCPRO; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11200 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11201 /* It is now ok to make the frame official even if we get an error |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11202 below. And the frame needs to be on Vframe_list or making it |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11203 visible won't work. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11204 Vframe_list = Fcons (frame, Vframe_list); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11205 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11206 /* Now that the frame is official, it counts as a reference to |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11207 its display. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11208 FRAME_X_DISPLAY_INFO (f)->reference_count++; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11209 |
35067
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11210 /* Setting attributes of faces of the tooltip frame from resources |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11211 and similar will increment face_change_count, which leads to the |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11212 clearing of all current matrices. Since this isn't necessary |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11213 here, avoid it by resetting face_change_count to the value it |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11214 had before we created the tip frame. */ |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11215 face_change_count = face_change_count_before; |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11216 |
34524
d4b8782e7f7b
(image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents:
34512
diff
changeset
|
11217 /* Discard the unwind_protect. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11218 return unbind_to (count, frame); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11219 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11220 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11221 |
35067
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11222 /* Compute where to display tip frame F. PARMS is the list of frame |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11223 parameters for F. DX and DY are specified offsets from the current |
37253
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11224 location of the mouse. WIDTH and HEIGHT are the width and height |
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11225 of the tooltip. Return coordinates relative to the root window of |
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11226 the display in *ROOT_X, and *ROOT_Y. */ |
35067
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11227 |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11228 static void |
37253
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11229 compute_tip_xy (f, parms, dx, dy, width, height, root_x, root_y) |
35067
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11230 struct frame *f; |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11231 Lisp_Object parms, dx, dy; |
37253
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11232 int width, height; |
35067
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11233 int *root_x, *root_y; |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11234 { |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11235 Lisp_Object left, top; |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11236 int win_x, win_y; |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11237 Window root, child; |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11238 unsigned pmask; |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11239 |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11240 /* User-specified position? */ |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11241 left = Fcdr (Fassq (Qleft, parms)); |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11242 top = Fcdr (Fassq (Qtop, parms)); |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11243 |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11244 /* Move the tooltip window where the mouse pointer is. Resize and |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11245 show it. */ |
41449
4416668397d7
(compute_tip_xy): Initialize root_x and root_y from
Jason Rumney <jasonr@gnu.org>
parents:
41132
diff
changeset
|
11246 if (!INTEGERP (left) || !INTEGERP (top)) |
37253
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11247 { |
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11248 BLOCK_INPUT; |
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11249 XQueryPointer (FRAME_X_DISPLAY (f), FRAME_X_DISPLAY_INFO (f)->root_window, |
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11250 &root, &child, root_x, root_y, &win_x, &win_y, &pmask); |
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11251 UNBLOCK_INPUT; |
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11252 } |
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11253 |
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11254 if (INTEGERP (top)) |
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11255 *root_y = XINT (top); |
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11256 else if (*root_y + XINT (dy) - height < 0) |
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11257 *root_y -= XINT (dy); |
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11258 else |
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11259 { |
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11260 *root_y -= height; |
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11261 *root_y += XINT (dy); |
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11262 } |
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11263 |
35067
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11264 if (INTEGERP (left)) |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11265 *root_x = XINT (left); |
42247
35dd407f04cd
(compute_tip_xy): If tooltip won't fit on the screen
Richard M. Stallman <rms@gnu.org>
parents:
42123
diff
changeset
|
11266 else if (*root_x + XINT (dx) + width <= FRAME_X_DISPLAY_INFO (f)->width) |
35dd407f04cd
(compute_tip_xy): If tooltip won't fit on the screen
Richard M. Stallman <rms@gnu.org>
parents:
42123
diff
changeset
|
11267 /* It fits to the right of the pointer. */ |
35dd407f04cd
(compute_tip_xy): If tooltip won't fit on the screen
Richard M. Stallman <rms@gnu.org>
parents:
42123
diff
changeset
|
11268 *root_x += XINT (dx); |
35dd407f04cd
(compute_tip_xy): If tooltip won't fit on the screen
Richard M. Stallman <rms@gnu.org>
parents:
42123
diff
changeset
|
11269 else if (width + XINT (dx) <= *root_x) |
35dd407f04cd
(compute_tip_xy): If tooltip won't fit on the screen
Richard M. Stallman <rms@gnu.org>
parents:
42123
diff
changeset
|
11270 /* It fits to the left of the pointer. */ |
37253
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11271 *root_x -= width + XINT (dx); |
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11272 else |
42247
35dd407f04cd
(compute_tip_xy): If tooltip won't fit on the screen
Richard M. Stallman <rms@gnu.org>
parents:
42123
diff
changeset
|
11273 /* Put it left-justified on the screen--it ought to fit that way. */ |
35dd407f04cd
(compute_tip_xy): If tooltip won't fit on the screen
Richard M. Stallman <rms@gnu.org>
parents:
42123
diff
changeset
|
11274 *root_x = 0; |
35067
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11275 } |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11276 |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11277 |
30224
b9f781194989
(Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents:
29947
diff
changeset
|
11278 DEFUN ("x-show-tip", Fx_show_tip, Sx_show_tip, 1, 6, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11279 doc: /* Show STRING in a "tooltip" window on frame FRAME. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11280 A tooltip window is a small X window displaying a string. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11281 |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11282 FRAME nil or omitted means use the selected frame. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11283 |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11284 PARMS is an optional list of frame parameters which can be used to |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11285 change the tooltip's appearance. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11286 |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11287 Automatically hide the tooltip after TIMEOUT seconds. TIMEOUT nil |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11288 means use the default timeout of 5 seconds. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11289 |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11290 If the list of frame parameters PARAMS contains a `left' parameters, |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11291 the tooltip is displayed at that x-position. Otherwise it is |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11292 displayed at the mouse position, with offset DX added (default is 5 if |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11293 DX isn't specified). Likewise for the y-position; if a `top' frame |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11294 parameter is specified, it determines the y-position of the tooltip |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11295 window, otherwise it is displayed at the mouse position, with offset |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11296 DY added (default is -10). |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11297 |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11298 A tooltip's maximum size is specified by `x-max-tooltip-size'. |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11299 Text larger than the specified size is clipped. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11300 (string, frame, parms, timeout, dx, dy) |
30224
b9f781194989
(Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents:
29947
diff
changeset
|
11301 Lisp_Object string, frame, parms, timeout, dx, dy; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11302 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11303 struct frame *f; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11304 struct window *w; |
35067
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11305 int root_x, root_y; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11306 struct buffer *old_buffer; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11307 struct text_pos pos; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11308 int i, width, height; |
26980
f0d5e95ccce9
(Fx_show_tip): Gcpro `timeout' too.
Dave Love <fx@gnu.org>
parents:
26978
diff
changeset
|
11309 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11310 int old_windows_or_buffers_changed = windows_or_buffers_changed; |
35067
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11311 int count = BINDING_STACK_SIZE (); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11312 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11313 specbind (Qinhibit_redisplay, Qt); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11314 |
26980
f0d5e95ccce9
(Fx_show_tip): Gcpro `timeout' too.
Dave Love <fx@gnu.org>
parents:
26978
diff
changeset
|
11315 GCPRO4 (string, parms, frame, timeout); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11316 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
11317 CHECK_STRING (string); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11318 f = check_x_frame (frame); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11319 if (NILP (timeout)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11320 timeout = make_number (5); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11321 else |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
11322 CHECK_NATNUM (timeout); |
30224
b9f781194989
(Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents:
29947
diff
changeset
|
11323 |
b9f781194989
(Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents:
29947
diff
changeset
|
11324 if (NILP (dx)) |
b9f781194989
(Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents:
29947
diff
changeset
|
11325 dx = make_number (5); |
b9f781194989
(Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents:
29947
diff
changeset
|
11326 else |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
11327 CHECK_NUMBER (dx); |
30224
b9f781194989
(Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents:
29947
diff
changeset
|
11328 |
b9f781194989
(Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents:
29947
diff
changeset
|
11329 if (NILP (dy)) |
33589
5832e9020859
(Fx_show_tip): Use default y-offset of -10 so that
Gerd Moellmann <gerd@gnu.org>
parents:
33443
diff
changeset
|
11330 dy = make_number (-10); |
30224
b9f781194989
(Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents:
29947
diff
changeset
|
11331 else |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
11332 CHECK_NUMBER (dy); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11333 |
35067
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11334 if (NILP (last_show_tip_args)) |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11335 last_show_tip_args = Fmake_vector (make_number (3), Qnil); |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11336 |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11337 if (!NILP (tip_frame)) |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11338 { |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11339 Lisp_Object last_string = AREF (last_show_tip_args, 0); |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11340 Lisp_Object last_frame = AREF (last_show_tip_args, 1); |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11341 Lisp_Object last_parms = AREF (last_show_tip_args, 2); |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11342 |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11343 if (EQ (frame, last_frame) |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11344 && !NILP (Fequal (last_string, string)) |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11345 && !NILP (Fequal (last_parms, parms))) |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11346 { |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11347 struct frame *f = XFRAME (tip_frame); |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11348 |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11349 /* Only DX and DY have changed. */ |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11350 if (!NILP (tip_timer)) |
35402
302fbe91e359
(Qcancel_timer): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
35360
diff
changeset
|
11351 { |
302fbe91e359
(Qcancel_timer): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
35360
diff
changeset
|
11352 Lisp_Object timer = tip_timer; |
302fbe91e359
(Qcancel_timer): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
35360
diff
changeset
|
11353 tip_timer = Qnil; |
302fbe91e359
(Qcancel_timer): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
35360
diff
changeset
|
11354 call1 (Qcancel_timer, timer); |
302fbe91e359
(Qcancel_timer): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
35360
diff
changeset
|
11355 } |
35067
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11356 |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11357 BLOCK_INPUT; |
37253
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11358 compute_tip_xy (f, parms, dx, dy, PIXEL_WIDTH (f), |
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11359 PIXEL_HEIGHT (f), &root_x, &root_y); |
35067
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11360 XMoveWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
37253
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11361 root_x, root_y); |
35067
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11362 UNBLOCK_INPUT; |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11363 goto start_timer; |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11364 } |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11365 } |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11366 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11367 /* Hide a previous tip, if any. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11368 Fx_hide_tip (); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11369 |
35067
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11370 ASET (last_show_tip_args, 0, string); |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11371 ASET (last_show_tip_args, 1, frame); |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11372 ASET (last_show_tip_args, 2, parms); |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11373 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11374 /* Add default values to frame parameters. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11375 if (NILP (Fassq (Qname, parms))) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11376 parms = Fcons (Fcons (Qname, build_string ("tooltip")), parms); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11377 if (NILP (Fassq (Qinternal_border_width, parms))) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11378 parms = Fcons (Fcons (Qinternal_border_width, make_number (3)), parms); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11379 if (NILP (Fassq (Qborder_width, parms))) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11380 parms = Fcons (Fcons (Qborder_width, make_number (1)), parms); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11381 if (NILP (Fassq (Qborder_color, parms))) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11382 parms = Fcons (Fcons (Qborder_color, build_string ("lightyellow")), parms); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11383 if (NILP (Fassq (Qbackground_color, parms))) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11384 parms = Fcons (Fcons (Qbackground_color, build_string ("lightyellow")), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11385 parms); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11386 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11387 /* Create a frame for the tooltip, and record it in the global |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11388 variable tip_frame. */ |
36869
a9cbe17061fc
(x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents:
36594
diff
changeset
|
11389 frame = x_create_tip_frame (FRAME_X_DISPLAY_INFO (f), parms, string); |
34450
5de00bff5de3
(Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents:
34321
diff
changeset
|
11390 f = XFRAME (frame); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11391 |
38574
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
11392 /* Set up the frame's root window. */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11393 w = XWINDOW (FRAME_ROOT_WINDOW (f)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11394 w->left = w->top = make_number (0); |
38574
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
11395 |
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
11396 if (CONSP (Vx_max_tooltip_size) |
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
11397 && INTEGERP (XCAR (Vx_max_tooltip_size)) |
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
11398 && XINT (XCAR (Vx_max_tooltip_size)) > 0 |
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
11399 && INTEGERP (XCDR (Vx_max_tooltip_size)) |
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
11400 && XINT (XCDR (Vx_max_tooltip_size)) > 0) |
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
11401 { |
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
11402 w->width = XCAR (Vx_max_tooltip_size); |
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
11403 w->height = XCDR (Vx_max_tooltip_size); |
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
11404 } |
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
11405 else |
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
11406 { |
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
11407 w->width = make_number (80); |
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
11408 w->height = make_number (40); |
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
11409 } |
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
11410 |
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
11411 f->window_width = XINT (w->width); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11412 adjust_glyphs (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11413 w->pseudo_window_p = 1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11414 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11415 /* Display the tooltip text in a temporary buffer. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11416 old_buffer = current_buffer; |
36869
a9cbe17061fc
(x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents:
36594
diff
changeset
|
11417 set_buffer_internal_1 (XBUFFER (XWINDOW (FRAME_ROOT_WINDOW (f))->buffer)); |
38574
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
11418 current_buffer->truncate_lines = Qnil; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11419 clear_glyph_matrix (w->desired_matrix); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11420 clear_glyph_matrix (w->current_matrix); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11421 SET_TEXT_POS (pos, BEGV, BEGV_BYTE); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11422 try_window (FRAME_ROOT_WINDOW (f), pos); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11423 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11424 /* Compute width and height of the tooltip. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11425 width = height = 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11426 for (i = 0; i < w->desired_matrix->nrows; ++i) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11427 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11428 struct glyph_row *row = &w->desired_matrix->rows[i]; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11429 struct glyph *last; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11430 int row_width; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11431 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11432 /* Stop at the first empty row at the end. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11433 if (!row->enabled_p || !row->displays_text_p) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11434 break; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11435 |
25082
ba6bf065b287
(x_create_tip_frame): Don't set bitmapIcon resource.
Gerd Moellmann <gerd@gnu.org>
parents:
25075
diff
changeset
|
11436 /* Let the row go over the full width of the frame. */ |
ba6bf065b287
(x_create_tip_frame): Don't set bitmapIcon resource.
Gerd Moellmann <gerd@gnu.org>
parents:
25075
diff
changeset
|
11437 row->full_width_p = 1; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11438 |
28410
2812a333e746
(free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents:
28355
diff
changeset
|
11439 /* There's a glyph at the end of rows that is used to place |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11440 the cursor there. Don't include the width of this glyph. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11441 if (row->used[TEXT_AREA]) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11442 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11443 last = &row->glyphs[TEXT_AREA][row->used[TEXT_AREA] - 1]; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11444 row_width = row->pixel_width - last->pixel_width; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11445 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11446 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11447 row_width = row->pixel_width; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11448 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11449 height += row->height; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11450 width = max (width, row_width); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11451 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11452 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11453 /* Add the frame's internal border to the width and height the X |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11454 window should have. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11455 height += 2 * FRAME_INTERNAL_BORDER_WIDTH (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11456 width += 2 * FRAME_INTERNAL_BORDER_WIDTH (f); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11457 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11458 /* Move the tooltip window where the mouse pointer is. Resize and |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11459 show it. */ |
37253
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11460 compute_tip_xy (f, parms, dx, dy, width, height, &root_x, &root_y); |
35067
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11461 |
30224
b9f781194989
(Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents:
29947
diff
changeset
|
11462 BLOCK_INPUT; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11463 XMoveResizeWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
37253
7c3a00620335
(compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents:
37210
diff
changeset
|
11464 root_x, root_y, width, height); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11465 XMapRaised (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f)); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11466 UNBLOCK_INPUT; |
35067
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11467 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11468 /* Draw into the window. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11469 w->must_be_updated_p = 1; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11470 update_single_window (w, 1); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11471 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11472 /* Restore original current buffer. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11473 set_buffer_internal_1 (old_buffer); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11474 windows_or_buffers_changed = old_windows_or_buffers_changed; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11475 |
35067
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
11476 start_timer: |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11477 /* Let the tip disappear after timeout seconds. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11478 tip_timer = call3 (intern ("run-at-time"), timeout, Qnil, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11479 intern ("x-hide-tip")); |
26954
e388d69f4269
(Fx_show_tip): Add missing UNGCPRO.
Dave Love <fx@gnu.org>
parents:
26876
diff
changeset
|
11480 |
e388d69f4269
(Fx_show_tip): Add missing UNGCPRO.
Dave Love <fx@gnu.org>
parents:
26876
diff
changeset
|
11481 UNGCPRO; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11482 return unbind_to (count, Qnil); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11483 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11484 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11485 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11486 DEFUN ("x-hide-tip", Fx_hide_tip, Sx_hide_tip, 0, 0, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11487 doc: /* Hide the current tooltip window, if there is any. |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11488 Value is t if tooltip was open, nil otherwise. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11489 () |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11490 { |
34450
5de00bff5de3
(Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents:
34321
diff
changeset
|
11491 int count; |
34476 | 11492 Lisp_Object deleted, frame, timer; |
11493 struct gcpro gcpro1, gcpro2; | |
34450
5de00bff5de3
(Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents:
34321
diff
changeset
|
11494 |
5de00bff5de3
(Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents:
34321
diff
changeset
|
11495 /* Return quickly if nothing to do. */ |
34476 | 11496 if (NILP (tip_timer) && NILP (tip_frame)) |
34450
5de00bff5de3
(Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents:
34321
diff
changeset
|
11497 return Qnil; |
5de00bff5de3
(Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents:
34321
diff
changeset
|
11498 |
34476 | 11499 frame = tip_frame; |
11500 timer = tip_timer; | |
11501 GCPRO2 (frame, timer); | |
11502 tip_frame = tip_timer = deleted = Qnil; | |
11503 | |
34450
5de00bff5de3
(Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents:
34321
diff
changeset
|
11504 count = BINDING_STACK_SIZE (); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11505 specbind (Qinhibit_redisplay, Qt); |
34450
5de00bff5de3
(Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents:
34321
diff
changeset
|
11506 specbind (Qinhibit_quit, Qt); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11507 |
34476 | 11508 if (!NILP (timer)) |
35402
302fbe91e359
(Qcancel_timer): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
35360
diff
changeset
|
11509 call1 (Qcancel_timer, timer); |
34476 | 11510 |
11511 if (FRAMEP (frame)) | |
11512 { | |
34450
5de00bff5de3
(Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents:
34321
diff
changeset
|
11513 Fdelete_frame (frame, Qnil); |
5de00bff5de3
(Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents:
34321
diff
changeset
|
11514 deleted = Qt; |
33713
91b2daa9479f
(Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents:
33657
diff
changeset
|
11515 |
91b2daa9479f
(Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents:
33657
diff
changeset
|
11516 #ifdef USE_LUCID |
91b2daa9479f
(Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents:
33657
diff
changeset
|
11517 /* Bloodcurdling hack alert: The Lucid menu bar widget's |
91b2daa9479f
(Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents:
33657
diff
changeset
|
11518 redisplay procedure is not called when a tip frame over menu |
91b2daa9479f
(Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents:
33657
diff
changeset
|
11519 items is unmapped. Redisplay the menu manually... */ |
91b2daa9479f
(Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents:
33657
diff
changeset
|
11520 { |
91b2daa9479f
(Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents:
33657
diff
changeset
|
11521 struct frame *f = SELECTED_FRAME (); |
91b2daa9479f
(Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents:
33657
diff
changeset
|
11522 Widget w = f->output_data.x->menubar_widget; |
91b2daa9479f
(Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents:
33657
diff
changeset
|
11523 extern void xlwmenu_redisplay P_ ((Widget)); |
39675 | 11524 |
33713
91b2daa9479f
(Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents:
33657
diff
changeset
|
11525 if (!DoesSaveUnders (FRAME_X_DISPLAY_INFO (f)->screen) |
36441
861557fe5809
(Fx_hide_tip): Don't use `None' with widgets; use
Gerd Moellmann <gerd@gnu.org>
parents:
36252
diff
changeset
|
11526 && w != NULL) |
33713
91b2daa9479f
(Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents:
33657
diff
changeset
|
11527 { |
91b2daa9479f
(Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents:
33657
diff
changeset
|
11528 BLOCK_INPUT; |
91b2daa9479f
(Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents:
33657
diff
changeset
|
11529 xlwmenu_redisplay (w); |
91b2daa9479f
(Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents:
33657
diff
changeset
|
11530 UNBLOCK_INPUT; |
91b2daa9479f
(Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents:
33657
diff
changeset
|
11531 } |
91b2daa9479f
(Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents:
33657
diff
changeset
|
11532 } |
91b2daa9479f
(Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents:
33657
diff
changeset
|
11533 #endif /* USE_LUCID */ |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11534 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11535 |
34476 | 11536 UNGCPRO; |
34450
5de00bff5de3
(Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents:
34321
diff
changeset
|
11537 return unbind_to (count, deleted); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11538 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11539 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11540 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11541 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11542 /*********************************************************************** |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11543 File selection dialog |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11544 ***********************************************************************/ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11545 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11546 #ifdef USE_MOTIF |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11547 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11548 /* Callback for "OK" and "Cancel" on file selection dialog. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11549 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11550 static void |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11551 file_dialog_cb (widget, client_data, call_data) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11552 Widget widget; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11553 XtPointer call_data, client_data; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11554 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11555 int *result = (int *) client_data; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11556 XmAnyCallbackStruct *cb = (XmAnyCallbackStruct *) call_data; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11557 *result = cb->reason; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11558 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11559 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11560 |
37556
171c0f4964a9
(file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37253
diff
changeset
|
11561 /* Callback for unmapping a file selection dialog. This is used to |
171c0f4964a9
(file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37253
diff
changeset
|
11562 capture the case where a dialog is closed via a window manager's |
171c0f4964a9
(file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37253
diff
changeset
|
11563 closer button, for example. Using a XmNdestroyCallback didn't work |
171c0f4964a9
(file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37253
diff
changeset
|
11564 in this case. */ |
171c0f4964a9
(file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37253
diff
changeset
|
11565 |
171c0f4964a9
(file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37253
diff
changeset
|
11566 static void |
171c0f4964a9
(file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37253
diff
changeset
|
11567 file_dialog_unmap_cb (widget, client_data, call_data) |
171c0f4964a9
(file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37253
diff
changeset
|
11568 Widget widget; |
171c0f4964a9
(file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37253
diff
changeset
|
11569 XtPointer call_data, client_data; |
171c0f4964a9
(file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37253
diff
changeset
|
11570 { |
171c0f4964a9
(file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37253
diff
changeset
|
11571 int *result = (int *) client_data; |
171c0f4964a9
(file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37253
diff
changeset
|
11572 *result = XmCR_CANCEL; |
171c0f4964a9
(file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37253
diff
changeset
|
11573 } |
171c0f4964a9
(file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37253
diff
changeset
|
11574 |
171c0f4964a9
(file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37253
diff
changeset
|
11575 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11576 DEFUN ("x-file-dialog", Fx_file_dialog, Sx_file_dialog, 2, 4, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11577 doc: /* Read file name, prompting with PROMPT in directory DIR. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11578 Use a file selection dialog. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11579 Select DEFAULT-FILENAME in the dialog's file selection box, if |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11580 specified. Don't let the user enter a file name in the file |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11581 selection dialog's entry field, if MUSTMATCH is non-nil. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11582 (prompt, dir, default_filename, mustmatch) |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11583 Lisp_Object prompt, dir, default_filename, mustmatch; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11584 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11585 int result; |
25679
8b09c5927f1c
(QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
11586 struct frame *f = SELECTED_FRAME (); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11587 Lisp_Object file = Qnil; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11588 Widget dialog, text, list, help; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11589 Arg al[10]; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11590 int ac = 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11591 extern XtAppContext Xt_app_con; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11592 XmString dir_xmstring, pattern_xmstring; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11593 int count = specpdl_ptr - specpdl; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11594 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11595 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11596 GCPRO5 (prompt, dir, default_filename, mustmatch, file); |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
11597 CHECK_STRING (prompt); |
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40608
diff
changeset
|
11598 CHECK_STRING (dir); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11599 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11600 /* Prevent redisplay. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11601 specbind (Qinhibit_redisplay, Qt); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11602 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11603 BLOCK_INPUT; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11604 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11605 /* Create the dialog with PROMPT as title, using DIR as initial |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11606 directory and using "*" as pattern. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11607 dir = Fexpand_file_name (dir, Qnil); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11608 dir_xmstring = XmStringCreateLocalized (XSTRING (dir)->data); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11609 pattern_xmstring = XmStringCreateLocalized ("*"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11610 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11611 XtSetArg (al[ac], XmNtitle, XSTRING (prompt)->data); ++ac; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11612 XtSetArg (al[ac], XmNdirectory, dir_xmstring); ++ac; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11613 XtSetArg (al[ac], XmNpattern, pattern_xmstring); ++ac; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11614 XtSetArg (al[ac], XmNresizePolicy, XmRESIZE_GROW); ++ac; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11615 XtSetArg (al[ac], XmNdialogStyle, XmDIALOG_APPLICATION_MODAL); ++ac; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11616 dialog = XmCreateFileSelectionDialog (f->output_data.x->widget, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11617 "fsb", al, ac); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11618 XmStringFree (dir_xmstring); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11619 XmStringFree (pattern_xmstring); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11620 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11621 /* Add callbacks for OK and Cancel. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11622 XtAddCallback (dialog, XmNokCallback, file_dialog_cb, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11623 (XtPointer) &result); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11624 XtAddCallback (dialog, XmNcancelCallback, file_dialog_cb, |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11625 (XtPointer) &result); |
37556
171c0f4964a9
(file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37253
diff
changeset
|
11626 XtAddCallback (dialog, XmNunmapCallback, file_dialog_unmap_cb, |
171c0f4964a9
(file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37253
diff
changeset
|
11627 (XtPointer) &result); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11628 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11629 /* Disable the help button since we can't display help. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11630 help = XmFileSelectionBoxGetChild (dialog, XmDIALOG_HELP_BUTTON); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11631 XtSetSensitive (help, False); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11632 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11633 /* Mark OK button as default. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11634 XtVaSetValues (XmFileSelectionBoxGetChild (dialog, XmDIALOG_OK_BUTTON), |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11635 XmNshowAsDefault, True, NULL); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11636 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11637 /* If MUSTMATCH is non-nil, disable the file entry field of the |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11638 dialog, so that the user must select a file from the files list |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11639 box. We can't remove it because we wouldn't have a way to get at |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11640 the result file name, then. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11641 text = XmFileSelectionBoxGetChild (dialog, XmDIALOG_TEXT); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11642 if (!NILP (mustmatch)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11643 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11644 Widget label; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11645 label = XmFileSelectionBoxGetChild (dialog, XmDIALOG_SELECTION_LABEL); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11646 XtSetSensitive (text, False); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11647 XtSetSensitive (label, False); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11648 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11649 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11650 /* Manage the dialog, so that list boxes get filled. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11651 XtManageChild (dialog); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11652 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11653 /* Select DEFAULT_FILENAME in the files list box. DEFAULT_FILENAME |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11654 must include the path for this to work. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11655 list = XmFileSelectionBoxGetChild (dialog, XmDIALOG_LIST); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11656 if (STRINGP (default_filename)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11657 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11658 XmString default_xmstring; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11659 int item_pos; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11660 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11661 default_xmstring |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11662 = XmStringCreateLocalized (XSTRING (default_filename)->data); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11663 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11664 if (!XmListItemExists (list, default_xmstring)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11665 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11666 /* Add a new item if DEFAULT_FILENAME is not in the list. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11667 XmListAddItem (list, default_xmstring, 0); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11668 item_pos = 0; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11669 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11670 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11671 item_pos = XmListItemPos (list, default_xmstring); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11672 XmStringFree (default_xmstring); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11673 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11674 /* Select the item and scroll it into view. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11675 XmListSelectPos (list, item_pos, True); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11676 XmListSetPos (list, item_pos); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11677 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11678 |
38548
58603538f196
(Fx_file_dialog): Block/unblock input while processing
Gerd Moellmann <gerd@gnu.org>
parents:
38542
diff
changeset
|
11679 /* Process events until the user presses Cancel or OK. Block |
58603538f196
(Fx_file_dialog): Block/unblock input while processing
Gerd Moellmann <gerd@gnu.org>
parents:
38542
diff
changeset
|
11680 and unblock input here so that we get a chance of processing |
58603538f196
(Fx_file_dialog): Block/unblock input while processing
Gerd Moellmann <gerd@gnu.org>
parents:
38542
diff
changeset
|
11681 expose events. */ |
58603538f196
(Fx_file_dialog): Block/unblock input while processing
Gerd Moellmann <gerd@gnu.org>
parents:
38542
diff
changeset
|
11682 UNBLOCK_INPUT; |
29866
c31c4d7dd0e0
(Fx_file_dialog) [HAVE_MOTIF_2_1]: Handle events
Gerd Moellmann <gerd@gnu.org>
parents:
29728
diff
changeset
|
11683 result = 0; |
37556
171c0f4964a9
(file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37253
diff
changeset
|
11684 while (result == 0) |
38548
58603538f196
(Fx_file_dialog): Block/unblock input while processing
Gerd Moellmann <gerd@gnu.org>
parents:
38542
diff
changeset
|
11685 { |
58603538f196
(Fx_file_dialog): Block/unblock input while processing
Gerd Moellmann <gerd@gnu.org>
parents:
38542
diff
changeset
|
11686 BLOCK_INPUT; |
58603538f196
(Fx_file_dialog): Block/unblock input while processing
Gerd Moellmann <gerd@gnu.org>
parents:
38542
diff
changeset
|
11687 XtAppProcessEvent (Xt_app_con, XtIMAll); |
58603538f196
(Fx_file_dialog): Block/unblock input while processing
Gerd Moellmann <gerd@gnu.org>
parents:
38542
diff
changeset
|
11688 UNBLOCK_INPUT; |
58603538f196
(Fx_file_dialog): Block/unblock input while processing
Gerd Moellmann <gerd@gnu.org>
parents:
38542
diff
changeset
|
11689 } |
58603538f196
(Fx_file_dialog): Block/unblock input while processing
Gerd Moellmann <gerd@gnu.org>
parents:
38542
diff
changeset
|
11690 BLOCK_INPUT; |
29866
c31c4d7dd0e0
(Fx_file_dialog) [HAVE_MOTIF_2_1]: Handle events
Gerd Moellmann <gerd@gnu.org>
parents:
29728
diff
changeset
|
11691 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11692 /* Get the result. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11693 if (result == XmCR_OK) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11694 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11695 XmString text; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11696 String data; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11697 |
30573
3bb43339533c
(Fx_file_dialog): Use NULL instead of 0 at the end of
Gerd Moellmann <gerd@gnu.org>
parents:
30383
diff
changeset
|
11698 XtVaGetValues (dialog, XmNtextString, &text, NULL); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11699 XmStringGetLtoR (text, XmFONTLIST_DEFAULT_TAG, &data); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11700 XmStringFree (text); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11701 file = build_string (data); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11702 XtFree (data); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11703 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11704 else |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11705 file = Qnil; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11706 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11707 /* Clean up. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11708 XtUnmanageChild (dialog); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11709 XtDestroyWidget (dialog); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11710 UNBLOCK_INPUT; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11711 UNGCPRO; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11712 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11713 /* Make "Cancel" equivalent to C-g. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11714 if (NILP (file)) |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11715 Fsignal (Qquit, Qnil); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11716 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11717 return unbind_to (count, file); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11718 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11719 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11720 #endif /* USE_MOTIF */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11721 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11722 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11723 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11724 /*********************************************************************** |
34549
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11725 Keyboard |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11726 ***********************************************************************/ |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11727 |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11728 #ifdef HAVE_XKBGETKEYBOARD |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11729 #include <X11/XKBlib.h> |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11730 #include <X11/keysym.h> |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11731 #endif |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11732 |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11733 DEFUN ("x-backspace-delete-keys-p", Fx_backspace_delete_keys_p, |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11734 Sx_backspace_delete_keys_p, 0, 1, 0, |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11735 doc: /* Check if both Backspace and Delete keys are on the keyboard of FRAME. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11736 FRAME nil means use the selected frame. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11737 Value is t if we know that both keys are present, and are mapped to the |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11738 usual X keysyms. */) |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11739 (frame) |
34549
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11740 Lisp_Object frame; |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11741 { |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11742 #ifdef HAVE_XKBGETKEYBOARD |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11743 XkbDescPtr kb; |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11744 struct frame *f = check_x_frame (frame); |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11745 Display *dpy = FRAME_X_DISPLAY (f); |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11746 Lisp_Object have_keys; |
34911
4cdfcac861d7
(Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents:
34895
diff
changeset
|
11747 int major, minor, op, event, error; |
34549
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11748 |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11749 BLOCK_INPUT; |
34911
4cdfcac861d7
(Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents:
34895
diff
changeset
|
11750 |
4cdfcac861d7
(Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents:
34895
diff
changeset
|
11751 /* Check library version in case we're dynamically linked. */ |
4cdfcac861d7
(Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents:
34895
diff
changeset
|
11752 major = XkbMajorVersion; |
4cdfcac861d7
(Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents:
34895
diff
changeset
|
11753 minor = XkbMinorVersion; |
4cdfcac861d7
(Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents:
34895
diff
changeset
|
11754 if (!XkbLibraryVersion (&major, &minor)) |
35191
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11755 { |
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11756 UNBLOCK_INPUT; |
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11757 return Qnil; |
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11758 } |
34911
4cdfcac861d7
(Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents:
34895
diff
changeset
|
11759 |
4cdfcac861d7
(Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents:
34895
diff
changeset
|
11760 /* Check that the server supports XKB. */ |
4cdfcac861d7
(Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents:
34895
diff
changeset
|
11761 major = XkbMajorVersion; |
4cdfcac861d7
(Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents:
34895
diff
changeset
|
11762 minor = XkbMinorVersion; |
4cdfcac861d7
(Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents:
34895
diff
changeset
|
11763 if (!XkbQueryExtension (dpy, &op, &event, &error, &major, &minor)) |
35191
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11764 { |
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11765 UNBLOCK_INPUT; |
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11766 return Qnil; |
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11767 } |
34911
4cdfcac861d7
(Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents:
34895
diff
changeset
|
11768 |
4cdfcac861d7
(Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents:
34895
diff
changeset
|
11769 have_keys = Qnil; |
35191
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11770 kb = XkbGetMap (dpy, XkbAllMapComponentsMask, XkbUseCoreKbd); |
34549
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11771 if (kb) |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11772 { |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11773 int delete_keycode = 0, backspace_keycode = 0, i; |
35191
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11774 |
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11775 if (XkbGetNames (dpy, XkbAllNamesMask, kb) == Success) |
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11776 { |
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11777 for (i = kb->min_key_code; |
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11778 (i < kb->max_key_code |
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11779 && (delete_keycode == 0 || backspace_keycode == 0)); |
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11780 ++i) |
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11781 { |
38574
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
11782 /* The XKB symbolic key names can be seen most easily in |
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
11783 the PS file generated by `xkbprint -label name |
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
11784 $DISPLAY'. */ |
35191
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11785 if (bcmp ("DELE", kb->names->keys[i].name, 4) == 0) |
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11786 delete_keycode = i; |
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11787 else if (bcmp ("BKSP", kb->names->keys[i].name, 4) == 0) |
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11788 backspace_keycode = i; |
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11789 } |
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11790 |
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11791 XkbFreeNames (kb, 0, True); |
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11792 } |
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11793 |
3de883052d49
(Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents:
35146
diff
changeset
|
11794 XkbFreeClientMap (kb, 0, True); |
34549
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11795 |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11796 if (delete_keycode |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11797 && backspace_keycode |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11798 && XKeysymToKeycode (dpy, XK_Delete) == delete_keycode |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11799 && XKeysymToKeycode (dpy, XK_BackSpace) == backspace_keycode) |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11800 have_keys = Qt; |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11801 } |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11802 UNBLOCK_INPUT; |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11803 return have_keys; |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11804 #else /* not HAVE_XKBGETKEYBOARD */ |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11805 return Qnil; |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11806 #endif /* not HAVE_XKBGETKEYBOARD */ |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11807 } |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11808 |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11809 |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11810 |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
11811 /*********************************************************************** |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11812 Initialization |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11813 ***********************************************************************/ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11814 |
21846 | 11815 void |
389 | 11816 syms_of_xfns () |
11817 { | |
11818 /* This is zero if not using X windows. */ | |
9653
cfc5e15e0baf
(x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents:
9580
diff
changeset
|
11819 x_in_use = 0; |
9014
7b805f79f3b4
(Fx_list_fonts): Use a cache stored in FRAME_X_SCREEN.
Richard M. Stallman <rms@gnu.org>
parents:
8961
diff
changeset
|
11820 |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11821 /* The section below is built by the lisp expression at the top of the file, |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11822 just above where these variables are declared. */ |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11823 /*&&& init symbols here &&&*/ |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11824 Qauto_raise = intern ("auto-raise"); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11825 staticpro (&Qauto_raise); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11826 Qauto_lower = intern ("auto-lower"); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11827 staticpro (&Qauto_lower); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1786
diff
changeset
|
11828 Qbar = intern ("bar"); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1786
diff
changeset
|
11829 staticpro (&Qbar); |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11830 Qborder_color = intern ("border-color"); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11831 staticpro (&Qborder_color); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11832 Qborder_width = intern ("border-width"); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11833 staticpro (&Qborder_width); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1786
diff
changeset
|
11834 Qbox = intern ("box"); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1786
diff
changeset
|
11835 staticpro (&Qbox); |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11836 Qcursor_color = intern ("cursor-color"); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11837 staticpro (&Qcursor_color); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1786
diff
changeset
|
11838 Qcursor_type = intern ("cursor-type"); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1786
diff
changeset
|
11839 staticpro (&Qcursor_type); |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11840 Qgeometry = intern ("geometry"); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11841 staticpro (&Qgeometry); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11842 Qicon_left = intern ("icon-left"); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11843 staticpro (&Qicon_left); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11844 Qicon_top = intern ("icon-top"); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11845 staticpro (&Qicon_top); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11846 Qicon_type = intern ("icon-type"); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11847 staticpro (&Qicon_type); |
12073 | 11848 Qicon_name = intern ("icon-name"); |
11849 staticpro (&Qicon_name); | |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11850 Qinternal_border_width = intern ("internal-border-width"); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11851 staticpro (&Qinternal_border_width); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11852 Qleft = intern ("left"); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11853 staticpro (&Qleft); |
16254
3e8b16badf3d
(Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents:
16156
diff
changeset
|
11854 Qright = intern ("right"); |
3e8b16badf3d
(Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents:
16156
diff
changeset
|
11855 staticpro (&Qright); |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11856 Qmouse_color = intern ("mouse-color"); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11857 staticpro (&Qmouse_color); |
1874
19cf50641d6c
* frame.c (Fframe_parameters): Report the `minibuffer' parameter of
Jim Blandy <jimb@redhat.com>
parents:
1821
diff
changeset
|
11858 Qnone = intern ("none"); |
19cf50641d6c
* frame.c (Fframe_parameters): Report the `minibuffer' parameter of
Jim Blandy <jimb@redhat.com>
parents:
1821
diff
changeset
|
11859 staticpro (&Qnone); |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11860 Qparent_id = intern ("parent-id"); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11861 staticpro (&Qparent_id); |
8942
a43f3b56ed47
(x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents:
8845
diff
changeset
|
11862 Qscroll_bar_width = intern ("scroll-bar-width"); |
a43f3b56ed47
(x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents:
8845
diff
changeset
|
11863 staticpro (&Qscroll_bar_width); |
2328
82e4fed9cdd6
* xfns.c (Fx_parse_geometry): Renamed from Fx_geometry.
Jim Blandy <jimb@redhat.com>
parents:
2295
diff
changeset
|
11864 Qsuppress_icon = intern ("suppress-icon"); |
82e4fed9cdd6
* xfns.c (Fx_parse_geometry): Renamed from Fx_geometry.
Jim Blandy <jimb@redhat.com>
parents:
2295
diff
changeset
|
11865 staticpro (&Qsuppress_icon); |
389 | 11866 Qundefined_color = intern ("undefined-color"); |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11867 staticpro (&Qundefined_color); |
1994
73ce9dd21093
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1932
diff
changeset
|
11868 Qvertical_scroll_bars = intern ("vertical-scroll-bars"); |
73ce9dd21093
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1932
diff
changeset
|
11869 staticpro (&Qvertical_scroll_bars); |
2294
9bce20507666
Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents:
2283
diff
changeset
|
11870 Qvisibility = intern ("visibility"); |
9bce20507666
Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents:
2283
diff
changeset
|
11871 staticpro (&Qvisibility); |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11872 Qwindow_id = intern ("window-id"); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11873 staticpro (&Qwindow_id); |
23793
3f48dda0547a
(Qouter_window_id): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
23411
diff
changeset
|
11874 Qouter_window_id = intern ("outer-window-id"); |
3f48dda0547a
(Qouter_window_id): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
23411
diff
changeset
|
11875 staticpro (&Qouter_window_id); |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11876 Qx_frame_parameter = intern ("x-frame-parameter"); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11877 staticpro (&Qx_frame_parameter); |
5671
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
11878 Qx_resource_name = intern ("x-resource-name"); |
5c597b8fbabe
Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5558
diff
changeset
|
11879 staticpro (&Qx_resource_name); |
7251
02cc4eee5928
(x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents:
7209
diff
changeset
|
11880 Quser_position = intern ("user-position"); |
02cc4eee5928
(x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents:
7209
diff
changeset
|
11881 staticpro (&Quser_position); |
02cc4eee5928
(x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents:
7209
diff
changeset
|
11882 Quser_size = intern ("user-size"); |
02cc4eee5928
(x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents:
7209
diff
changeset
|
11883 staticpro (&Quser_size); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11884 Qscroll_bar_foreground = intern ("scroll-bar-foreground"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11885 staticpro (&Qscroll_bar_foreground); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11886 Qscroll_bar_background = intern ("scroll-bar-background"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11887 staticpro (&Qscroll_bar_background); |
25528
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
11888 Qscreen_gamma = intern ("screen-gamma"); |
b5dd1bafd001
Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents:
25511
diff
changeset
|
11889 staticpro (&Qscreen_gamma); |
28690
01a3287bb747
(x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28597
diff
changeset
|
11890 Qline_spacing = intern ("line-spacing"); |
01a3287bb747
(x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28597
diff
changeset
|
11891 staticpro (&Qline_spacing); |
28787 | 11892 Qcenter = intern ("center"); |
11893 staticpro (&Qcenter); | |
30351
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
11894 Qcompound_text = intern ("compound-text"); |
a67fcab978bb
(x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents:
30224
diff
changeset
|
11895 staticpro (&Qcompound_text); |
35402
302fbe91e359
(Qcancel_timer): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
35360
diff
changeset
|
11896 Qcancel_timer = intern ("cancel-timer"); |
302fbe91e359
(Qcancel_timer): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
35360
diff
changeset
|
11897 staticpro (&Qcancel_timer); |
38183
3ef7b5a020b2
(Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37946
diff
changeset
|
11898 Qwait_for_wm = intern ("wait-for-wm"); |
3ef7b5a020b2
(Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37946
diff
changeset
|
11899 staticpro (&Qwait_for_wm); |
42721
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
11900 Qfullscreen = intern ("fullscreen"); |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
11901 staticpro (&Qfullscreen); |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
11902 Qfullwidth = intern ("fullwidth"); |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
11903 staticpro (&Qfullwidth); |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
11904 Qfullheight = intern ("fullheight"); |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
11905 staticpro (&Qfullheight); |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
11906 Qfullboth = intern ("fullboth"); |
462e0bbae65d
(Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents:
42247
diff
changeset
|
11907 staticpro (&Qfullboth); |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11908 /* This is the end of symbol initialization. */ |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11909 |
26876 | 11910 /* Text property `display' should be nonsticky by default. */ |
11911 Vtext_property_default_nonsticky | |
11912 = Fcons (Fcons (Qdisplay, Qt), Vtext_property_default_nonsticky); | |
11913 | |
11914 | |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11915 Qlaplace = intern ("laplace"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
11916 staticpro (&Qlaplace); |
31633
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
11917 Qemboss = intern ("emboss"); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
11918 staticpro (&Qemboss); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
11919 Qedge_detection = intern ("edge-detection"); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
11920 staticpro (&Qedge_detection); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
11921 Qheuristic = intern ("heuristic"); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
11922 staticpro (&Qheuristic); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
11923 QCmatrix = intern (":matrix"); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
11924 staticpro (&QCmatrix); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
11925 QCcolor_adjustment = intern (":color-adjustment"); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
11926 staticpro (&QCcolor_adjustment); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
11927 QCmask = intern (":mask"); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
11928 staticpro (&QCmask); |
829ed9cc42da
(QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents:
31543
diff
changeset
|
11929 |
18631
62bcc6aff013
(x_set_font): Funcall Qface_set_after_frame_default.
Richard M. Stallman <rms@gnu.org>
parents:
18612
diff
changeset
|
11930 Qface_set_after_frame_default = intern ("face-set-after-frame-default"); |
62bcc6aff013
(x_set_font): Funcall Qface_set_after_frame_default.
Richard M. Stallman <rms@gnu.org>
parents:
18612
diff
changeset
|
11931 staticpro (&Qface_set_after_frame_default); |
62bcc6aff013
(x_set_font): Funcall Qface_set_after_frame_default.
Richard M. Stallman <rms@gnu.org>
parents:
18612
diff
changeset
|
11932 |
389 | 11933 Fput (Qundefined_color, Qerror_conditions, |
11934 Fcons (Qundefined_color, Fcons (Qerror, Qnil))); | |
11935 Fput (Qundefined_color, Qerror_message, | |
11936 build_string ("Undefined color")); | |
11937 | |
974
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11938 init_x_parm_symbols (); |
4f88a1b78a46
* xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents:
833
diff
changeset
|
11939 |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11940 DEFVAR_BOOL ("cross-disabled-images", &cross_disabled_images, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11941 doc: /* Non-nil means always draw a cross over disabled images. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11942 Disabled images are those having an `:conversion disabled' property. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11943 A cross is always drawn on black & white displays. */); |
31651
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
11944 cross_disabled_images = 0; |
aef83f9e7dac
(lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
31637
diff
changeset
|
11945 |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11946 DEFVAR_LISP ("x-bitmap-file-path", &Vx_bitmap_file_path, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11947 doc: /* List of directories to search for bitmap files for X. */); |
12036
035d4ee6cc80
(syms_of_xfns): Allow PATH_BITMAPS to be a colon-separated list.
Karl Heuer <kwzh@gnu.org>
parents:
12019
diff
changeset
|
11948 Vx_bitmap_file_path = decode_env_path ((char *) 0, PATH_BITMAPS); |
9563 | 11949 |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11950 DEFVAR_LISP ("x-pointer-shape", &Vx_pointer_shape, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11951 doc: /* The shape of the pointer when over text. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11952 Changing the value does not affect existing frames |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11953 unless you set the mouse color. */); |
389 | 11954 Vx_pointer_shape = Qnil; |
11955 | |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11956 DEFVAR_LISP ("x-resource-name", &Vx_resource_name, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11957 doc: /* The name Emacs uses to look up X resources. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11958 `x-get-resource' uses this as the first component of the instance name |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11959 when requesting resource values. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11960 Emacs initially sets `x-resource-name' to the name under which Emacs |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11961 was invoked, or to the value specified with the `-name' or `-rn' |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11962 switches, if present. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11963 |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11964 It may be useful to bind this variable locally around a call |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11965 to `x-get-resource'. See also the variable `x-resource-class'. */); |
4146
0c681748d0ce
* xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents:
3923
diff
changeset
|
11966 Vx_resource_name = Qnil; |
3170
647229114f47
* xfns.c: Make resource manager work correctly even when
Jim Blandy <jimb@redhat.com>
parents:
3141
diff
changeset
|
11967 |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11968 DEFVAR_LISP ("x-resource-class", &Vx_resource_class, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11969 doc: /* The class Emacs uses to look up X resources. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11970 `x-get-resource' uses this as the first component of the instance class |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11971 when requesting resource values. |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11972 |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11973 Emacs initially sets `x-resource-class' to "Emacs". |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11974 |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11975 Setting this variable permanently is not a reasonable thing to do, |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11976 but binding this variable locally around a call to `x-get-resource' |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11977 is a reasonable practice. See also the variable `x-resource-name'. */); |
16966
df9f838f255a
(Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16732
diff
changeset
|
11978 Vx_resource_class = build_string (EMACS_CLASS); |
df9f838f255a
(Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16732
diff
changeset
|
11979 |
7683
be3423efbdce
(Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents:
7599
diff
changeset
|
11980 #if 0 /* This doesn't really do anything. */ |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11981 DEFVAR_LISP ("x-nontext-pointer-shape", &Vx_nontext_pointer_shape, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11982 doc: /* The shape of the pointer when not over text. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11983 This variable takes effect when you create a new frame |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11984 or when you set the mouse color. */); |
2936
f9956cdb0d1d
(syms_of_xfns): Don't make Lisp vars
Richard M. Stallman <rms@gnu.org>
parents:
2885
diff
changeset
|
11985 #endif |
389 | 11986 Vx_nontext_pointer_shape = Qnil; |
11987 | |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11988 DEFVAR_LISP ("x-hourglass-pointer-shape", &Vx_hourglass_pointer_shape, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11989 doc: /* The shape of the pointer when Emacs is busy. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11990 This variable takes effect when you create a new frame |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
11991 or when you set the mouse color. */); |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
11992 Vx_hourglass_pointer_shape = Qnil; |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
11993 |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11994 DEFVAR_BOOL ("display-hourglass", &display_hourglass_p, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11995 doc: /* Non-zero means Emacs displays an hourglass pointer on window systems. */); |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
11996 display_hourglass_p = 1; |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
11997 |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11998 DEFVAR_LISP ("hourglass-delay", &Vhourglass_delay, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
11999 doc: /* *Seconds to wait before displaying an hourglass pointer. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
12000 Value must be an integer or float. */); |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
12001 Vhourglass_delay = make_number (DEFAULT_HOURGLASS_DELAY); |
27864
ea05cbe65943
(inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27798
diff
changeset
|
12002 |
7683
be3423efbdce
(Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents:
7599
diff
changeset
|
12003 #if 0 /* This doesn't really do anything. */ |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
12004 DEFVAR_LISP ("x-mode-pointer-shape", &Vx_mode_pointer_shape, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
12005 doc: /* The shape of the pointer when over the mode line. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
12006 This variable takes effect when you create a new frame |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
12007 or when you set the mouse color. */); |
2936
f9956cdb0d1d
(syms_of_xfns): Don't make Lisp vars
Richard M. Stallman <rms@gnu.org>
parents:
2885
diff
changeset
|
12008 #endif |
389 | 12009 Vx_mode_pointer_shape = Qnil; |
12010 | |
16396
4e4cc27b2a2a
(x_set_internal_border_width): Only change
Richard M. Stallman <rms@gnu.org>
parents:
16357
diff
changeset
|
12011 DEFVAR_LISP ("x-sensitive-text-pointer-shape", |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
12012 &Vx_sensitive_text_pointer_shape, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
12013 doc: /* The shape of the pointer when over mouse-sensitive text. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
12014 This variable takes effect when you create a new frame |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
12015 or when you set the mouse color. */); |
7683
be3423efbdce
(Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents:
7599
diff
changeset
|
12016 Vx_sensitive_text_pointer_shape = Qnil; |
6759
e0938c42218c
(syms_of_xfns): Define Vx_cross_pointer_shape.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6610
diff
changeset
|
12017 |
33960
1f92a2d65681
(Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33747
diff
changeset
|
12018 DEFVAR_LISP ("x-window-horizontal-drag-cursor", |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
12019 &Vx_window_horizontal_drag_shape, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
12020 doc: /* Pointer shape to use for indicating a window can be dragged horizontally. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
12021 This variable takes effect when you create a new frame |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
12022 or when you set the mouse color. */); |
33960
1f92a2d65681
(Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33747
diff
changeset
|
12023 Vx_window_horizontal_drag_shape = Qnil; |
1f92a2d65681
(Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33747
diff
changeset
|
12024 |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
12025 DEFVAR_LISP ("x-cursor-fore-pixel", &Vx_cursor_fore_pixel, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
12026 doc: /* A string indicating the foreground color of the cursor box. */); |
389 | 12027 Vx_cursor_fore_pixel = Qnil; |
12028 | |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
12029 DEFVAR_LISP ("x-max-tooltip-size", &Vx_max_tooltip_size, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
12030 doc: /* Maximum size for tooltips. Value is a pair (COLUMNS . ROWS). |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
12031 Text larger than this is clipped. */); |
38574
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
12032 Vx_max_tooltip_size = Fcons (make_number (80), make_number (40)); |
79a0d7b341b3
(Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38548
diff
changeset
|
12033 |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
12034 DEFVAR_LISP ("x-no-window-manager", &Vx_no_window_manager, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
12035 doc: /* Non-nil if no X window manager is in use. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
12036 Emacs doesn't try to figure this out; this is always nil |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
12037 unless you set it to something else. */); |
12209
5537ed125771
(syms_of_xfns): Initialize Vx_no_window_manager. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
12190
diff
changeset
|
12038 /* We don't have any way to find this out, so set it to nil |
5537ed125771
(syms_of_xfns): Initialize Vx_no_window_manager. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
12190
diff
changeset
|
12039 and maybe the user would like to set it to t. */ |
5537ed125771
(syms_of_xfns): Initialize Vx_no_window_manager. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
12190
diff
changeset
|
12040 Vx_no_window_manager = Qnil; |
8170
d92a24366b22
(x_toolkit): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
8103
diff
changeset
|
12041 |
17048
2da4e24ceee5
Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16966
diff
changeset
|
12042 DEFVAR_LISP ("x-pixel-size-width-font-regexp", |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
12043 &Vx_pixel_size_width_font_regexp, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
12044 doc: /* Regexp matching a font name whose width is the same as `PIXEL_SIZE'. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
12045 |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
12046 Since Emacs gets width of a font matching with this regexp from |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
12047 PIXEL_SIZE field of the name, font finding mechanism gets faster for |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
12048 such a font. This is especially effective for such large fonts as |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
12049 Chinese, Japanese, and Korean. */); |
17048
2da4e24ceee5
Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16966
diff
changeset
|
12050 Vx_pixel_size_width_font_regexp = Qnil; |
2da4e24ceee5
Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16966
diff
changeset
|
12051 |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
12052 DEFVAR_LISP ("image-cache-eviction-delay", &Vimage_cache_eviction_delay, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
12053 doc: /* Time after which cached images are removed from the cache. |
39905
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
12054 When an image has not been displayed this many seconds, remove it |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
12055 from the image cache. Value must be an integer or nil with nil |
542a86892257
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39862
diff
changeset
|
12056 meaning don't clear the cache. */); |
25628
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
12057 Vimage_cache_eviction_delay = make_number (30 * 60); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12058 |
8170
d92a24366b22
(x_toolkit): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
8103
diff
changeset
|
12059 #ifdef USE_X_TOOLKIT |
39862
da336e9d1ab5
(syms_of_xfns): Update calls to Fprovide.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39812
diff
changeset
|
12060 Fprovide (intern ("x-toolkit"), Qnil); |
12094
a9fda5417acf
(syms_of_xfns): Provide motif in Motif version.
Karl Heuer <kwzh@gnu.org>
parents:
12080
diff
changeset
|
12061 #ifdef USE_MOTIF |
39862
da336e9d1ab5
(syms_of_xfns): Update calls to Fprovide.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39812
diff
changeset
|
12062 Fprovide (intern ("motif"), Qnil); |
37210
8b47704e0150
(Vmotif_version_string) [USE_MOTIF]: New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37173
diff
changeset
|
12063 |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
12064 DEFVAR_LISP ("motif-version-string", &Vmotif_version_string, |
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39907
diff
changeset
|
12065 doc: /* Version info for LessTif/Motif. */); |
37210
8b47704e0150
(Vmotif_version_string) [USE_MOTIF]: New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37173
diff
changeset
|
12066 Vmotif_version_string = build_string (XmVERSION_STRING); |
8b47704e0150
(Vmotif_version_string) [USE_MOTIF]: New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37173
diff
changeset
|
12067 #endif /* USE_MOTIF */ |
8b47704e0150
(Vmotif_version_string) [USE_MOTIF]: New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37173
diff
changeset
|
12068 #endif /* USE_X_TOOLKIT */ |
389 | 12069 |
12070 defsubr (&Sx_get_resource); | |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12071 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12072 /* X window properties. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12073 defsubr (&Sx_change_window_property); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12074 defsubr (&Sx_delete_window_property); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12075 defsubr (&Sx_window_property); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12076 |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26571
diff
changeset
|
12077 defsubr (&Sxw_display_color_p); |
8779
12c6296bbb4b
(Fx_display_grayscale_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8758
diff
changeset
|
12078 defsubr (&Sx_display_grayscale_p); |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26571
diff
changeset
|
12079 defsubr (&Sxw_color_defined_p); |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26571
diff
changeset
|
12080 defsubr (&Sxw_color_values); |
4279 | 12081 defsubr (&Sx_server_max_request_size); |
2276
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
12082 defsubr (&Sx_server_vendor); |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
12083 defsubr (&Sx_server_version); |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
12084 defsubr (&Sx_display_pixel_width); |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
12085 defsubr (&Sx_display_pixel_height); |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
12086 defsubr (&Sx_display_mm_width); |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
12087 defsubr (&Sx_display_mm_height); |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
12088 defsubr (&Sx_display_screens); |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
12089 defsubr (&Sx_display_planes); |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
12090 defsubr (&Sx_display_color_cells); |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
12091 defsubr (&Sx_display_visual_class); |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
12092 defsubr (&Sx_display_backing_store); |
68328c3af38f
(x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents:
2197
diff
changeset
|
12093 defsubr (&Sx_display_save_under); |
2328
82e4fed9cdd6
* xfns.c (Fx_parse_geometry): Renamed from Fx_geometry.
Jim Blandy <jimb@redhat.com>
parents:
2295
diff
changeset
|
12094 defsubr (&Sx_parse_geometry); |
771 | 12095 defsubr (&Sx_create_frame); |
389 | 12096 defsubr (&Sx_open_connection); |
9690
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
12097 defsubr (&Sx_close_connection); |
f6d4e1acb5a1
(Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents:
9653
diff
changeset
|
12098 defsubr (&Sx_display_list); |
389 | 12099 defsubr (&Sx_synchronize); |
28044
88db4c84b6fd
Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents:
28010
diff
changeset
|
12100 defsubr (&Sx_focus_frame); |
34549
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
12101 defsubr (&Sx_backspace_delete_keys_p); |
708ea44ef3c0
(Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34524
diff
changeset
|
12102 |
17048
2da4e24ceee5
Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16966
diff
changeset
|
12103 /* Setting callback functions for fontset handler. */ |
2da4e24ceee5
Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16966
diff
changeset
|
12104 get_font_info_func = x_get_font_info; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12105 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12106 #if 0 /* This function pointer doesn't seem to be used anywhere. |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12107 And the pointer assigned has the wrong type, anyway. */ |
17048
2da4e24ceee5
Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16966
diff
changeset
|
12108 list_fonts_func = x_list_fonts; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12109 #endif |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12110 |
17048
2da4e24ceee5
Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16966
diff
changeset
|
12111 load_font_func = x_load_font; |
21549
3b63301ea296
(syms_of_xfns): Initialize find_ccl_program_func.
Kenichi Handa <handa@m17n.org>
parents:
21536
diff
changeset
|
12112 find_ccl_program_func = x_find_ccl_program; |
17048
2da4e24ceee5
Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16966
diff
changeset
|
12113 query_font_func = x_query_font; |
2da4e24ceee5
Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16966
diff
changeset
|
12114 set_frame_fontset_func = x_set_font; |
2da4e24ceee5
Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16966
diff
changeset
|
12115 check_window_system_func = check_x; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12116 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12117 /* Images. */ |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12118 Qxbm = intern ("xbm"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12119 staticpro (&Qxbm); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12120 QCtype = intern (":type"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12121 staticpro (&QCtype); |
35360
ba490eed8f66
(QCconversion): Replaces QCalgorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
35275
diff
changeset
|
12122 QCconversion = intern (":conversion"); |
ba490eed8f66
(QCconversion): Replaces QCalgorithm.
Gerd Moellmann <gerd@gnu.org>
parents:
35275
diff
changeset
|
12123 staticpro (&QCconversion); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12124 QCheuristic_mask = intern (":heuristic-mask"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12125 staticpro (&QCheuristic_mask); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12126 QCcolor_symbols = intern (":color-symbols"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12127 staticpro (&QCcolor_symbols); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12128 QCascent = intern (":ascent"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12129 staticpro (&QCascent); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12130 QCmargin = intern (":margin"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12131 staticpro (&QCmargin); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12132 QCrelief = intern (":relief"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12133 staticpro (&QCrelief); |
25628
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
12134 Qpostscript = intern ("postscript"); |
98e238950125
(x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents:
25620
diff
changeset
|
12135 staticpro (&Qpostscript); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12136 QCloader = intern (":loader"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12137 staticpro (&QCloader); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12138 QCbounding_box = intern (":bounding-box"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12139 staticpro (&QCbounding_box); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12140 QCpt_width = intern (":pt-width"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12141 staticpro (&QCpt_width); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12142 QCpt_height = intern (":pt-height"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12143 staticpro (&QCpt_height); |
25620 | 12144 QCindex = intern (":index"); |
12145 staticpro (&QCindex); | |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12146 Qpbm = intern ("pbm"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12147 staticpro (&Qpbm); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12148 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12149 #if HAVE_XPM |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12150 Qxpm = intern ("xpm"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12151 staticpro (&Qxpm); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12152 #endif |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12153 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12154 #if HAVE_JPEG |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12155 Qjpeg = intern ("jpeg"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12156 staticpro (&Qjpeg); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12157 #endif |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12158 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12159 #if HAVE_TIFF |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12160 Qtiff = intern ("tiff"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12161 staticpro (&Qtiff); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12162 #endif |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12163 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12164 #if HAVE_GIF |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12165 Qgif = intern ("gif"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12166 staticpro (&Qgif); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12167 #endif |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12168 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12169 #if HAVE_PNG |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12170 Qpng = intern ("png"); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12171 staticpro (&Qpng); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12172 #endif |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12173 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12174 defsubr (&Sclear_image_cache); |
29938
be81ae7e0218
(Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29882
diff
changeset
|
12175 defsubr (&Simage_size); |
31637
c1f4bdbf8465
(ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents:
31633
diff
changeset
|
12176 defsubr (&Simage_mask_p); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12177 |
36252
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
12178 hourglass_atimer = NULL; |
a8630c63f7d5
Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents:
35859
diff
changeset
|
12179 hourglass_shown_p = 0; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12180 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12181 defsubr (&Sx_show_tip); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12182 defsubr (&Sx_hide_tip); |
34450
5de00bff5de3
(Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents:
34321
diff
changeset
|
12183 tip_timer = Qnil; |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12184 staticpro (&tip_timer); |
34450
5de00bff5de3
(Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents:
34321
diff
changeset
|
12185 tip_frame = Qnil; |
5de00bff5de3
(Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents:
34321
diff
changeset
|
12186 staticpro (&tip_frame); |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12187 |
35067
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
12188 last_show_tip_args = Qnil; |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
12189 staticpro (&last_show_tip_args); |
7ca0048f8615
(x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents:
35042
diff
changeset
|
12190 |
24994
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12191 #ifdef USE_MOTIF |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12192 defsubr (&Sx_file_dialog); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12193 #endif |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12194 } |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12195 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12196 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12197 void |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12198 init_xfns () |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12199 { |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12200 image_types = NULL; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12201 Vimage_types = Qnil; |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12202 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12203 define_image_type (&xbm_type); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12204 define_image_type (&gs_type); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12205 define_image_type (&pbm_type); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12206 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12207 #if HAVE_XPM |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12208 define_image_type (&xpm_type); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12209 #endif |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12210 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12211 #if HAVE_JPEG |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12212 define_image_type (&jpeg_type); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12213 #endif |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12214 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12215 #if HAVE_TIFF |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12216 define_image_type (&tiff_type); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12217 #endif |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12218 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12219 #if HAVE_GIF |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12220 define_image_type (&gif_type); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12221 #endif |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12222 |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12223 #if HAVE_PNG |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12224 define_image_type (&png_type); |
d549b7ac676d
(x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents:
24905
diff
changeset
|
12225 #endif |
389 | 12226 } |
12227 | |
12228 #endif /* HAVE_X_WINDOWS */ |