annotate src/xfns.c @ 33747:e0e2461a24fe

(x_set_tool_bar_lines): Clear internal border when tool bar gets smaller.
author Gerd Moellmann <gerd@gnu.org>
date Wed, 22 Nov 2000 14:27:38 +0000
parents 91b2daa9479f
children 1f92a2d65681
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* Functions for the X window system.
29938
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
2 Copyright (C) 1989, 92, 93, 94, 95, 96, 1997, 1998, 1999, 2000
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3 Free Software Foundation.
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5 This file is part of GNU Emacs.
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 GNU Emacs is free software; you can redistribute it and/or modify
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 700
diff changeset
9 the Free Software Foundation; either version 2, or (at your option)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10 any later version.
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 GNU General Public License for more details.
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
facf6b0e97ff Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 7860
diff changeset
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
facf6b0e97ff Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 7860
diff changeset
26
8091
f40cbe50c74f (XLIB_ILLEGAL_ACCESS): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 8090
diff changeset
27 /* 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
28
8091
f40cbe50c74f (XLIB_ILLEGAL_ACCESS): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 8090
diff changeset
29 #define XLIB_ILLEGAL_ACCESS
f40cbe50c74f (XLIB_ILLEGAL_ACCESS): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 8090
diff changeset
30
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31 #include "lisp.h"
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
32 #include "xterm.h"
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
33 #include "frame.h"
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34 #include "window.h"
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35 #include "buffer.h"
26876
578acd06aa3b Include intervals.h.
Kenichi Handa <handa@m17n.org>
parents: 26808
diff changeset
36 #include "intervals.h"
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37 #include "dispextern.h"
515
0005d4c90c97 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
38 #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
39 #include "blockinput.h"
24412
d11ac02f9d6a Use epaths.h istead of paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 24170
diff changeset
40 #include <epaths.h>
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
41 #include "charset.h"
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
42 #include "coding.h"
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
43 #include "fontset.h"
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
44 #include "systime.h"
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
45 #include "termhooks.h"
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
46 #include "atimer.h"
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
48 #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
49
786ab5197e4b Include <stdlib.h> if available, and declare abort only if not. Include
Andreas Schwab <schwab@suse.de>
parents: 25390
diff changeset
50 #include <ctype.h>
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
51 #include <sys/types.h>
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
52 #include <sys/stat.h>
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53
2355
cec8c9490d8a * xfns.c [VMS]: Get the gray_bits from [.bitmaps]gray.xbm.
Jim Blandy <jimb@redhat.com>
parents: 2341
diff changeset
54 #ifndef VMS
3821
8f353c2491d0 * xfns.c: Always #include "bitmaps/gray.xbm"; the bitmaps seem to
Jim Blandy <jimb@redhat.com>
parents: 3692
diff changeset
55 #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
56 #include "bitmaps/gray.xbm"
2657b04dd324 [EMACS_BIT_MAPS]: Include gray.xbm from ./bitmaps.
Richard M. Stallman <rms@gnu.org>
parents: 3507
diff changeset
57 #else
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
58 #include <X11/bitmaps/gray>
3512
2657b04dd324 [EMACS_BIT_MAPS]: Include gray.xbm from ./bitmaps.
Richard M. Stallman <rms@gnu.org>
parents: 3507
diff changeset
59 #endif
2355
cec8c9490d8a * xfns.c [VMS]: Get the gray_bits from [.bitmaps]gray.xbm.
Jim Blandy <jimb@redhat.com>
parents: 2341
diff changeset
60 #else
cec8c9490d8a * xfns.c [VMS]: Get the gray_bits from [.bitmaps]gray.xbm.
Jim Blandy <jimb@redhat.com>
parents: 2341
diff changeset
61 #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
62 #endif
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
63
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
64 #ifdef USE_X_TOOLKIT
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
65 #include <X11/Shell.h>
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
66
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
67 #ifndef USE_MOTIF
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
68 #include <X11/Xaw/Paned.h>
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
69 #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
70 #endif /* USE_MOTIF */
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
71
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
72 #ifdef USG
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
73 #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
74 #include <X11/Xos.h>
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
75 #define USG
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
76 #else
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
77 #include <X11/Xos.h>
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
78 #endif
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
79
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
80 #include "widget.h"
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
81
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
82 #include "../lwlib/lwlib.h"
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
83
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
84 #ifdef USE_MOTIF
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
85 #include <Xm/Xm.h>
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
86 #include <Xm/DialogS.h>
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
87 #include <Xm/FileSB.h>
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
88 #endif
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
89
13508
b64345cf1ee9 (HACK_EDITRES): Don't define if NO_EDITRES is defined.
Richard M. Stallman <rms@gnu.org>
parents: 13227
diff changeset
90 /* 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
91 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
92
13508
b64345cf1ee9 (HACK_EDITRES): Don't define if NO_EDITRES is defined.
Richard M. Stallman <rms@gnu.org>
parents: 13227
diff changeset
93 #if (XtSpecificationRelease >= 5) && !defined(NO_EDITRES)
9231
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
94 #define HACK_EDITRES
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
95 extern void _XEditResCheckMessages ();
9231
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
96 #endif /* R5 + Athena */
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
97
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
98 /* 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
99
9231
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
100 extern LWLIB_ID widget_id_tick;
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
101
15720
f1549b7501af (Fx_create_frame): Do xlwmenu hack only if USE_LUCID.
Karl Heuer <kwzh@gnu.org>
parents: 15706
diff changeset
102 #ifdef USE_LUCID
9742
fe7653791d28 (Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents: 9703
diff changeset
103 /* 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
104 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
105 #endif
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
106
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
107 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
108 extern double atof ();
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
109
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
110 #endif /* USE_X_TOOLKIT */
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
111
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
112 #define min(a,b) ((a) < (b) ? (a) : (b))
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
113 #define max(a,b) ((a) > (b) ? (a) : (b))
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114
4279
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
115 #ifdef HAVE_X11R4
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
116 #define MAXREQUEST(dpy) (XMaxRequestSize (dpy))
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
117 #else
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
118 #define MAXREQUEST(dpy) ((dpy)->max_request_size)
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
119 #endif
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
120
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
121 /* 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
122 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
123 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
124
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
125 int gray_bitmap_width = gray_width;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
126 int gray_bitmap_height = gray_height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
127 unsigned char *gray_bitmap_bits = gray_bits;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
128
16966
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
129 /* 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
130
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
131 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
132
16966
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
133 /* 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
134 Normally "Emacs". */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
135
16966
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
136 Lisp_Object Vx_resource_class;
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
137
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
138 /* Non-zero means we're allowed to display a busy cursor. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
139
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
140 int display_busy_cursor_p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
141
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
142 /* 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
143 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
144
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145 Lisp_Object Vx_pointer_shape, Vx_nontext_pointer_shape, Vx_mode_pointer_shape;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
146 Lisp_Object Vx_busy_pointer_shape;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
147
7683
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
148 /* 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
149
7683
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
150 Lisp_Object Vx_sensitive_text_pointer_shape;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
152 /* 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
153
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
154 Lisp_Object Vx_cursor_fore_pixel;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
156 /* Nonzero if using X. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
157
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
158 static int x_in_use;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
159
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
160 /* 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
161
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162 Lisp_Object Vx_no_window_manager;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
164 /* Search path for bitmap files. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
165
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
166 Lisp_Object Vx_bitmap_file_path;
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
167
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
168 /* 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
169
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
170 Lisp_Object Vx_pixel_size_width_font_regexp;
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
171
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
172 /* Evaluate this expression to rebuild the section of syms_of_xfns
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
173 that initializes and staticpros the symbols declared below. Note
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
174 that Emacs 18 has a bug that keeps C-x C-e from being able to
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
175 evaluate this expression.
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
176
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
177 (progn
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
178 ;; Accumulate a list of the symbols we want to initialize from the
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
179 ;; declarations 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
180 (goto-char (point-min))
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
181 (search-forward "/\*&&& symbols declared here &&&*\/\n")
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
182 (let (symbol-list)
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
183 (while (looking-at "Lisp_Object \\(Q[a-z_]+\\)")
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
184 (setq symbol-list
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
185 (cons (buffer-substring (match-beginning 1) (match-end 1))
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
186 symbol-list))
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
187 (forward-line 1))
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
188 (setq symbol-list (nreverse symbol-list))
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
189 ;; Delete the section of syms_of_... where we initialize the symbols.
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
190 (search-forward "\n /\*&&& init symbols here &&&*\/\n")
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
191 (let ((start (point)))
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
192 (while (looking-at "^ Q")
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
193 (forward-line 2))
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
194 (kill-region start (point)))
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
195 ;; Write a new symbol initialization section.
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
196 (while symbol-list
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
197 (insert (format " %s = intern (\"" (car symbol-list)))
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
198 (let ((start (point)))
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
199 (insert (substring (car symbol-list) 1))
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
200 (subst-char-in-region start (point) ?_ ?-))
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
201 (insert (format "\");\n staticpro (&%s);\n" (car symbol-list)))
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
202 (setq symbol-list (cdr symbol-list)))))
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
203
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
204 */
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
205
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
206 /*&&& symbols declared here &&&*/
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
207 Lisp_Object Qauto_raise;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
208 Lisp_Object Qauto_lower;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
209 Lisp_Object Qbar;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
210 Lisp_Object Qborder_color;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
211 Lisp_Object Qborder_width;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
212 Lisp_Object Qbox;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
213 Lisp_Object Qcursor_color;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
214 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
215 Lisp_Object Qgeometry;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
216 Lisp_Object Qicon_left;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
217 Lisp_Object Qicon_top;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
218 Lisp_Object Qicon_type;
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
219 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
220 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
221 Lisp_Object Qleft;
16254
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
222 Lisp_Object Qright;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
223 Lisp_Object Qmouse_color;
1874
19cf50641d6c * frame.c (Fframe_parameters): Report the `minibuffer' parameter of
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
224 Lisp_Object Qnone;
23793
3f48dda0547a (Qouter_window_id): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 23411
diff changeset
225 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
226 Lisp_Object Qparent_id;
8942
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
227 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
228 Lisp_Object Qsuppress_icon;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
229 extern Lisp_Object Qtop;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
230 Lisp_Object Qundefined_color;
1994
73ce9dd21093 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1932
diff changeset
231 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
232 Lisp_Object Qvisibility;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
233 Lisp_Object Qwindow_id;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
234 Lisp_Object Qx_frame_parameter;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
235 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
236 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
237 Lisp_Object Quser_size;
26571
bc95d8e47cb9 Don't duplicate Qdisplay definition done elsewhere.
Dave Love <fx@gnu.org>
parents: 26526
diff changeset
238 extern Lisp_Object Qdisplay;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
239 Lisp_Object Qscroll_bar_foreground, Qscroll_bar_background;
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
240 Lisp_Object Qscreen_gamma, Qline_spacing, Qcenter;
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
241 Lisp_Object Qcompound_text;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
242
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
243 /* 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
244
1874
19cf50641d6c * frame.c (Fframe_parameters): Report the `minibuffer' parameter of
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
245 extern Lisp_Object Qheight, Qminibuffer, Qname, Qonly, Qwidth;
14381
4d038c841cf4 (Qtitle): Declared.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
246 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
247 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
248
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249 extern Lisp_Object Vwindow_system_version;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
250
18631
62bcc6aff013 (x_set_font): Funcall Qface_set_after_frame_default.
Richard M. Stallman <rms@gnu.org>
parents: 18612
diff changeset
251 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
252
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
253
2999
33c820044087 (check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2964
diff changeset
254 /* 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
255
5948
ef777779bd80 (check_x): Make it global.
Karl Heuer <kwzh@gnu.org>
parents: 5900
diff changeset
256 void
2999
33c820044087 (check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2964
diff changeset
257 check_x ()
33c820044087 (check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2964
diff changeset
258 {
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
259 if (! x_in_use)
2999
33c820044087 (check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2964
diff changeset
260 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
261 }
33c820044087 (check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2964
diff changeset
262
13867
19a05b5a597d (check_x_display_info, check_x_frame, x_set_font)
Richard M. Stallman <rms@gnu.org>
parents: 13781
diff changeset
263 /* 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
264 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
265
2b4e4a76468b (using_x_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7683
diff changeset
266 int
13867
19a05b5a597d (check_x_display_info, check_x_frame, x_set_font)
Richard M. Stallman <rms@gnu.org>
parents: 13781
diff changeset
267 have_menus_p ()
7791
2b4e4a76468b (using_x_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7683
diff changeset
268 {
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
269 return x_in_use;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
270 }
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
271
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
272 /* 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
273 and checking validity for X. */
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
274
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
275 FRAME_PTR
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
276 check_x_frame (frame)
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
277 Lisp_Object frame;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
278 {
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
279 FRAME_PTR f;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
280
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
281 if (NILP (frame))
25679
8b09c5927f1c (QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
282 frame = selected_frame;
8b09c5927f1c (QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
283 CHECK_LIVE_FRAME (frame, 0);
8b09c5927f1c (QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
284 f = XFRAME (frame);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
285 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
286 error ("Non-X frame used");
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
287 return f;
7791
2b4e4a76468b (using_x_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7683
diff changeset
288 }
2b4e4a76468b (using_x_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7683
diff changeset
289
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
290 /* 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
291 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
292 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
293
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
294 static struct x_display_info *
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
295 check_x_display_info (frame)
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
296 Lisp_Object frame;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
297 {
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
298 struct x_display_info *dpyinfo = NULL;
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
299
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
300 if (NILP (frame))
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
301 {
25679
8b09c5927f1c (QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
302 struct frame *sf = XFRAME (selected_frame);
8b09c5927f1c (QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
303
8b09c5927f1c (QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
304 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
305 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
306 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
307 dpyinfo = x_display_list;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
308 else
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
309 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
310 }
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
311 else if (STRINGP (frame))
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
312 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
313 else
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
314 {
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
315 FRAME_PTR f;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
316
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
317 CHECK_LIVE_FRAME (frame, 0);
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
318 f = XFRAME (frame);
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
319 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
320 error ("Non-X frame used");
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
321 dpyinfo = FRAME_X_DISPLAY_INFO (f);
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
322 }
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
323
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
324 return dpyinfo;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
325 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
326
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
327
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
328 /* Return the Emacs frame-object corresponding to an X window.
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
329 It could be the frame's main window or an icon window. */
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
330
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
331 /* 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
332
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
333 struct frame *
11197
1bdc265aab86 (x_window_to_frame): New arg DPYINFO. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11060
diff changeset
334 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
335 struct x_display_info *dpyinfo;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
336 int wdesc;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
337 {
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
338 Lisp_Object tail, frame;
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
339 struct frame *f;
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
340
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
341 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
342 {
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
343 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
344 if (!GC_FRAMEP (frame))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
345 continue;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
346 f = XFRAME (frame);
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
347 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
348 continue;
27798
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
349 if (f->output_data.x->busy_window == wdesc)
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
350 return f;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
351 #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
352 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
353 && 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
354 /* A tooltip frame? */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
355 || (!f->output_data.x->edit_widget
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
356 && 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
357 || f->output_data.x->icon_desc == wdesc)
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
358 return f;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
359 #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
360 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
361 || f->output_data.x->icon_desc == wdesc)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
362 return f;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
363 #endif /* not USE_X_TOOLKIT */
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
364 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
365 return 0;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
366 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
367
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
368 #ifdef USE_X_TOOLKIT
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
369 /* 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
370 windows. */
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
371
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
372 struct frame *
11197
1bdc265aab86 (x_window_to_frame): New arg DPYINFO. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11060
diff changeset
373 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
374 struct x_display_info *dpyinfo;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
375 int wdesc;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
376 {
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
377 Lisp_Object tail, frame;
27798
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
378 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
379 struct x_output *x;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
380
27798
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
381 found = NULL;
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
382 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
383 {
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
384 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
385 if (!GC_FRAMEP (frame))
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
386 continue;
27798
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
387
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
388 f = XFRAME (frame);
27798
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
389 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
390 {
27798
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
391 /* 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
392 x = f->output_data.x;
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
393 if (x->busy_window == wdesc)
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
394 found = f;
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
395 else if (x->widget)
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
396 {
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
397 if (wdesc == XtWindow (x->widget)
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
398 || wdesc == XtWindow (x->column_widget)
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
399 || wdesc == XtWindow (x->edit_widget))
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
400 found = f;
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
401 /* 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
402 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
403 found = f;
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
404 }
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
405 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
406 /* A tooltip frame. */
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
407 found = f;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
408 }
27798
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
409 }
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
410
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
411 return found;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
412 }
7040
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
413
11611
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
414 /* 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
415
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
416 struct frame *
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
417 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
418 struct x_display_info *dpyinfo;
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
419 int wdesc;
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
420 {
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
421 Lisp_Object tail, frame;
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
422 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
423 struct x_output *x;
11611
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
424
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
425 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
426 {
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
427 frame = XCAR (tail);
11611
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
428 if (!GC_FRAMEP (frame))
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
429 continue;
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
430 f = XFRAME (frame);
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
431 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
432 continue;
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
433 x = f->output_data.x;
11611
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
434 /* This frame matches if the window is any of its widgets. */
27798
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
435 if (x->busy_window == wdesc)
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
436 return f;
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
437 else if (x->widget)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
438 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
439 if (wdesc == XtWindow (x->widget)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
440 || wdesc == XtWindow (x->column_widget)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
441 || wdesc == XtWindow (x->edit_widget))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
442 return f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
443 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
444 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
445 /* A tooltip frame. */
11611
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
446 return f;
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
447 }
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
448 return 0;
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
449 }
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
450
12656
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
451 /* 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
452
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
453 struct frame *
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
454 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
455 struct x_display_info *dpyinfo;
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
456 int wdesc;
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
457 {
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
458 Lisp_Object tail, frame;
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
459 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
460 struct x_output *x;
12656
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
461
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
462 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
463 {
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
464 frame = XCAR (tail);
12656
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
465 if (!GC_FRAMEP (frame))
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
466 continue;
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
467 f = XFRAME (frame);
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
468 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
469 continue;
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
470 x = f->output_data.x;
12656
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
471 /* 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
472 if (x->menubar_widget
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
473 && 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
474 return f;
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
475 }
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
476 return 0;
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
477 }
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
478
7040
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
479 /* 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
480 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
481
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
482 struct frame *
11197
1bdc265aab86 (x_window_to_frame): New arg DPYINFO. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11060
diff changeset
483 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
484 struct x_display_info *dpyinfo;
7040
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
485 int wdesc;
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
486 {
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
487 Lisp_Object tail, frame;
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
488 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
489 struct x_output *x;
7040
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
490
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
491 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
492 {
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
493 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
494 if (!GC_FRAMEP (frame))
7040
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
495 continue;
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
496 f = XFRAME (frame);
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
497 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
498 continue;
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
499 x = f->output_data.x;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
500
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
501 if (x->widget)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
502 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
503 /* 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
504 if (wdesc == XtWindow (x->widget))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
505 return f;
12019
63ee64941021 (x_top_window_to_frame): Don't match menu-bar widget.
Karl Heuer <kwzh@gnu.org>
parents: 12011
diff changeset
506 #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
507 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
508 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
509 /* 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
510 if (x->menubar_widget
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
511 && wdesc == XtWindow (x->menubar_widget))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
512 return f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
513 #endif
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
514 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
515 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
516 /* Tooltip frame. */
7040
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
517 return f;
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
518 }
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
519 return 0;
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
520 }
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
521 #endif /* USE_X_TOOLKIT */
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
522
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
523
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 /* 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
526 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
527 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
528
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
529 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
530 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
531
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
532 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
533 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
534 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
535
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
536
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
537 /* Functions to access the contents of a bitmap, given an id. */
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
538
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
539 int
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
540 x_bitmap_height (f, id)
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
541 FRAME_PTR f;
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
542 int id;
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
543 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
544 return FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].height;
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
545 }
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
546
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
547 int
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
548 x_bitmap_width (f, id)
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
549 FRAME_PTR f;
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
550 int id;
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
551 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
552 return FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].width;
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
553 }
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
554
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
555 int
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
556 x_bitmap_pixmap (f, id)
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
557 FRAME_PTR f;
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
558 int id;
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
559 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
560 return FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].pixmap;
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
561 }
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
562
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
563
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
564 /* 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
565
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
566 static int
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
567 x_allocate_bitmap_record (f)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
568 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
569 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
570 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
571 int i;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
572
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
573 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
574 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
575 dpyinfo->bitmaps_size = 10;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
576 dpyinfo->bitmaps
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
577 = (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
578 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
579 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
580 }
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
581
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
582 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
583 return ++dpyinfo->bitmaps_last;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
584
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
585 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
586 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
587 return i + 1;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
588
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
589 dpyinfo->bitmaps_size *= 2;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
590 dpyinfo->bitmaps
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
591 = (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
592 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
593 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
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
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
596 /* 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
597
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
598 void
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
599 x_reference_bitmap (f, id)
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
600 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
601 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
602 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
603 ++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
604 }
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
605
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
606 /* 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
607
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
608 int
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
609 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
610 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
611 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
612 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
613 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
614 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
615 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
616 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
617
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
618 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
619 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
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 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
622 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
623
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
624 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
625 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
626 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
627 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
628 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
629 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
630 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
631
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
632 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
633 }
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
634
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
635 /* 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
636
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
637 int
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
638 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
639 struct frame *f;
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
640 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
641 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
642 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
643 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
644 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
645 int xhot, yhot, result, id;
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
646 Lisp_Object found;
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
647 int fd;
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
648 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
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 /* 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
651 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
652 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
653 if (dpyinfo->bitmaps[id].refcount
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
654 && dpyinfo->bitmaps[id].file
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
655 && !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
656 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
657 ++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
658 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
659 }
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
660 }
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
661
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
662 /* Search bitmap-file-path for the file, if appropriate. */
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
663 fd = openp (Vx_bitmap_file_path, file, "", &found, 0);
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
664 if (fd < 0)
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
665 return -1;
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26032
diff changeset
666 emacs_close (fd);
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
667
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
668 filename = (char *) XSTRING (found)->data;
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
669
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
670 result = XReadBitmapFile (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
671 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
672 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
673 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
674
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
675 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
676 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
677 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
678 dpyinfo->bitmaps[id - 1].file
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 20629
diff changeset
679 = (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
680 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
681 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
682 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
683 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
684
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
685 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
686 }
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
687
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
688 /* 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
689
21536
468585662fa8 (x_destroy_bitmap): Declare as void, not int.
Karl Heuer <kwzh@gnu.org>
parents: 21267
diff changeset
690 void
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
691 x_destroy_bitmap (f, id)
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
692 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
693 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
694 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
695 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
696
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 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
698 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
699 --dpyinfo->bitmaps[id - 1].refcount;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
700 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
701 {
12051
f193ce9efe24 (x_destroy_bitmap): Block and unblock input.
Karl Heuer <kwzh@gnu.org>
parents: 12046
diff changeset
702 BLOCK_INPUT;
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
703 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
704 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
705 {
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
706 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
707 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
708 }
12051
f193ce9efe24 (x_destroy_bitmap): Block and unblock input.
Karl Heuer <kwzh@gnu.org>
parents: 12046
diff changeset
709 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
710 }
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
711 }
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
712 }
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
713
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
714 /* 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
715
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
716 static void
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
717 x_destroy_all_bitmaps (dpyinfo)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
718 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
719 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
720 int i;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
721 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
722 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
723 {
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
724 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
725 if (dpyinfo->bitmaps[i].file)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
726 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
727 }
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
728 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
729 }
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
730
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
731 /* Connect the frame-parameter names for X frames
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
732 to the ways of passing the parameter values to the window system.
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
733
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
734 The name of a parameter, as a Lisp symbol,
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
735 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
736 that is an index in this table. */
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
737
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
738 struct x_frame_parm_table
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
739 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
740 char *name;
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
741 void (*setter) P_ ((struct frame *, Lisp_Object, Lisp_Object));
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
742 };
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
743
31930
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
744 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
745 static void x_disable_image P_ ((struct frame *, struct image *));
27157
3dafddaefc2c (x_create_im): New function to set IM and IC of a frame.
Gerd Moellmann <gerd@gnu.org>
parents: 27153
diff changeset
746 static void x_create_im P_ ((struct frame *));
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
747 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
748 static void x_set_line_spacing 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_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
750 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
751 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
752 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
753 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
754 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
755 void x_set_icon_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
756 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
757 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
758 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
759 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_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
761 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
762 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
763 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
764 Lisp_Object));
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
765 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
766 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
767 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
768 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
769 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
770 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
771 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
772 Lisp_Object));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
773 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
774 Lisp_Object));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
775 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
776 Lisp_Object,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
777 Lisp_Object,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
778 char *, char *,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
779 int));
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
780 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
781 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
782 Lisp_Object));
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
783 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
784 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
785 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
786 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
787 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
788
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
789
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
790
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
791 static struct x_frame_parm_table x_frame_parms[] =
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
792 {
28690
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
793 "auto-raise", x_set_autoraise,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
794 "auto-lower", x_set_autolower,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
795 "background-color", x_set_background_color,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
796 "border-color", x_set_border_color,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
797 "border-width", x_set_border_width,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
798 "cursor-color", x_set_cursor_color,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
799 "cursor-type", x_set_cursor_type,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
800 "font", x_set_font,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
801 "foreground-color", x_set_foreground_color,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
802 "icon-name", x_set_icon_name,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
803 "icon-type", x_set_icon_type,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
804 "internal-border-width", x_set_internal_border_width,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
805 "menu-bar-lines", x_set_menu_bar_lines,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
806 "mouse-color", x_set_mouse_color,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
807 "name", x_explicitly_set_name,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
808 "scroll-bar-width", x_set_scroll_bar_width,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
809 "title", x_set_title,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
810 "unsplittable", x_set_unsplittable,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
811 "vertical-scroll-bars", x_set_vertical_scroll_bars,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
812 "visibility", x_set_visibility,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
813 "tool-bar-lines", x_set_tool_bar_lines,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
814 "scroll-bar-foreground", x_set_scroll_bar_foreground,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
815 "scroll-bar-background", x_set_scroll_bar_background,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
816 "screen-gamma", x_set_screen_gamma,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
817 "line-spacing", x_set_line_spacing
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
818 };
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
819
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
820 /* Attach the `x-frame-parameter' properties to
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
821 the Lisp symbol names of parameters relevant to X. */
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
822
21846
486ac68ce051 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21779
diff changeset
823 void
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
824 init_x_parm_symbols ()
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
825 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
826 int i;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
827
2136
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
828 for (i = 0; i < sizeof (x_frame_parms) / sizeof (x_frame_parms[0]); i++)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
829 Fput (intern (x_frame_parms[i].name), Qx_frame_parameter,
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
830 make_number (i));
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
831 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
832
19095
2f58824bf3f6 (x_set_frame_parameters): Heading comment fixed.
Kenichi Handa <handa@m17n.org>
parents: 19026
diff changeset
833 /* 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
834 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
835 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
836 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
837 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
838
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
839 void
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
840 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
841 FRAME_PTR f;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
842 Lisp_Object alist;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
843 {
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
844 Lisp_Object tail;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
845
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
846 /* 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
847 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
848 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
849 int width, height;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
850
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
851 /* Same here. */
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
852 Lisp_Object left, top;
3203
1055aa1b7547 * xfns.c (x_set_frame_parameters): Use the first
Jim Blandy <jimb@redhat.com>
parents: 3173
diff changeset
853
10222
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
854 /* Same with these. */
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
855 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
856
3447
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
857 /* 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
858 Lisp_Object *parms;
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
859 Lisp_Object *values;
25289
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
860 int i, p;
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
861 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
862 int icon_left_no_change = 0, icon_top_no_change = 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
863
24170
3689490f7f65 (x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents: 23793
diff changeset
864 struct gcpro gcpro1, gcpro2;
3689490f7f65 (x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents: 23793
diff changeset
865
3447
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
866 i = 0;
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
867 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
868 i++;
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
869
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
870 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
871 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
872
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
873 /* 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
874
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
875 i = 0;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
876 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
877 {
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
878 Lisp_Object elt;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
879
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
880 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
881 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
882 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
883 i++;
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
884 }
24170
3689490f7f65 (x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents: 23793
diff changeset
885 /* 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
886 alist = tail = Qnil;
3689490f7f65 (x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents: 23793
diff changeset
887
3689490f7f65 (x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents: 23793
diff changeset
888 GCPRO2 (*parms, *values);
3689490f7f65 (x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents: 23793
diff changeset
889 gcpro1.nvars = i;
3689490f7f65 (x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents: 23793
diff changeset
890 gcpro2.nvars = i;
3689490f7f65 (x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents: 23793
diff changeset
891
3689490f7f65 (x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents: 23793
diff changeset
892 /* 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
893 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
894 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
895 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
896
16156
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
897 /* 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
898 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
899 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
900 else
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
901 width = FRAME_WIDTH (f);
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
902
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
903 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
904 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
905 else
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
906 height = FRAME_HEIGHT (f);
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
907
25289
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
908 /* 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
909 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
910 cursor_color) are dependent upon them. */
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
911 for (p = 0; p < i; p++)
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
912 {
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
913 Lisp_Object prop, val;
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
914
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
915 prop = parms[p];
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
916 val = values[p];
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
917 if (EQ (prop, Qforeground_color) || EQ (prop, Qbackground_color))
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
918 {
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
919 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
920
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
921 param_index = Fget (prop, Qx_frame_parameter);
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
922 old_value = get_frame_param (f, prop);
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
923 store_frame_param (f, prop, val);
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
924 if (NATNUMP (param_index)
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
925 && (XFASTINT (param_index)
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
926 < sizeof (x_frame_parms)/sizeof (x_frame_parms[0])))
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
927 (*x_frame_parms[XINT (param_index)].setter)(f, val, old_value);
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
928 }
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
929 }
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
930
3447
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
931 /* 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
932 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
933 {
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
934 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
935
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
936 prop = parms[i];
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
937 val = values[i];
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
938
16156
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
939 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
940 width = XFASTINT (val);
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
941 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
942 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
943 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
944 top = val;
3447
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
945 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
946 left = val;
10222
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
947 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
948 icon_top = val;
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
949 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
950 icon_left = val;
25289
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
951 else if (EQ (prop, Qforeground_color) || EQ (prop, Qbackground_color))
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
952 /* Processed above. */
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
953 continue;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
954 else
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
955 {
6519
22c56514eeb3 (x_set_frame_parameters, x_get_arg, x_window, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents: 6506
diff changeset
956 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
957
22c56514eeb3 (x_set_frame_parameters, x_get_arg, x_window, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents: 6506
diff changeset
958 param_index = Fget (prop, Qx_frame_parameter);
22c56514eeb3 (x_set_frame_parameters, x_get_arg, x_window, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents: 6506
diff changeset
959 old_value = get_frame_param (f, prop);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
960 store_frame_param (f, prop, val);
9956
cc76b76a1ed1 (CHECK_NATNUM): Use NATNUMP instead of its expansion.
Karl Heuer <kwzh@gnu.org>
parents: 9948
diff changeset
961 if (NATNUMP (param_index)
cc76b76a1ed1 (CHECK_NATNUM): Use NATNUMP instead of its expansion.
Karl Heuer <kwzh@gnu.org>
parents: 9948
diff changeset
962 && (XFASTINT (param_index)
3075
878381e48b0d * xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents: 3048
diff changeset
963 < sizeof (x_frame_parms)/sizeof (x_frame_parms[0])))
878381e48b0d * xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents: 3048
diff changeset
964 (*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
965 }
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
966 }
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
967
4617
807ba8bcc309 (x_set_frame_parameters): Don't die if just one of
Richard M. Stallman <rms@gnu.org>
parents: 4606
diff changeset
968 /* 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
969 if (EQ (left, Qunbound))
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
970 {
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
971 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
972 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
973 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
974 else
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
975 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
976 }
4617
807ba8bcc309 (x_set_frame_parameters): Don't die if just one of
Richard M. Stallman <rms@gnu.org>
parents: 4606
diff changeset
977 if (EQ (top, Qunbound))
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
978 {
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
979 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
980 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
981 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
982 else
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
983 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
984 }
4617
807ba8bcc309 (x_set_frame_parameters): Don't die if just one of
Richard M. Stallman <rms@gnu.org>
parents: 4606
diff changeset
985
10222
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
986 /* 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
987 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
988 {
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
989 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
990 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
991 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
992 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
993 }
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
994 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
995 {
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
996 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
997 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
998 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
999 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
1000 }
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1001
11932
f3fb1e5dfde1 (x_set_frame_parameters) Fix typo.
Karl Heuer <kwzh@gnu.org>
parents: 11917
diff changeset
1002 /* 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
1003 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
1004 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
1005 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
1006
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
1007 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
1008 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
1009 yet. */
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
1010 {
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
1011 Lisp_Object frame;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
1012
5107
2a019dd8ed51 (x_set_frame_parameters): Call check_frame_size
Richard M. Stallman <rms@gnu.org>
parents: 4771
diff changeset
1013 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
1014
9285
75f1c0d90b3d (x_set_frame_parameters, x_set_visibility, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents: 9240
diff changeset
1015 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
1016
16156
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
1017 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
1018 || 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
1019 || 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
1020 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
1021
bb03e344f07e (x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents: 7989
diff changeset
1022 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
1023 && ! (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
1024 && ! (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
1025 && 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
1026 {
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1027 int leftpos = 0;
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1028 int toppos = 0;
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1029
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1030 /* 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
1031 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
1032 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
1033 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
1034 else if (INTEGERP (left))
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1035 {
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1036 leftpos = XINT (left);
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1037 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
1038 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
1039 }
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1040 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
1041 && CONSP (XCDR (left))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1042 && INTEGERP (XCAR (XCDR (left))))
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1043 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1044 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
1045 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
1046 }
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1047 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
1048 && CONSP (XCDR (left))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1049 && INTEGERP (XCAR (XCDR (left))))
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1050 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1051 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
1052 }
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1053
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1054 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
1055 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
1056 else if (INTEGERP (top))
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1057 {
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1058 toppos = XINT (top);
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1059 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
1060 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
1061 }
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1062 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
1063 && CONSP (XCDR (top))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1064 && INTEGERP (XCAR (XCDR (top))))
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1065 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1066 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
1067 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
1068 }
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1069 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
1070 && CONSP (XCDR (top))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1071 && INTEGERP (XCAR (XCDR (top))))
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1072 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1073 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
1074 }
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1075
8090
bb03e344f07e (x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents: 7989
diff changeset
1076
bb03e344f07e (x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents: 7989
diff changeset
1077 /* 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
1078 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
1079 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
1080
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1081 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
1082
bb03e344f07e (x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents: 7989
diff changeset
1083 /* 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
1084 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
1085 }
10222
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1086
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1087 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
1088 && ! (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
1089 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
1090 }
24170
3689490f7f65 (x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents: 23793
diff changeset
1091
3689490f7f65 (x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents: 23793
diff changeset
1092 UNGCPRO;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
1093 }
2136
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
1094
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
1095 /* 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
1096 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
1097 not Emacs's own window. */
65c133b66371 (x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7308
diff changeset
1098
65c133b66371 (x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7308
diff changeset
1099 void
65c133b66371 (x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7308
diff changeset
1100 x_real_positions (f, xptr, yptr)
65c133b66371 (x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7308
diff changeset
1101 FRAME_PTR f;
65c133b66371 (x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7308
diff changeset
1102 int *xptr, *yptr;
65c133b66371 (x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7308
diff changeset
1103 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
1104 int win_x, win_y;
7408
65c133b66371 (x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7308
diff changeset
1105 Window child;
65c133b66371 (x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7308
diff changeset
1106
7946
4dbba88e2717 (x_real_positions): Make sure we know the parent window.
Richard M. Stallman <rms@gnu.org>
parents: 7899
diff changeset
1107 /* This is pretty gross, but seems to be the easiest way out of
4dbba88e2717 (x_real_positions): Make sure we know the parent window.
Richard M. Stallman <rms@gnu.org>
parents: 7899
diff changeset
1108 the problem that arises when restarting window-managers. */
4dbba88e2717 (x_real_positions): Make sure we know the parent window.
Richard M. Stallman <rms@gnu.org>
parents: 7899
diff changeset
1109
4dbba88e2717 (x_real_positions): Make sure we know the parent window.
Richard M. Stallman <rms@gnu.org>
parents: 7899
diff changeset
1110 #ifdef USE_X_TOOLKIT
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1111 Window outer = (f->output_data.x->widget
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1112 ? XtWindow (f->output_data.x->widget)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1113 : FRAME_X_WINDOW (f));
7946
4dbba88e2717 (x_real_positions): Make sure we know the parent window.
Richard M. Stallman <rms@gnu.org>
parents: 7899
diff changeset
1114 #else
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1115 Window outer = f->output_data.x->window_desc;
7946
4dbba88e2717 (x_real_positions): Make sure we know the parent window.
Richard M. Stallman <rms@gnu.org>
parents: 7899
diff changeset
1116 #endif
4dbba88e2717 (x_real_positions): Make sure we know the parent window.
Richard M. Stallman <rms@gnu.org>
parents: 7899
diff changeset
1117 Window tmp_root_window;
4dbba88e2717 (x_real_positions): Make sure we know the parent window.
Richard M. Stallman <rms@gnu.org>
parents: 7899
diff changeset
1118 Window *tmp_children;
29434
3d157c3d1f51 (x_real_positions): Declare tmp_nchildren as unsigned.
Dave Love <fx@gnu.org>
parents: 28986
diff changeset
1119 unsigned int tmp_nchildren;
7946
4dbba88e2717 (x_real_positions): Make sure we know the parent window.
Richard M. Stallman <rms@gnu.org>
parents: 7899
diff changeset
1120
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
1121 while (1)
7408
65c133b66371 (x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7308
diff changeset
1122 {
17609
8c878d76d6a4 (x_real_positions, x_set_mouse_color, Fx_list_fonts):
Richard M. Stallman <rms@gnu.org>
parents: 17579
diff changeset
1123 int count = x_catch_errors (FRAME_X_DISPLAY (f));
17954
7c919d7f8217 (x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents: 17836
diff changeset
1124 Window outer_window;
12111
832023e90d4d (x_real_positions): Uncatch and recatch X errors in the loop.
Karl Heuer <kwzh@gnu.org>
parents: 12094
diff changeset
1125
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
1126 XQueryTree (FRAME_X_DISPLAY (f), outer, &tmp_root_window,
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1127 &f->output_data.x->parent_desc,
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
1128 &tmp_children, &tmp_nchildren);
14563
6aa8b322b4d7 (x_real_positions): Cast arg of XFree.
Karl Heuer <kwzh@gnu.org>
parents: 14530
diff changeset
1129 XFree ((char *) tmp_children);
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
1130
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
1131 win_x = win_y = 0;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
1132
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
1133 /* Find the position of the outside upper-left corner of
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
1134 the inner window, with respect to the outer window. */
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1135 if (f->output_data.x->parent_desc != FRAME_X_DISPLAY_INFO (f)->root_window)
17954
7c919d7f8217 (x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents: 17836
diff changeset
1136 outer_window = f->output_data.x->parent_desc;
7c919d7f8217 (x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents: 17836
diff changeset
1137 else
7c919d7f8217 (x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents: 17836
diff changeset
1138 outer_window = outer;
7c919d7f8217 (x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents: 17836
diff changeset
1139
7c919d7f8217 (x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents: 17836
diff changeset
1140 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
1141
7c919d7f8217 (x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents: 17836
diff changeset
1142 /* From-window, to-window. */
7c919d7f8217 (x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents: 17836
diff changeset
1143 outer_window,
7c919d7f8217 (x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents: 17836
diff changeset
1144 FRAME_X_DISPLAY_INFO (f)->root_window,
7c919d7f8217 (x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents: 17836
diff changeset
1145
7c919d7f8217 (x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents: 17836
diff changeset
1146 /* From-position, to-position. */
7c919d7f8217 (x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents: 17836
diff changeset
1147 0, 0, &win_x, &win_y,
7c919d7f8217 (x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents: 17836
diff changeset
1148
7c919d7f8217 (x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents: 17836
diff changeset
1149 /* Child of win. */
7c919d7f8217 (x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents: 17836
diff changeset
1150 &child);
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
1151
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
1152 /* It is possible for the window returned by the XQueryNotify
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
1153 to become invalid by the time we call XTranslateCoordinates.
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
1154 That can happen when you restart some window managers.
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
1155 If so, we get an error in XTranslateCoordinates.
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
1156 Detect that and try the whole thing over. */
9703
85ac0e4030d4 (x_window): Pass new arg f to hack_wm_protocols.
Richard M. Stallman <rms@gnu.org>
parents: 9690
diff changeset
1157 if (! x_had_errors_p (FRAME_X_DISPLAY (f)))
15495
94467271b641 (x_real_positions): Don't call x_uncatch_errors twice.
Richard M. Stallman <rms@gnu.org>
parents: 15081
diff changeset
1158 {
17609
8c878d76d6a4 (x_real_positions, x_set_mouse_color, Fx_list_fonts):
Richard M. Stallman <rms@gnu.org>
parents: 17579
diff changeset
1159 x_uncatch_errors (FRAME_X_DISPLAY (f), count);
15495
94467271b641 (x_real_positions): Don't call x_uncatch_errors twice.
Richard M. Stallman <rms@gnu.org>
parents: 15081
diff changeset
1160 break;
94467271b641 (x_real_positions): Don't call x_uncatch_errors twice.
Richard M. Stallman <rms@gnu.org>
parents: 15081
diff changeset
1161 }
12111
832023e90d4d (x_real_positions): Uncatch and recatch X errors in the loop.
Karl Heuer <kwzh@gnu.org>
parents: 12094
diff changeset
1162
17609
8c878d76d6a4 (x_real_positions, x_set_mouse_color, Fx_list_fonts):
Richard M. Stallman <rms@gnu.org>
parents: 17579
diff changeset
1163 x_uncatch_errors (FRAME_X_DISPLAY (f), count);
7408
65c133b66371 (x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7308
diff changeset
1164 }
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
1165
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1166 *xptr = win_x;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1167 *yptr = win_y;
7408
65c133b66371 (x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7308
diff changeset
1168 }
65c133b66371 (x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7308
diff changeset
1169
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1170 /* Insert a description of internally-recorded parameters of frame X
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1171 into the parameter alist *ALISTPTR that is to be given to the user.
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1172 Only parameters that are specific to the X window system
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1173 and whose values are not correctly recorded in the frame's
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1174 param_alist need to be considered here. */
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1175
21536
468585662fa8 (x_destroy_bitmap): Declare as void, not int.
Karl Heuer <kwzh@gnu.org>
parents: 21267
diff changeset
1176 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1177 x_report_frame_params (f, alistptr)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1178 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1179 Lisp_Object *alistptr;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1180 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1181 char buf[16];
11986
bfdf35b8c34b (x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents: 11962
diff changeset
1182 Lisp_Object tem;
bfdf35b8c34b (x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents: 11962
diff changeset
1183
bfdf35b8c34b (x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents: 11962
diff changeset
1184 /* 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
1185 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
1186 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
1187 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
1188 store_in_alist (alistptr, Qleft, tem);
bfdf35b8c34b (x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents: 11962
diff changeset
1189 else
bfdf35b8c34b (x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents: 11962
diff changeset
1190 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
1191
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1192 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
1193 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
1194 store_in_alist (alistptr, Qtop, tem);
bfdf35b8c34b (x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents: 11962
diff changeset
1195 else
bfdf35b8c34b (x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents: 11962
diff changeset
1196 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
1197
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
1198 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
1199 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
1200 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
1201 make_number (f->output_data.x->internal_border_width));
9182
516fdeee89d6 (x_report_frame_params): Fix format/arg mismatch.
Karl Heuer <kwzh@gnu.org>
parents: 9166
diff changeset
1202 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
1203 store_in_alist (alistptr, Qwindow_id,
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1204 build_string (buf));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1205 #ifdef USE_X_TOOLKIT
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1206 /* 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
1207 if (f->output_data.x->widget)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1208 #endif
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1209 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
1210 store_in_alist (alistptr, Qouter_window_id,
3f48dda0547a (Qouter_window_id): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 23411
diff changeset
1211 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
1212 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
1213 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
1214 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
1215 (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
1216 : 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
1217 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
1218 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
1219
18612
88efccff8970 Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 18594
diff changeset
1220 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
1221 tem = Qnil;
88efccff8970 Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 18594
diff changeset
1222 else
88efccff8970 Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 18594
diff changeset
1223 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
1224 store_in_alist (alistptr, Qparent_id, tem);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1225 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1226
10920
bb3f9aaf0e46 (defined_color): If colormap is full, find closest match.
Richard M. Stallman <rms@gnu.org>
parents: 10742
diff changeset
1227
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1228
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1229 /* 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
1230
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1231 void
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1232 gamma_correct (f, color)
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1233 struct frame *f;
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1234 XColor *color;
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1235 {
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1236 if (f->gamma)
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1237 {
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1238 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
1239 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
1240 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
1241 }
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1242 }
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1243
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1244
28096
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1245 /* 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
1246 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
1247 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
1248 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
1249
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1250 int
28096
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1251 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
1252 struct frame *f;
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1253 char *color_name;
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1254 XColor *color;
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1255 int alloc_p;
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1256 {
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1257 int success_p;
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1258 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
1259 Colormap cmap = FRAME_X_COLORMAP (f);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1260
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1261 BLOCK_INPUT;
28096
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1262 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
1263 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
1264 success_p = x_alloc_nearest_color (f, cmap, color);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1265 UNBLOCK_INPUT;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1266
28096
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1267 return success_p;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1268 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1269
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1270
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1271 /* 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
1272 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
1273 Signal an error if color can't be allocated. */
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1274
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1275 int
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1276 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
1277 FRAME_PTR f;
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1278 Lisp_Object color_name;
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1279 int mono_color;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1280 {
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1281 XColor cdef;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1282
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1283 CHECK_STRING (color_name, 0);
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1284
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1285 #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
1286 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
1287 an important optimization. */
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1288 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
1289 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
1290 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
1291 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
1292 #endif
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1293
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1294 /* 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
1295 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
1296 return mono_color;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1297
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
1298 /* 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
1299 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
1300 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
1301 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
1302
31902
f526f6f002d7 (x_decode_color): Don't return a Lisp_Object.
Gerd Moellmann <gerd@gnu.org>
parents: 31824
diff changeset
1303 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
1304 Fcons (color_name, Qnil)));
f526f6f002d7 (x_decode_color): Don't return a Lisp_Object.
Gerd Moellmann <gerd@gnu.org>
parents: 31824
diff changeset
1305 return 0;
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1306 }
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1307
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1308
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1309
28690
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1310 /* 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
1311 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
1312
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1313 static void
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1314 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
1315 struct frame *f;
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1316 Lisp_Object new_value, old_value;
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1317 {
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1318 if (NILP (new_value))
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1319 f->extra_line_spacing = 0;
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1320 else if (NATNUMP (new_value))
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1321 f->extra_line_spacing = XFASTINT (new_value);
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1322 else
30601
7c995a54a0e8 Replace `illegal' with `invalid'.
Gerd Moellmann <gerd@gnu.org>
parents: 30573
diff changeset
1323 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
1324 Fcons (new_value, Qnil)));
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1325 if (FRAME_VISIBLE_P (f))
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1326 redraw_frame (f);
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1327 }
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1328
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1329
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1330 /* Change the `screen-gamma' frame parameter of frame F. OLD_VALUE is
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1331 the previous value of that parameter, NEW_VALUE is the new value. */
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1332
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1333 static void
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1334 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
1335 struct frame *f;
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1336 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
1337 {
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1338 if (NILP (new_value))
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1339 f->gamma = 0;
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1340 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
1341 /* 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
1342 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
1343 else
30601
7c995a54a0e8 Replace `illegal' with `invalid'.
Gerd Moellmann <gerd@gnu.org>
parents: 30573
diff changeset
1344 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
1345 Fcons (new_value, Qnil)));
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1346
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1347 clear_face_cache (0);
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1348 }
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1349
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1350
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1351 /* Functions called only from `x_set_frame_param'
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1352 to set individual parameters.
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1353
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
1354 If FRAME_X_WINDOW (f) is 0,
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1355 the frame is being created and its X-window does not exist yet.
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1356 In that case, just record the parameter's new value
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1357 in the standard place; do not attempt to change the window. */
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1358
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1359 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1360 x_set_foreground_color (f, arg, oldval)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1361 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1362 Lisp_Object arg, oldval;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1363 {
21779
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1364 unsigned long pixel
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1365 = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f));
21779
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1366
25075
9f5d679349e9 (x_set_mouse_color): Always unload the old color.
Karl Heuer <kwzh@gnu.org>
parents: 24994
diff changeset
1367 unload_color (f, f->output_data.x->foreground_pixel);
21779
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1368 f->output_data.x->foreground_pixel = pixel;
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1369
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
1370 if (FRAME_X_WINDOW (f) != 0)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1371 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1372 BLOCK_INPUT;
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1373 XSetForeground (FRAME_X_DISPLAY (f), f->output_data.x->normal_gc,
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1374 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
1375 XSetBackground (FRAME_X_DISPLAY (f), f->output_data.x->reverse_gc,
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1376 f->output_data.x->foreground_pixel);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1377 UNBLOCK_INPUT;
25593
9aecfcf3cb43 (x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents: 25550
diff changeset
1378 update_face_from_frame_parameter (f, Qforeground_color, arg);
1719
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
1379 if (FRAME_VISIBLE_P (f))
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1380 redraw_frame (f);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1381 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1382 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1383
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1384 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1385 x_set_background_color (f, arg, oldval)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1386 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1387 Lisp_Object arg, oldval;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1388 {
21779
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1389 unsigned long pixel
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1390 = x_decode_color (f, arg, WHITE_PIX_DEFAULT (f));
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1391
25075
9f5d679349e9 (x_set_mouse_color): Always unload the old color.
Karl Heuer <kwzh@gnu.org>
parents: 24994
diff changeset
1392 unload_color (f, f->output_data.x->background_pixel);
21779
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1393 f->output_data.x->background_pixel = pixel;
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1394
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
1395 if (FRAME_X_WINDOW (f) != 0)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1396 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1397 BLOCK_INPUT;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1398 /* The main frame area. */
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1399 XSetBackground (FRAME_X_DISPLAY (f), f->output_data.x->normal_gc,
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1400 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
1401 XSetForeground (FRAME_X_DISPLAY (f), f->output_data.x->reverse_gc,
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1402 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
1403 XSetForeground (FRAME_X_DISPLAY (f), f->output_data.x->cursor_gc,
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1404 f->output_data.x->background_pixel);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1405 XSetWindowBackground (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
1406 f->output_data.x->background_pixel);
7599
880fcef68f73 (x_set_background_color): Set scroll bar backgrounds.
Karl Heuer <kwzh@gnu.org>
parents: 7525
diff changeset
1407 {
880fcef68f73 (x_set_background_color): Set scroll bar backgrounds.
Karl Heuer <kwzh@gnu.org>
parents: 7525
diff changeset
1408 Lisp_Object bar;
880fcef68f73 (x_set_background_color): Set scroll bar backgrounds.
Karl Heuer <kwzh@gnu.org>
parents: 7525
diff changeset
1409 for (bar = FRAME_SCROLL_BARS (f); !NILP (bar);
880fcef68f73 (x_set_background_color): Set scroll bar backgrounds.
Karl Heuer <kwzh@gnu.org>
parents: 7525
diff changeset
1410 bar = XSCROLL_BAR (bar)->next)
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1411 XSetWindowBackground (FRAME_X_DISPLAY (f),
7599
880fcef68f73 (x_set_background_color): Set scroll bar backgrounds.
Karl Heuer <kwzh@gnu.org>
parents: 7525
diff changeset
1412 SCROLL_BAR_X_WINDOW (XSCROLL_BAR (bar)),
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1413 f->output_data.x->background_pixel);
7599
880fcef68f73 (x_set_background_color): Set scroll bar backgrounds.
Karl Heuer <kwzh@gnu.org>
parents: 7525
diff changeset
1414 }
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1415 UNBLOCK_INPUT;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1416
25593
9aecfcf3cb43 (x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents: 25550
diff changeset
1417 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
1418
1719
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
1419 if (FRAME_VISIBLE_P (f))
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1420 redraw_frame (f);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1421 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1422 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1423
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1424 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1425 x_set_mouse_color (f, arg, oldval)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1426 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1427 Lisp_Object arg, oldval;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1428 {
6759
e0938c42218c (syms_of_xfns): Define Vx_cross_pointer_shape.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6610
diff changeset
1429 Cursor cursor, nontext_cursor, mode_cursor, cross_cursor;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1430 Cursor busy_cursor;
17609
8c878d76d6a4 (x_real_positions, x_set_mouse_color, Fx_list_fonts):
Richard M. Stallman <rms@gnu.org>
parents: 17579
diff changeset
1431 int count;
25075
9f5d679349e9 (x_set_mouse_color): Always unload the old color.
Karl Heuer <kwzh@gnu.org>
parents: 24994
diff changeset
1432 unsigned long pixel = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f));
9f5d679349e9 (x_set_mouse_color): Always unload the old color.
Karl Heuer <kwzh@gnu.org>
parents: 24994
diff changeset
1433 unsigned long mask_color = f->output_data.x->background_pixel;
9f5d679349e9 (x_set_mouse_color): Always unload the old color.
Karl Heuer <kwzh@gnu.org>
parents: 24994
diff changeset
1434
9f5d679349e9 (x_set_mouse_color): Always unload the old color.
Karl Heuer <kwzh@gnu.org>
parents: 24994
diff changeset
1435 /* Don't let pointers be invisible. */
21779
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1436 if (mask_color == pixel
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1437 && mask_color == f->output_data.x->background_pixel)
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1438 pixel = f->output_data.x->foreground_pixel;
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1439
25075
9f5d679349e9 (x_set_mouse_color): Always unload the old color.
Karl Heuer <kwzh@gnu.org>
parents: 24994
diff changeset
1440 unload_color (f, f->output_data.x->mouse_pixel);
21779
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1441 f->output_data.x->mouse_pixel = pixel;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1442
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1443 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
1444
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3512
diff changeset
1445 /* It's not okay to crash if the user selects a screwy cursor. */
17609
8c878d76d6a4 (x_real_positions, x_set_mouse_color, Fx_list_fonts):
Richard M. Stallman <rms@gnu.org>
parents: 17579
diff changeset
1446 count = x_catch_errors (FRAME_X_DISPLAY (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
1447
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1448 if (!EQ (Qnil, Vx_pointer_shape))
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1449 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1450 CHECK_NUMBER (Vx_pointer_shape, 0);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1451 cursor = XCreateFontCursor (FRAME_X_DISPLAY (f), XINT (Vx_pointer_shape));
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1452 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1453 else
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1454 cursor = XCreateFontCursor (FRAME_X_DISPLAY (f), XC_xterm);
9703
85ac0e4030d4 (x_window): Pass new arg f to hack_wm_protocols.
Richard M. Stallman <rms@gnu.org>
parents: 9690
diff changeset
1455 x_check_errors (FRAME_X_DISPLAY (f), "bad text pointer cursor: %s");
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1456
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1457 if (!EQ (Qnil, Vx_nontext_pointer_shape))
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1458 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1459 CHECK_NUMBER (Vx_nontext_pointer_shape, 0);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1460 nontext_cursor = XCreateFontCursor (FRAME_X_DISPLAY (f),
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1461 XINT (Vx_nontext_pointer_shape));
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1462 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1463 else
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1464 nontext_cursor = XCreateFontCursor (FRAME_X_DISPLAY (f), XC_left_ptr);
9703
85ac0e4030d4 (x_window): Pass new arg f to hack_wm_protocols.
Richard M. Stallman <rms@gnu.org>
parents: 9690
diff changeset
1465 x_check_errors (FRAME_X_DISPLAY (f), "bad nontext pointer cursor: %s");
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1466
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1467 if (!EQ (Qnil, Vx_busy_pointer_shape))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1468 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1469 CHECK_NUMBER (Vx_busy_pointer_shape, 0);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1470 busy_cursor = XCreateFontCursor (FRAME_X_DISPLAY (f),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1471 XINT (Vx_busy_pointer_shape));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1472 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1473 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1474 busy_cursor = XCreateFontCursor (FRAME_X_DISPLAY (f), XC_watch);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1475 x_check_errors (FRAME_X_DISPLAY (f), "bad busy pointer cursor: %s");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1476
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1477 x_check_errors (FRAME_X_DISPLAY (f), "bad nontext pointer cursor: %s");
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1478 if (!EQ (Qnil, Vx_mode_pointer_shape))
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1479 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1480 CHECK_NUMBER (Vx_mode_pointer_shape, 0);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1481 mode_cursor = XCreateFontCursor (FRAME_X_DISPLAY (f),
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1482 XINT (Vx_mode_pointer_shape));
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1483 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1484 else
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1485 mode_cursor = XCreateFontCursor (FRAME_X_DISPLAY (f), XC_xterm);
9703
85ac0e4030d4 (x_window): Pass new arg f to hack_wm_protocols.
Richard M. Stallman <rms@gnu.org>
parents: 9690
diff changeset
1486 x_check_errors (FRAME_X_DISPLAY (f), "bad modeline pointer cursor: %s");
6759
e0938c42218c (syms_of_xfns): Define Vx_cross_pointer_shape.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6610
diff changeset
1487
7683
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
1488 if (!EQ (Qnil, 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
1489 {
7683
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
1490 CHECK_NUMBER (Vx_sensitive_text_pointer_shape, 0);
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
1491 cross_cursor
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1492 = XCreateFontCursor (FRAME_X_DISPLAY (f),
7683
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
1493 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
1494 }
e0938c42218c (syms_of_xfns): Define Vx_cross_pointer_shape.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6610
diff changeset
1495 else
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1496 cross_cursor = XCreateFontCursor (FRAME_X_DISPLAY (f), XC_crosshair);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1497
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
1498 /* Check and report errors with the above calls. */
9703
85ac0e4030d4 (x_window): Pass new arg f to hack_wm_protocols.
Richard M. Stallman <rms@gnu.org>
parents: 9690
diff changeset
1499 x_check_errors (FRAME_X_DISPLAY (f), "can't set cursor shape: %s");
17609
8c878d76d6a4 (x_real_positions, x_set_mouse_color, Fx_list_fonts):
Richard M. Stallman <rms@gnu.org>
parents: 17579
diff changeset
1500 x_uncatch_errors (FRAME_X_DISPLAY (f), 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
1501
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1502 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1503 XColor fore_color, back_color;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1504
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1505 fore_color.pixel = f->output_data.x->mouse_pixel;
32606
78b4e9f31087 (x_to_xcolors, x_set_mouse_color, lookup_pixel_color)
Gerd Moellmann <gerd@gnu.org>
parents: 32549
diff changeset
1506 x_query_color (f, &fore_color);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1507 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
1508 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
1509
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1510 XRecolorCursor (FRAME_X_DISPLAY (f), cursor,
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1511 &fore_color, &back_color);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1512 XRecolorCursor (FRAME_X_DISPLAY (f), nontext_cursor,
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1513 &fore_color, &back_color);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1514 XRecolorCursor (FRAME_X_DISPLAY (f), mode_cursor,
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1515 &fore_color, &back_color);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1516 XRecolorCursor (FRAME_X_DISPLAY (f), cross_cursor,
32606
78b4e9f31087 (x_to_xcolors, x_set_mouse_color, lookup_pixel_color)
Gerd Moellmann <gerd@gnu.org>
parents: 32549
diff changeset
1517 &fore_color, &back_color);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1518 XRecolorCursor (FRAME_X_DISPLAY (f), busy_cursor,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1519 &fore_color, &back_color);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1520 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1521
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
1522 if (FRAME_X_WINDOW (f) != 0)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1523 XDefineCursor (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), cursor);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1524
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1525 if (cursor != f->output_data.x->text_cursor && f->output_data.x->text_cursor != 0)
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1526 XFreeCursor (FRAME_X_DISPLAY (f), f->output_data.x->text_cursor);
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1527 f->output_data.x->text_cursor = cursor;
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1528
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1529 if (nontext_cursor != f->output_data.x->nontext_cursor
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1530 && f->output_data.x->nontext_cursor != 0)
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1531 XFreeCursor (FRAME_X_DISPLAY (f), f->output_data.x->nontext_cursor);
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1532 f->output_data.x->nontext_cursor = nontext_cursor;
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1533
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1534 if (busy_cursor != f->output_data.x->busy_cursor
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1535 && f->output_data.x->busy_cursor != 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1536 XFreeCursor (FRAME_X_DISPLAY (f), f->output_data.x->busy_cursor);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1537 f->output_data.x->busy_cursor = busy_cursor;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1538
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1539 if (mode_cursor != f->output_data.x->modeline_cursor
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1540 && f->output_data.x->modeline_cursor != 0)
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1541 XFreeCursor (FRAME_X_DISPLAY (f), f->output_data.x->modeline_cursor);
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1542 f->output_data.x->modeline_cursor = mode_cursor;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1543
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1544 if (cross_cursor != f->output_data.x->cross_cursor
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1545 && f->output_data.x->cross_cursor != 0)
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1546 XFreeCursor (FRAME_X_DISPLAY (f), f->output_data.x->cross_cursor);
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1547 f->output_data.x->cross_cursor = cross_cursor;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1548
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1549 XFlush (FRAME_X_DISPLAY (f));
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1550 UNBLOCK_INPUT;
25593
9aecfcf3cb43 (x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents: 25550
diff changeset
1551
9aecfcf3cb43 (x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents: 25550
diff changeset
1552 update_face_from_frame_parameter (f, Qmouse_color, arg);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1553 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1554
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1555 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1556 x_set_cursor_color (f, arg, oldval)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1557 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1558 Lisp_Object arg, oldval;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1559 {
21779
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1560 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
1561 int fore_pixel_allocated_p = 0, pixel_allocated_p = 0;
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1562
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1563 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
1564 {
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1565 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
1566 WHITE_PIX_DEFAULT (f));
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1567 fore_pixel_allocated_p = 1;
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1568 }
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1569 else
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1570 fore_pixel = f->output_data.x->background_pixel;
28355
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1571
21779
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1572 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
1573 pixel_allocated_p = 1;
21779
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1574
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
1575 /* Make sure that the cursor color differs from the background color. */
21779
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1576 if (pixel == f->output_data.x->background_pixel)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1577 {
28355
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1578 if (pixel_allocated_p)
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1579 {
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1580 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
1581 pixel_allocated_p = 0;
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1582 }
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1583
21779
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1584 pixel = f->output_data.x->mouse_pixel;
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1585 if (pixel == fore_pixel)
28355
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1586 {
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1587 if (fore_pixel_allocated_p)
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1588 {
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1589 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
1590 fore_pixel_allocated_p = 0;
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1591 }
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1592 fore_pixel = f->output_data.x->background_pixel;
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1593 }
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1594 }
21779
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1595
25075
9f5d679349e9 (x_set_mouse_color): Always unload the old color.
Karl Heuer <kwzh@gnu.org>
parents: 24994
diff changeset
1596 unload_color (f, f->output_data.x->cursor_foreground_pixel);
28355
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1597 if (!fore_pixel_allocated_p)
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1598 fore_pixel = x_copy_color (f, fore_pixel);
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1599 f->output_data.x->cursor_foreground_pixel = fore_pixel;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1600
25075
9f5d679349e9 (x_set_mouse_color): Always unload the old color.
Karl Heuer <kwzh@gnu.org>
parents: 24994
diff changeset
1601 unload_color (f, f->output_data.x->cursor_pixel);
28355
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1602 if (!pixel_allocated_p)
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1603 pixel = x_copy_color (f, pixel);
21779
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1604 f->output_data.x->cursor_pixel = pixel;
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1605
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
1606 if (FRAME_X_WINDOW (f) != 0)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1607 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1608 BLOCK_INPUT;
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1609 XSetBackground (FRAME_X_DISPLAY (f), f->output_data.x->cursor_gc,
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1610 f->output_data.x->cursor_pixel);
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1611 XSetForeground (FRAME_X_DISPLAY (f), f->output_data.x->cursor_gc,
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1612 fore_pixel);
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1613 UNBLOCK_INPUT;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1614
1719
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
1615 if (FRAME_VISIBLE_P (f))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1616 {
15999
0e148af7d4ec (x_set_cursor_color): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents: 15942
diff changeset
1617 x_update_cursor (f, 0);
0e148af7d4ec (x_set_cursor_color): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents: 15942
diff changeset
1618 x_update_cursor (f, 1);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1619 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1620 }
25593
9aecfcf3cb43 (x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents: 25550
diff changeset
1621
9aecfcf3cb43 (x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents: 25550
diff changeset
1622 update_face_from_frame_parameter (f, Qcursor_color, arg);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1623 }
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
1624
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1625 /* Set the border-color of frame F to value described by ARG.
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1626 ARG can be a string naming a color.
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1627 The border-color is used for the border that is drawn by the X server.
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1628 Note that this does not fully take effect if done before
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1629 F has an x-window; it must be redone when the window is created.
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1630
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1631 Note: this is done in two routines because of the way X10 works.
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1632
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1633 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
1634 and so emacs' border colors may be overridden. */
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1635
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1636 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1637 x_set_border_color (f, arg, oldval)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1638 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1639 Lisp_Object arg, oldval;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1640 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1641 int pix;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1642
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1643 CHECK_STRING (arg, 0);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1644 pix = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f));
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1645 x_set_border_pixel (f, pix);
25593
9aecfcf3cb43 (x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents: 25550
diff changeset
1646 update_face_from_frame_parameter (f, Qborder_color, arg);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1647 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1648
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1649 /* Set the border-color of frame F to pixel value PIX.
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1650 Note that this does not fully take effect if done before
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1651 F has an x-window. */
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1652
21536
468585662fa8 (x_destroy_bitmap): Declare as void, not int.
Karl Heuer <kwzh@gnu.org>
parents: 21267
diff changeset
1653 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1654 x_set_border_pixel (f, pix)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1655 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1656 int pix;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1657 {
21779
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1658 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
1659 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
1660
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1661 if (FRAME_X_WINDOW (f) != 0 && f->output_data.x->border_width > 0)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1662 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1663 BLOCK_INPUT;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1664 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
1665 (unsigned long)pix);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1666 UNBLOCK_INPUT;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1667
1719
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
1668 if (FRAME_VISIBLE_P (f))
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1669 redraw_frame (f);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1670 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1671 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1672
28347
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1673
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1674 /* 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
1675 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
1676 of the bar cursor. */
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1677
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1678 enum text_cursor_kinds
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1679 x_specified_cursor_type (arg, width)
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1680 Lisp_Object arg;
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1681 int *width;
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1682 {
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1683 enum text_cursor_kinds type;
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1684
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
1685 if (EQ (arg, Qbar))
10742
e4d6f6f1fc17 (x_set_cursor_type): Set cursor_width field.
Richard M. Stallman <rms@gnu.org>
parents: 10717
diff changeset
1686 {
28347
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1687 type = BAR_CURSOR;
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1688 *width = 2;
10742
e4d6f6f1fc17 (x_set_cursor_type): Set cursor_width field.
Richard M. Stallman <rms@gnu.org>
parents: 10717
diff changeset
1689 }
28050
79a67f9da183 (x_set_cursor_type): If ARG is nil, give frame no cursor.
Gerd Moellmann <gerd@gnu.org>
parents: 28044
diff changeset
1690 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
1691 && 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
1692 && 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
1693 && XINT (XCDR (arg)) >= 0)
10742
e4d6f6f1fc17 (x_set_cursor_type): Set cursor_width field.
Richard M. Stallman <rms@gnu.org>
parents: 10717
diff changeset
1694 {
28347
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1695 type = BAR_CURSOR;
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1696 *width = XINT (XCDR (arg));
10742
e4d6f6f1fc17 (x_set_cursor_type): Set cursor_width field.
Richard M. Stallman <rms@gnu.org>
parents: 10717
diff changeset
1697 }
28050
79a67f9da183 (x_set_cursor_type): If ARG is nil, give frame no cursor.
Gerd Moellmann <gerd@gnu.org>
parents: 28044
diff changeset
1698 else if (NILP (arg))
28347
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1699 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
1700 else
10742
e4d6f6f1fc17 (x_set_cursor_type): Set cursor_width field.
Richard M. Stallman <rms@gnu.org>
parents: 10717
diff changeset
1701 /* 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
1702 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
1703 .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
1704 type = FILLED_BOX_CURSOR;
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1705
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1706 return type;
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1707 }
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1708
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1709 void
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1710 x_set_cursor_type (f, arg, oldval)
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1711 FRAME_PTR f;
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1712 Lisp_Object arg, oldval;
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1713 {
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1714 int width;
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1715
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1716 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
1717 f->output_data.x->cursor_width = width;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
1718
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
1719 /* 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
1720 often do people change cursor types? */
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
1721 update_mode_lines++;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
1722 }
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
1723
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
1724 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1725 x_set_icon_type (f, arg, oldval)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1726 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1727 Lisp_Object arg, oldval;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1728 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1729 int result;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1730
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
1731 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
1732 {
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
1733 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
1734 return;
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
1735 }
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
1736 else if (!STRINGP (oldval) && EQ (oldval, Qnil) == EQ (arg, Qnil))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1737 return;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1738
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1739 BLOCK_INPUT;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 436
diff changeset
1740 if (NILP (arg))
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1741 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
1742 (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
1743 ? f->icon_name
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1744 : f->name))->data);
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
1745 else
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
1746 result = x_bitmap_icon (f, arg);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1747
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1748 if (result)
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1749 {
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
1750 UNBLOCK_INPUT;
9353
30659ed71a1b (x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents: 9329
diff changeset
1751 error ("No icon window available");
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1752 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1753
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1754 XFlush (FRAME_X_DISPLAY (f));
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1755 UNBLOCK_INPUT;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1756 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1757
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
1758 /* Return non-nil if frame F wants a bitmap icon. */
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
1759
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
1760 Lisp_Object
9353
30659ed71a1b (x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents: 9329
diff changeset
1761 x_icon_type (f)
30659ed71a1b (x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents: 9329
diff changeset
1762 FRAME_PTR f;
30659ed71a1b (x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents: 9329
diff changeset
1763 {
30659ed71a1b (x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents: 9329
diff changeset
1764 Lisp_Object tem;
30659ed71a1b (x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents: 9329
diff changeset
1765
30659ed71a1b (x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents: 9329
diff changeset
1766 tem = assq_no_quit (Qicon_type, f->param_alist);
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
1767 if (CONSP (tem))
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1768 return XCDR (tem);
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
1769 else
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
1770 return Qnil;
9353
30659ed71a1b (x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents: 9329
diff changeset
1771 }
30659ed71a1b (x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents: 9329
diff changeset
1772
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1773 void
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1774 x_set_icon_name (f, arg, oldval)
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1775 struct frame *f;
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1776 Lisp_Object arg, oldval;
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1777 {
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1778 int result;
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1779
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1780 if (STRINGP (arg))
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1781 {
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1782 if (STRINGP (oldval) && EQ (Fstring_equal (oldval, arg), Qt))
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1783 return;
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1784 }
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1785 else if (!STRINGP (oldval) && EQ (oldval, Qnil) == EQ (arg, Qnil))
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1786 return;
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1787
12276
2e376a4397bc (x_report_frame_params, x_set_icon_type, x_set_icon_name)
Richard M. Stallman <rms@gnu.org>
parents: 12209
diff changeset
1788 f->icon_name = arg;
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1789
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1790 if (f->output_data.x->icon_bitmap != 0)
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1791 return;
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1792
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1793 BLOCK_INPUT;
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1794
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1795 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
1796 (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
1797 ? f->icon_name
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
1798 : !NILP (f->title)
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
1799 ? f->title
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1800 : f->name))->data);
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1801
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1802 if (result)
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1803 {
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1804 UNBLOCK_INPUT;
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1805 error ("No icon window available");
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1806 }
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1807
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1808 XFlush (FRAME_X_DISPLAY (f));
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1809 UNBLOCK_INPUT;
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1810 }
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
1811
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1812 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1813 x_set_font (f, arg, oldval)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1814 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1815 Lisp_Object arg, oldval;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1816 {
3075
878381e48b0d * xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents: 3048
diff changeset
1817 Lisp_Object result;
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
1818 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
1819 Lisp_Object frame;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1820
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1821 CHECK_STRING (arg, 1);
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1822
21555
0927f341e390 (x_set_font): Give 2nd arg nil to Fquery_fontset.
Kenichi Handa <handa@m17n.org>
parents: 21549
diff changeset
1823 fontset_name = Fquery_fontset (arg, Qnil);
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
1824
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1825 BLOCK_INPUT;
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
1826 result = (STRINGP (fontset_name)
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
1827 ? x_new_fontset (f, XSTRING (fontset_name)->data)
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
1828 : x_new_font (f, XSTRING (arg)->data));
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1829 UNBLOCK_INPUT;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1830
3075
878381e48b0d * xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents: 3048
diff changeset
1831 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
1832 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
1833 else if (EQ (result, Qt))
24589
316c00e8bc62 (x_set_font): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 24412
diff changeset
1834 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
1835 else if (STRINGP (result))
878381e48b0d * xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents: 3048
diff changeset
1836 {
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1837 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
1838 recompute_basic_faces (f);
878381e48b0d * xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents: 3048
diff changeset
1839 }
878381e48b0d * xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents: 3048
diff changeset
1840 else
878381e48b0d * xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents: 3048
diff changeset
1841 abort ();
18631
62bcc6aff013 (x_set_font): Funcall Qface_set_after_frame_default.
Richard M. Stallman <rms@gnu.org>
parents: 18612
diff changeset
1842
25363
bf0488244270 Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents: 25335
diff changeset
1843 do_pending_window_change (0);
25153
fc8435c2ae0e (x_set_internal_border_width):
Richard M. Stallman <rms@gnu.org>
parents: 25082
diff changeset
1844
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1845 /* 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
1846 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
1847 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
1848 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
1849 null widget which gives a segfault. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1850 if (FRAME_FACE_CACHE (f))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1851 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1852 XSETFRAME (frame, f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1853 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
1854 }
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1855 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1856
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1857 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1858 x_set_border_width (f, arg, oldval)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1859 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1860 Lisp_Object arg, oldval;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1861 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1862 CHECK_NUMBER (arg, 0);
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1863
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1864 if (XINT (arg) == f->output_data.x->border_width)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1865 return;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1866
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
1867 if (FRAME_X_WINDOW (f) != 0)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1868 error ("Cannot change the border width of a window");
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1869
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1870 f->output_data.x->border_width = XINT (arg);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1871 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1872
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1873 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1874 x_set_internal_border_width (f, arg, oldval)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1875 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1876 Lisp_Object arg, oldval;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1877 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1878 int old = f->output_data.x->internal_border_width;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1879
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1880 CHECK_NUMBER (arg, 0);
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1881 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
1882 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
1883 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
1884
16396
4e4cc27b2a2a (x_set_internal_border_width): Only change
Richard M. Stallman <rms@gnu.org>
parents: 16357
diff changeset
1885 #ifdef USE_X_TOOLKIT
16351
ac552926fc7e (x_set_internal_border_width, Fx_create_frame):
Richard M. Stallman <rms@gnu.org>
parents: 16305
diff changeset
1886 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
1887 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
1888 #endif
16351
ac552926fc7e (x_set_internal_border_width, Fx_create_frame):
Richard M. Stallman <rms@gnu.org>
parents: 16305
diff changeset
1889
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1890 if (f->output_data.x->internal_border_width == old)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1891 return;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1892
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
1893 if (FRAME_X_WINDOW (f) != 0)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1894 {
5899
4e8f26a0f2b7 *** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 5721
diff changeset
1895 x_set_window_size (f, 0, f->width, f->height);
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1896 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
1897 do_pending_window_change (0);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1898 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1899 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1900
2136
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
1901 void
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
1902 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
1903 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
1904 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
1905 {
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
1906 Lisp_Object frame;
9285
75f1c0d90b3d (x_set_frame_parameters, x_set_visibility, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents: 9240
diff changeset
1907 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
1908
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
1909 if (NILP (value))
5899
4e8f26a0f2b7 *** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 5721
diff changeset
1910 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
1911 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
1912 Ficonify_frame (frame);
9bce20507666 Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents: 2283
diff changeset
1913 else
2136
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
1914 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
1915 }
31930
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
1916
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
1917
31930
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
1918 /* 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
1919
2136
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
1920 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
1921 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
1922 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
1923 int n;
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
1924 {
3477
c079a2d6cf0e (x_set_menu_bar_lines_1): Adjust just the uppermost child
Richard M. Stallman <rms@gnu.org>
parents: 3447
diff changeset
1925 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
1926
9329
4e1048594e7f (x_set_menu_bar_lines_1): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents: 9327
diff changeset
1927 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
1928 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
1929
28010
5e3c139838a6 (x_set_menu_bar_lines_1): Adjust window's orig_top and
Gerd Moellmann <gerd@gnu.org>
parents: 28001
diff changeset
1930 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
1931 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
1932 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
1933 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
1934
3477
c079a2d6cf0e (x_set_menu_bar_lines_1): Adjust just the uppermost child
Richard M. Stallman <rms@gnu.org>
parents: 3447
diff changeset
1935 /* 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
1936 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
1937 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
1938
c079a2d6cf0e (x_set_menu_bar_lines_1): Adjust just the uppermost child
Richard M. Stallman <rms@gnu.org>
parents: 3447
diff changeset
1939 /* 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
1940 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
1941 {
3477
c079a2d6cf0e (x_set_menu_bar_lines_1): Adjust just the uppermost child
Richard M. Stallman <rms@gnu.org>
parents: 3447
diff changeset
1942 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
1943 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
1944 }
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
1945 }
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
1946
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
1947 void
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
1948 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
1949 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
1950 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
1951 {
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
1952 int nlines;
25715
feaedc03dbc8 (x_set_background_color): Remove unused variable(s).
Gerd Moellmann <gerd@gnu.org>
parents: 25691
diff changeset
1953 #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
1954 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
1955 #endif
2136
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
1956
2880
9a78169e44df * xfns.c (x_set_menu_bar_lines): Minibuffer-only frames can't have
Jim Blandy <jimb@redhat.com>
parents: 2842
diff changeset
1957 /* 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
1958 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
1959 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
1960 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
1961 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
1962 return;
9a78169e44df * xfns.c (x_set_menu_bar_lines): Minibuffer-only frames can't have
Jim Blandy <jimb@redhat.com>
parents: 2842
diff changeset
1963
9103
948e8acb6990 (x_set_frame_parameters, x_set_menu_bar_lines, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents: 9022
diff changeset
1964 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
1965 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
1966 else
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
1967 nlines = 0;
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
1968
17556
c0f8f4264f7a (x_set_menu_bar_lines): Increment windows_or_buffers_changed.
Richard M. Stallman <rms@gnu.org>
parents: 17106
diff changeset
1969 /* 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
1970 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
1971
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
1972 #ifdef USE_X_TOOLKIT
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
1973 FRAME_MENU_BAR_LINES (f) = 0;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
1974 if (nlines)
12832
0d750e41c4f2 (x_set_menu_bar_lines) [USE_X_TOOLKIT]: When turning
Richard M. Stallman <rms@gnu.org>
parents: 12773
diff changeset
1975 {
0d750e41c4f2 (x_set_menu_bar_lines) [USE_X_TOOLKIT]: When turning
Richard M. Stallman <rms@gnu.org>
parents: 12773
diff changeset
1976 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
1977 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
1978 /* 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
1979 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
1980 }
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
1981 else
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
1982 {
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
1983 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
1984 free_frame_menubar (f);
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
1985 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
1986 if (FRAME_X_P (f))
714433bead7f (x_set_menu_bar_lines) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents: 13508
diff changeset
1987 f->output_data.x->menubar_widget = 0;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
1988 }
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
1989 #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
1990 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
1991 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
1992 #endif /* not USE_X_TOOLKIT */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1993 adjust_glyphs (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1994 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1995
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1996
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1997 /* 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
1998 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
1999 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
2000 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
2001 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
2002
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2003 void
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25528
diff changeset
2004 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
2005 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2006 Lisp_Object value, oldval;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2007 {
31930
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
2008 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
2009 Lisp_Object root_window;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2010
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2011 /* 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
2012 if (INTEGERP (value) && XINT (value) >= 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2013 nlines = XFASTINT (value);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2014 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2015 nlines = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2016
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2017 /* 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
2018 ++windows_or_buffers_changed;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2019
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25528
diff changeset
2020 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
2021
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
2022 /* 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
2023 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
2024 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
2025 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
2026 {
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
2027 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
2028 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
2029 }
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
2030
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25528
diff changeset
2031 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
2032 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
2033 adjust_glyphs (f);
31999
d862c73ea0d5 (x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents: 31930
diff changeset
2034
d862c73ea0d5 (x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents: 31930
diff changeset
2035 /* 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
2036 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
2037 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
2038 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
2039 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
2040 below the menu bar. */
d862c73ea0d5 (x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents: 31930
diff changeset
2041 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
2042 {
d862c73ea0d5 (x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents: 31930
diff changeset
2043 updating_frame = f;
d862c73ea0d5 (x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents: 31930
diff changeset
2044 clear_frame ();
33601
1ee8ea329b7b (x_set_tool_bar_lines): When clearing the frame, also
Gerd Moellmann <gerd@gnu.org>
parents: 33589
diff changeset
2045 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
2046 updating_frame = NULL;
d862c73ea0d5 (x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents: 31930
diff changeset
2047 }
33747
e0e2461a24fe (x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents: 33713
diff changeset
2048
e0e2461a24fe (x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents: 33713
diff changeset
2049 /* 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
2050 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
2051 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
2052 if (delta < 0)
e0e2461a24fe (x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents: 33713
diff changeset
2053 {
e0e2461a24fe (x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents: 33713
diff changeset
2054 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
2055 int width = PIXEL_WIDTH (f);
e0e2461a24fe (x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents: 33713
diff changeset
2056 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
2057
e0e2461a24fe (x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents: 33713
diff changeset
2058 BLOCK_INPUT;
e0e2461a24fe (x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents: 33713
diff changeset
2059 XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
e0e2461a24fe (x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents: 33713
diff changeset
2060 0, y, width, height, False);
e0e2461a24fe (x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents: 33713
diff changeset
2061 UNBLOCK_INPUT;
e0e2461a24fe (x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents: 33713
diff changeset
2062 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2063 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2064
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2065
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2066 /* 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
2067 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
2068 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
2069 the frame parameter. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2070
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2071 void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2072 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
2073 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2074 Lisp_Object value, oldval;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2075 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2076 unsigned long pixel;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2077
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2078 if (STRINGP (value))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2079 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
2080 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2081 pixel = -1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2082
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2083 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
2084 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
2085
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2086 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
2087 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
2088 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2089 /* 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
2090 if (condemn_scroll_bars_hook)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2091 (*condemn_scroll_bars_hook) (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2092 if (judge_scroll_bars_hook)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2093 (*judge_scroll_bars_hook) (f);
25593
9aecfcf3cb43 (x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents: 25550
diff changeset
2094
9aecfcf3cb43 (x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents: 25550
diff changeset
2095 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
2096 redraw_frame (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2097 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2098 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2099
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2100
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2101 /* 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
2102 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
2103 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
2104 parameter. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2105
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2106 void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2107 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
2108 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2109 Lisp_Object value, oldval;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2110 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2111 unsigned long pixel;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2112
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2113 if (STRINGP (value))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2114 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
2115 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2116 pixel = -1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2117
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2118 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
2119 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
2120
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2121 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
2122 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
2123 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2124 /* 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
2125 if (condemn_scroll_bars_hook)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2126 (*condemn_scroll_bars_hook) (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2127 if (judge_scroll_bars_hook)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2128 (*judge_scroll_bars_hook) (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2129
25593
9aecfcf3cb43 (x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents: 25550
diff changeset
2130 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
2131 redraw_frame (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2132 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2133 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2134
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2135
30383
2bec5f82f5d0 Correct typo in a comment.
Eli Zaretskii <eliz@gnu.org>
parents: 30355
diff changeset
2136 /* 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
2137 XICCC (X Inter Client Communication Conventions).
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2138
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2139 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
2140 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
2141 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
2142 should be freed by `xfree' by a caller.
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2143
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2144 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
2145
30354
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2146 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
2147 which means that the `encoding' of the result can be `STRING'.
30354
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2148 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
2149 the result should be `COMPOUND_TEXT'. */
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2150
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2151 unsigned char *
30354
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2152 x_encode_text (string, coding_system, text_bytes, stringp)
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2153 Lisp_Object string, coding_system;
30354
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2154 int *text_bytes, *stringp;
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2155 {
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2156 unsigned char *str = XSTRING (string)->data;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2157 int chars = XSTRING (string)->size;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2158 int bytes = STRING_BYTES (XSTRING (string));
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2159 int charset_info;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2160 int bufsize;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2161 unsigned char *buf;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2162 struct coding_system coding;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2163
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2164 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
2165 if (charset_info == 0)
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2166 {
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2167 /* 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
2168 *text_bytes = bytes;
30354
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2169 *stringp = 1;
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2170 return str;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2171 }
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2172
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2173 setup_coding_system (coding_system, &coding);
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2174 coding.src_multibyte = 1;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2175 coding.dst_multibyte = 0;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2176 coding.mode |= CODING_MODE_LAST_BLOCK;
30354
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2177 if (coding.type == coding_type_iso2022)
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2178 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
2179 /* 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
2180 coding.composing = COMPOSITION_DISABLED;
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2181 bufsize = encoding_buffer_size (&coding, bytes);
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2182 buf = (unsigned char *) xmalloc (bufsize);
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2183 encode_coding (&coding, str, buf, bytes, bufsize);
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2184 *text_bytes = coding.produced;
30354
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2185 *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
2186 return buf;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2187 }
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2188
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2189
4650
d81041bb1e3d comment fix
David J. MacKenzie <djm@gnu.org>
parents: 4629
diff changeset
2190 /* 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
2191 x_id_name.
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2192
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2193 If EXPLICIT is non-zero, that indicates that lisp code is setting the
4650
d81041bb1e3d comment fix
David J. MacKenzie <djm@gnu.org>
parents: 4629
diff changeset
2194 name; if NAME is a string, set F's name to NAME and set
d81041bb1e3d comment fix
David J. MacKenzie <djm@gnu.org>
parents: 4629
diff changeset
2195 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
2196
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2197 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
2198 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
2199 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
2200
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2201 void
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2202 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
2203 struct frame *f;
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2204 Lisp_Object name;
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2205 int explicit;
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2206 {
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2207 /* 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
2208 Emacs redisplay code. */
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2209 if (explicit)
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2210 {
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2211 /* 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
2212 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
2213 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
2214 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
2215
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2216 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
2217 }
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2218 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
2219 return;
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2220
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2221 /* 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
2222 if (NILP (name))
8090
bb03e344f07e (x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents: 7989
diff changeset
2223 {
bb03e344f07e (x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents: 7989
diff changeset
2224 /* 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
2225 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
2226 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
2227 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
2228 return;
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
2229 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
2230 }
833
14748faa4f17 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 817
diff changeset
2231 else
1018
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2232 CHECK_STRING (name, 0);
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2233
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2234 /* 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
2235 if (! NILP (Fstring_equal (name, f->name)))
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
2236 return;
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
2237
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2238 f->name = name;
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2239
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2240 /* 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
2241 the name parameter. */
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2242 if (! NILP (f->title))
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2243 name = f->title;
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2244
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
2245 if (FRAME_X_WINDOW (f))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2246 {
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 700
diff changeset
2247 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
2248 #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
2249 {
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
2250 XTextProperty text, icon;
30354
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2251 int bytes, stringp;
30355
36c049a9730b *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30354
diff changeset
2252 Lisp_Object coding_system;
36c049a9730b *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30354
diff changeset
2253
36c049a9730b *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30354
diff changeset
2254 coding_system = Vlocale_coding_system;
36c049a9730b *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30354
diff changeset
2255 if (NILP (coding_system))
36c049a9730b *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30354
diff changeset
2256 coding_system = Qcompound_text;
36c049a9730b *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30354
diff changeset
2257 text.value = x_encode_text (name, coding_system, &bytes, &stringp);
30354
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2258 text.encoding = (stringp ? XA_STRING
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2259 : 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
2260 text.format = 8;
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2261 text.nitems = bytes;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2262
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2263 if (NILP (f->icon_name))
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2264 {
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2265 icon = text;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2266 }
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2267 else
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2268 {
30355
36c049a9730b *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30354
diff changeset
2269 icon.value = x_encode_text (f->icon_name, coding_system,
30354
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2270 &bytes, &stringp);
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2271 icon.encoding = (stringp ? XA_STRING
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2272 : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT);
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2273 icon.format = 8;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2274 icon.nitems = bytes;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2275 }
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
2276 #ifdef USE_X_TOOLKIT
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
2277 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
2278 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
2279 XSetWMIconName (FRAME_X_DISPLAY (f), XtWindow (f->output_data.x->widget),
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
2280 &icon);
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
2281 #else /* not USE_X_TOOLKIT */
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
2282 XSetWMName (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), &text);
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
2283 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
2284 #endif /* not USE_X_TOOLKIT */
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2285 if (!NILP (f->icon_name)
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2286 && icon.value != XSTRING (f->icon_name)->data)
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2287 xfree (icon.value);
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2288 if (text.value != XSTRING (name)->data)
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2289 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
2290 }
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
2291 #else /* not HAVE_X11R4 */
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
2292 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
2293 XSTRING (name)->data);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
2294 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
2295 XSTRING (name)->data);
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
2296 #endif /* not HAVE_X11R4 */
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 700
diff changeset
2297 UNBLOCK_INPUT;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2298 }
1018
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2299 }
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2300
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2301 /* 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
2302 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
2303 redisplay code. */
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2304 void
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2305 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
2306 FRAME_PTR f;
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2307 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
2308 {
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2309 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
2310 }
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2311
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2312 /* 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
2313 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
2314 lisp code. */
1125
059624bf9bf0 Declare x_implicitly_set_name to be void.
Jim Blandy <jimb@redhat.com>
parents: 1096
diff changeset
2315 void
1018
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2316 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
2317 FRAME_PTR f;
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2318 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
2319 {
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2320 x_set_name (f, arg, 0);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2321 }
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2322
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2323 /* 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
2324 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
2325
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2326 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
2327 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
2328 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
2329
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2330 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
2331 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
2332 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
2333
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2334 void
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
2335 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
2336 struct frame *f;
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
2337 Lisp_Object name, old_name;
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2338 {
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2339 /* 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
2340 if (EQ (name, f->title))
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2341 return;
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2342
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2343 update_mode_lines = 1;
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2344
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2345 f->title = name;
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2346
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2347 if (NILP (name))
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2348 name = f->name;
16732
f52c4fd47f03 (x_set_title): Check data type of NAME.
Richard M. Stallman <rms@gnu.org>
parents: 16682
diff changeset
2349 else
f52c4fd47f03 (x_set_title): Check data type of NAME.
Richard M. Stallman <rms@gnu.org>
parents: 16682
diff changeset
2350 CHECK_STRING (name, 0);
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2351
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2352 if (FRAME_X_WINDOW (f))
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2353 {
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2354 BLOCK_INPUT;
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2355 #ifdef HAVE_X11R4
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2356 {
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2357 XTextProperty text, icon;
30354
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2358 int bytes, stringp;
30355
36c049a9730b *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30354
diff changeset
2359 Lisp_Object coding_system;
36c049a9730b *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30354
diff changeset
2360
36c049a9730b *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30354
diff changeset
2361 coding_system = Vlocale_coding_system;
36c049a9730b *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30354
diff changeset
2362 if (NILP (coding_system))
36c049a9730b *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30354
diff changeset
2363 coding_system = Qcompound_text;
36c049a9730b *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30354
diff changeset
2364 text.value = x_encode_text (name, coding_system, &bytes, &stringp);
30354
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2365 text.encoding = (stringp ? XA_STRING
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2366 : 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
2367 text.format = 8;
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2368 text.nitems = bytes;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2369
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2370 if (NILP (f->icon_name))
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2371 {
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2372 icon = text;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2373 }
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2374 else
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2375 {
30355
36c049a9730b *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30354
diff changeset
2376 icon.value = x_encode_text (f->icon_name, coding_system,
30354
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2377 &bytes, &stringp);
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2378 icon.encoding = (stringp ? XA_STRING
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2379 : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT);
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2380 icon.format = 8;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2381 icon.nitems = bytes;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2382 }
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2383 #ifdef USE_X_TOOLKIT
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2384 XSetWMName (FRAME_X_DISPLAY (f),
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2385 XtWindow (f->output_data.x->widget), &text);
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2386 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
2387 &icon);
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2388 #else /* not USE_X_TOOLKIT */
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2389 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
2390 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
2391 #endif /* not USE_X_TOOLKIT */
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2392 if (!NILP (f->icon_name)
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2393 && icon.value != XSTRING (f->icon_name)->data)
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2394 xfree (icon.value);
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2395 if (text.value != XSTRING (name)->data)
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2396 xfree (text.value);
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2397 }
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2398 #else /* not HAVE_X11R4 */
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2399 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
2400 XSTRING (name)->data);
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2401 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
2402 XSTRING (name)->data);
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2403 #endif /* not HAVE_X11R4 */
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2404 UNBLOCK_INPUT;
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2405 }
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2406 }
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2407
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2408 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2409 x_set_autoraise (f, arg, oldval)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2410 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2411 Lisp_Object arg, oldval;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2412 {
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2413 f->auto_raise = !EQ (Qnil, arg);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2414 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2415
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2416 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2417 x_set_autolower (f, arg, oldval)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2418 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2419 Lisp_Object arg, oldval;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2420 {
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2421 f->auto_lower = !EQ (Qnil, arg);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2422 }
1719
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
2423
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
2424 void
9580
bcc9342cf633 (x_set_unsplittable): New function.
Karl Heuer <kwzh@gnu.org>
parents: 9563
diff changeset
2425 x_set_unsplittable (f, arg, oldval)
bcc9342cf633 (x_set_unsplittable): New function.
Karl Heuer <kwzh@gnu.org>
parents: 9563
diff changeset
2426 struct frame *f;
bcc9342cf633 (x_set_unsplittable): New function.
Karl Heuer <kwzh@gnu.org>
parents: 9563
diff changeset
2427 Lisp_Object arg, oldval;
bcc9342cf633 (x_set_unsplittable): New function.
Karl Heuer <kwzh@gnu.org>
parents: 9563
diff changeset
2428 {
bcc9342cf633 (x_set_unsplittable): New function.
Karl Heuer <kwzh@gnu.org>
parents: 9563
diff changeset
2429 f->no_split = !NILP (arg);
bcc9342cf633 (x_set_unsplittable): New function.
Karl Heuer <kwzh@gnu.org>
parents: 9563
diff changeset
2430 }
bcc9342cf633 (x_set_unsplittable): New function.
Karl Heuer <kwzh@gnu.org>
parents: 9563
diff changeset
2431
bcc9342cf633 (x_set_unsplittable): New function.
Karl Heuer <kwzh@gnu.org>
parents: 9563
diff changeset
2432 void
1994
73ce9dd21093 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1932
diff changeset
2433 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
2434 struct frame *f;
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
2435 Lisp_Object arg, oldval;
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
2436 {
16254
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
2437 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
2438 || (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
2439 || (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
2440 || (!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
2441 {
16254
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
2442 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
2443 = (NILP (arg)
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
2444 ? vertical_scroll_bar_none
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
2445 : EQ (Qright, arg)
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
2446 ? vertical_scroll_bar_right
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
2447 : 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
2448
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
2449 /* 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
2450 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
2451 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
2452 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
2453 if (FRAME_X_WINDOW (f))
5899
4e8f26a0f2b7 *** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 5721
diff changeset
2454 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
2455 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
2456 }
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
2457 }
8942
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
2458
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
2459 void
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
2460 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
2461 struct frame *f;
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
2462 Lisp_Object arg, oldval;
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
2463 {
18594
5ca5ff1c74eb (x_set_scroll_bar_width): By default, use enough
Richard M. Stallman <rms@gnu.org>
parents: 18114
diff changeset
2464 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
2465
9166
44b44e900cf1 (x_set_scroll_bar_width): Nil now means 2 columns' worth of pixels.
Karl Heuer <kwzh@gnu.org>
parents: 9103
diff changeset
2466 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
2467 {
25511
9bc9d4d6c716 (x_set_scroll_bar_width): Change conditional compilation
Gerd Moellmann <gerd@gnu.org>
parents: 25464
diff changeset
2468 #ifdef USE_TOOLKIT_SCROLL_BARS
9bc9d4d6c716 (x_set_scroll_bar_width): Change conditional compilation
Gerd Moellmann <gerd@gnu.org>
parents: 25464
diff changeset
2469 /* 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
2470 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
2471 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
2472 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
2473 #else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2474 /* 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
2475 character width. */
18594
5ca5ff1c74eb (x_set_scroll_bar_width): By default, use enough
Richard M. Stallman <rms@gnu.org>
parents: 18114
diff changeset
2476 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
2477
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2478 /* 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
2479 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
2480 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
2481 #endif
18594
5ca5ff1c74eb (x_set_scroll_bar_width): By default, use enough
Richard M. Stallman <rms@gnu.org>
parents: 18114
diff changeset
2482
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
2483 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
2484 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
2485 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
2486 }
44b44e900cf1 (x_set_scroll_bar_width): Nil now means 2 columns' worth of pixels.
Karl Heuer <kwzh@gnu.org>
parents: 9103
diff changeset
2487 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
2488 && 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
2489 {
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
2490 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
2491 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
2492
8942
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
2493 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
2494 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
2495 if (FRAME_X_WINDOW (f))
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
2496 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
2497 }
16302
025b3dc7a6ba (Fx_create_frame): Default Qinternal_border_width to 1.
Richard M. Stallman <rms@gnu.org>
parents: 16254
diff changeset
2498
25363
bf0488244270 Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents: 25335
diff changeset
2499 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
2500 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
2501 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
2502 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2503
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2504
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2505
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2506 /* Subroutines of creating an X frame. */
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2507
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2508 /* 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
2509 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
2510
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
2511 static void
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
2512 validate_x_resource_name ()
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
2513 {
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2514 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
2515 /* 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
2516 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
2517 /* 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
2518 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
2519 Lisp_Object new;
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2520 int i;
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2521
16966
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
2522 if (!STRINGP (Vx_resource_class))
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
2523 Vx_resource_class = build_string (EMACS_CLASS);
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
2524
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
2525 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
2526 {
5b784d881c0f (validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents: 7408
diff changeset
2527 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
2528 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
2529
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 20629
diff changeset
2530 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
2531
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2532 /* 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
2533 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
2534 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
2535 {
5b784d881c0f (validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents: 7408
diff changeset
2536 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
2537 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
2538 || (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
2539 || (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
2540 || c == '-' || c == '_'))
11353
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2541 bad_count++;
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2542 else
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2543 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
2544 }
5b784d881c0f (validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents: 7408
diff changeset
2545 }
5b784d881c0f (validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents: 7408
diff changeset
2546 else
11353
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2547 /* 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
2548 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
2549
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2550 /* 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
2551 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
2552 return;
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2553
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2554 /* 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
2555 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
2556 || (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
2557 {
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2558 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
2559 return;
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2560 }
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2561
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2562 /* 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
2563 with underscores. */
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2564
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2565 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
2566
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2567 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
2568 {
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2569 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
2570 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
2571 || (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
2572 || (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
2573 || c == '-' || c == '_'))
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2574 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
2575 }
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
2576 }
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
2577
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
2578
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2579 extern char *x_get_string_resource ();
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2580
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
2581 DEFUN ("x-get-resource", Fx_get_resource, Sx_get_resource, 2, 4, 0,
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
2582 "Return the value of ATTRIBUTE, of class CLASS, from the X defaults database.\n\
8961
940ca63c26c8 (Fx_get_resource): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8942
diff changeset
2583 This uses `INSTANCE.ATTRIBUTE' as the key and `Emacs.CLASS' as the\n\
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
2584 class, where INSTANCE is the name under which Emacs was invoked, or\n\
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
2585 the name specified by the `-name' or `-rn' command-line arguments.\n\
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2586 \n\
1733
2d41a3d7b9a6 (Fx_get_resource): Use EMACS_CLASS to make class_key
Richard M. Stallman <rms@gnu.org>
parents: 1719
diff changeset
2587 The optional arguments COMPONENT and SUBCLASS add to the key and the\n\
2d41a3d7b9a6 (Fx_get_resource): Use EMACS_CLASS to make class_key
Richard M. Stallman <rms@gnu.org>
parents: 1719
diff changeset
2588 class, respectively. You must specify both of them or neither.\n\
8961
940ca63c26c8 (Fx_get_resource): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8942
diff changeset
2589 If you specify them, the key is `INSTANCE.COMPONENT.ATTRIBUTE'\n\
940ca63c26c8 (Fx_get_resource): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8942
diff changeset
2590 and the class is `Emacs.CLASS.SUBCLASS'.")
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
2591 (attribute, class, component, subclass)
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
2592 Lisp_Object attribute, class, component, subclass;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2593 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2594 register char *value;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2595 char *name_key;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2596 char *class_key;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2597
2999
33c820044087 (check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2964
diff changeset
2598 check_x ();
33c820044087 (check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2964
diff changeset
2599
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2600 CHECK_STRING (attribute, 0);
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
2601 CHECK_STRING (class, 0);
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
2602
1733
2d41a3d7b9a6 (Fx_get_resource): Use EMACS_CLASS to make class_key
Richard M. Stallman <rms@gnu.org>
parents: 1719
diff changeset
2603 if (!NILP (component))
2d41a3d7b9a6 (Fx_get_resource): Use EMACS_CLASS to make class_key
Richard M. Stallman <rms@gnu.org>
parents: 1719
diff changeset
2604 CHECK_STRING (component, 1);
2d41a3d7b9a6 (Fx_get_resource): Use EMACS_CLASS to make class_key
Richard M. Stallman <rms@gnu.org>
parents: 1719
diff changeset
2605 if (!NILP (subclass))
2d41a3d7b9a6 (Fx_get_resource): Use EMACS_CLASS to make class_key
Richard M. Stallman <rms@gnu.org>
parents: 1719
diff changeset
2606 CHECK_STRING (subclass, 2);
2d41a3d7b9a6 (Fx_get_resource): Use EMACS_CLASS to make class_key
Richard M. Stallman <rms@gnu.org>
parents: 1719
diff changeset
2607 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
2608 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
2609
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
2610 validate_x_resource_name ();
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2611
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2612 /* 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
2613 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
2614 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
2615 + (STRINGP (component)
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 20629
diff changeset
2616 ? STRING_BYTES (XSTRING (component)) : 0)
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 20629
diff changeset
2617 + STRING_BYTES (XSTRING (attribute))
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2618 + 3);
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2619
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 20629
diff changeset
2620 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
2621 + STRING_BYTES (XSTRING (class))
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2622 + (STRINGP (subclass)
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 20629
diff changeset
2623 ? 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
2624 + 3);
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2625
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2626 /* 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
2627 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
2628 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
2629 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
2630
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2631 strcat (class_key, ".");
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2632 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
2633
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2634 if (!NILP (component))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2635 {
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2636 strcat (class_key, ".");
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2637 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
2638
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2639 strcat (name_key, ".");
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2640 strcat (name_key, XSTRING (component)->data);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2641 }
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2642
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2643 strcat (name_key, ".");
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2644 strcat (name_key, XSTRING (attribute)->data);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2645
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
2646 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
2647 name_key, class_key);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2648
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2649 if (value != (char *) 0)
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2650 return build_string (value);
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2651 else
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2652 return Qnil;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2653 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2654
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2655 /* 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
2656
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2657 Lisp_Object
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2658 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
2659 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
2660 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
2661 {
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2662 register char *value;
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2663 char *name_key;
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2664 char *class_key;
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2665
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2666 CHECK_STRING (attribute, 0);
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2667 CHECK_STRING (class, 0);
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2668
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2669 if (!NILP (component))
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2670 CHECK_STRING (component, 1);
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2671 if (!NILP (subclass))
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2672 CHECK_STRING (subclass, 2);
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2673 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
2674 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
2675
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2676 validate_x_resource_name ();
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2677
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2678 /* 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
2679 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
2680 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
2681 + (STRINGP (component)
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 20629
diff changeset
2682 ? STRING_BYTES (XSTRING (component)) : 0)
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 20629
diff changeset
2683 + 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
2684 + 3);
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2685
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 20629
diff changeset
2686 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
2687 + 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
2688 + (STRINGP (subclass)
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 20629
diff changeset
2689 ? 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
2690 + 3);
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2691
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2692 /* 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
2693 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
2694 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
2695 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
2696
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2697 strcat (class_key, ".");
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2698 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
2699
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2700 if (!NILP (component))
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2701 {
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2702 strcat (class_key, ".");
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2703 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
2704
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2705 strcat (name_key, ".");
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2706 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
2707 }
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2708
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2709 strcat (name_key, ".");
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2710 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
2711
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2712 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
2713
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2714 if (value != (char *) 0)
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2715 return build_string (value);
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2716 else
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2717 return Qnil;
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2718 }
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2719
3173
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
2720 /* 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
2721
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
2722 char *
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
2723 x_get_resource_string (attribute, class)
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
2724 char *attribute, *class;
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
2725 {
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
2726 char *name_key;
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
2727 char *class_key;
25679
8b09c5927f1c (QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2728 struct frame *sf = SELECTED_FRAME ();
3173
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
2729
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
2730 /* 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
2731 and the final '\0'. */
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 20629
diff changeset
2732 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
2733 + strlen (attribute) + 2);
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
2734 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
2735 + strlen (class) + 2);
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
2736
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
2737 sprintf (name_key, "%s.%s",
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
2738 XSTRING (Vinvocation_name)->data,
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
2739 attribute);
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
2740 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
2741
25679
8b09c5927f1c (QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2742 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
2743 name_key, class_key);
3173
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
2744 }
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
2745
398
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
2746 /* Types we might convert a resource string into. */
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
2747 enum resource_types
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2748 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2749 RES_TYPE_NUMBER,
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
2750 RES_TYPE_FLOAT,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2751 RES_TYPE_BOOLEAN,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2752 RES_TYPE_STRING,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2753 RES_TYPE_SYMBOL
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2754 };
398
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
2755
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2756 /* Return the value of parameter PARAM.
398
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
2757
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2758 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
2759 database, using ATTRIBUTE as the attribute name and CLASS as its class.
398
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
2760
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
2761 Convert the resource to the type specified by desired_type.
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
2762
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
2763 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
2764 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
2765 and don't let it get stored in any Lisp-visible variables! */
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2766
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2767 static Lisp_Object
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2768 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
2769 struct x_display_info *dpyinfo;
641
78a0b78aa6de *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
2770 Lisp_Object alist, param;
398
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
2771 char *attribute;
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
2772 char *class;
398
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
2773 enum resource_types type;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2774 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2775 register Lisp_Object tem;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2776
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2777 tem = Fassq (param, alist);
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2778 if (EQ (tem, Qnil))
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2779 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
2780 if (EQ (tem, Qnil))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2781 {
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
2782
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
2783 if (attribute)
398
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
2784 {
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2785 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
2786 build_string (attribute),
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2787 build_string (class),
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2788 Qnil, Qnil);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
2789
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
2790 if (NILP (tem))
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
2791 return Qunbound;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
2792
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
2793 switch (type)
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
2794 {
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2795 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
2796 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
2797
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
2798 case RES_TYPE_FLOAT:
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
2799 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
2800
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2801 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
2802 tem = Fdowncase (tem);
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
2803 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
2804 || !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
2805 return Qt;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
2806 else
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
2807 return Qnil;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
2808
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2809 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
2810 return tem;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
2811
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2812 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
2813 /* 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
2814 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
2815 {
6519
22c56514eeb3 (x_set_frame_parameters, x_get_arg, x_window, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents: 6506
diff changeset
2816 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
2817 lower = Fdowncase (tem);
6523
d9d9ab5951dd (x_get_arg): Use downcased string in compare.
Karl Heuer <kwzh@gnu.org>
parents: 6522
diff changeset
2818 if (!strcmp (XSTRING (lower)->data, "on")
d9d9ab5951dd (x_get_arg): Use downcased string in compare.
Karl Heuer <kwzh@gnu.org>
parents: 6522
diff changeset
2819 || !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
2820 return Qt;
6523
d9d9ab5951dd (x_get_arg): Use downcased string in compare.
Karl Heuer <kwzh@gnu.org>
parents: 6522
diff changeset
2821 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
2822 || !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
2823 return Qnil;
9bce20507666 Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents: 2283
diff changeset
2824 else
2686
a84b9a78ab08 (x_get_arg): Call Fintern, not intern.
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
2825 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
2826 }
1018
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2827
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
2828 default:
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
2829 abort ();
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
2830 }
398
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
2831 }
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
2832 else
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
2833 return Qunbound;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2834 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2835 return Fcdr (tem);
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2836 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2837
16156
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
2838 /* 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
2839
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
2840 static Lisp_Object
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
2841 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
2842 struct frame *f;
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
2843 Lisp_Object alist, param;
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
2844 char *attribute;
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
2845 char *class;
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
2846 enum resource_types type;
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
2847 {
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
2848 Lisp_Object value;
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
2849
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2850 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
2851 attribute, class, type);
16156
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
2852 if (! NILP (value))
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
2853 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
2854
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
2855 return value;
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
2856 }
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
2857
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2858 /* 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
2859 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
2860 If no value is specified for PROP, look for an X default for XPROP
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2861 on the frame named NAME.
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2862 If that is not found either, use the value DEFLT. */
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2863
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2864 static Lisp_Object
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
2865 x_default_parameter (f, alist, prop, deflt, xprop, xclass, type)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2866 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2867 Lisp_Object alist;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
2868 Lisp_Object prop;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2869 Lisp_Object deflt;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2870 char *xprop;
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
2871 char *xclass;
398
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
2872 enum resource_types type;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2873 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2874 Lisp_Object tem;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2875
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2876 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
2877 if (EQ (tem, Qunbound))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2878 tem = deflt;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
2879 x_set_frame_parameters (f, Fcons (Fcons (prop, tem), Qnil));
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2880 return tem;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2881 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2882
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2883
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2884 /* 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
2885 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
2886 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
2887 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
2888
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2889 static Lisp_Object
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2890 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
2891 foreground_p)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2892 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2893 Lisp_Object alist;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2894 Lisp_Object prop;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2895 char *xprop;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2896 char *xclass;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2897 int foreground_p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2898 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2899 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
2900 Lisp_Object tem;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2901
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2902 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
2903 if (EQ (tem, Qunbound))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2904 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2905 #ifdef USE_TOOLKIT_SCROLL_BARS
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2906
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2907 /* 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
2908 specified. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2909 tem = display_x_get_resource (dpyinfo,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2910 build_string (foreground_p
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2911 ? "foreground"
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2912 : "background"),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2913 build_string (""),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2914 build_string ("verticalScrollBar"),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2915 build_string (""));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2916 if (!STRINGP (tem))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2917 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2918 /* 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
2919 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
2920 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
2921 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
2922 specified. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2923 tem = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2924 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2925
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2926 #else /* not USE_TOOLKIT_SCROLL_BARS */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2927
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2928 tem = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2929
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2930 #endif /* not USE_TOOLKIT_SCROLL_BARS */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2931 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2932
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2933 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
2934 return tem;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2935 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2936
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2937
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2938
2328
82e4fed9cdd6 * xfns.c (Fx_parse_geometry): Renamed from Fx_geometry.
Jim Blandy <jimb@redhat.com>
parents: 2295
diff changeset
2939 DEFUN ("x-parse-geometry", Fx_parse_geometry, Sx_parse_geometry, 1, 1, 0,
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2940 "Parse an X-style geometry string STRING.\n\
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
2941 Returns an alist of the form ((top . TOP), (left . LEFT) ... ).\n\
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
2942 The properties returned may include `top', `left', `height', and `width'.\n\
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
2943 The value of `left' or `top' may be an integer,\n\
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
2944 or a list (+ N) meaning N pixels relative to top/left corner,\n\
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
2945 or a list (- N) meaning -N pixels relative to bottom/right corner.")
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2946 (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
2947 Lisp_Object string;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2948 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2949 int geometry, x, y;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2950 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
2951 Lisp_Object result;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2952
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2953 CHECK_STRING (string, 0);
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2954
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2955 geometry = XParseGeometry ((char *) XSTRING (string)->data,
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2956 &x, &y, &width, &height);
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2957
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
2958 #if 0
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
2959 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
2960 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
2961 #endif
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
2962
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
2963 result = Qnil;
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
2964 if (geometry & XValue)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2965 {
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
2966 Lisp_Object element;
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
2967
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
2968 if (x >= 0 && (geometry & XNegative))
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
2969 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
2970 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
2971 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
2972 else
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
2973 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
2974 result = Fcons (element, result);
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
2975 }
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
2976
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
2977 if (geometry & YValue)
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
2978 {
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
2979 Lisp_Object element;
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
2980
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
2981 if (y >= 0 && (geometry & YNegative))
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
2982 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
2983 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
2984 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
2985 else
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
2986 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
2987 result = Fcons (element, result);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2988 }
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
2989
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
2990 if (geometry & WidthValue)
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
2991 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
2992 if (geometry & HeightValue)
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
2993 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
2994
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
2995 return result;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2996 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2997
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2998 /* 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
2999 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
3000
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
3001 This function does not make the coordinates positive. */
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3002
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3003 #define DEFAULT_ROWS 40
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3004 #define DEFAULT_COLS 80
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3005
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3006 static int
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3007 x_figure_window_size (f, parms)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3008 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3009 Lisp_Object parms;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3010 {
7251
02cc4eee5928 (x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents: 7209
diff changeset
3011 register Lisp_Object tem0, tem1, tem2;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3012 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
3013 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3014
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3015 /* Default values if we fall through.
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3016 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
3017 window manager prompting. */
16254
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
3018 SET_FRAME_WIDTH (f, DEFAULT_COLS);
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3019 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
3020 /* 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
3021 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
3022 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
3023 f->output_data.x->left_pos = 0;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3024
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3025 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
3026 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
3027 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
3028 if (! EQ (tem0, Qunbound) || ! EQ (tem1, Qunbound))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3029 {
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3030 if (!EQ (tem0, Qunbound))
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3031 {
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3032 CHECK_NUMBER (tem0, 0);
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3033 f->height = XINT (tem0);
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3034 }
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3035 if (!EQ (tem1, Qunbound))
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3036 {
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3037 CHECK_NUMBER (tem1, 0);
16254
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
3038 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
3039 }
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3040 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
3041 window_prompting |= USSize;
02cc4eee5928 (x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents: 7209
diff changeset
3042 else
02cc4eee5928 (x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents: 7209
diff changeset
3043 window_prompting |= PSize;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3044 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3045
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3046 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
3047 = (!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
3048 ? 0
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3049 : (FRAME_SCROLL_BAR_COLS (f) * FONT_WIDTH (f->output_data.x->font)));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3050 f->output_data.x->flags_areas_extra
25464
080a7a9d6f79 (x_figure_window_size): Use FRAME_FLAGS_AREA_COLS instead
Gerd Moellmann <gerd@gnu.org>
parents: 25451
diff changeset
3051 = FRAME_FLAGS_AREA_WIDTH (f);
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3052 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
3053 f->output_data.x->pixel_height = CHAR_TO_PIXEL_HEIGHT (f, f->height);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3054
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3055 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
3056 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
3057 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
3058 if (! EQ (tem0, Qunbound) || ! EQ (tem1, Qunbound))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3059 {
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3060 if (EQ (tem0, Qminus))
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3061 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3062 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
3063 window_prompting |= YNegative;
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3064 }
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3065 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
3066 && CONSP (XCDR (tem0))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3067 && INTEGERP (XCAR (XCDR (tem0))))
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
3068 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3069 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
3070 window_prompting |= YNegative;
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
3071 }
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3072 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
3073 && CONSP (XCDR (tem0))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3074 && INTEGERP (XCAR (XCDR (tem0))))
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
3075 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3076 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
3077 }
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3078 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
3079 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
3080 else
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3081 {
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3082 CHECK_NUMBER (tem0, 0);
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3083 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
3084 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
3085 window_prompting |= YNegative;
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3086 }
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3087
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3088 if (EQ (tem1, Qminus))
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3089 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3090 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
3091 window_prompting |= XNegative;
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3092 }
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3093 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
3094 && CONSP (XCDR (tem1))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3095 && INTEGERP (XCAR (XCDR (tem1))))
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
3096 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3097 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
3098 window_prompting |= XNegative;
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
3099 }
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3100 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
3101 && CONSP (XCDR (tem1))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3102 && INTEGERP (XCAR (XCDR (tem1))))
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
3103 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3104 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
3105 }
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3106 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
3107 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
3108 else
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3109 {
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3110 CHECK_NUMBER (tem1, 0);
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3111 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
3112 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
3113 window_prompting |= XNegative;
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3114 }
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3115
10264
92dcc001aa20 (x_figure_window_size): Treat missing user-position parm as nil.
Richard M. Stallman <rms@gnu.org>
parents: 10222
diff changeset
3116 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
3117 window_prompting |= USPosition;
02cc4eee5928 (x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents: 7209
diff changeset
3118 else
02cc4eee5928 (x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents: 7209
diff changeset
3119 window_prompting |= PPosition;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3120 }
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3121
3293
03e4cad68481 (Fx_close_current_connection): Clear x_current_display.
Richard M. Stallman <rms@gnu.org>
parents: 3203
diff changeset
3122 return window_prompting;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3123 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3124
5229
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3125 #if !defined (HAVE_X11R4) && !defined (HAVE_XSETWMPROTOCOLS)
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3126
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3127 Status
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3128 XSetWMProtocols (dpy, w, protocols, count)
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3129 Display *dpy;
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3130 Window w;
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3131 Atom *protocols;
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3132 int count;
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3133 {
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3134 Atom prop;
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3135 prop = XInternAtom (dpy, "WM_PROTOCOLS", False);
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3136 if (prop == None) return False;
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3137 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
3138 (unsigned char *) protocols, count);
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3139 return True;
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3140 }
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3141 #endif /* not HAVE_X11R4 && not HAVE_XSETWMPROTOCOLS */
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3142
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3143 #ifdef USE_X_TOOLKIT
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3144
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
3145 /* 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
3146 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
3147 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
3148 for example, but Xt doesn't). */
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3149
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3150 static void
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3151 hack_wm_protocols (f, widget)
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3152 FRAME_PTR f;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3153 Widget widget;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3154 {
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3155 Display *dpy = XtDisplay (widget);
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3156 Window w = XtWindow (widget);
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3157 int need_delete = 1;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3158 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
3159 int need_save = 1;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3160
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3161 BLOCK_INPUT;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3162 {
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3163 Atom type, *atoms = 0;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3164 int format = 0;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3165 unsigned long nitems = 0;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3166 unsigned long bytes_after;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3167
11882
8b3575269610 (hack_wm_protocols): Cast args of XGetWindowProperty.
Karl Heuer <kwzh@gnu.org>
parents: 11774
diff changeset
3168 if ((XGetWindowProperty (dpy, w,
8b3575269610 (hack_wm_protocols): Cast args of XGetWindowProperty.
Karl Heuer <kwzh@gnu.org>
parents: 11774
diff changeset
3169 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
3170 (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
3171 &type, &format, &nitems, &bytes_after,
8b3575269610 (hack_wm_protocols): Cast args of XGetWindowProperty.
Karl Heuer <kwzh@gnu.org>
parents: 11774
diff changeset
3172 (unsigned char **) &atoms)
8b3575269610 (hack_wm_protocols): Cast args of XGetWindowProperty.
Karl Heuer <kwzh@gnu.org>
parents: 11774
diff changeset
3173 == Success)
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3174 && format == 32 && type == XA_ATOM)
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3175 while (nitems > 0)
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3176 {
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3177 nitems--;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3178 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
3179 need_delete = 0;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3180 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
3181 need_focus = 0;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3182 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
3183 need_save = 0;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3184 }
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3185 if (atoms) XFree ((char *) atoms);
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3186 }
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3187 {
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3188 Atom props [10];
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3189 int count = 0;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3190 if (need_delete)
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3191 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
3192 if (need_focus)
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3193 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
3194 if (need_save)
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3195 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
3196 if (count)
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3197 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
3198 XA_ATOM, 32, PropModeAppend,
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3199 (unsigned char *) props, count);
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3200 }
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3201 UNBLOCK_INPUT;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3202 }
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3203 #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
3204
3dafddaefc2c (x_create_im): New function to set IM and IC of a frame.
Gerd Moellmann <gerd@gnu.org>
parents: 27153
diff changeset
3205
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3206
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3207 /* Support routines for XIC (X Input Context). */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3208
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3209 #ifdef HAVE_X_I18N
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3210
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3211 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
3212 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
3213
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3214
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3215 /* Supported XIM styles, ordered by preferenc. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3216
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3217 static XIMStyle supported_xim_styles[] =
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3218 {
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3219 XIMPreeditPosition | XIMStatusArea,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3220 XIMPreeditPosition | XIMStatusNothing,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3221 XIMPreeditPosition | XIMStatusNone,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3222 XIMPreeditNothing | XIMStatusArea,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3223 XIMPreeditNothing | XIMStatusNothing,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3224 XIMPreeditNothing | XIMStatusNone,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3225 XIMPreeditNone | XIMStatusArea,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3226 XIMPreeditNone | XIMStatusNothing,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3227 XIMPreeditNone | XIMStatusNone,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3228 0,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3229 };
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3230
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3231
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3232 /* 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
3233 BASE_FONTNAME.. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3234
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3235 static XFontSet
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3236 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
3237 struct frame *f;
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3238 char *base_fontname;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3239 {
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3240 XFontSet xfs;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3241 char **missing_list;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3242 int missing_count;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3243 char *def_string;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3244
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3245 xfs = XCreateFontSet (FRAME_X_DISPLAY (f),
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3246 base_fontname, &missing_list,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3247 &missing_count, &def_string);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3248 if (missing_list)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3249 XFreeStringList (missing_list);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3250
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3251 /* No need to free def_string. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3252 return xfs;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3253 }
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3254
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3255
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3256 /* 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
3257 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
3258 input method XIM. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3259
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3260 static XIMStyle
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3261 best_xim_style (user, xim)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3262 XIMStyles *user;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3263 XIMStyles *xim;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3264 {
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3265 int i, j;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3266
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3267 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
3268 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
3269 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
3270 return user->supported_styles[i];
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3271
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3272 /* Return the default style. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3273 return XIMPreeditNothing | XIMStatusNothing;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3274 }
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3275
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3276 /* Create XIC for frame F. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3277
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3278 void
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3279 create_frame_xic (f)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3280 struct frame *f;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3281 {
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3282 XIM xim;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3283 XIC xic = NULL;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3284 XFontSet xfs = NULL;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3285 static XIMStyle xic_style;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3286
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3287 if (FRAME_XIC (f))
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3288 return;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3289
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3290 xim = FRAME_X_XIM (f);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3291 if (xim)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3292 {
27659
4137c807296b (create_frame_xic): Fix initialization of automatic aggregates for pcc.
Dave Love <fx@gnu.org>
parents: 27502
diff changeset
3293 XRectangle s_area;
4137c807296b (create_frame_xic): Fix initialization of automatic aggregates for pcc.
Dave Love <fx@gnu.org>
parents: 27502
diff changeset
3294 XPoint spot;
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3295 XVaNestedList preedit_attr;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3296 XVaNestedList status_attr;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3297 char *base_fontname;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3298 int fontset;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3299
27659
4137c807296b (create_frame_xic): Fix initialization of automatic aggregates for pcc.
Dave Love <fx@gnu.org>
parents: 27502
diff changeset
3300 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
3301 spot.x = 0; spot.y = 1;
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3302 /* Create X fontset. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3303 fontset = FRAME_FONTSET (f);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3304 if (fontset < 0)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3305 base_fontname = "-*-*-*-r-normal--14-*-*-*-*-*-*-*";
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3306 else
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3307 {
28229
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3308 /* 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
3309 FONTSET. */
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3310 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
3311 char *p = ascii_font;
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3312 int i;
28229
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3313
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3314 for (i = 0; *p; p++)
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3315 if (*p == '-') i++;
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3316 if (i != 14)
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3317 /* 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
3318 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
3319 frame. */
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3320 base_fontname = "-*-*-*-r-normal--14-*-*-*-*-*-*-*";
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3321 else
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3322 {
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3323 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
3324 char *p1 = NULL;
28229
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3325
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3326 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
3327 {
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3328 if (*p == '-')
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3329 {
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3330 i++;
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3331 if (i == 3)
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3332 p1 = p + 1;
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3333 }
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3334 }
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3335 base_fontname = (char *) alloca (len);
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3336 bzero (base_fontname, len);
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3337 strcpy (base_fontname, "-*-*-");
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3338 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
3339 strcat (base_fontname, "*-*-*-*-*-*-*");
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3340 }
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3341 }
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3342 xfs = xic_create_xfontset (f, base_fontname);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3343
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3344 /* Determine XIC style. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3345 if (xic_style == 0)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3346 {
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3347 XIMStyles supported_list;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3348 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
3349 / sizeof supported_xim_styles[0]);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3350 supported_list.supported_styles = supported_xim_styles;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3351 xic_style = best_xim_style (&supported_list,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3352 FRAME_X_XIM_STYLES (f));
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3353 }
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3354
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3355 preedit_attr = XVaCreateNestedList (0,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3356 XNFontSet, xfs,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3357 XNForeground,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3358 FRAME_FOREGROUND_PIXEL (f),
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3359 XNBackground,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3360 FRAME_BACKGROUND_PIXEL (f),
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3361 (xic_style & XIMPreeditPosition
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3362 ? XNSpotLocation
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3363 : NULL),
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3364 &spot,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3365 NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3366 status_attr = XVaCreateNestedList (0,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3367 XNArea,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3368 &s_area,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3369 XNFontSet,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3370 xfs,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3371 XNForeground,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3372 FRAME_FOREGROUND_PIXEL (f),
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3373 XNBackground,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3374 FRAME_BACKGROUND_PIXEL (f),
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3375 NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3376
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3377 xic = XCreateIC (xim,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3378 XNInputStyle, xic_style,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3379 XNClientWindow, FRAME_X_WINDOW(f),
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3380 XNFocusWindow, FRAME_X_WINDOW(f),
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3381 XNStatusAttributes, status_attr,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3382 XNPreeditAttributes, preedit_attr,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3383 NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3384 XFree (preedit_attr);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3385 XFree (status_attr);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3386 }
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3387
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3388 FRAME_XIC (f) = xic;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3389 FRAME_XIC_STYLE (f) = xic_style;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3390 FRAME_XIC_FONTSET (f) = xfs;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3391 }
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3392
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3393
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3394 /* 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
3395
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3396 void
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3397 free_frame_xic (f)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3398 struct frame *f;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3399 {
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3400 if (FRAME_XIC (f) == NULL)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3401 return;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3402
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3403 XDestroyIC (FRAME_XIC (f));
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3404 if (FRAME_XIC_FONTSET (f))
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3405 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
3406
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3407 FRAME_XIC (f) = NULL;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3408 FRAME_XIC_FONTSET (f) = NULL;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3409 }
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3410
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3411
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3412 /* 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
3413 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
3414
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3415 void
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3416 xic_set_preeditarea (w, x, y)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3417 struct window *w;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3418 int x, y;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3419 {
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3420 struct frame *f = XFRAME (w->frame);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3421 XVaNestedList attr;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3422 XPoint spot;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3423
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3424 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
3425 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
3426 attr = XVaCreateNestedList (0, XNSpotLocation, &spot, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3427 XSetICValues (FRAME_XIC (f), XNPreeditAttributes, attr, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3428 XFree (attr);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3429 }
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3430
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3431
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3432 /* 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
3433
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3434 void
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3435 xic_set_statusarea (f)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3436 struct frame *f;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3437 {
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3438 XIC xic = FRAME_XIC (f);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3439 XVaNestedList attr;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3440 XRectangle area;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3441 XRectangle *needed;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3442
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3443 /* 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
3444 status area, use its current size. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3445 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
3446 attr = XVaCreateNestedList (0, XNAreaNeeded, &area, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3447 XSetICValues (xic, XNStatusAttributes, attr, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3448 XFree (attr);
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 attr = XVaCreateNestedList (0, XNAreaNeeded, &needed, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3451 XGetICValues (xic, XNStatusAttributes, attr, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3452 XFree (attr);
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 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
3455 {
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3456 attr = XVaCreateNestedList (0, XNArea, &needed, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3457 XGetICValues (xic, XNStatusAttributes, attr, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3458 XFree (attr);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3459 }
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3460
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3461 area.width = needed->width;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3462 area.height = needed->height;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3463 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
3464 area.y = (PIXEL_HEIGHT (f) - area.height
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3465 - 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
3466 XFree (needed);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3467
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3468 attr = XVaCreateNestedList (0, XNArea, &area, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3469 XSetICValues(xic, XNStatusAttributes, attr, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3470 XFree (attr);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3471 }
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3472
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3473
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3474 /* 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
3475 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
3476
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3477 void
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3478 xic_set_xfontset (f, base_fontname)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3479 struct frame *f;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3480 char *base_fontname;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3481 {
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3482 XVaNestedList attr;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3483 XFontSet xfs;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3484
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3485 xfs = xic_create_xfontset (f, base_fontname);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3486
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3487 attr = XVaCreateNestedList (0, XNFontSet, xfs, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3488 if (FRAME_XIC_STYLE (f) & XIMPreeditPosition)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3489 XSetICValues (FRAME_XIC (f), XNPreeditAttributes, attr, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3490 if (FRAME_XIC_STYLE (f) & XIMStatusArea)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3491 XSetICValues (FRAME_XIC (f), XNStatusAttributes, attr, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3492 XFree (attr);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3493
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3494 if (FRAME_XIC_FONTSET (f))
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3495 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
3496 FRAME_XIC_FONTSET (f) = xfs;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3497 }
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3498
27157
3dafddaefc2c (x_create_im): New function to set IM and IC of a frame.
Gerd Moellmann <gerd@gnu.org>
parents: 27153
diff changeset
3499 #endif /* HAVE_X_I18N */
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3500
27157
3dafddaefc2c (x_create_im): New function to set IM and IC of a frame.
Gerd Moellmann <gerd@gnu.org>
parents: 27153
diff changeset
3501
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3502
6790
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
3503 #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
3504
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
3505 /* 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
3506
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3507 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
3508 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
3509 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
3510 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
3511 int minibuffer_only;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3512 {
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3513 XClassHint class_hints;
6059
0021cbdc591b (x_window): Call XChangeWindowAttributes with the standard
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6011
diff changeset
3514 XSetWindowAttributes attributes;
0021cbdc591b (x_window): Call XChangeWindowAttributes with the standard
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6011
diff changeset
3515 unsigned long attribute_mask;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3516 Widget shell_widget;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3517 Widget pane_widget;
9231
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3518 Widget frame_widget;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3519 Arg al [25];
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3520 int ac;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3521
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3522 BLOCK_INPUT;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3523
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
3524 /* 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
3525 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
3526 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
3527
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
3528 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
3529
11496
db02849ee365 (x_window): Use (or reuse) frame's namebuf instead of a
Karl Heuer <kwzh@gnu.org>
parents: 11483
diff changeset
3530 {
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
3531 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
3532 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
3533 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
3534 }
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3535
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3536 ac = 0;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3537 XtSetArg (al[ac], XtNallowShellResize, 1); ac++;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3538 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
3539 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
3540 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
3541 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
3542 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
3543 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
3544 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
3545 applicationShellWidgetClass,
9742
fe7653791d28 (Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents: 9703
diff changeset
3546 FRAME_X_DISPLAY (f), al, ac);
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3547
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3548 f->output_data.x->widget = shell_widget;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3549 /* maybe_set_screen_title_format (shell_widget); */
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3550
9231
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3551 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
3552 (widget_value *) NULL,
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3553 shell_widget, False,
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3554 (lw_callback) NULL,
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3555 (lw_callback) NULL,
27343
43230463dfcf (x_window): Call lw_create_widget with new parameter
Gerd Moellmann <gerd@gnu.org>
parents: 27157
diff changeset
3556 (lw_callback) NULL,
9231
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3557 (lw_callback) NULL);
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3558
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
3559 ac = 0;
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
3560 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
3561 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
3562 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
3563 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
3564 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
3565
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3566 /* 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
3567 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
3568
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3569 ac = 0;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3570 XtSetArg (al[ac], XtNmappedWhenManaged, 0); ac++;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3571 XtSetArg (al[ac], XtNshowGrip, 0); ac++;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3572 XtSetArg (al[ac], XtNallowResize, 1); ac++;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3573 XtSetArg (al[ac], XtNresizeToPreferred, 1); ac++;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3574 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
3575 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
3576 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
3577 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
3578 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
3579 al, ac);
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3580
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3581 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
3582
9231
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3583 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
3584
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
3585 /* 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
3586 {
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
3587 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
3588 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
3589 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
3590 int ac = 0;
12190
e0abe30899a9 [USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents: 12111
diff changeset
3591 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
3592 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
3593 = (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
3594 ? (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
3595 + 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
3596 : 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
3597
15942
ff30ec8aab54 (x_window): Don't add ibw to menubar_size.
Richard M. Stallman <rms@gnu.org>
parents: 15891
diff changeset
3598 #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
3599 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
3600 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
3601 {
9808
4c43c9dbe130 (x_window): Make ibw 0 by default.
Richard M. Stallman <rms@gnu.org>
parents: 9742
diff changeset
3602 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
3603 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
3604 menubar_size += ibw;
7f15f77cb644 (x_window): Take account of pane widget internal border width.
Richard M. Stallman <rms@gnu.org>
parents: 7946
diff changeset
3605 }
15942
ff30ec8aab54 (x_window): Don't add ibw to menubar_size.
Richard M. Stallman <rms@gnu.org>
parents: 15891
diff changeset
3606 #endif
7969
7f15f77cb644 (x_window): Take account of pane widget internal border width.
Richard M. Stallman <rms@gnu.org>
parents: 7946
diff changeset
3607
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3608 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
3609
16305
00e57c8adaba (x_window): With Motif, double extra_borders.
Richard M. Stallman <rms@gnu.org>
parents: 16302
diff changeset
3610 #ifndef USE_LUCID
12190
e0abe30899a9 [USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents: 12111
diff changeset
3611 /* 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
3612 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
3613 Both conclusions reached experimentally. -- rms. */
16305
00e57c8adaba (x_window): With Motif, double extra_borders.
Richard M. Stallman <rms@gnu.org>
parents: 16302
diff changeset
3614 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
3615 &extra_borders, NULL);
00e57c8adaba (x_window): With Motif, double extra_borders.
Richard M. Stallman <rms@gnu.org>
parents: 16302
diff changeset
3616 extra_borders *= 2;
00e57c8adaba (x_window): With Motif, double extra_borders.
Richard M. Stallman <rms@gnu.org>
parents: 16302
diff changeset
3617 #endif
12190
e0abe30899a9 [USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents: 12111
diff changeset
3618
11707
b0cb8129be58 [USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents: 11611
diff changeset
3619 /* 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
3620 and specify it.
b0cb8129be58 [USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents: 11611
diff changeset
3621 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
3622 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
3623 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
3624 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3625 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
3626 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
3627 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
3628 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
3629 if (xneg)
b0cb8129be58 [USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents: 11611
diff changeset
3630 left = -left;
b0cb8129be58 [USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents: 11611
diff changeset
3631 if (yneg)
b0cb8129be58 [USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents: 11611
diff changeset
3632 top = -top;
11893
1f70ffad3d6d [USE_X_TOOLKIT] (x_window): Pass position to toolkit
Karl Heuer <kwzh@gnu.org>
parents: 11882
diff changeset
3633
1f70ffad3d6d [USE_X_TOOLKIT] (x_window): Pass position to toolkit
Karl Heuer <kwzh@gnu.org>
parents: 11882
diff changeset
3634 if (window_prompting & USPosition)
12190
e0abe30899a9 [USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents: 12111
diff changeset
3635 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
3636 PIXEL_WIDTH (f) + extra_borders,
e0abe30899a9 [USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents: 12111
diff changeset
3637 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
3638 (xneg ? '-' : '+'), left,
1f70ffad3d6d [USE_X_TOOLKIT] (x_window): Pass position to toolkit
Karl Heuer <kwzh@gnu.org>
parents: 11882
diff changeset
3639 (yneg ? '-' : '+'), top);
1f70ffad3d6d [USE_X_TOOLKIT] (x_window): Pass position to toolkit
Karl Heuer <kwzh@gnu.org>
parents: 11882
diff changeset
3640 else
12190
e0abe30899a9 [USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents: 12111
diff changeset
3641 sprintf (shell_position, "=%dx%d",
e0abe30899a9 [USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents: 12111
diff changeset
3642 PIXEL_WIDTH (f) + extra_borders,
e0abe30899a9 [USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents: 12111
diff changeset
3643 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
3644 }
b0cb8129be58 [USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents: 11611
diff changeset
3645
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
3646 len = strlen (shell_position) + 1;
17579
8dd146dbe737 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17556
diff changeset
3647 /* We don't free this because we don't know whether
8dd146dbe737 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17556
diff changeset
3648 it is safe to free it while the frame exists.
8dd146dbe737 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17556
diff changeset
3649 It isn't worth the trouble of arranging to free it
8dd146dbe737 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17556
diff changeset
3650 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
3651 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
3652 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
3653 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
3654 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
3655 }
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
3656
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3657 XtManageChild (pane_widget);
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3658 XtRealizeWidget (shell_widget);
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3659
9231
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3660 FRAME_X_WINDOW (f) = XtWindow (frame_widget);
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3661
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3662 validate_x_resource_name ();
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
3663
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3664 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
3665 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
3666 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
3667
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3668 #ifdef HAVE_X_I18N
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3669 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
3670 #ifdef USE_XIM
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3671 create_frame_xic (f);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3672 #endif
29947
b7556fa4c05b (x_window) [!USE_XIM]: Don't call create_frame_ic.
Gerd Moellmann <gerd@gnu.org>
parents: 29938
diff changeset
3673 #endif
13227
d8af44485b3c (x_window, both versions): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13083
diff changeset
3674
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3675 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
3676 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
3677 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
3678 &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
3679
9703
85ac0e4030d4 (x_window): Pass new arg f to hack_wm_protocols.
Richard M. Stallman <rms@gnu.org>
parents: 9690
diff changeset
3680 hack_wm_protocols (f, shell_widget);
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3681
9231
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3682 #ifdef HACK_EDITRES
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3683 XtAddEventHandler (shell_widget, 0, True, _XEditResCheckMessages, 0);
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3684 #endif
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3685
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3686 /* 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
3687 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
3688 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
3689 */
9231
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3690 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
3691 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
3692 XA_ATOM, 32, PropModeAppend,
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3693 (unsigned char*) NULL, 0);
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3694
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3695 /* 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
3696 attributes.event_mask = STANDARD_EVENT_SET;
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3697
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3698 #ifdef HAVE_X_I18N
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3699 if (FRAME_XIC (f))
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3700 {
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3701 /* XIM server might require some X events. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3702 unsigned long fevent = NoEventMask;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3703 XGetICValues(FRAME_XIC (f), XNFilterEvents, &fevent, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3704 attributes.event_mask |= fevent;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3705 }
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3706 #endif /* HAVE_X_I18N */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3707
6059
0021cbdc591b (x_window): Call XChangeWindowAttributes with the standard
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6011
diff changeset
3708 attribute_mask = CWEventMask;
0021cbdc591b (x_window): Call XChangeWindowAttributes with the standard
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6011
diff changeset
3709 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
3710 attribute_mask, &attributes);
0021cbdc591b (x_window): Call XChangeWindowAttributes with the standard
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6011
diff changeset
3711
9231
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3712 XtMapWidget (frame_widget);
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3713
6790
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
3714 /* 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
3715 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
3716 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
3717 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
3718 {
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
3719 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
3720 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
3721
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
3722 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
3723 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
3724 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
3725 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
3726 }
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
3727
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3728 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
3729 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
3730
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
3731 UNBLOCK_INPUT;
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
3732
25320
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
3733 /* 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
3734 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
3735 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
3736 }
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
3737
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3738 #else /* not USE_X_TOOLKIT */
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3739
6790
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
3740 /* 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
3741
21846
486ac68ce051 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21779
diff changeset
3742 void
6790
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
3743 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
3744 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
3745
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
3746 {
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
3747 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
3748 XSetWindowAttributes attributes;
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
3749 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
3750
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3751 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
3752 attributes.border_pixel = f->output_data.x->border_pixel;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3753 attributes.bit_gravity = StaticGravity;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3754 attributes.backing_store = NotUseful;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3755 attributes.save_under = True;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3756 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
3757 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
3758 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
3759 | CWColormap);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3760
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3761 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
3762 FRAME_X_WINDOW (f)
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3763 = 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
3764 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
3765 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
3766 f->output_data.x->top_pos,
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3767 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
3768 f->output_data.x->border_width,
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3769 CopyFromParent, /* depth */
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3770 InputOutput, /* class */
28144
71ebba3566ec (X_I18N_INHIBITED): Don't define.
Gerd Moellmann <gerd@gnu.org>
parents: 28096
diff changeset
3771 FRAME_X_VISUAL (f),
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3772 attribute_mask, &attributes);
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3773
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3774 #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
3775 #ifdef USE_XIM
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3776 create_frame_xic (f);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3777 if (FRAME_XIC (f))
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3778 {
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3779 /* XIM server might require some X events. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3780 unsigned long fevent = NoEventMask;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3781 XGetICValues(FRAME_XIC (f), XNFilterEvents, &fevent, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3782 attributes.event_mask |= fevent;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3783 attribute_mask = CWEventMask;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3784 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
3785 attribute_mask, &attributes);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3786 }
29947
b7556fa4c05b (x_window) [!USE_XIM]: Don't call create_frame_ic.
Gerd Moellmann <gerd@gnu.org>
parents: 29938
diff changeset
3787 #endif
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3788 #endif /* HAVE_X_I18N */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3789
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
3790 validate_x_resource_name ();
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
3791
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
3792 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
3793 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
3794 XSetClassHint (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), &class_hints);
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3795
11897
cbd3724a9696 (x_window) [both versions]: Set menubar_height.
Karl Heuer <kwzh@gnu.org>
parents: 11894
diff changeset
3796 /* 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
3797 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
3798 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
3799
1719
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
3800 /* 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
3801 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
3802 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
3803 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
3804
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3805 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
3806 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
3807 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
3808 &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
3809 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
3810
26a1d7b2670b (x_window): Request "save yourself" commands.
Richard M. Stallman <rms@gnu.org>
parents: 7802
diff changeset
3811 /* 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
3812 {
26a1d7b2670b (x_window): Request "save yourself" commands.
Richard M. Stallman <rms@gnu.org>
parents: 7802
diff changeset
3813 Atom protocols[2];
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3814 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
3815 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
3816 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
3817 }
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3818
817
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 771
diff changeset
3819 /* x_set_name normally ignores requests to set the name if the
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 771
diff changeset
3820 requested name is the same as the current name. This is the one
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 771
diff changeset
3821 place where that assumption isn't correct; f->name is set, but
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 771
diff changeset
3822 the X server hasn't been told. */
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 771
diff changeset
3823 {
6519
22c56514eeb3 (x_set_frame_parameters, x_get_arg, x_window, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents: 6506
diff changeset
3824 Lisp_Object name;
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
3825 int explicit = f->explicit_name;
817
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 771
diff changeset
3826
6519
22c56514eeb3 (x_set_frame_parameters, x_get_arg, x_window, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents: 6506
diff changeset
3827 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
3828 name = f->name;
817
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 771
diff changeset
3829 f->name = Qnil;
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
3830 x_set_name (f, name, explicit);
817
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 771
diff changeset
3831 }
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 771
diff changeset
3832
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3833 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
3834 f->output_data.x->text_cursor);
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3835
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3836 UNBLOCK_INPUT;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3837
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
3838 if (FRAME_X_WINDOW (f) == 0)
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3839 error ("Unable to create window");
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3840 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3841
6790
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
3842 #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
3843
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3844 /* Handle the icon stuff for this window. Perhaps later we might
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3845 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
3846 well. */
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3847
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3848 static void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3849 x_icon (f, parms)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3850 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3851 Lisp_Object parms;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3852 {
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3853 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
3854 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3855
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3856 /* 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
3857 icons in an icon window. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3858 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
3859 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
3860 if (!EQ (icon_x, Qunbound) && !EQ (icon_y, Qunbound))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3861 {
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3862 CHECK_NUMBER (icon_x, 0);
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3863 CHECK_NUMBER (icon_y, 0);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3864 }
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3865 else if (!EQ (icon_x, Qunbound) || !EQ (icon_y, Qunbound))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3866 error ("Both left and top icon corners of icon must be specified");
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3867
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3868 BLOCK_INPUT;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3869
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
3870 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
3871 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
3872
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3873 /* 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
3874 x_wm_set_window_state
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3875 (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
3876 Qicon)
2294
9bce20507666 Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents: 2283
diff changeset
3877 ? IconicState
9bce20507666 Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents: 2283
diff changeset
3878 : NormalState));
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3879
12276
2e376a4397bc (x_report_frame_params, x_set_icon_type, x_set_icon_name)
Richard M. Stallman <rms@gnu.org>
parents: 12209
diff changeset
3880 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
3881 ? 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
3882 : f->name))->data);
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
3883
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3884 UNBLOCK_INPUT;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3885 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3886
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
3887 /* Make the GCs needed for this window, setting the
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3888 background, border and mouse colors; also create the
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3889 mouse cursor and the gray border tile. */
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3890
1018
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
3891 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
3892 {
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
3893 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
3894 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
3895 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
3896 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
3897 };
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
3898
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3899 static void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3900 x_make_gc (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3901 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3902 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3903 XGCValues gc_values;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3904
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
3905 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
3906
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
3907 /* Create the GCs of this frame.
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3908 Note that many default values are used. */
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3909
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3910 /* 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
3911 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
3912 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
3913 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
3914 gc_values.line_width = 0; /* Means 1 using fast algorithm. */
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3915 f->output_data.x->normal_gc = XCreateGC (FRAME_X_DISPLAY (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
3916 FRAME_X_WINDOW (f),
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3917 GCLineWidth | GCFont
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3918 | GCForeground | GCBackground,
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3919 &gc_values);
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3920
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3921 /* 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
3922 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
3923 gc_values.background = 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
3924 f->output_data.x->reverse_gc = XCreateGC (FRAME_X_DISPLAY (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
3925 FRAME_X_WINDOW (f),
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3926 GCFont | GCForeground | GCBackground
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3927 | GCLineWidth,
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3928 &gc_values);
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3929
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3930 /* 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
3931 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
3932 gc_values.background = f->output_data.x->cursor_pixel;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3933 gc_values.fill_style = FillOpaqueStippled;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3934 gc_values.stipple
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3935 = XCreateBitmapFromData (FRAME_X_DISPLAY (f),
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3936 FRAME_X_DISPLAY_INFO (f)->root_window,
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3937 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
3938 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
3939 = XCreateGC (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3940 (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
3941 | GCFillStyle /* | GCStipple */ | GCLineWidth),
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3942 &gc_values);
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3943
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3944 /* Reliefs. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3945 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
3946 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
3947
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3948 /* Create the gray border tile used when the pointer is not in
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3949 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
3950 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
3951 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
3952 = (XCreatePixmapFromBitmapData
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3953 (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
3954 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
3955 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
3956 f->output_data.x->background_pixel,
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3957 DefaultDepth (FRAME_X_DISPLAY (f),
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3958 XScreenNumberOfScreen (FRAME_X_SCREEN (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
3959
1982e2983822 * xfns.c (x_make_gc): Don't forget to block X input around the
Jim Blandy <jimb@redhat.com>
parents: 2328
diff changeset
3960 UNBLOCK_INPUT;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3961 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3962
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3963 DEFUN ("x-create-frame", Fx_create_frame, Sx_create_frame,
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3964 1, 1, 0,
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3965 "Make a new X window, which is called a \"frame\" in Emacs terms.\n\
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
3966 Returns an Emacs frame object.\n\
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3967 ALIST is an alist of frame parameters.\n\
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3968 If the parameters specify that the frame should not have a minibuffer,\n\
697
6dd85fc4fb2c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 689
diff changeset
3969 and do not specify a specific minibuffer window to use,\n\
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3970 then `default-minibuffer-frame' must be a frame whose minibuffer can\n\
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
3971 be shared by the new frame.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
3972 \n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
3973 This function is an internal primitive--use `make-frame' instead.")
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3974 (parms)
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3975 Lisp_Object parms;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3976 {
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3977 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
3978 Lisp_Object frame, tem;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3979 Lisp_Object name;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3980 int minibuffer_only = 0;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3981 long window_prompting = 0;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3982 int width, height;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3983 int count = specpdl_ptr - specpdl;
15566
3d03a3fb8757 (Fx_create_frame): Gcpro parms, parent, and name.
Richard M. Stallman <rms@gnu.org>
parents: 15495
diff changeset
3984 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
3985 Lisp_Object display;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3986 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
3987 Lisp_Object parent;
11774
0b5cb5170084 (Fx_create_frame): Pass kb to make_frame_without_minibuffer.
Karl Heuer <kwzh@gnu.org>
parents: 11772
diff changeset
3988 struct kboard *kb;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3989
2999
33c820044087 (check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2964
diff changeset
3990 check_x ();
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3991
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
3992 /* 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
3993 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
3994 Vx_resource_name = Vinvocation_name;
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
3995
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3996 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
3997 if (EQ (display, Qunbound))
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3998 display = Qnil;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3999 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
4000 #ifdef MULTI_KBOARD
0b5cb5170084 (Fx_create_frame): Pass kb to make_frame_without_minibuffer.
Karl Heuer <kwzh@gnu.org>
parents: 11772
diff changeset
4001 kb = dpyinfo->kboard;
0b5cb5170084 (Fx_create_frame): Pass kb to make_frame_without_minibuffer.
Karl Heuer <kwzh@gnu.org>
parents: 11772
diff changeset
4002 #else
0b5cb5170084 (Fx_create_frame): Pass kb to make_frame_without_minibuffer.
Karl Heuer <kwzh@gnu.org>
parents: 11772
diff changeset
4003 kb = &the_only_kboard;
0b5cb5170084 (Fx_create_frame): Pass kb to make_frame_without_minibuffer.
Karl Heuer <kwzh@gnu.org>
parents: 11772
diff changeset
4004 #endif
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4005
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4006 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
4007 if (!STRINGP (name)
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4008 && ! EQ (name, Qunbound)
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4009 && ! NILP (name))
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4010 error ("Invalid frame name--not a string or nil");
398
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
4011
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
4012 if (STRINGP (name))
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
4013 Vx_resource_name = name;
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
4014
10222
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4015 /* 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
4016 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
4017 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
4018 parent = Qnil;
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4019 if (! NILP (parent))
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4020 CHECK_NUMBER (parent, 0);
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4021
15566
3d03a3fb8757 (Fx_create_frame): Gcpro parms, parent, and name.
Richard M. Stallman <rms@gnu.org>
parents: 15495
diff changeset
4022 /* 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
4023 /* 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
4024 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
4025 frame = Qnil;
3d03a3fb8757 (Fx_create_frame): Gcpro parms, parent, and name.
Richard M. Stallman <rms@gnu.org>
parents: 15495
diff changeset
4026 GCPRO4 (parms, parent, name, frame);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4027 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
4028 RES_TYPE_SYMBOL);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
4029 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
4030 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
4031 else if (EQ (tem, Qonly))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4032 {
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4033 f = make_minibuffer_frame ();
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4034 minibuffer_only = 1;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4035 }
9103
948e8acb6990 (x_set_frame_parameters, x_set_menu_bar_lines, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents: 9022
diff changeset
4036 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
4037 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
4038 else
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4039 f = make_frame (1);
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4040
15566
3d03a3fb8757 (Fx_create_frame): Gcpro parms, parent, and name.
Richard M. Stallman <rms@gnu.org>
parents: 15495
diff changeset
4041 XSETFRAME (frame, f);
3d03a3fb8757 (Fx_create_frame): Gcpro parms, parent, and name.
Richard M. Stallman <rms@gnu.org>
parents: 15495
diff changeset
4042
1994
73ce9dd21093 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1932
diff changeset
4043 /* 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
4044 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
4045
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4046 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
4047 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
4048 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
4049 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
4050 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
4051 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
4052 f->output_data.x->scroll_bar_background_pixel = -1;
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4053
12276
2e376a4397bc (x_report_frame_params, x_set_icon_type, x_set_icon_name)
Richard M. Stallman <rms@gnu.org>
parents: 12209
diff changeset
4054 f->icon_name
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4055 = 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
4056 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
4057 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
4058 f->icon_name = Qnil;
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
4059
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4060 FRAME_X_DISPLAY_INFO (f) = dpyinfo;
11014
634a98104921 (Fx_create_frame): set the frame's kboard member.
Karl Heuer <kwzh@gnu.org>
parents: 10920
diff changeset
4061 #ifdef MULTI_KBOARD
11774
0b5cb5170084 (Fx_create_frame): Pass kb to make_frame_without_minibuffer.
Karl Heuer <kwzh@gnu.org>
parents: 11772
diff changeset
4062 FRAME_KBOARD (f) = kb;
11014
634a98104921 (Fx_create_frame): set the frame's kboard member.
Karl Heuer <kwzh@gnu.org>
parents: 10920
diff changeset
4063 #endif
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4064
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4065 /* 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
4066 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
4067 {
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4068 Lisp_Object black;
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4069 struct gcpro gcpro1;
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4070
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4071 black = build_string ("black");
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4072 GCPRO1 (black);
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4073 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
4074 = 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
4075 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
4076 = 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
4077 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
4078 = 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
4079 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
4080 = 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
4081 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
4082 = 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
4083 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
4084 = 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
4085 UNGCPRO;
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4086 }
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4087
10222
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4088 /* 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
4089
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4090 if (!NILP (parent))
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4091 {
18612
88efccff8970 Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 18594
diff changeset
4092 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
4093 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
4094 }
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4095 else
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4096 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4097 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
4098 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
4099 }
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4100
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4101 /* 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
4102 be set. */
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4103 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
4104 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4105 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
4106 f->explicit_name = 0;
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4107 }
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4108 else
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4109 {
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4110 f->name = name;
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4111 f->explicit_name = 1;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
4112 /* 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
4113 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
4114 }
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4115
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4116 /* Extract the window parameters from the supplied values
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4117 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
4118 {
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
4119 Lisp_Object font;
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
4120
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4121 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
4122
4150
e2e92cd737bf * xfns.c (Fx_create_frame): Block input around call to
Jim Blandy <jimb@redhat.com>
parents: 4146
diff changeset
4123 BLOCK_INPUT;
4259
085095792d99 (Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents: 4195
diff changeset
4124 /* 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
4125 if (STRINGP (font))
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
4126 {
21555
0927f341e390 (x_set_font): Give 2nd arg nil to Fquery_fontset.
Kenichi Handa <handa@m17n.org>
parents: 21549
diff changeset
4127 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
4128 if (STRINGP (tem))
27df69e20b98 (Fx_create_frame): Delete code for handling the X
Kenichi Handa <handa@m17n.org>
parents: 17629
diff changeset
4129 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
4130 else
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
4131 font = x_new_font (f, XSTRING (font)->data);
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
4132 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4133
4259
085095792d99 (Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents: 4195
diff changeset
4134 /* 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
4135 if (!STRINGP (font))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4136 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
4137 if (!STRINGP (font))
8270
1a0af0f4fb1d (Fx_create_frame): Use 140 as default font size.
Richard M. Stallman <rms@gnu.org>
parents: 8192
diff changeset
4138 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
4139 if (! STRINGP (font))
8270
1a0af0f4fb1d (Fx_create_frame): Use 140 as default font size.
Richard M. Stallman <rms@gnu.org>
parents: 8192
diff changeset
4140 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
4141 if (! STRINGP (font))
085095792d99 (Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents: 4195
diff changeset
4142 /* 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
4143 and takes too long. */
085095792d99 (Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents: 4195
diff changeset
4144 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
4145 /* 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
4146 if (! STRINGP (font))
8270
1a0af0f4fb1d (Fx_create_frame): Use 140 as default font size.
Richard M. Stallman <rms@gnu.org>
parents: 8192
diff changeset
4147 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
4148 UNBLOCK_INPUT;
e2e92cd737bf * xfns.c (Fx_create_frame): Block input around call to
Jim Blandy <jimb@redhat.com>
parents: 4146
diff changeset
4149 if (! STRINGP (font))
4259
085095792d99 (Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents: 4195
diff changeset
4150 font = build_string ("fixed");
085095792d99 (Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents: 4195
diff changeset
4151
17722
27df69e20b98 (Fx_create_frame): Delete code for handling the X
Kenichi Handa <handa@m17n.org>
parents: 17629
diff changeset
4152 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
4153 "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
4154 }
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
4155
15720
f1549b7501af (Fx_create_frame): Do xlwmenu hack only if USE_LUCID.
Karl Heuer <kwzh@gnu.org>
parents: 15706
diff changeset
4156 #ifdef USE_LUCID
9742
fe7653791d28 (Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents: 9703
diff changeset
4157 /* 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
4158 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
4159 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
4160 #endif
9742
fe7653791d28 (Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents: 9703
diff changeset
4161
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4162 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
4163 "borderWidth", "BorderWidth", RES_TYPE_NUMBER);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4164
3923
cb16ebff1c44 * xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents: 3888
diff changeset
4165 /* This defaults to 2 in order to match xterm. We recognize either
cb16ebff1c44 * xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents: 3888
diff changeset
4166 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
4167 it). */
cb16ebff1c44 * xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents: 3888
diff changeset
4168 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
4169 {
cb16ebff1c44 * xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents: 3888
diff changeset
4170 Lisp_Object value;
cb16ebff1c44 * xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents: 3888
diff changeset
4171
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
4172 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
4173 "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
4174 if (! EQ (value, Qunbound))
cb16ebff1c44 * xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents: 3888
diff changeset
4175 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
4176 parms);
cb16ebff1c44 * xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents: 3888
diff changeset
4177 }
16302
025b3dc7a6ba (Fx_create_frame): Default Qinternal_border_width to 1.
Richard M. Stallman <rms@gnu.org>
parents: 16254
diff changeset
4178 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
4179 "internalBorderWidth", "internalBorderWidth",
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4180 RES_TYPE_NUMBER);
16254
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
4181 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
4182 "verticalScrollBars", "ScrollBars",
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4183 RES_TYPE_SYMBOL);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4184
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4185 /* 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
4186 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
4187 "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
4188 x_default_parameter (f, parms, Qbackground_color, build_string ("white"),
26808
d8a6c42deb4e Indentation fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 26729
diff changeset
4189 "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
4190 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
4191 "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
4192 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
4193 "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
4194 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
4195 "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
4196 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
4197 "screenGamma", "ScreenGamma", RES_TYPE_FLOAT);
28690
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
4198 x_default_parameter (f, parms, Qline_spacing, Qnil,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
4199 "lineSpacing", "LineSpacing", RES_TYPE_NUMBER);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4200
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4201 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
4202 "scrollBarForeground",
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4203 "ScrollBarForeground", 1);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4204 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
4205 "scrollBarBackground",
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4206 "ScrollBarBackground", 0);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4207
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4208 /* 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
4209 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
4210 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
4211 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
4212 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
4213 happen. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4214 init_frame_faces (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4215
8758
fac1c4722677 (Fx_create_frame): Make 1 the default for menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 8675
diff changeset
4216 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
4217 "menuBar", "MenuBar", RES_TYPE_NUMBER);
31824
b3295c7e7a60 (Fx_create_frame): Set default frame parameter value
Gerd Moellmann <gerd@gnu.org>
parents: 31768
diff changeset
4218 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
4219 "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
4220 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
4221 "bufferPredicate", "BufferPredicate",
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4222 RES_TYPE_SYMBOL);
14381
4d038c841cf4 (Qtitle): Declared.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
4223 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
4224 "title", "Title", RES_TYPE_STRING);
6882
3096a6f7fffb (Fx_list_fonts): Error if non-X frame used.
Richard M. Stallman <rms@gnu.org>
parents: 6790
diff changeset
4225
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4226 f->output_data.x->parent_desc = FRAME_X_DISPLAY_INFO (f)->root_window;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4227 window_prompting = x_figure_window_size (f, parms);
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4228
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
4229 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
4230 {
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
4231 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
4232 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
4233 else
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4234 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
4235 }
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
4236 else
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
4237 {
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
4238 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
4239 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
4240 else
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4241 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
4242 }
675e4ec5f14f (Fx_create_frame): Delete excess args to x_wm_set_size_hint.
Richard M. Stallman <rms@gnu.org>
parents: 6882
diff changeset
4243
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4244 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
4245
25320
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4246 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
4247 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
4248
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25528
diff changeset
4249 /* Create the X widget or window. Add the tool-bar height to the
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4250 initial frame height so that the user gets a text display area of
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4251 the size he specified with -g or via .Xdefaults. Later changes
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25528
diff changeset
4252 of the tool-bar height don't change the frame size. This is done
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4253 so that users can create tall Emacs frames without having to
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25528
diff changeset
4254 guess how tall the tool-bar will get. */
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25528
diff changeset
4255 f->height += FRAME_TOOL_BAR_LINES (f);
25320
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4256
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
4257 #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
4258 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
4259 #else
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4260 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
4261 #endif
25320
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4262
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4263 x_icon (f, parms);
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4264 x_make_gc (f);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4265
25320
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4266 /* Now consider the frame official. */
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4267 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
4268 Vframe_list = Fcons (frame, Vframe_list);
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4269
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
4270 /* 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
4271 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
4272 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
4273 "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
4274
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4275 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
4276 "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
4277 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
4278 "autoLower", "AutoRaiseLower", RES_TYPE_BOOLEAN);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
4279 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
4280 "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
4281 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
4282 "scrollBarWidth", "ScrollBarWidth",
06f887a1c834 (Fx_create_frame): Move x_default_parameter calls that
Gerd Moellmann <gerd@gnu.org>
parents: 26954
diff changeset
4283 RES_TYPE_NUMBER);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
4284
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4285 /* Dimensions, especially f->height, must be done via change_frame_size.
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4286 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
4287 f->height. */
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4288 width = f->width;
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4289 height = f->height;
16254
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
4290 f->height = 0;
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
4291 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
4292 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
4293
25320
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4294 #ifdef USE_X_TOOLKIT
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4295 /* Create the menu bar. */
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4296 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
4297 {
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4298 /* 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
4299 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
4300 initialize_frame_menubar (f);
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4301
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4302 /* 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
4303 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
4304 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
4305 f->output_data.x->menubar_widget,
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4306 f->output_data.x->edit_widget);
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4307 }
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4308 #endif /* USE_X_TOOLKIT */
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4309
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4310 /* 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
4311 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
4312 bar so that its size can be taken into account. */
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4313 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
4314 x_wm_set_size_hint (f, window_prompting, 0);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4315 UNBLOCK_INPUT;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4316
25320
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4317 /* 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
4318 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
4319 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
4320 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
4321 {
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4322 Lisp_Object visibility;
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4323
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4324 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
4325 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
4326 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
4327 visibility = Qt;
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4328
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4329 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
4330 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
4331 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
4332 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
4333 else
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4334 /* 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
4335 ;
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4336 }
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4337
25320
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4338 UNGCPRO;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
4339 return unbind_to (count, frame);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4340 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4341
11537
9d4df3cf95b3 (x_get_focus_frame): New arg FRAME. Callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11496
diff changeset
4342 /* 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
4343 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
4344 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
4345
6485
b0825eef18b1 (x_get_focus_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6480
diff changeset
4346 Lisp_Object
11537
9d4df3cf95b3 (x_get_focus_frame): New arg FRAME. Callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11496
diff changeset
4347 x_get_focus_frame (frame)
9d4df3cf95b3 (x_get_focus_frame): New arg FRAME. Callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11496
diff changeset
4348 struct frame *frame;
6485
b0825eef18b1 (x_get_focus_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6480
diff changeset
4349 {
11537
9d4df3cf95b3 (x_get_focus_frame): New arg FRAME. Callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11496
diff changeset
4350 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
4351 Lisp_Object xfocus;
11537
9d4df3cf95b3 (x_get_focus_frame): New arg FRAME. Callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11496
diff changeset
4352 if (! dpyinfo->x_focus_frame)
6485
b0825eef18b1 (x_get_focus_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6480
diff changeset
4353 return Qnil;
b0825eef18b1 (x_get_focus_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6480
diff changeset
4354
11537
9d4df3cf95b3 (x_get_focus_frame): New arg FRAME. Callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11496
diff changeset
4355 XSETFRAME (xfocus, dpyinfo->x_focus_frame);
6485
b0825eef18b1 (x_get_focus_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6480
diff changeset
4356 return xfocus;
b0825eef18b1 (x_get_focus_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6480
diff changeset
4357 }
3048
96ff8e5744b2 * xfns.c (select_visual): Include the screen number in the
Jim Blandy <jimb@redhat.com>
parents: 3015
diff changeset
4358
28044
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4359
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4360 /* 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
4361 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
4362 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
4363
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4364 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
4365 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
4366 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
4367 following a user-command. */
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4368
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4369 DEFUN ("x-focus-frame", Fx_focus_frame, Sx_focus_frame, 1, 1, 0,
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4370 "Set the input focus to FRAME.\n\
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4371 FRAME nil means use the selected frame.")
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4372 (frame)
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4373 Lisp_Object frame;
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4374 {
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4375 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
4376 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
4377 int count;
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4378
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4379 BLOCK_INPUT;
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4380 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
4381 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
4382 RevertToParent, CurrentTime);
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4383 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
4384 UNBLOCK_INPUT;
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4385
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4386 return Qnil;
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4387 }
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4388
3048
96ff8e5744b2 * xfns.c (select_visual): Include the screen number in the
Jim Blandy <jimb@redhat.com>
parents: 3015
diff changeset
4389
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
4390 DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0,
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
4391 "Internal function called by `color-defined-p', which see.")
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4392 (color, frame)
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4393 Lisp_Object color, frame;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4394 {
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4395 XColor foo;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4396 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
4397
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4398 CHECK_STRING (color, 1);
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4399
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
4400 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
4401 return Qt;
1fe413b0a916 (defined_color): New arg ALLOC--optionally don't allocate the color.
Richard M. Stallman <rms@gnu.org>
parents: 8655
diff changeset
4402 else
1fe413b0a916 (defined_color): New arg ALLOC--optionally don't allocate the color.
Richard M. Stallman <rms@gnu.org>
parents: 8655
diff changeset
4403 return Qnil;
1fe413b0a916 (defined_color): New arg ALLOC--optionally don't allocate the color.
Richard M. Stallman <rms@gnu.org>
parents: 8655
diff changeset
4404 }
1fe413b0a916 (defined_color): New arg ALLOC--optionally don't allocate the color.
Richard M. Stallman <rms@gnu.org>
parents: 8655
diff changeset
4405
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
4406 DEFUN ("xw-color-values", Fxw_color_values, Sxw_color_values, 1, 2, 0,
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
4407 "Internal function called by `color-values', which see.")
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4408 (color, frame)
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4409 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
4410 {
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4411 XColor foo;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4412 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
4413
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4414 CHECK_STRING (color, 1);
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4415
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
4416 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
4417 {
4c69fcaaa037 (Fx_color_defined_p): Return list of RGB values, not just t.
Richard M. Stallman <rms@gnu.org>
parents: 8405
diff changeset
4418 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
4419
4c69fcaaa037 (Fx_color_defined_p): Return list of RGB values, not just t.
Richard M. Stallman <rms@gnu.org>
parents: 8405
diff changeset
4420 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
4421 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
4422 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
4423 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
4424 }
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4425 else
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4426 return Qnil;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4427 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4428
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
4429 DEFUN ("xw-display-color-p", Fxw_display_color_p, Sxw_display_color_p, 0, 1, 0,
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
4430 "Internal function called by `display-color-p', which see.")
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4431 (display)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4432 Lisp_Object display;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4433 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4434 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
4435
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4436 if (dpyinfo->n_planes <= 2)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4437 return Qnil;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4438
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4439 switch (dpyinfo->visual->class)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4440 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4441 case StaticColor:
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4442 case PseudoColor:
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4443 case TrueColor:
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4444 case DirectColor:
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4445 return Qt;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4446
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4447 default:
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4448 return Qnil;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4449 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4450 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4451
8779
12c6296bbb4b (Fx_display_grayscale_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8758
diff changeset
4452 DEFUN ("x-display-grayscale-p", Fx_display_grayscale_p, Sx_display_grayscale_p,
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4453 0, 1, 0,
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4454 "Return t if the X display supports shades of gray.\n\
12347
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4455 Note that color displays do support shades of gray.\n\
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4456 The optional argument DISPLAY specifies which display to ask about.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4457 DISPLAY should be either a frame or a display name (a string).\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4458 If omitted or nil, that stands for the selected frame's display.")
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4459 (display)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4460 Lisp_Object display;
8779
12c6296bbb4b (Fx_display_grayscale_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8758
diff changeset
4461 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4462 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
4463
12347
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4464 if (dpyinfo->n_planes <= 1)
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4465 return Qnil;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4466
12347
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4467 switch (dpyinfo->visual->class)
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4468 {
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4469 case StaticColor:
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4470 case PseudoColor:
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4471 case TrueColor:
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4472 case DirectColor:
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4473 case StaticGray:
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4474 case GrayScale:
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4475 return Qt;
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4476
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4477 default:
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4478 return Qnil;
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4479 }
8779
12c6296bbb4b (Fx_display_grayscale_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8758
diff changeset
4480 }
12c6296bbb4b (Fx_display_grayscale_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8758
diff changeset
4481
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4482 DEFUN ("x-display-pixel-width", Fx_display_pixel_width, Sx_display_pixel_width,
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4483 0, 1, 0,
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4484 "Returns the width in pixels of the X display DISPLAY.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4485 The optional argument DISPLAY specifies which display to ask about.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4486 DISPLAY should be either a frame or a display name (a string).\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4487 If omitted or nil, that stands for the selected frame's display.")
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4488 (display)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4489 Lisp_Object display;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4490 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4491 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
4492
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4493 return make_number (dpyinfo->width);
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4494 }
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4495
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4496 DEFUN ("x-display-pixel-height", Fx_display_pixel_height,
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4497 Sx_display_pixel_height, 0, 1, 0,
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4498 "Returns the height in pixels of the X display DISPLAY.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4499 The optional argument DISPLAY specifies which display to ask about.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4500 DISPLAY should be either a frame or a display name (a string).\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4501 If omitted or nil, that stands for the selected frame's display.")
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4502 (display)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4503 Lisp_Object display;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4504 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4505 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
4506
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4507 return make_number (dpyinfo->height);
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4508 }
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4509
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4510 DEFUN ("x-display-planes", Fx_display_planes, Sx_display_planes,
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4511 0, 1, 0,
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4512 "Returns the number of bitplanes of the X display DISPLAY.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4513 The optional argument DISPLAY specifies which display to ask about.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4514 DISPLAY should be either a frame or a display name (a string).\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4515 If omitted or nil, that stands for the selected frame's display.")
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4516 (display)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4517 Lisp_Object display;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4518 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4519 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
4520
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4521 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
4522 }
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4523
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4524 DEFUN ("x-display-color-cells", Fx_display_color_cells, Sx_display_color_cells,
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4525 0, 1, 0,
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4526 "Returns the number of color cells of the X display DISPLAY.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4527 The optional argument DISPLAY specifies which display to ask about.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4528 DISPLAY should be either a frame or a display name (a string).\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4529 If omitted or nil, that stands for the selected frame's display.")
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4530 (display)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4531 Lisp_Object display;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4532 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4533 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
4534
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4535 return make_number (DisplayCells (dpyinfo->display,
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4536 XScreenNumberOfScreen (dpyinfo->screen)));
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4537 }
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4538
4279
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
4539 DEFUN ("x-server-max-request-size", Fx_server_max_request_size,
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
4540 Sx_server_max_request_size,
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
4541 0, 1, 0,
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4542 "Returns the maximum request size of the X server of display DISPLAY.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4543 The optional argument DISPLAY specifies which display to ask about.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4544 DISPLAY should be either a frame or a display name (a string).\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4545 If omitted or nil, that stands for the selected frame's display.")
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4546 (display)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4547 Lisp_Object display;
4279
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
4548 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4549 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
4550
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4551 return make_number (MAXREQUEST (dpyinfo->display));
4279
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
4552 }
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
4553
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4554 DEFUN ("x-server-vendor", Fx_server_vendor, Sx_server_vendor, 0, 1, 0,
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4555 "Returns the vendor ID string of the X server of display DISPLAY.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4556 The optional argument DISPLAY specifies which display to ask about.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4557 DISPLAY should be either a frame or a display name (a string).\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4558 If omitted or nil, that stands for the selected frame's display.")
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4559 (display)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4560 Lisp_Object display;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4561 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4562 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
4563 char *vendor = ServerVendor (dpyinfo->display);
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4564
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4565 if (! vendor) vendor = "";
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4566 return build_string (vendor);
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4567 }
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4568
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4569 DEFUN ("x-server-version", Fx_server_version, Sx_server_version, 0, 1, 0,
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4570 "Returns the version numbers of the X server of display DISPLAY.\n\
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4571 The value is a list of three integers: the major and minor\n\
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4572 version numbers of the X Protocol in use, and the vendor-specific release\n\
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4573 number. See also the function `x-server-vendor'.\n\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4574 The optional argument DISPLAY specifies which display to ask about.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4575 DISPLAY should be either a frame or a display name (a string).\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4576 If omitted or nil, that stands for the selected frame's display.")
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4577 (display)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4578 Lisp_Object display;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4579 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4580 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
4581 Display *dpy = dpyinfo->display;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4582
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4583 return Fcons (make_number (ProtocolVersion (dpy)),
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4584 Fcons (make_number (ProtocolRevision (dpy)),
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4585 Fcons (make_number (VendorRelease (dpy)), Qnil)));
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4586 }
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4587
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4588 DEFUN ("x-display-screens", Fx_display_screens, Sx_display_screens, 0, 1, 0,
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4589 "Returns the number of screens on the X server of display DISPLAY.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4590 The optional argument DISPLAY specifies which display to ask about.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4591 DISPLAY should be either a frame or a display name (a string).\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4592 If omitted or nil, that stands for the selected frame's display.")
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4593 (display)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4594 Lisp_Object display;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4595 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4596 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
4597
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4598 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
4599 }
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4600
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4601 DEFUN ("x-display-mm-height", Fx_display_mm_height, Sx_display_mm_height, 0, 1, 0,
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4602 "Returns the height in millimeters of the X display DISPLAY.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4603 The optional argument DISPLAY specifies which display to ask about.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4604 DISPLAY should be either a frame or a display name (a string).\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4605 If omitted or nil, that stands for the selected frame's display.")
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4606 (display)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4607 Lisp_Object display;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4608 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4609 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
4610
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4611 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
4612 }
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4613
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4614 DEFUN ("x-display-mm-width", Fx_display_mm_width, Sx_display_mm_width, 0, 1, 0,
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4615 "Returns the width in millimeters of the X display DISPLAY.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4616 The optional argument DISPLAY specifies which display to ask about.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4617 DISPLAY should be either a frame or a display name (a string).\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4618 If omitted or nil, that stands for the selected frame's display.")
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4619 (display)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4620 Lisp_Object display;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4621 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4622 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
4623
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4624 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
4625 }
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4626
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4627 DEFUN ("x-display-backing-store", Fx_display_backing_store,
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4628 Sx_display_backing_store, 0, 1, 0,
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4629 "Returns an indication of whether X display DISPLAY does backing store.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4630 The value may be `always', `when-mapped', or `not-useful'.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4631 The optional argument DISPLAY specifies which display to ask about.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4632 DISPLAY should be either a frame or a display name (a string).\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4633 If omitted or nil, that stands for the selected frame's display.")
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4634 (display)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4635 Lisp_Object display;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4636 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4637 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
4638 Lisp_Object result;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4639
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4640 switch (DoesBackingStore (dpyinfo->screen))
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4641 {
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4642 case Always:
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4643 result = intern ("always");
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4644 break;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4645
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4646 case WhenMapped:
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4647 result = intern ("when-mapped");
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4648 break;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4649
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4650 case NotUseful:
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4651 result = intern ("not-useful");
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4652 break;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4653
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4654 default:
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4655 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
4656 result = Qnil;
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4657 }
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4658
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4659 return result;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4660 }
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4661
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4662 DEFUN ("x-display-visual-class", Fx_display_visual_class,
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4663 Sx_display_visual_class, 0, 1, 0,
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4664 "Returns the visual class of the X display DISPLAY.\n\
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4665 The value is one of the symbols `static-gray', `gray-scale',\n\
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4666 `static-color', `pseudo-color', `true-color', or `direct-color'.\n\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4667 The optional argument DISPLAY specifies which display to ask about.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4668 DISPLAY should be either a frame or a display name (a string).\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4669 If omitted or nil, that stands for the selected frame's display.")
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4670 (display)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4671 Lisp_Object display;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4672 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4673 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
4674 Lisp_Object result;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4675
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4676 switch (dpyinfo->visual->class)
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4677 {
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4678 case StaticGray:
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4679 result = intern ("static-gray");
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4680 break;
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4681 case GrayScale:
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4682 result = intern ("gray-scale");
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4683 break;
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4684 case StaticColor:
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4685 result = intern ("static-color");
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4686 break;
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4687 case PseudoColor:
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4688 result = intern ("pseudo-color");
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4689 break;
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4690 case TrueColor:
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4691 result = intern ("true-color");
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4692 break;
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4693 case DirectColor:
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4694 result = intern ("direct-color");
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4695 break;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4696 default:
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4697 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
4698 result = Qnil;
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4699 }
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4700
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
4701 return result;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4702 }
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4703
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4704 DEFUN ("x-display-save-under", Fx_display_save_under,
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4705 Sx_display_save_under, 0, 1, 0,
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4706 "Returns t if the X display DISPLAY supports the save-under feature.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4707 The optional argument DISPLAY specifies which display to ask about.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4708 DISPLAY should be either a frame or a display name (a string).\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4709 If omitted or nil, that stands for the selected frame's display.")
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4710 (display)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4711 Lisp_Object display;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4712 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4713 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
4714
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4715 if (DoesSaveUnders (dpyinfo->screen) == True)
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4716 return Qt;
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4717 else
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4718 return Qnil;
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4719 }
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4720
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4721 int
2067
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
4722 x_pixel_width (f)
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
4723 register struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4724 {
2067
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
4725 return PIXEL_WIDTH (f);
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
4726 }
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
4727
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4728 int
2067
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
4729 x_pixel_height (f)
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
4730 register struct frame *f;
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
4731 {
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
4732 return PIXEL_HEIGHT (f);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4733 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4734
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4735 int
2067
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
4736 x_char_width (f)
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
4737 register struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4738 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4739 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
4740 }
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
4741
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4742 int
2067
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
4743 x_char_height (f)
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
4744 register struct frame *f;
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
4745 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4746 return f->output_data.x->line_height;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4747 }
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4748
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4749 int
19825
cdfaf8ce5208 (x_screen_planes): Fix type of argument.
Richard M. Stallman <rms@gnu.org>
parents: 19095
diff changeset
4750 x_screen_planes (f)
cdfaf8ce5208 (x_screen_planes): Fix type of argument.
Richard M. Stallman <rms@gnu.org>
parents: 19095
diff changeset
4751 register struct frame *f;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4752 {
19825
cdfaf8ce5208 (x_screen_planes): Fix type of argument.
Richard M. Stallman <rms@gnu.org>
parents: 19095
diff changeset
4753 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
4754 }
28044
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4755
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4756
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4757
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4758 /************************************************************************
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4759 X Displays
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4760 ************************************************************************/
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4761
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4762
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4763 /* Mapping visual names to visuals. */
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4764
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4765 static struct visual_class
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4766 {
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4767 char *name;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4768 int class;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4769 }
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4770 visual_classes[] =
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4771 {
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4772 {"StaticGray", StaticGray},
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4773 {"GrayScale", GrayScale},
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4774 {"StaticColor", StaticColor},
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4775 {"PseudoColor", PseudoColor},
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4776 {"TrueColor", TrueColor},
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4777 {"DirectColor", DirectColor},
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4778 NULL
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4779 };
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4780
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4781
4606
0866f021a2cc (XScreenNumberOfScreen): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4571
diff changeset
4782 #ifndef HAVE_XSCREENNUMBEROFSCREEN
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4783
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4784 /* 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
4785 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
4786
4606
0866f021a2cc (XScreenNumberOfScreen): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4571
diff changeset
4787 int
0866f021a2cc (XScreenNumberOfScreen): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4571
diff changeset
4788 XScreenNumberOfScreen (scr)
0866f021a2cc (XScreenNumberOfScreen): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4571
diff changeset
4789 register Screen *scr;
0866f021a2cc (XScreenNumberOfScreen): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4571
diff changeset
4790 {
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4791 Display *dpy = scr->display;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4792 int i;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4793
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4794 for (i = 0; i < dpy->nscreens; ++i)
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4795 if (scr == dpy->screens[i])
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4796 break;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4797
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4798 return i;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4799 }
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4800
4606
0866f021a2cc (XScreenNumberOfScreen): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4571
diff changeset
4801 #endif /* not HAVE_XSCREENNUMBEROFSCREEN */
0866f021a2cc (XScreenNumberOfScreen): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4571
diff changeset
4802
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4803
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4804 /* 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
4805 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
4806
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4807 void
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4808 select_visual (dpyinfo)
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4809 struct x_display_info *dpyinfo;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4810 {
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4811 Display *dpy = dpyinfo->display;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4812 Screen *screen = dpyinfo->screen;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4813 Lisp_Object value;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4814
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4815 /* See if a visual is specified. */
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4816 value = display_x_get_resource (dpyinfo,
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4817 build_string ("visualClass"),
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4818 build_string ("VisualClass"),
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4819 Qnil, Qnil);
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4820 if (STRINGP (value))
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4821 {
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4822 /* 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
4823 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
4824 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
4825 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
4826 char *dash;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4827 int i, class = -1;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4828 XVisualInfo vinfo;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4829
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4830 strcpy (s, XSTRING (value)->data);
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4831 dash = index (s, '-');
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4832 if (dash)
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4833 {
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4834 dpyinfo->n_planes = atoi (dash + 1);
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4835 *dash = '\0';
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4836 }
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4837 else
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4838 /* 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
4839 an error will be printed below. */
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4840 dpyinfo->n_planes = 0;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4841
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4842 /* Determine the visual class. */
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4843 for (i = 0; visual_classes[i].name; ++i)
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4844 if (xstricmp (s, visual_classes[i].name) == 0)
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4845 {
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4846 class = visual_classes[i].class;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4847 break;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4848 }
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4849
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4850 /* 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
4851 if (class == -1
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4852 || !XMatchVisualInfo (dpy, XScreenNumberOfScreen (screen),
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4853 dpyinfo->n_planes, class, &vinfo))
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4854 fatal ("Invalid visual specification `%s'", XSTRING (value)->data);
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4855
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4856 dpyinfo->visual = vinfo.visual;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4857 }
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4858 else
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4859 {
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4860 int n_visuals;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4861 XVisualInfo *vinfo, vinfo_template;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4862
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4863 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
4864
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
4865 #ifdef HAVE_X11R4
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4866 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
4867 #else
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4868 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
4869 #endif
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4870 vinfo_template.screen = XScreenNumberOfScreen (screen);
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4871 vinfo = XGetVisualInfo (dpy, VisualIDMask | VisualScreenMask,
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4872 &vinfo_template, &n_visuals);
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4873 if (n_visuals != 1)
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4874 fatal ("Can't get proper X visual info");
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4875
28199
56a776500341 * xfns.c (select_visual): Don't set dpyinfo->n_planes to the
Gerd Moellmann <gerd@gnu.org>
parents: 28144
diff changeset
4876 dpyinfo->n_planes = vinfo->depth;
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4877 XFree ((char *) vinfo);
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4878 }
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4879 }
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4880
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4881
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4882 /* 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
4883 Open a new connection if necessary. */
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4884
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4885 struct x_display_info *
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4886 x_display_info_for_name (name)
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4887 Lisp_Object name;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4888 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4889 Lisp_Object names;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4890 struct x_display_info *dpyinfo;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4891
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4892 CHECK_STRING (name, 0);
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4893
12381
67cb86bbdb55 (Fx_open_connection, x_display_info_for_name):
Richard M. Stallman <rms@gnu.org>
parents: 12347
diff changeset
4894 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
4895 error ("Not using X Windows");
67cb86bbdb55 (Fx_open_connection, x_display_info_for_name):
Richard M. Stallman <rms@gnu.org>
parents: 12347
diff changeset
4896
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4897 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
4898 dpyinfo;
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
4899 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
4900 {
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4901 Lisp_Object tem;
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
4902 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
4903 if (!NILP (tem))
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4904 return dpyinfo;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4905 }
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4906
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
4907 /* 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
4908 Vx_resource_name = Vinvocation_name;
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
4909
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4910 validate_x_resource_name ();
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4911
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4912 dpyinfo = x_term_init (name, (unsigned char *)0,
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
4913 (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
4914
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4915 if (dpyinfo == 0)
12046
d23f2c9990b2 (x_display_info_for_name): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents: 12036
diff changeset
4916 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
4917
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4918 x_in_use = 1;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4919 XSETFASTINT (Vwindow_system_version, 11);
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4920
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4921 return dpyinfo;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4922 }
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4923
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
4924
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4925 DEFUN ("x-open-connection", Fx_open_connection, Sx_open_connection,
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4926 1, 3, 0, "Open a connection to an X server.\n\
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
4927 DISPLAY is the name of the display to connect to.\n\
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4928 Optional second arg XRM-STRING is a string of resources in xrdb format.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4929 If the optional third arg MUST-SUCCEED is non-nil,\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4930 terminate Emacs if we can't open the connection.")
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4931 (display, xrm_string, must_succeed)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4932 Lisp_Object display, xrm_string, must_succeed;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4933 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4934 unsigned char *xrm_option;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4935 struct x_display_info *dpyinfo;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4936
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4937 CHECK_STRING (display, 0);
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
4938 if (! NILP (xrm_string))
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
4939 CHECK_STRING (xrm_string, 1);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4940
12381
67cb86bbdb55 (Fx_open_connection, x_display_info_for_name):
Richard M. Stallman <rms@gnu.org>
parents: 12347
diff changeset
4941 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
4942 error ("Not using X Windows");
67cb86bbdb55 (Fx_open_connection, x_display_info_for_name):
Richard M. Stallman <rms@gnu.org>
parents: 12347
diff changeset
4943
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
4944 if (! NILP (xrm_string))
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
4945 xrm_option = (unsigned char *) XSTRING (xrm_string)->data;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4946 else
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4947 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
4948
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
4949 validate_x_resource_name ();
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
4950
7802
d687e885fa6a (Fx_open_connection): Set up Vx_resource_name and xrm_option
Richard M. Stallman <rms@gnu.org>
parents: 7797
diff changeset
4951 /* 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
4952 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
4953 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
4954 (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
4955
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4956 if (dpyinfo == 0)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4957 {
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4958 if (!NILP (must_succeed))
12046
d23f2c9990b2 (x_display_info_for_name): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents: 12036
diff changeset
4959 fatal ("Cannot connect to X server %s.\n\
d23f2c9990b2 (x_display_info_for_name): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents: 12036
diff changeset
4960 Check the DISPLAY environment variable or use `-d'.\n\
d23f2c9990b2 (x_display_info_for_name): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents: 12036
diff changeset
4961 Also use the `xhost' program to verify that it is set to permit\n\
d23f2c9990b2 (x_display_info_for_name): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents: 12036
diff changeset
4962 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
4963 XSTRING (display)->data);
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4964 else
12046
d23f2c9990b2 (x_display_info_for_name): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents: 12036
diff changeset
4965 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
4966 }
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4967
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4968 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
4969
9327
b3398cf56fba (Fx_open_connection): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents: 9285
diff changeset
4970 XSETFASTINT (Vwindow_system_version, 11);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4971 return Qnil;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4972 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4973
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4974 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
4975 Sx_close_connection, 1, 1, 0,
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4976 "Close the connection to DISPLAY's X server.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4977 For DISPLAY, specify either a frame or a display name (a string).\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4978 If DISPLAY is nil, that stands for the selected frame's display.")
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4979 (display)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4980 Lisp_Object display;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4981 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4982 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
4983 int i;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4984
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4985 if (dpyinfo->reference_count > 0)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4986 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
4987
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4988 BLOCK_INPUT;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4989 /* 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
4990 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
4991 if (dpyinfo->font_table[i].name)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4992 {
28229
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
4993 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
4994 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
4995 xfree (dpyinfo->font_table[i].name);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4996 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
4997 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4998
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4999 x_destroy_all_bitmaps (dpyinfo);
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5000 XSetCloseDownMode (dpyinfo->display, DestroyAll);
9742
fe7653791d28 (Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents: 9703
diff changeset
5001
fe7653791d28 (Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents: 9703
diff changeset
5002 #ifdef USE_X_TOOLKIT
fe7653791d28 (Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents: 9703
diff changeset
5003 XtCloseDisplay (dpyinfo->display);
fe7653791d28 (Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents: 9703
diff changeset
5004 #else
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5005 XCloseDisplay (dpyinfo->display);
9742
fe7653791d28 (Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents: 9703
diff changeset
5006 #endif
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5007
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5008 x_delete_display (dpyinfo);
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5009 UNBLOCK_INPUT;
8782
51241477cfc5 Delete X11 conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 8780
diff changeset
5010
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5011 return Qnil;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5012 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5013
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5014 DEFUN ("x-display-list", Fx_display_list, Sx_display_list, 0, 0, 0,
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5015 "Return the list of display names that Emacs has connections to.")
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5016 ()
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5017 {
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5018 Lisp_Object tail, result;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5019
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5020 result = Qnil;
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
5021 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
5022 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
5023
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5024 return result;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5025 }
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5026
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5027 DEFUN ("x-synchronize", Fx_synchronize, Sx_synchronize, 1, 2, 0,
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5028 "If ON is non-nil, report X errors as soon as the erring request is made.\n\
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5029 If ON is nil, allow buffering of requests.\n\
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5030 Turning on synchronization prohibits the Xlib routines from buffering\n\
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5031 requests and seriously degrades performance, but makes debugging much\n\
10080
2e1987a4de30 (Fx_synchronize): Fix doc string syntax.
Richard M. Stallman <rms@gnu.org>
parents: 9956
diff changeset
5032 easier.\n\
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5033 The optional second argument DISPLAY specifies which display to act on.\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5034 DISPLAY should be either a frame or a display name (a string).\n\
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5035 If DISPLAY is omitted or nil, that stands for the selected frame's display.")
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5036 (on, display)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5037 Lisp_Object display, on;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5038 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5039 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
5040
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5041 XSynchronize (dpyinfo->display, !EQ (on, Qnil));
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5042
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5043 return Qnil;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5044 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5045
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5046 /* Wait for responses to all X commands issued so far for frame F. */
5536
f900f7bba4c2 (x_sync): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5429
diff changeset
5047
f900f7bba4c2 (x_sync): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5429
diff changeset
5048 void
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5049 x_sync (f)
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5050 FRAME_PTR f;
5536
f900f7bba4c2 (x_sync): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5429
diff changeset
5051 {
5558
42ec75481b8b (x_sync): Block input.
Richard M. Stallman <rms@gnu.org>
parents: 5536
diff changeset
5052 BLOCK_INPUT;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5053 XSync (FRAME_X_DISPLAY (f), False);
5558
42ec75481b8b (x_sync): Block input.
Richard M. Stallman <rms@gnu.org>
parents: 5536
diff changeset
5054 UNBLOCK_INPUT;
5536
f900f7bba4c2 (x_sync): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5429
diff changeset
5055 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5056
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5057
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5058 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5059 Image types
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5060 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5061
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5062 /* 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
5063
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5064 #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
5065
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5066 /* 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
5067 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
5068
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5069 static struct image_type *image_types;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5070
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5071 /* 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
5072 images in Lisp. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5073
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5074 extern Lisp_Object Qimage;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5075
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5076 /* 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
5077
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5078 Lisp_Object Qxbm;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5079
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5080 /* Keywords. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5081
25679
8b09c5927f1c (QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5082 extern Lisp_Object QCwidth, QCheight, QCforeground, QCbackground, QCfile;
28001
fed7f17af8c1 (QCdata): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents: 27993
diff changeset
5083 extern Lisp_Object QCdata;
fed7f17af8c1 (QCdata): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents: 27993
diff changeset
5084 Lisp_Object QCtype, QCascent, QCmargin, QCrelief;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5085 Lisp_Object QCalgorithm, QCcolor_symbols, QCheuristic_mask;
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5086 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
5087
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5088 /* Other symbols. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5089
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5090 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
5091
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5092 /* 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
5093 if not displayed. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5094
25628
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
5095 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
5096
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5097 /* Function prototypes. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5098
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5099 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
5100 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
5101 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
5102 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
5103 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
5104 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
5105 Lisp_Object));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5106
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5107
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5108 /* 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
5109 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
5110
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5111 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5112 define_image_type (type)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5113 struct image_type *type;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5114 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5115 /* 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
5116 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
5117 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
5118 bcopy (type, p, sizeof *p);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5119 p->next = image_types;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5120 image_types = p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5121 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
5122 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5123
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5124
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5125 /* 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
5126 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
5127
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5128 static INLINE struct image_type *
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5129 lookup_image_type (symbol)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5130 Lisp_Object symbol;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5131 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5132 struct image_type *type;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5133
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5134 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
5135 if (EQ (symbol, *type->type))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5136 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5137
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5138 return type;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5139 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5140
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5141
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5142 /* 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
5143 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
5144 `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
5145 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
5146 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
5147 image type. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5148
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5149 int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5150 valid_image_p (object)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5151 Lisp_Object object;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5152 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5153 int valid_p = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5154
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5155 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
5156 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5157 Lisp_Object symbol = Fplist_get (XCDR (object), QCtype);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5158 struct image_type *type = lookup_image_type (symbol);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5159
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5160 if (type)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5161 valid_p = type->valid_p (object);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5162 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5163
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5164 return valid_p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5165 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5166
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5167
25800
609695887d08 (image_error): Use add_to_log.
Gerd Moellmann <gerd@gnu.org>
parents: 25715
diff changeset
5168 /* 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
5169 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
5170 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
5171 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
5172 therefore simply displays a message. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5173
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5174 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5175 image_error (format, arg1, arg2)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5176 char *format;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5177 Lisp_Object arg1, arg2;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5178 {
25800
609695887d08 (image_error): Use add_to_log.
Gerd Moellmann <gerd@gnu.org>
parents: 25715
diff changeset
5179 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
5180 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5181
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5182
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5183
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5184 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5185 Image specifications
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5186 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5187
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5188 enum image_value_type
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5189 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5190 IMAGE_DONT_CHECK_VALUE_TYPE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5191 IMAGE_STRING_VALUE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5192 IMAGE_SYMBOL_VALUE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5193 IMAGE_POSITIVE_INTEGER_VALUE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5194 IMAGE_NON_NEGATIVE_INTEGER_VALUE,
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5195 IMAGE_ASCENT_VALUE,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5196 IMAGE_INTEGER_VALUE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5197 IMAGE_FUNCTION_VALUE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5198 IMAGE_NUMBER_VALUE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5199 IMAGE_BOOL_VALUE
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5200 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5201
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5202 /* Structure used when parsing image specifications. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5203
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5204 struct image_keyword
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5205 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5206 /* Name of keyword. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5207 char *name;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5208
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5209 /* The type of value allowed. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5210 enum image_value_type type;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5211
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5212 /* 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
5213 int mandatory_p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5214
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5215 /* 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
5216 int count;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5217
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5218 /* The value that was found. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5219 Lisp_Object value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5220 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5221
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5222
26401
9457656ded8b (QCuser_data): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 26304
diff changeset
5223 static int parse_image_spec P_ ((Lisp_Object, struct image_keyword *,
9457656ded8b (QCuser_data): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 26304
diff changeset
5224 int, Lisp_Object));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5225 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
5226
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5227
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5228 /* 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
5229 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
5230 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
5231 image_keywords structures of size NKEYWORDS describing other
26401
9457656ded8b (QCuser_data): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 26304
diff changeset
5232 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
5233
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5234 static int
26401
9457656ded8b (QCuser_data): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 26304
diff changeset
5235 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
5236 Lisp_Object spec;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5237 struct image_keyword *keywords;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5238 int nkeywords;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5239 Lisp_Object type;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5240 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5241 int i;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5242 Lisp_Object plist;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5243
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5244 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
5245 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5246
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5247 plist = XCDR (spec);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5248 while (CONSP (plist))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5249 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5250 Lisp_Object key, value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5251
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5252 /* 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
5253 key = XCAR (plist);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5254 plist = XCDR (plist);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5255 if (!SYMBOLP (key))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5256 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5257
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5258 /* There must follow a value. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5259 if (!CONSP (plist))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5260 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5261 value = XCAR (plist);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5262 plist = XCDR (plist);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5263
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5264 /* 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
5265 for (i = 0; i < nkeywords; ++i)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5266 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
5267 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5268
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5269 if (i == nkeywords)
26401
9457656ded8b (QCuser_data): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 26304
diff changeset
5270 continue;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5271
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5272 /* 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
5273 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
5274 keywords[i].value = value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5275 ++keywords[i].count;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5276
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5277 if (keywords[i].count > 1)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5278 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5279
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5280 /* 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
5281 switch (keywords[i].type)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5282 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5283 case IMAGE_STRING_VALUE:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5284 if (!STRINGP (value))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5285 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5286 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5287
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5288 case IMAGE_SYMBOL_VALUE:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5289 if (!SYMBOLP (value))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5290 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5291 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5292
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5293 case IMAGE_POSITIVE_INTEGER_VALUE:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5294 if (!INTEGERP (value) || XINT (value) <= 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5295 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5296 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5297
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5298 case IMAGE_ASCENT_VALUE:
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5299 if (SYMBOLP (value) && EQ (value, Qcenter))
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5300 break;
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5301 else if (INTEGERP (value)
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5302 && XINT (value) >= 0
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5303 && XINT (value) <= 100)
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5304 break;
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5305 return 0;
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5306
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5307 case IMAGE_NON_NEGATIVE_INTEGER_VALUE:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5308 if (!INTEGERP (value) || XINT (value) < 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5309 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5310 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5311
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5312 case IMAGE_DONT_CHECK_VALUE_TYPE:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5313 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5314
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5315 case IMAGE_FUNCTION_VALUE:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5316 value = indirect_function (value);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5317 if (SUBRP (value)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5318 || COMPILEDP (value)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5319 || (CONSP (value) && EQ (XCAR (value), Qlambda)))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5320 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5321 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5322
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5323 case IMAGE_NUMBER_VALUE:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5324 if (!INTEGERP (value) && !FLOATP (value))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5325 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5326 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5327
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5328 case IMAGE_INTEGER_VALUE:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5329 if (!INTEGERP (value))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5330 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5331 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5332
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5333 case IMAGE_BOOL_VALUE:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5334 if (!NILP (value) && !EQ (value, Qt))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5335 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5336 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5337
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5338 default:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5339 abort ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5340 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5341 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5342
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5343 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
5344 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5345 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5346
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5347 /* 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
5348 for (i = 0; i < nkeywords; ++i)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5349 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
5350 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5351
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5352 return NILP (plist);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5353 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5354
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5355
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5356 /* 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
5357 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
5358 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
5359
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5360 static Lisp_Object
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5361 image_spec_value (spec, key, found)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5362 Lisp_Object spec, key;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5363 int *found;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5364 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5365 Lisp_Object tail;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5366
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5367 xassert (valid_image_p (spec));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5368
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5369 for (tail = XCDR (spec);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5370 CONSP (tail) && CONSP (XCDR (tail));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5371 tail = XCDR (XCDR (tail)))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5372 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5373 if (EQ (XCAR (tail), key))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5374 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5375 if (found)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5376 *found = 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5377 return XCAR (XCDR (tail));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5378 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5379 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5380
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5381 if (found)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5382 *found = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5383 return Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5384 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5385
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5386
29938
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5387 DEFUN ("image-size", Fimage_size, Simage_size, 1, 3, 0,
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5388 "Return the size of image SPEC as pair (WIDTH . HEIGHT).\n\
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5389 PIXELS non-nil means return the size in pixels, otherwise return the\n\
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5390 size in canonical character units.\n\
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5391 FRAME is the frame on which the image will be displayed. FRAME nil\n\
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5392 or omitted means use the selected frame.")
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5393 (spec, pixels, frame)
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5394 Lisp_Object spec, pixels, frame;
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5395 {
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5396 Lisp_Object size;
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5397
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5398 size = Qnil;
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5399 if (valid_image_p (spec))
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5400 {
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5401 struct frame *f = check_x_frame (frame);
32536
c198e3edcae6 Revert last change.
Miles Bader <miles@gnu.org>
parents: 32524
diff changeset
5402 int id = lookup_image (f, spec);
29938
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5403 struct image *img = IMAGE_FROM_ID (f, id);
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5404 int width = img->width + 2 * img->margin;
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5405 int height = img->height + 2 * img->margin;
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5406
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5407 if (NILP (pixels))
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5408 size = Fcons (make_float ((double) width / CANON_X_UNIT (f)),
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5409 make_float ((double) height / CANON_Y_UNIT (f)));
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5410 else
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5411 size = Fcons (make_number (width), make_number (height));
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5412 }
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5413 else
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5414 error ("Invalid image specification");
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5415
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5416 return size;
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5417 }
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5418
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5419
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5420 DEFUN ("image-mask-p", Fimage_mask_p, Simage_mask_p, 1, 2, 0,
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5421 "Return t if image SPEC has a mask bitmap.\n\
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5422 FRAME is the frame on which the image will be displayed. FRAME nil\n\
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5423 or omitted means use the selected frame.")
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5424 (spec, frame)
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5425 Lisp_Object spec, frame;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5426 {
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5427 Lisp_Object mask;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5428
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5429 mask = Qnil;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5430 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
5431 {
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5432 struct frame *f = check_x_frame (frame);
32536
c198e3edcae6 Revert last change.
Miles Bader <miles@gnu.org>
parents: 32524
diff changeset
5433 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
5434 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
5435 if (img->mask)
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5436 mask = Qt;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5437 }
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5438 else
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5439 error ("Invalid image specification");
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5440
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5441 return mask;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5442 }
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5443
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5444
24994
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 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5447 Image type independent image structures
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5448 ***********************************************************************/
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 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
5451 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
5452
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5453
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5454 /* 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
5455 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
5456
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5457 static struct image *
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5458 make_image (spec, hash)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5459 Lisp_Object spec;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5460 unsigned hash;
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 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
5463
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5464 xassert (valid_image_p (spec));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5465 bzero (img, sizeof *img);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5466 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
5467 xassert (img->type != NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5468 img->spec = spec;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5469 img->data.lisp_val = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5470 img->ascent = DEFAULT_IMAGE_ASCENT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5471 img->hash = hash;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5472 return img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5473 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5474
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5475
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5476 /* 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
5477
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5478 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5479 free_image (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5480 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5481 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5482 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5483 if (img)
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 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
5486
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5487 /* 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
5488 if (img->prev)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5489 img->prev->next = img->next;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5490 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5491 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
5492
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5493 if (img->next)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5494 img->next->prev = img->prev;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5495
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5496 c->images[img->id] = NULL;
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 /* Free resources, then free IMG. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5499 img->type->free (f, img);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5500 xfree (img);
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 }
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
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5505 /* 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
5506 drawing an image. */
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 void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5509 prepare_image_for_display (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5510 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5511 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5512 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5513 EMACS_TIME t;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5514
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5515 /* 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
5516 EMACS_GET_TIME (t);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5517 img->timestamp = EMACS_SECS (t);
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 /* 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
5520 type dependent loader function. */
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5521 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
5522 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
5523 }
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
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5526 /* Value is the number of pixels for the ascent of image IMG when
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5527 drawn in face FACE. */
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5528
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5529 int
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5530 image_ascent (img, face)
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5531 struct image *img;
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5532 struct face *face;
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5533 {
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5534 int height = img->height + img->margin;
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5535 int ascent;
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5536
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5537 if (img->ascent == CENTERED_IMAGE_ASCENT)
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5538 {
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5539 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
5540 /* 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
5541 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
5542 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
5543 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
5544 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
5545 ascent = (height + face->font->ascent - face->font->descent + 1) / 2;
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5546 else
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5547 ascent = height / 2;
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5548 }
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5549 else
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5550 ascent = height * img->ascent / 100.0;
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5551
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5552 return ascent;
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5553 }
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5554
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5555
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5556
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5557 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5558 Helper functions for X image types
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5559 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5560
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5561 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
5562 int, int));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5563 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
5564 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
5565 struct image *img,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5566 Lisp_Object color_name,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5567 unsigned long dflt));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5568
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5569
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5570 /* 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
5571 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
5572 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
5573 the image, if any. */
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5574
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5575 static void
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5576 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
5577 struct frame *f;
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5578 struct image *img;
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5579 int pixmap_p, mask_p, colors_p;
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5580 {
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5581 if (pixmap_p && img->pixmap)
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5582 {
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5583 XFreePixmap (FRAME_X_DISPLAY (f), img->pixmap);
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5584 img->pixmap = None;
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5585 }
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5586
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5587 if (mask_p && img->mask)
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5588 {
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5589 XFreePixmap (FRAME_X_DISPLAY (f), img->mask);
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5590 img->mask = None;
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5591 }
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5592
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5593 if (colors_p && img->ncolors)
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5594 {
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5595 x_free_colors (f, img->colors, img->ncolors);
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5596 xfree (img->colors);
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5597 img->colors = NULL;
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5598 img->ncolors = 0;
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5599 }
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5600 }
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5601
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5602 /* 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
5603
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5604 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5605 x_clear_image (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5606 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5607 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5608 {
31688
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
5609 BLOCK_INPUT;
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5610 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
5611 UNBLOCK_INPUT;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5612 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5613
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5614
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5615 /* 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
5616 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
5617 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
5618 color. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5619
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5620 static unsigned long
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5621 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
5622 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5623 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5624 Lisp_Object color_name;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5625 unsigned long dflt;
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 XColor color;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5628 unsigned long result;
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 xassert (STRINGP (color_name));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5631
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
5632 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
5633 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5634 /* 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
5635 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
5636 ++img->ncolors;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5637 img->colors =
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5638 (unsigned long *) xrealloc (img->colors,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5639 img->ncolors * sizeof *img->colors);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5640 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
5641 result = color.pixel;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5642 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5643 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5644 result = dflt;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5645
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5646 return result;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5647 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5648
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5649
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5650
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 Image Cache
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5653 ***********************************************************************/
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 static void cache_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
5656
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5657
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5658 /* 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
5659 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
5660
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5661 struct image_cache *
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5662 make_image_cache ()
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5663 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5664 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
5665 int size;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5666
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5667 bzero (c, sizeof *c);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5668 c->size = 50;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5669 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
5670 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
5671 c->buckets = (struct image **) xmalloc (size);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5672 bzero (c->buckets, size);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5673 return c;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5674 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5675
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5676
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5677 /* 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
5678 caches. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5679
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5680 void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5681 free_image_cache (f)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5682 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5683 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5684 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
5685 if (c)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5686 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5687 int i;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5688
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5689 /* 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
5690 xassert (c->refcount == 0);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5691
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5692 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
5693 free_image (f, c->images[i]);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5694 xfree (c->images);
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
5695 xfree (c->buckets);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5696 xfree (c);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5697 FRAME_X_IMAGE_CACHE (f) = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5698 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5699 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5700
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5701
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5702 /* 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
5703 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
5704 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
5705 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
5706 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
5707 at least that many seconds. */
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 void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5710 clear_image_cache (f, force_p)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5711 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5712 int force_p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5713 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5714 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
5715
32536
c198e3edcae6 Revert last change.
Miles Bader <miles@gnu.org>
parents: 32524
diff changeset
5716 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
5717 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5718 EMACS_TIME t;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5719 unsigned long old;
31688
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
5720 int i, nfreed;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5721
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5722 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
5723 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
5724
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
5725 /* 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
5726 while being in an inconsistent state. */
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
5727 BLOCK_INPUT;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5728
31688
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
5729 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
5730 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5731 struct image *img = c->images[i];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5732 if (img != NULL
31688
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
5733 && (force_p || img->timestamp < old))
24994
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 free_image (f, img);
31688
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
5736 ++nfreed;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5737 }
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 /* 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
5741 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
5742 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
5743 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
5744 if (nfreed)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5745 {
31688
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
5746 Lisp_Object tail, frame;
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
5747
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
5748 FOR_EACH_FRAME (tail, frame)
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
5749 {
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
5750 struct frame *f = XFRAME (frame);
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
5751 if (FRAME_X_P (f)
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
5752 && FRAME_X_IMAGE_CACHE (f) == c)
32536
c198e3edcae6 Revert last change.
Miles Bader <miles@gnu.org>
parents: 32524
diff changeset
5753 clear_current_matrices (f);
31688
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
5754 }
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
5755
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5756 ++windows_or_buffers_changed;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5757 }
31688
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
5758
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
5759 UNBLOCK_INPUT;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5760 }
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
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 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
5765 0, 1, 0,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5766 "Clear the image cache of FRAME.\n\
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5767 FRAME nil or omitted means use the selected frame.\n\
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5768 FRAME t means clear the image caches of all frames.")
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5769 (frame)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5770 Lisp_Object frame;
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 (EQ (frame, Qt))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5773 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5774 Lisp_Object 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 FOR_EACH_FRAME (tail, frame)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5777 if (FRAME_X_P (XFRAME (frame)))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5778 clear_image_cache (XFRAME (frame), 1);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5779 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5780 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5781 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
5782
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5783 return Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5784 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5785
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5786
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5787 /* Return the id of image with Lisp specification SPEC on frame F.
32536
c198e3edcae6 Revert last change.
Miles Bader <miles@gnu.org>
parents: 32524
diff changeset
5788 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
5789
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5790 int
32536
c198e3edcae6 Revert last change.
Miles Bader <miles@gnu.org>
parents: 32524
diff changeset
5791 lookup_image (f, spec)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5792 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5793 Lisp_Object spec;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5794 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5795 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
5796 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5797 int i;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5798 unsigned hash;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5799 struct gcpro gcpro1;
25817
190a99688b53 (lookup_image): Set image's timestamp because it's
Gerd Moellmann <gerd@gnu.org>
parents: 25800
diff changeset
5800 EMACS_TIME now;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5801
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5802 /* 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
5803 specification. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5804 xassert (FRAME_WINDOW_P (f));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5805 xassert (valid_image_p (spec));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5806
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5807 GCPRO1 (spec);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5808
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5809 /* 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
5810 hash = sxhash (spec, 0);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5811 i = hash % IMAGE_CACHE_BUCKETS_SIZE;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5812
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5813 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
5814 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
5815 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5816
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5817 /* 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
5818 if (img == NULL)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5819 {
31686
577372d71de8 (lookup_image): Block input while loading the image so
Gerd Moellmann <gerd@gnu.org>
parents: 31651
diff changeset
5820 BLOCK_INPUT;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5821 img = make_image (spec, hash);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5822 cache_image (f, img);
32536
c198e3edcae6 Revert last change.
Miles Bader <miles@gnu.org>
parents: 32524
diff changeset
5823 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
5824
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5825 /* 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
5826 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
5827 draw a rectangle for it. */
32536
c198e3edcae6 Revert last change.
Miles Bader <miles@gnu.org>
parents: 32524
diff changeset
5828 if (img->load_failed_p)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5829 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5830 Lisp_Object value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5831
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5832 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
5833 img->width = (INTEGERP (value)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5834 ? XFASTINT (value) : DEFAULT_IMAGE_WIDTH);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5835 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
5836 img->height = (INTEGERP (value)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5837 ? XFASTINT (value) : DEFAULT_IMAGE_HEIGHT);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5838 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5839 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5840 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5841 /* Handle image type independent image attributes
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5842 `:ascent ASCENT', `:margin MARGIN', `:relief RELIEF'. */
31651
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5843 Lisp_Object ascent, margin, relief;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5844 Lisp_Object file;
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 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
5847 if (INTEGERP (ascent))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5848 img->ascent = XFASTINT (ascent);
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5849 else if (EQ (ascent, Qcenter))
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5850 img->ascent = CENTERED_IMAGE_ASCENT;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5851
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5852 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
5853 if (INTEGERP (margin) && XINT (margin) >= 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5854 img->margin = XFASTINT (margin);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5855
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5856 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
5857 if (INTEGERP (relief))
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 img->relief = XINT (relief);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5860 img->margin += abs (img->relief);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5861 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5862
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5863 /* Manipulation of the image's mask. */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5864 if (img->pixmap)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5865 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5866 /* `:heuristic-mask t'
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5867 `:mask heuristic'
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5868 means build a mask heuristically.
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5869 `:heuristic-mask (R G B)'
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5870 `:mask (heuristic (R G B))'
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5871 means build a mask from color (R G B) in the
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5872 image.
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5873 `:mask nil'
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5874 means remove a mask, if any. */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5875
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5876 Lisp_Object mask;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5877
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5878 mask = image_spec_value (spec, QCheuristic_mask, NULL);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5879 if (!NILP (mask))
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5880 x_build_heuristic_mask (f, img, mask);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5881 else
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5882 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5883 int found_p;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5884
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5885 mask = image_spec_value (spec, QCmask, &found_p);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5886
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5887 if (EQ (mask, Qheuristic))
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5888 x_build_heuristic_mask (f, img, Qt);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5889 else if (CONSP (mask)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5890 && EQ (XCAR (mask), Qheuristic))
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5891 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5892 if (CONSP (XCDR (mask)))
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5893 x_build_heuristic_mask (f, img, XCAR (XCDR (mask)));
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5894 else
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5895 x_build_heuristic_mask (f, img, XCDR (mask));
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5896 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5897 else if (NILP (mask) && found_p && img->mask)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5898 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5899 XFreePixmap (FRAME_X_DISPLAY (f), img->mask);
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5900 img->mask = None;
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5901 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5902 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5903 }
31651
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5904
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5905 /* Should we apply an image transformation algorithm? */
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5906 if (img->pixmap)
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5907 {
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5908 Lisp_Object algorithm;
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5909
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5910 algorithm = image_spec_value (spec, QCalgorithm, NULL);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5911 if (EQ (algorithm, Qdisabled))
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5912 x_disable_image (f, img);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5913 else if (EQ (algorithm, Qlaplace))
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5914 x_laplace (f, img);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5915 else if (EQ (algorithm, Qemboss))
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5916 x_emboss (f, img);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5917 else if (CONSP (algorithm)
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5918 && EQ (XCAR (algorithm), Qedge_detection))
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5919 {
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5920 Lisp_Object tem;
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5921 tem = XCDR (algorithm);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5922 if (CONSP (tem))
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5923 x_edge_detection (f, img,
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5924 Fplist_get (tem, QCmatrix),
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5925 Fplist_get (tem, QCcolor_adjustment));
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5926 }
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
5927 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5928 }
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5929
31686
577372d71de8 (lookup_image): Block input while loading the image so
Gerd Moellmann <gerd@gnu.org>
parents: 31651
diff changeset
5930 UNBLOCK_INPUT;
577372d71de8 (lookup_image): Block input while loading the image so
Gerd Moellmann <gerd@gnu.org>
parents: 31651
diff changeset
5931 xassert (!interrupt_input_blocked);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5932 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5933
25817
190a99688b53 (lookup_image): Set image's timestamp because it's
Gerd Moellmann <gerd@gnu.org>
parents: 25800
diff changeset
5934 /* 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
5935 EMACS_GET_TIME (now);
190a99688b53 (lookup_image): Set image's timestamp because it's
Gerd Moellmann <gerd@gnu.org>
parents: 25800
diff changeset
5936 img->timestamp = EMACS_SECS (now);
190a99688b53 (lookup_image): Set image's timestamp because it's
Gerd Moellmann <gerd@gnu.org>
parents: 25800
diff changeset
5937
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5938 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5939
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5940 /* Value is the image id. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5941 return img->id;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5942 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5943
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5944
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5945 /* 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
5946
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5947 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5948 cache_image (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5949 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5950 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5951 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5952 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
5953 int i;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5954
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5955 /* 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
5956 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
5957 if (c->images[i] == NULL)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5958 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5959
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5960 /* 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
5961 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
5962 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5963 c->size *= 2;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5964 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
5965 c->size * sizeof *c->images);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5966 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5967
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5968 /* 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
5969 c->images[i] = img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5970 img->id = i;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5971 if (i == c->used)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5972 ++c->used;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5973
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5974 /* 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
5975 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
5976 img->next = c->buckets[i];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5977 if (img->next)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5978 img->next->prev = img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5979 img->prev = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5980 c->buckets[i] = img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5981 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5982
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5983
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5984 /* 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
5985 Lisp Objects in the image cache. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5986
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5987 void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5988 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
5989 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5990 void (*fn) P_ ((struct image *img));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5991 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5992 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
5993 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5994 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
5995 if (c)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5996 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5997 int i;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5998 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
5999 if (c->images[i])
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6000 fn (c->images[i]);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6001 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6002 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6003 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6004
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6005
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6006
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6007 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6008 X support code
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6009 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6010
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
6011 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
6012 XImage **, Pixmap *));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6013 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
6014 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
6015
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6016
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6017 /* 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
6018 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
6019 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
6020 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
6021 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
6022
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6023 static int
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
6024 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
6025 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6026 int width, height, depth;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6027 XImage **ximg;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6028 Pixmap *pixmap;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6029 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6030 Display *display = FRAME_X_DISPLAY (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6031 Screen *screen = FRAME_X_SCREEN (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6032 Window window = FRAME_X_WINDOW (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6033
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6034 xassert (interrupt_input_blocked);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6035
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6036 if (depth <= 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6037 depth = DefaultDepthOfScreen (screen);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6038 *ximg = XCreateImage (display, DefaultVisualOfScreen (screen),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6039 depth, ZPixmap, 0, NULL, width, height,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6040 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
6041 if (*ximg == NULL)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6042 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
6043 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
6044 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6045 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6046
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6047 /* Allocate image raster. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6048 (*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
6049
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6050 /* 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
6051 *pixmap = XCreatePixmap (display, window, width, height, depth);
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6052 if (*pixmap == None)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6053 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6054 x_destroy_x_image (*ximg);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6055 *ximg = NULL;
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
6056 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
6057 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6058 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6059
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6060 return 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6061 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6062
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6063
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6064 /* Destroy XImage XIMG. Free XIMG->data. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6065
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6066 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6067 x_destroy_x_image (ximg)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6068 XImage *ximg;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6069 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6070 xassert (interrupt_input_blocked);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6071 if (ximg)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6072 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6073 xfree (ximg->data);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6074 ximg->data = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6075 XDestroyImage (ximg);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6076 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6077 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6078
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6079
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6080 /* 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
6081 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
6082
25691
815efc48a80b (x_put_x_image): Make type consistent with declaration.
Dave Love <fx@gnu.org>
parents: 25679
diff changeset
6083 static void
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6084 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
6085 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6086 XImage *ximg;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6087 Pixmap pixmap;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6088 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6089 GC gc;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6090
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6091 xassert (interrupt_input_blocked);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6092 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
6093 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
6094 XFreeGC (FRAME_X_DISPLAY (f), gc);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6095 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6096
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6097
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6098
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6099 /***********************************************************************
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6100 File Handling
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6101 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6102
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6103 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
6104 static char *slurp_file P_ ((char *, int *));
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6105
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6106
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6107 /* 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
6108 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
6109 nil if not found. */
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 static Lisp_Object
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6112 x_find_image_file (file)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6113 Lisp_Object file;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6114 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6115 Lisp_Object file_found, search_path;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6116 struct gcpro gcpro1, gcpro2;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6117 int fd;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6118
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6119 file_found = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6120 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
6121 GCPRO2 (file_found, search_path);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6122
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6123 /* Try to find FILE in data-directory, then x-bitmap-file-path. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6124 fd = openp (search_path, file, "", &file_found, 0);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6125
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
6126 if (fd == -1)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6127 file_found = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6128 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6129 close (fd);
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 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6132 return file_found;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6133 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6134
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6135
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6136 /* 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
6137 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
6138 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
6139
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6140 static char *
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6141 slurp_file (file, size)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6142 char *file;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6143 int *size;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6144 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6145 FILE *fp = NULL;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6146 char *buf = NULL;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6147 struct stat st;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6148
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6149 if (stat (file, &st) == 0
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6150 && (fp = fopen (file, "r")) != NULL
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6151 && (buf = (char *) xmalloc (st.st_size),
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6152 fread (buf, 1, st.st_size, fp) == st.st_size))
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6153 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6154 *size = st.st_size;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6155 fclose (fp);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6156 }
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6157 else
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6158 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6159 if (fp)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6160 fclose (fp);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6161 if (buf)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6162 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6163 xfree (buf);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6164 buf = NULL;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6165 }
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6166 }
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6167
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6168 return buf;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6169 }
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6170
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6171
24994
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 XBM images
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6175 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6176
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6177 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
6178 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
6179 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
6180 char *, char *));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6181 static int xbm_image_p P_ ((Lisp_Object object));
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6182 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
6183 unsigned char **));
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6184 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
6185
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 /* 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
6188
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6189 enum xbm_keyword_index
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6190 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6191 XBM_TYPE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6192 XBM_FILE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6193 XBM_WIDTH,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6194 XBM_HEIGHT,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6195 XBM_DATA,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6196 XBM_FOREGROUND,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6197 XBM_BACKGROUND,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6198 XBM_ASCENT,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6199 XBM_MARGIN,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6200 XBM_RELIEF,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6201 XBM_ALGORITHM,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6202 XBM_HEURISTIC_MASK,
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
6203 XBM_MASK,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6204 XBM_LAST
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6205 };
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 /* 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
6208 of valid XBM image specifications. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6209
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6210 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
6211 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6212 {":type", IMAGE_SYMBOL_VALUE, 1},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6213 {":file", IMAGE_STRING_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6214 {":width", IMAGE_POSITIVE_INTEGER_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6215 {":height", IMAGE_POSITIVE_INTEGER_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6216 {":data", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6217 {":foreground", IMAGE_STRING_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6218 {":background", IMAGE_STRING_VALUE, 0},
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
6219 {":ascent", IMAGE_ASCENT_VALUE, 0},
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6220 {":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6221 {":relief", IMAGE_INTEGER_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6222 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
6223 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
6224 {":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
6225 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6226
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6227 /* Structure describing the image type XBM. */
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 static struct image_type xbm_type =
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6230 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6231 &Qxbm,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6232 xbm_image_p,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6233 xbm_load,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6234 x_clear_image,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6235 NULL
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 /* Tokens returned from xbm_scan. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6239
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6240 enum xbm_token
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6241 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6242 XBM_TK_IDENT = 256,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6243 XBM_TK_NUMBER
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6244 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6245
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6246
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6247 /* 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
6248 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
6249 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
6250 entry `:type xbm..
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6251
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6252 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
6253 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
6254
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6255 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
6256 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
6257 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
6258
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6259 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
6260 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
6261
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6262 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
6263
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6264 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
6265 bitmap.
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6266
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6267 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
6268 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
6269 XBM file.
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6270
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6271 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
6272 `: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
6273 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
6274 displayed is used. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6275
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6276 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6277 xbm_image_p (object)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6278 Lisp_Object object;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6279 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6280 struct image_keyword kw[XBM_LAST];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6281
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6282 bcopy (xbm_format, kw, sizeof kw);
26401
9457656ded8b (QCuser_data): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 26304
diff changeset
6283 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
6284 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6285
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6286 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
6287
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6288 if (kw[XBM_FILE].count)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6289 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6290 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
6291 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6292 }
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6293 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
6294 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6295 /* In-memory XBM file. */
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6296 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
6297 return 0;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6298 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6299 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6300 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6301 Lisp_Object data;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6302 int width, height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6303
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6304 /* 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
6305 if (!kw[XBM_WIDTH].count
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6306 || !kw[XBM_HEIGHT].count
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6307 || !kw[XBM_DATA].count)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6308 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6309
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6310 data = kw[XBM_DATA].value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6311 width = XFASTINT (kw[XBM_WIDTH].value);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6312 height = XFASTINT (kw[XBM_HEIGHT].value);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6313
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6314 /* 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
6315 data. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6316 if (VECTORP (data))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6317 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6318 int i;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6319
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6320 /* 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
6321 if (XVECTOR (data)->size < height)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6322 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6323
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6324 /* 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
6325 for one line of the image. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6326 for (i = 0; i < height; ++i)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6327 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6328 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
6329
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6330 if (STRINGP (elt))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6331 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6332 if (XSTRING (elt)->size
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6333 < (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
6334 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6335 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6336 else if (BOOL_VECTOR_P (elt))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6337 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6338 if (XBOOL_VECTOR (elt)->size < width)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6339 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6340 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6341 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6342 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6343 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6344 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6345 else if (STRINGP (data))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6346 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6347 if (XSTRING (data)->size
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6348 < (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
6349 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6350 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6351 else if (BOOL_VECTOR_P (data))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6352 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6353 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
6354 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6355 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6356 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6357 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6358 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6359
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6360 return 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6361 }
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
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6364 /* 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
6365 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
6366 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
6367 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
6368 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
6369
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6370 static int
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6371 xbm_scan (s, end, sval, ival)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6372 char **s, *end;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6373 char *sval;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6374 int *ival;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6375 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6376 int c;
31768
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
6377
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
6378 loop:
24994
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 /* Skip white space. */
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6381 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
6382 ;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6383
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6384 if (*s >= end)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6385 c = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6386 else if (isdigit (c))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6387 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6388 int value = 0, digit;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6389
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6390 if (c == '0' && *s < end)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6391 {
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6392 c = *(*s)++;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6393 if (c == 'x' || c == 'X')
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6394 {
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6395 while (*s < end)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6396 {
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6397 c = *(*s)++;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6398 if (isdigit (c))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6399 digit = c - '0';
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6400 else if (c >= 'a' && c <= 'f')
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6401 digit = c - 'a' + 10;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6402 else if (c >= 'A' && c <= 'F')
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6403 digit = c - 'A' + 10;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6404 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6405 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6406 value = 16 * value + digit;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6407 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6408 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6409 else if (isdigit (c))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6410 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6411 value = c - '0';
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6412 while (*s < end
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6413 && (c = *(*s)++, isdigit (c)))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6414 value = 8 * value + c - '0';
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 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6417 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6418 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6419 value = c - '0';
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6420 while (*s < end
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6421 && (c = *(*s)++, isdigit (c)))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6422 value = 10 * value + c - '0';
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6423 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6424
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6425 if (*s < end)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6426 *s = *s - 1;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6427 *ival = value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6428 c = XBM_TK_NUMBER;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6429 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6430 else if (isalpha (c) || c == '_')
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6431 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6432 *sval++ = c;
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6433 while (*s < end
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6434 && (c = *(*s)++, (isalnum (c) || c == '_')))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6435 *sval++ = c;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6436 *sval = 0;
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6437 if (*s < end)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6438 *s = *s - 1;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6439 c = XBM_TK_IDENT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6440 }
31768
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
6441 else if (c == '/' && **s == '*')
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
6442 {
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
6443 /* C-style comment. */
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
6444 ++*s;
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
6445 while (**s && (**s != '*' || *(*s + 1) != '/'))
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
6446 ++*s;
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
6447 if (**s)
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
6448 {
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
6449 *s += 2;
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
6450 goto loop;
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
6451 }
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
6452 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6453
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6454 return c;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6455 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6456
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6457
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6458 /* Replacement for XReadBitmapFileData which isn't available under old
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6459 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
6460 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
6461 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
6462 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
6463 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
6464
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6465 static int
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6466 xbm_read_bitmap_data (contents, end, width, height, data)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6467 char *contents, *end;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6468 int *width, *height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6469 unsigned char **data;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6470 {
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6471 char *s = contents;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6472 char buffer[BUFSIZ];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6473 int padding_p = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6474 int v10 = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6475 int bytes_per_line, i, nbytes;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6476 unsigned char *p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6477 int value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6478 int LA1;
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 #define match() \
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6481 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
6482
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6483 #define expect(TOKEN) \
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6484 if (LA1 != (TOKEN)) \
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6485 goto failure; \
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6486 else \
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6487 match ()
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6488
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6489 #define expect_ident(IDENT) \
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6490 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
6491 match (); \
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6492 else \
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6493 goto failure
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 *width = *height = -1;
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6496 if (data)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6497 *data = NULL;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6498 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
6499
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6500 /* 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
6501 while (LA1 == '#')
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 match ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6504 expect_ident ("define");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6505 expect (XBM_TK_IDENT);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6506
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6507 if (LA1 == XBM_TK_NUMBER);
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 char *p = strrchr (buffer, '_');
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6510 p = p ? p + 1 : buffer;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6511 if (strcmp (p, "width") == 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6512 *width = value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6513 else if (strcmp (p, "height") == 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6514 *height = value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6515 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6516 expect (XBM_TK_NUMBER);
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 if (*width < 0 || *height < 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6520 goto failure;
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6521 else if (data == NULL)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6522 goto success;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6523
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6524 /* Parse bits. Must start with `static'. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6525 expect_ident ("static");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6526 if (LA1 == XBM_TK_IDENT)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6527 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6528 if (strcmp (buffer, "unsigned") == 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6529 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6530 match ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6531 expect_ident ("char");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6532 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6533 else if (strcmp (buffer, "short") == 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6534 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6535 match ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6536 v10 = 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6537 if (*width % 16 && *width % 16 < 9)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6538 padding_p = 1;
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 else if (strcmp (buffer, "char") == 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6541 match ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6542 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6543 goto failure;
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 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6546 goto failure;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6547
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6548 expect (XBM_TK_IDENT);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6549 expect ('[');
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6550 expect (']');
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6551 expect ('=');
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6552 expect ('{');
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6553
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6554 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
6555 nbytes = bytes_per_line * *height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6556 p = *data = (char *) xmalloc (nbytes);
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 if (v10)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6559 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6560 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
6561 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6562 int val = value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6563 expect (XBM_TK_NUMBER);
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 *p++ = val;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6566 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
6567 *p++ = value >> 8;
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 if (LA1 == ',' || LA1 == '}')
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6570 match ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6571 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6572 goto failure;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6573 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6574 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6575 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6576 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6577 for (i = 0; i < nbytes; ++i)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6578 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6579 int val = value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6580 expect (XBM_TK_NUMBER);
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 *p++ = val;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6583
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6584 if (LA1 == ',' || LA1 == '}')
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6585 match ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6586 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6587 goto failure;
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 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6590
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6591 success:
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6592 return 1;
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 failure:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6595
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6596 if (data && *data)
24994
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 xfree (*data);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6599 *data = NULL;
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 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6602
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6603 #undef match
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6604 #undef expect
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6605 #undef expect_ident
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6606 }
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
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6609 /* 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
6610 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
6611 successful. */
24994
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 static int
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6614 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
6615 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6616 struct image *img;
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6617 char *contents, *end;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6618 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6619 int rc;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6620 unsigned char *data;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6621 int success_p = 0;
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6622
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6623 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
6624 if (rc)
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 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
6627 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
6628 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
6629 Lisp_Object value;
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 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
6632
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6633 /* 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
6634 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
6635 if (!NILP (value))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6636 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
6637
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6638 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
6639 if (!NILP (value))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6640 background = x_alloc_image_color (f, img, value, background);
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 img->pixmap
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6643 = XCreatePixmapFromBitmapData (FRAME_X_DISPLAY (f),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6644 FRAME_X_WINDOW (f),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6645 data,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6646 img->width, img->height,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6647 foreground, background,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6648 depth);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6649 xfree (data);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6650
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6651 if (img->pixmap == None)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6652 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6653 x_clear_image (f, img);
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6654 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
6655 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6656 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6657 success_p = 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6658 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6659 else
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
6660 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
6661
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6662 return success_p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6663 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6664
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6665
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6666 /* 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
6667
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6668 static int
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6669 xbm_file_p (data)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6670 Lisp_Object data;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6671 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6672 int w, h;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6673 return (STRINGP (data)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6674 && xbm_read_bitmap_data (XSTRING (data)->data,
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6675 (XSTRING (data)->data
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6676 + STRING_BYTES (XSTRING (data))),
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6677 &w, &h, NULL));
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6678 }
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
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6681 /* 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
6682 non-zero if successful. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6683
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6684 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6685 xbm_load (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6686 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6687 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6688 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6689 int success_p = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6690 Lisp_Object file_name;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6691
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6692 xassert (xbm_image_p (img->spec));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6693
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6694 /* 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
6695 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
6696 if (STRINGP (file_name))
28747
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 Lisp_Object file;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6699 char *contents;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6700 int size;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6701 struct gcpro gcpro1;
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 file = x_find_image_file (file_name);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6704 GCPRO1 (file);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6705 if (!STRINGP (file))
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6706 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6707 image_error ("Cannot find image file `%s'", file_name, Qnil);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6708 UNGCPRO;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6709 return 0;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6710 }
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6711
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6712 contents = slurp_file (XSTRING (file)->data, &size);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6713 if (contents == NULL)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6714 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6715 image_error ("Error loading XBM image `%s'", img->spec, Qnil);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6716 UNGCPRO;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6717 return 0;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6718 }
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6719
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6720 success_p = xbm_load_image (f, img, contents, contents + size);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6721 UNGCPRO;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6722 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6723 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6724 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6725 struct image_keyword fmt[XBM_LAST];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6726 Lisp_Object data;
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6727 unsigned char *bitmap_data;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6728 int depth;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6729 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
6730 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
6731 char *bits;
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6732 int parsed_p, height, width;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6733 int in_memory_file_p = 0;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6734
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6735 /* See if data looks like an in-memory XBM file. */
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6736 data = image_spec_value (img->spec, QCdata, NULL);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6737 in_memory_file_p = xbm_file_p (data);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6738
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6739 /* Parse the image specification. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6740 bcopy (xbm_format, fmt, sizeof fmt);
26401
9457656ded8b (QCuser_data): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 26304
diff changeset
6741 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
6742 xassert (parsed_p);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6743
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6744 /* Get specified width, and height. */
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6745 if (!in_memory_file_p)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6746 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6747 img->width = XFASTINT (fmt[XBM_WIDTH].value);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6748 img->height = XFASTINT (fmt[XBM_HEIGHT].value);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6749 xassert (img->width > 0 && img->height > 0);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6750 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6751
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6752 /* 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
6753 if (fmt[XBM_FOREGROUND].count)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6754 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
6755 foreground);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6756 if (fmt[XBM_BACKGROUND].count)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6757 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
6758 background);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6759
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6760 if (in_memory_file_p)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6761 success_p = xbm_load_image (f, img, XSTRING (data)->data,
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6762 (XSTRING (data)->data
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6763 + STRING_BYTES (XSTRING (data))));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6764 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6765 {
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6766 if (VECTORP (data))
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6767 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6768 int i;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6769 char *p;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6770 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
6771
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6772 p = bits = (char *) alloca (nbytes * img->height);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6773 for (i = 0; i < img->height; ++i, p += nbytes)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6774 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6775 Lisp_Object line = XVECTOR (data)->contents[i];
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6776 if (STRINGP (line))
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6777 bcopy (XSTRING (line)->data, p, nbytes);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6778 else
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6779 bcopy (XBOOL_VECTOR (line)->data, p, nbytes);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6780 }
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6781 }
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6782 else if (STRINGP (data))
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6783 bits = XSTRING (data)->data;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6784 else
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6785 bits = XBOOL_VECTOR (data)->data;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6786
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6787 /* Create the pixmap. */
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6788 depth = DefaultDepthOfScreen (FRAME_X_SCREEN (f));
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6789 img->pixmap
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6790 = XCreatePixmapFromBitmapData (FRAME_X_DISPLAY (f),
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6791 FRAME_X_WINDOW (f),
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6792 bits,
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6793 img->width, img->height,
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6794 foreground, background,
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6795 depth);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6796 if (img->pixmap)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6797 success_p = 1;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6798 else
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6799 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6800 image_error ("Unable to create pixmap for XBM image `%s'",
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6801 img->spec, Qnil);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6802 x_clear_image (f, img);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6803 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6804 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6805 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6806
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6807 return success_p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6808 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6809
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
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6812 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6813 XPM images
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
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6816 #if HAVE_XPM
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6817
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6818 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
6819 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
6820 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
6821
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6822 #include "X11/xpm.h"
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6823
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6824 /* 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
6825
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6826 Lisp_Object Qxpm;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6827
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6828 /* 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
6829
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6830 enum xpm_keyword_index
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6831 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6832 XPM_TYPE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6833 XPM_FILE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6834 XPM_DATA,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6835 XPM_ASCENT,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6836 XPM_MARGIN,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6837 XPM_RELIEF,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6838 XPM_ALGORITHM,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6839 XPM_HEURISTIC_MASK,
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
6840 XPM_MASK,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6841 XPM_COLOR_SYMBOLS,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6842 XPM_LAST
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6843 };
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 /* 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
6846 of valid XPM image specifications. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6847
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6848 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
6849 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6850 {":type", IMAGE_SYMBOL_VALUE, 1},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6851 {":file", IMAGE_STRING_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6852 {":data", IMAGE_STRING_VALUE, 0},
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
6853 {":ascent", IMAGE_ASCENT_VALUE, 0},
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6854 {":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6855 {":relief", IMAGE_INTEGER_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6856 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6857 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
6858 {":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
6859 {":color-symbols", IMAGE_DONT_CHECK_VALUE_TYPE, 0}
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6860 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6861
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6862 /* Structure describing the image type XBM. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6863
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6864 static struct image_type xpm_type =
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6865 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6866 &Qxpm,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6867 xpm_image_p,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6868 xpm_load,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6869 x_clear_image,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6870 NULL
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6871 };
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
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6874 /* 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
6875 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
6876 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
6877 lib. */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6878
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6879 #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
6880 #define ALLOC_XPM_COLORS
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6881 #endif
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6882
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6883 #ifdef ALLOC_XPM_COLORS
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6884
31761
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6885 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
6886 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
6887 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
6888 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
6889 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
6890 XColor *, int));
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6891
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6892 /* 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
6893 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
6894 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
6895 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
6896
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6897 struct xpm_cached_color
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6898 {
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6899 /* Next in collision chain. */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6900 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
6901
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6902 /* 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
6903 XColor color;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6904
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6905 /* Color name. */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6906 char name[1];
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6907 };
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6908
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6909 /* 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
6910 size. */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6911
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6912 #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
6913 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
6914
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6915 /* Initialize the color cache. */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6916
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6917 static void
31761
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6918 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
6919 struct frame *f;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6920 XpmAttributes *attrs;
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6921 {
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6922 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
6923 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
6924 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
6925 init_color_table ();
31761
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6926
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6927 if (attrs->valuemask & XpmColorSymbols)
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6928 {
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6929 int i;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6930 XColor color;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6931
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6932 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
6933 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
6934 attrs->colorsymbols[i].value, &color))
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6935 {
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6936 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
6937 color.blue);
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6938 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
6939 }
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6940 }
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6941 }
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6942
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6943
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6944 /* Free the color cache. */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6945
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6946 static void
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6947 xpm_free_color_cache ()
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6948 {
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6949 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
6950 int i;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6951
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6952 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
6953 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
6954 {
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6955 next = p->next;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6956 xfree (p);
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6957 }
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6958
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6959 xfree (xpm_color_cache);
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6960 xpm_color_cache = NULL;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6961 free_color_table ();
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6962 }
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6963
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6964
31761
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6965 /* 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
6966 cache. */
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6967
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6968 static int
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6969 xpm_color_bucket (color_name)
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6970 char *color_name;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6971 {
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6972 unsigned h = 0;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6973 char *s;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6974
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6975 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
6976 h = (h << 2) ^ *s;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6977 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
6978 }
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6979
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6980
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6981 /* 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
6982 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
6983 entry added. */
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6984
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6985 static struct xpm_cached_color *
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6986 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
6987 struct frame *f;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6988 char *color_name;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6989 XColor *color;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6990 int bucket;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6991 {
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6992 size_t nbytes;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6993 struct xpm_cached_color *p;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6994
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6995 if (bucket < 0)
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6996 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
6997
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
6998 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
6999 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
7000 strcpy (p->name, color_name);
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7001 p->color = *color;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7002 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
7003 xpm_color_cache[bucket] = p;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7004 return p;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7005 }
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7006
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7007
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7008 /* 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
7009 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
7010 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
7011 allocation failed. */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7012
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7013 static int
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7014 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
7015 struct frame *f;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7016 char *color_name;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7017 XColor *color;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7018 {
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7019 struct xpm_cached_color *p;
32536
c198e3edcae6 Revert last change.
Miles Bader <miles@gnu.org>
parents: 32524
diff changeset
7020 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
7021
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7022 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
7023 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
7024 break;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7025
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7026 if (p != NULL)
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7027 *color = p->color;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7028 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
7029 color_name, color))
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7030 {
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7031 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
7032 color->blue);
31761
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7033 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
7034 }
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7035
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7036 return p != NULL;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7037 }
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7038
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7039
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7040 /* 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
7041 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
7042 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
7043 if successful. */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7044
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7045 static int
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7046 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
7047 Display *dpy;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7048 Colormap cmap;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7049 char *color_name;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7050 XColor *color;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7051 void *closure;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7052 {
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7053 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
7054 }
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7055
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7056
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7057 /* 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
7058 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
7059 non-zero if successful. */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7060
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7061 static int
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7062 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
7063 Display *dpy;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7064 Colormap cmap;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7065 Pixel *pixels;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7066 int npixels;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7067 void *closure;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7068 {
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7069 return 1;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7070 }
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7071
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7072 #endif /* ALLOC_XPM_COLORS */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7073
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7074
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7075 /* 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
7076 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
7077 cdr are strings. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7078
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7079 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7080 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
7081 Lisp_Object color_symbols;
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 while (CONSP (color_symbols))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7084 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7085 Lisp_Object sym = XCAR (color_symbols);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7086 if (!CONSP (sym)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7087 || !STRINGP (XCAR (sym))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7088 || !STRINGP (XCDR (sym)))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7089 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7090 color_symbols = XCDR (color_symbols);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7091 }
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 return NILP (color_symbols);
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
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 /* 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
7098
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7099 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7100 xpm_image_p (object)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7101 Lisp_Object object;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7102 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7103 struct image_keyword fmt[XPM_LAST];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7104 bcopy (xpm_format, fmt, sizeof fmt);
26401
9457656ded8b (QCuser_data): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 26304
diff changeset
7105 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
7106 /* 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
7107 && 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
7108 /* 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
7109 whose car and cdr are strings. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7110 && (fmt[XPM_COLOR_SYMBOLS].count == 0
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
7111 || 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
7112 }
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
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7115 /* 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
7116 non-zero if successful. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7117
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7118 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7119 xpm_load (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7120 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7121 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7122 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7123 int rc, i;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7124 XpmAttributes attrs;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7125 Lisp_Object specified_file, color_symbols;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7126
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7127 /* 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
7128 close colors. Return colors allocated. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7129 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
7130 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
7131 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
7132 attrs.valuemask |= XpmVisual;
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
7133 attrs.valuemask |= XpmColormap;
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7134
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7135 #ifdef ALLOC_XPM_COLORS
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7136 /* 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
7137 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
7138 attrs.color_closure = f;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7139 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
7140 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
7141 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
7142 #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
7143 /* 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
7144 attrs.valuemask |= XpmReturnAllocPixels;
25200
8ab4da818dc0 (xpm_load) [!XpmAllocCloseColors]:
Richard M. Stallman <rms@gnu.org>
parents: 25153
diff changeset
7145 #ifdef XpmAllocCloseColors
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7146 attrs.alloc_close_colors = 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7147 attrs.valuemask |= XpmAllocCloseColors;
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7148 #else /* not XpmAllocCloseColors */
25200
8ab4da818dc0 (xpm_load) [!XpmAllocCloseColors]:
Richard M. Stallman <rms@gnu.org>
parents: 25153
diff changeset
7149 attrs.closeness = 600;
8ab4da818dc0 (xpm_load) [!XpmAllocCloseColors]:
Richard M. Stallman <rms@gnu.org>
parents: 25153
diff changeset
7150 attrs.valuemask |= XpmCloseness;
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7151 #endif /* not XpmAllocCloseColors */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7152 #endif /* ALLOC_XPM_COLORS */
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 /* 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
7155 these to `attrs'. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7156 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
7157 if (CONSP (color_symbols))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7158 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7159 Lisp_Object tail;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7160 XpmColorSymbol *xpm_syms;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7161 int i, size;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7162
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7163 attrs.valuemask |= XpmColorSymbols;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7164
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7165 /* Count number of symbols. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7166 attrs.numsymbols = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7167 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
7168 ++attrs.numsymbols;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7169
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7170 /* Allocate an XpmColorSymbol array. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7171 size = attrs.numsymbols * sizeof *xpm_syms;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7172 xpm_syms = (XpmColorSymbol *) alloca (size);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7173 bzero (xpm_syms, size);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7174 attrs.colorsymbols = xpm_syms;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7175
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7176 /* Fill the color symbol array. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7177 for (tail = color_symbols, i = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7178 CONSP (tail);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7179 ++i, tail = XCDR (tail))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7180 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7181 Lisp_Object name = XCAR (XCAR (tail));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7182 Lisp_Object color = XCDR (XCAR (tail));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7183 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
7184 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
7185 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
7186 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
7187 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7188 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7189
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7190 /* 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
7191 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
7192 #ifdef ALLOC_XPM_COLORS
31761
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7193 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
7194 #endif
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7195
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7196 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
7197 if (STRINGP (specified_file))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7198 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7199 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
7200 if (!STRINGP (file))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7201 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
7202 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
7203 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7204 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7205
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7206 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
7207 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
7208 &attrs);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7209 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7210 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7211 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7212 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
7213 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
7214 XSTRING (buffer)->data,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7215 &img->pixmap, &img->mask,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7216 &attrs);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7217 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7218
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7219 if (rc == XpmSuccess)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7220 {
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7221 #ifdef ALLOC_XPM_COLORS
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7222 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
7223 #else /* not ALLOC_XPM_COLORS */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7224 img->ncolors = attrs.nalloc_pixels;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7225 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
7226 * sizeof *img->colors);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7227 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
7228 {
6bbcb7e674b1 (xpm_load) [DEBUG_X_COLORS]: Register colors.
Gerd Moellmann <gerd@gnu.org>
parents: 28464
diff changeset
7229 img->colors[i] = attrs.alloc_pixels[i];
6bbcb7e674b1 (xpm_load) [DEBUG_X_COLORS]: Register colors.
Gerd Moellmann <gerd@gnu.org>
parents: 28464
diff changeset
7230 #ifdef DEBUG_X_COLORS
6bbcb7e674b1 (xpm_load) [DEBUG_X_COLORS]: Register colors.
Gerd Moellmann <gerd@gnu.org>
parents: 28464
diff changeset
7231 register_color (img->colors[i]);
6bbcb7e674b1 (xpm_load) [DEBUG_X_COLORS]: Register colors.
Gerd Moellmann <gerd@gnu.org>
parents: 28464
diff changeset
7232 #endif
6bbcb7e674b1 (xpm_load) [DEBUG_X_COLORS]: Register colors.
Gerd Moellmann <gerd@gnu.org>
parents: 28464
diff changeset
7233 }
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7234 #endif /* not ALLOC_XPM_COLORS */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7235
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7236 img->width = attrs.width;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7237 img->height = attrs.height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7238 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
7239
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7240 /* 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
7241 XpmFreeAttributes (&attrs);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7242 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7243 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7244 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7245 switch (rc)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7246 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7247 case XpmOpenFailed:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7248 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
7249 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7250
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7251 case XpmFileInvalid:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7252 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
7253 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7254
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7255 case XpmNoMemory:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7256 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
7257 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7258
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7259 case XpmColorFailed:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7260 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
7261 break;
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 default:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7264 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
7265 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7266 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7267 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7268
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7269 #ifdef ALLOC_XPM_COLORS
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7270 xpm_free_color_cache ();
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7271 #endif
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7272 return rc == XpmSuccess;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7273 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7274
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7275 #endif /* HAVE_XPM != 0 */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7276
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7277
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7278 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7279 Color table
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
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7282 /* 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
7283
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7284 struct ct_color
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7285 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7286 int r, g, b;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7287 unsigned long pixel;
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 /* Next in color table collision list. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7290 struct ct_color *next;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7291 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7292
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7293 /* 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
7294
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7295 #define CT_SIZE 101
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7296
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7297 /* 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
7298
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7299 #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
7300
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7301 /* The color hash table. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7302
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7303 struct ct_color **ct_table;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7304
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7305 /* 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
7306
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7307 int ct_colors_allocated;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7308
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7309 /* Initialize the color table. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7310
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7311 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7312 init_color_table ()
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7313 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7314 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
7315 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
7316 bzero (ct_table, size);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7317 ct_colors_allocated = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7318 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7319
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7320
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7321 /* 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
7322
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7323 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7324 free_color_table ()
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7325 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7326 int i;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7327 struct ct_color *p, *next;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7328
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7329 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
7330 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
7331 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7332 next = p->next;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7333 xfree (p);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7334 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7335
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7336 xfree (ct_table);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7337 ct_table = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7338 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7339
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7340
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7341 /* 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
7342 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
7343 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
7344 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
7345
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7346 static unsigned long
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7347 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
7348 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7349 int r, g, b;
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 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
7352 int i = hash % CT_SIZE;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7353 struct ct_color *p;
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 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
7356 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
7357 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7358
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7359 if (p == NULL)
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 XColor color;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7362 Colormap cmap;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7363 int rc;
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 color.red = r;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7366 color.green = g;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7367 color.blue = b;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7368
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
7369 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
7370 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
7371
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7372 if (rc)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7373 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7374 ++ct_colors_allocated;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7375
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7376 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
7377 p->r = r;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7378 p->g = g;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7379 p->b = b;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7380 p->pixel = color.pixel;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7381 p->next = ct_table[i];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7382 ct_table[i] = p;
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 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7385 return FRAME_FOREGROUND_PIXEL (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7386 }
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 return p->pixel;
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
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7391
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7392 /* 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
7393 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
7394
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7395 static unsigned long
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7396 lookup_pixel_color (f, pixel)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7397 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7398 unsigned long pixel;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7399 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7400 int i = pixel % CT_SIZE;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7401 struct ct_color *p;
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 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
7404 if (p->pixel == pixel)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7405 break;
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 if (p == NULL)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7408 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7409 XColor color;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7410 Colormap cmap;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7411 int rc;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7412
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
7413 cmap = FRAME_X_COLORMAP (f);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7414 color.pixel = pixel;
32606
78b4e9f31087 (x_to_xcolors, x_set_mouse_color, lookup_pixel_color)
Gerd Moellmann <gerd@gnu.org>
parents: 32549
diff changeset
7415 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
7416 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
7417
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7418 if (rc)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7419 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7420 ++ct_colors_allocated;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7421
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7422 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
7423 p->r = color.red;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7424 p->g = color.green;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7425 p->b = color.blue;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7426 p->pixel = pixel;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7427 p->next = ct_table[i];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7428 ct_table[i] = p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7429 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7430 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7431 return FRAME_FOREGROUND_PIXEL (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7432 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7433
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7434 return p->pixel;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7435 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7436
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7437
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7438 /* 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
7439 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
7440
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7441 static unsigned long *
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7442 colors_in_color_table (n)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7443 int *n;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7444 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7445 int i, j;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7446 struct ct_color *p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7447 unsigned long *colors;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7448
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7449 if (ct_colors_allocated == 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7450 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7451 *n = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7452 colors = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7453 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7454 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7455 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7456 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
7457 * sizeof *colors);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7458 *n = ct_colors_allocated;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7459
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7460 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
7461 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
7462 colors[j++] = p->pixel;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7463 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7464
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7465 return colors;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7466 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7467
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7468
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7469
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7470 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7471 Algorithms
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7472 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7473
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7474 static void x_laplace_write_row P_ ((struct frame *, long *,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7475 int, XImage *, int));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7476 static void x_laplace_read_row P_ ((struct frame *, Colormap,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7477 XColor *, int, XImage *, int));
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7478 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
7479 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
7480 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
7481
31651
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7482 /* Non-zero means draw a cross on images having `:algorithm
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7483 disabled'. */
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7484
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7485 int cross_disabled_images;
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7486
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7487 /* Edge detection matrices for different edge-detection
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7488 strategies. */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7489
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7490 static int emboss_matrix[9] = {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7491 /* x - 1 x x + 1 */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7492 2, -1, 0, /* y - 1 */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7493 -1, 0, 1, /* y */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7494 0, 1, -2 /* y + 1 */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7495 };
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7496
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7497 static int laplace_matrix[9] = {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7498 /* x - 1 x x + 1 */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7499 1, 0, 0, /* y - 1 */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7500 0, 0, 0, /* y */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7501 0, 0, -1 /* y + 1 */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7502 };
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7503
31651
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7504 /* 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
7505 are R, G, and B. */
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7506
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7507 #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
7508
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7509
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7510 /* 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
7511 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
7512 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
7513 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
7514 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
7515
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7516 static XColor *
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7517 x_to_xcolors (f, img, rgb_p)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7518 struct frame *f;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7519 struct image *img;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7520 int rgb_p;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7521 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7522 int x, y;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7523 XColor *colors, *p;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7524 XImage *ximg;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7525
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7526 colors = (XColor *) xmalloc (img->width * img->height * sizeof *colors);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7527
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7528 /* Get the X image IMG->pixmap. */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7529 ximg = XGetImage (FRAME_X_DISPLAY (f), img->pixmap,
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7530 0, 0, img->width, img->height, ~0, ZPixmap);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7531
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7532 /* 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
7533 were an easy and portable way to circumvent XGetPixel. */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7534 p = colors;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7535 for (y = 0; y < img->height; ++y)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7536 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7537 XColor *row = p;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7538
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7539 for (x = 0; x < img->width; ++x, ++p)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7540 p->pixel = XGetPixel (ximg, x, y);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7541
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7542 if (rgb_p)
32606
78b4e9f31087 (x_to_xcolors, x_set_mouse_color, lookup_pixel_color)
Gerd Moellmann <gerd@gnu.org>
parents: 32549
diff changeset
7543 x_query_colors (f, row, img->width);
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7544 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7545
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7546 XDestroyImage (ximg);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7547 return colors;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7548 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7549
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7550
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7551 /* 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
7552 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
7553 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
7554
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7555 static void
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7556 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
7557 struct frame *f;
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7558 struct image *img;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7559 XColor *colors;
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7560 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7561 int x, y;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7562 XImage *oimg;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7563 Pixmap pixmap;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7564 XColor *p;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7565
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7566 init_color_table ();
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7567
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7568 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
7569 &oimg, &pixmap);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7570 p = colors;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7571 for (y = 0; y < img->height; ++y)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7572 for (x = 0; x < img->width; ++x, ++p)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7573 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7574 unsigned long pixel;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7575 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
7576 XPutPixel (oimg, x, y, pixel);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7577 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7578
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7579 xfree (colors);
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
7580 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
7581
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7582 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
7583 x_destroy_x_image (oimg);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7584 img->pixmap = pixmap;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7585 img->colors = colors_in_color_table (&img->ncolors);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7586 free_color_table ();
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7587 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7588
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7589
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7590 /* On frame F, perform edge-detection on image IMG.
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7591
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7592 MATRIX is a nine-element array specifying the transformation
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7593 matrix. See emboss_matrix for an example.
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7594
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7595 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
7596 outgoing image. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7597
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7598 static void
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7599 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
7600 struct frame *f;
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7601 struct image *img;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7602 int matrix[9], color_adjust;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7603 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7604 XColor *colors = x_to_xcolors (f, img, 1);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7605 XColor *new, *p;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7606 int x, y, i, sum;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7607
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7608 for (i = sum = 0; i < 9; ++i)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7609 sum += abs (matrix[i]);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7610
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7611 #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
7612
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7613 new = (XColor *) xmalloc (img->width * img->height * sizeof *new);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7614
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7615 for (y = 0; y < img->height; ++y)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7616 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7617 p = COLOR (new, 0, y);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7618 p->red = p->green = p->blue = 0xffff/2;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7619 p = COLOR (new, img->width - 1, y);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7620 p->red = p->green = p->blue = 0xffff/2;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7621 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7622
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7623 for (x = 1; x < img->width - 1; ++x)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7624 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7625 p = COLOR (new, x, 0);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7626 p->red = p->green = p->blue = 0xffff/2;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7627 p = COLOR (new, x, img->height - 1);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7628 p->red = p->green = p->blue = 0xffff/2;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7629 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7630
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7631 for (y = 1; y < img->height - 1; ++y)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7632 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7633 p = COLOR (new, 1, y);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7634
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7635 for (x = 1; x < img->width - 1; ++x, ++p)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7636 {
31651
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7637 int r, g, b, y1, x1;
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7638
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7639 r = g = b = i = 0;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7640 for (y1 = y - 1; y1 < y + 2; ++y1)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7641 for (x1 = x - 1; x1 < x + 2; ++x1, ++i)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7642 if (matrix[i])
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7643 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7644 XColor *t = COLOR (colors, x1, y1);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7645 r += matrix[i] * t->red;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7646 g += matrix[i] * t->green;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7647 b += matrix[i] * t->blue;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7648 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7649
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7650 r = (r / sum + color_adjust) & 0xffff;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7651 g = (g / sum + color_adjust) & 0xffff;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7652 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
7653 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
7654 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7655 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7656
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7657 xfree (colors);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7658 x_from_xcolors (f, img, new);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7659
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7660 #undef COLOR
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7661 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7662
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7663
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7664 /* 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
7665 on frame F. */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7666
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7667 static void
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7668 x_emboss (f, img)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7669 struct frame *f;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7670 struct image *img;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7671 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7672 x_detect_edges (f, img, emboss_matrix, 0xffff / 2);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7673 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7674
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7675
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7676 /* 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
7677 on frame F. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7678
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7679 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7680 x_laplace (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7681 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7682 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7683 {
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7684 x_detect_edges (f, img, laplace_matrix, 45000);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7685 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7686
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7687
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7688 /* 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
7689 transformation matrix MATRIX and color-adjustment COLOR_ADJUST.
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7690
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7691 MATRIX must be either
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7692
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7693 - 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
7694 - a vector of at least 9 numbers
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7695
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7696 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
7697 number. */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7698
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7699 static void
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7700 x_edge_detection (f, img, matrix, color_adjust)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7701 struct frame *f;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7702 struct image *img;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7703 Lisp_Object matrix, color_adjust;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7704 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7705 int i = 0;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7706 int trans[9];
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7707
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7708 if (CONSP (matrix))
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7709 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7710 for (i = 0;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7711 i < 9 && CONSP (matrix) && NUMBERP (XCAR (matrix));
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7712 ++i, matrix = XCDR (matrix))
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7713 trans[i] = XFLOATINT (XCAR (matrix));
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7714 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7715 else if (VECTORP (matrix) && ASIZE (matrix) >= 9)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7716 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7717 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
7718 trans[i] = XFLOATINT (AREF (matrix, i));
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7719 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7720
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7721 if (NILP (color_adjust))
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7722 color_adjust = make_number (0xffff / 2);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7723
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7724 if (i == 9 && NUMBERP (color_adjust))
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7725 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
7726 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7727
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7728
31651
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7729 /* 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
7730
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7731 static void
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7732 x_disable_image (f, img)
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7733 struct frame *f;
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7734 struct image *img;
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7735 {
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7736 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
7737
31651
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7738 if (dpyinfo->n_planes >= 2)
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7739 {
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7740 /* 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
7741 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
7742 we're using this method instead. */
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7743 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
7744 XColor *p, *end;
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7745 const int h = 15000;
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7746 const int l = 30000;
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7747
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7748 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
7749 p < end;
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7750 ++p)
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7751 {
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7752 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
7753 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
7754 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
7755 }
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7756
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7757 x_from_xcolors (f, img, colors);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7758 }
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7759
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7760 /* 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
7761 should. */
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7762 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
7763 {
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7764 Display *dpy = FRAME_X_DISPLAY (f);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7765 GC gc;
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7766
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7767 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
7768 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
7769 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
7770 img->width - 1, img->height - 1);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7771 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
7772 img->width - 1, 0);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7773 XFreeGC (dpy, gc);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7774
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7775 if (img->mask)
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7776 {
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7777 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
7778 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
7779 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
7780 img->width - 1, img->height - 1);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7781 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
7782 img->width - 1, 0);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7783 XFreeGC (dpy, gc);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7784 }
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7785 }
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7786 }
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7787
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
7788
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7789 /* 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
7790 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
7791 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
7792 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
7793 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
7794 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
7795
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7796 static int
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
7797 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
7798 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7799 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7800 Lisp_Object how;
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 Display *dpy = FRAME_X_DISPLAY (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7803 XImage *ximg, *mask_img;
25628
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7804 int x, y, rc, look_at_corners_p;
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
7805 unsigned long bg = 0;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7806
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7807 if (img->mask)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7808 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7809 XFreePixmap (FRAME_X_DISPLAY (f), img->mask);
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
7810 img->mask = None;
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
7811 }
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
7812
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7813 /* 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
7814 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
7815 &mask_img, &img->mask);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7816 if (!rc)
31686
577372d71de8 (lookup_image): Block input while loading the image so
Gerd Moellmann <gerd@gnu.org>
parents: 31651
diff changeset
7817 return 0;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7818
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7819 /* 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
7820 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
7821 ~0, ZPixmap);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7822
25628
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7823 /* Determine the background color of ximg. If HOW is `(R G B)'
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7824 take that as color. Otherwise, try to determine the color
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7825 heuristically. */
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7826 look_at_corners_p = 1;
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7827
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7828 if (CONSP (how))
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7829 {
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7830 int rgb[3], i = 0;
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7831
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7832 while (i < 3
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7833 && CONSP (how)
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7834 && NATNUMP (XCAR (how)))
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7835 {
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7836 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
7837 how = XCDR (how);
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7838 }
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7839
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7840 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
7841 {
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7842 char color_name[30];
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7843 XColor exact, color;
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7844 Colormap cmap;
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7845
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7846 sprintf (color_name, "#%04x%04x%04x", rgb[0], rgb[1], rgb[2]);
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7847
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
7848 cmap = FRAME_X_COLORMAP (f);
25628
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7849 if (XLookupColor (dpy, cmap, color_name, &exact, &color))
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7850 {
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7851 bg = color.pixel;
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7852 look_at_corners_p = 0;
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7853 }
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7854 }
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7855 }
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7856
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
7857 if (look_at_corners_p)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7858 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7859 unsigned long corners[4];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7860 int i, best_count;
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 /* Get the colors at the corners of ximg. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7863 corners[0] = XGetPixel (ximg, 0, 0);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7864 corners[1] = XGetPixel (ximg, img->width - 1, 0);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7865 corners[2] = XGetPixel (ximg, img->width - 1, img->height - 1);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7866 corners[3] = XGetPixel (ximg, 0, img->height - 1);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7867
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7868 /* Choose the most frequently found color as background. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7869 for (i = best_count = 0; i < 4; ++i)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7870 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7871 int j, n;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7872
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7873 for (j = n = 0; j < 4; ++j)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7874 if (corners[i] == corners[j])
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7875 ++n;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7876
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7877 if (n > best_count)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7878 bg = corners[i], best_count = n;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7879 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7880 }
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 /* 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
7883 from the background color bg. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7884 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
7885 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
7886 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
7887
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7888 /* Put mask_img into img->mask. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7889 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
7890 x_destroy_x_image (mask_img);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7891 XDestroyImage (ximg);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7892
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7893 return 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7894 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7895
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7896
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 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7899 PBM (mono, gray, color)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7900 ***********************************************************************/
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 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
7903 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
7904 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
7905
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7906 /* 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
7907
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7908 Lisp_Object Qpbm;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7909
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7910 /* 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
7911
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7912 enum pbm_keyword_index
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7913 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7914 PBM_TYPE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7915 PBM_FILE,
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
7916 PBM_DATA,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7917 PBM_ASCENT,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7918 PBM_MARGIN,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7919 PBM_RELIEF,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7920 PBM_ALGORITHM,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7921 PBM_HEURISTIC_MASK,
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7922 PBM_MASK,
32549
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
7923 PBM_FOREGROUND,
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
7924 PBM_BACKGROUND,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7925 PBM_LAST
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
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7928 /* 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
7929 of valid user-defined image specifications. */
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 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
7932 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7933 {":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
7934 {":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
7935 {":data", IMAGE_STRING_VALUE, 0},
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
7936 {":ascent", IMAGE_ASCENT_VALUE, 0},
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7937 {":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7938 {":relief", IMAGE_INTEGER_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7939 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7940 {":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
7941 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
7942 {":foreground", IMAGE_STRING_VALUE, 0},
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
7943 {":background", IMAGE_STRING_VALUE, 0}
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7944 };
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 /* Structure describing the image type `pbm'. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7947
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7948 static struct image_type pbm_type =
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 &Qpbm,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7951 pbm_image_p,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7952 pbm_load,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7953 x_clear_image,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7954 NULL
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7955 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7956
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7957
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7958 /* 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
7959
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7960 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7961 pbm_image_p (object)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7962 Lisp_Object object;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7963 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7964 struct image_keyword fmt[PBM_LAST];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7965
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7966 bcopy (pbm_format, fmt, sizeof fmt);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7967
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
7968 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
7969 return 0;
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
7970
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
7971 /* 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
7972 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
7973 }
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
7974
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
7975
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
7976 /* 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
7977 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
7978 end of input. */
24994
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 static int
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
7981 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
7982 unsigned char **s, *end;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7983 {
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
7984 int c = 0, val = -1;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7985
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
7986 while (*s < end)
24994
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 /* Skip white-space. */
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
7989 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
7990 ;
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 (c == '#')
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 /* 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
7995 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
7996 ;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7997 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7998 else if (isdigit (c))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7999 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8000 /* Read decimal number. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8001 val = c - '0';
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8002 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
8003 val = 10 * val + c - '0';
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8004 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8005 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8006 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8007 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8008 }
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 return val;
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 /* 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
8015
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8016 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8017 pbm_load (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8018 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8019 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8020 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8021 int raw_p, x, y;
25715
feaedc03dbc8 (x_set_background_color): Remove unused variable(s).
Gerd Moellmann <gerd@gnu.org>
parents: 25691
diff changeset
8022 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
8023 XImage *ximg;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8024 Lisp_Object file, specified_file;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8025 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
8026 struct gcpro gcpro1;
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8027 unsigned char *contents = NULL;
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8028 unsigned char *end, *p;
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8029 int size;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8030
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8031 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
8032 file = Qnil;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8033 GCPRO1 (file);
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8034
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8035 if (STRINGP (specified_file))
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8036 {
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8037 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
8038 if (!STRINGP (file))
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8039 {
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8040 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
8041 UNGCPRO;
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8042 return 0;
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8043 }
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8044
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
8045 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
8046 if (contents == NULL)
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8047 {
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8048 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
8049 UNGCPRO;
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8050 return 0;
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8051 }
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8052
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8053 p = contents;
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8054 end = contents + size;
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8055 }
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8056 else
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8057 {
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8058 Lisp_Object data;
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8059 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
8060 p = XSTRING (data)->data;
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8061 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
8062 }
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8063
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8064 /* Check magic number. */
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8065 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
8066 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
8067 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
8068 error:
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8069 xfree (contents);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8070 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8071 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8072 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8073
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8074 switch (*p++)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8075 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8076 case '1':
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8077 raw_p = 0, type = PBM_MONO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8078 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8079
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8080 case '2':
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8081 raw_p = 0, type = PBM_GRAY;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8082 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8083
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8084 case '3':
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8085 raw_p = 0, type = PBM_COLOR;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8086 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8087
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8088 case '4':
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8089 raw_p = 1, type = PBM_MONO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8090 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8091
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8092 case '5':
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8093 raw_p = 1, type = PBM_GRAY;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8094 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8095
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8096 case '6':
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8097 raw_p = 1, type = PBM_COLOR;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8098 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8099
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8100 default:
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
8101 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
8102 goto error;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8103 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8104
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8105 /* 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
8106 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
8107 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
8108 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
8109
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8110 if (type != PBM_MONO)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8111 {
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8112 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
8113 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
8114 max_color_idx = 255;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8115 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8116
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8117 if (width < 0
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8118 || height < 0
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8119 || (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
8120 goto error;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8121
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
8122 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
8123 &ximg, &img->pixmap))
31686
577372d71de8 (lookup_image): Block input while loading the image so
Gerd Moellmann <gerd@gnu.org>
parents: 31651
diff changeset
8124 goto error;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8125
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8126 /* Initialize the color hash table. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8127 init_color_table ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8128
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8129 if (type == PBM_MONO)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8130 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8131 int c = 0, g;
32549
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8132 struct image_keyword fmt[PBM_LAST];
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8133 unsigned long fg = FRAME_FOREGROUND_PIXEL (f);
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8134 unsigned long bg = FRAME_BACKGROUND_PIXEL (f);
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8135
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8136 /* Parse the image specification. */
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8137 bcopy (pbm_format, fmt, sizeof fmt);
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8138 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
8139
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8140 /* Get foreground and background colors, maybe allocate colors. */
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8141 if (fmt[PBM_FOREGROUND].count)
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8142 fg = x_alloc_image_color (f, img, fmt[PBM_FOREGROUND].value, fg);
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8143 if (fmt[PBM_BACKGROUND].count)
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8144 bg = x_alloc_image_color (f, img, fmt[PBM_BACKGROUND].value, bg);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8145
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8146 for (y = 0; y < height; ++y)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8147 for (x = 0; x < width; ++x)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8148 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8149 if (raw_p)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8150 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8151 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
8152 c = *p++;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8153 g = c & 0x80;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8154 c <<= 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8155 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8156 else
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8157 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
8158
32549
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8159 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
8160 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8161 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8162 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8163 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8164 for (y = 0; y < height; ++y)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8165 for (x = 0; x < width; ++x)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8166 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8167 int r, g, b;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8168
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8169 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
8170 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
8171 else if (raw_p)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8172 {
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8173 r = *p++;
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8174 g = *p++;
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8175 b = *p++;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8176 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8177 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8178 {
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8179 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
8180 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
8181 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
8182 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8183
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8184 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
8185 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8186 xfree (ximg->data);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8187 ximg->data = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8188 XDestroyImage (ximg);
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
8189 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
8190 img->spec, Qnil);
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8191 goto error;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8192 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8193
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8194 /* 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
8195 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
8196 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
8197 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
8198 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
8199 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
8200 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8201 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8202
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8203 /* 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
8204 free the color table. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8205 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
8206 free_color_table ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8207
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8208 /* Put the image into a pixmap. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8209 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
8210 x_destroy_x_image (ximg);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8211
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8212 img->width = width;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8213 img->height = height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8214
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8215 UNGCPRO;
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8216 xfree (contents);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8217 return 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8218 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8219
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8220
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8221
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8222 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8223 PNG
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8224 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8225
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8226 #if HAVE_PNG
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8227
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8228 #include <png.h>
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8229
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8230 /* Function prototypes. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8231
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8232 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
8233 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
8234
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8235 /* 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
8236
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8237 Lisp_Object Qpng;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8238
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8239 /* 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
8240
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8241 enum png_keyword_index
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8242 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8243 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
8244 PNG_DATA,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8245 PNG_FILE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8246 PNG_ASCENT,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8247 PNG_MARGIN,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8248 PNG_RELIEF,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8249 PNG_ALGORITHM,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8250 PNG_HEURISTIC_MASK,
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8251 PNG_MASK,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8252 PNG_LAST
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8253 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8254
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8255 /* 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
8256 of valid user-defined image specifications. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8257
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8258 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
8259 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8260 {":type", IMAGE_SYMBOL_VALUE, 1},
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8261 {":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
8262 {":file", IMAGE_STRING_VALUE, 0},
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
8263 {":ascent", IMAGE_ASCENT_VALUE, 0},
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8264 {":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8265 {":relief", IMAGE_INTEGER_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8266 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8267 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8268 {":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
8269 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8270
26032
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
8271 /* 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
8272
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8273 static struct image_type png_type =
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8274 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8275 &Qpng,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8276 png_image_p,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8277 png_load,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8278 x_clear_image,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8279 NULL
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8280 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8281
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8282
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8283 /* 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
8284
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8285 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8286 png_image_p (object)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8287 Lisp_Object object;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8288 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8289 struct image_keyword fmt[PNG_LAST];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8290 bcopy (png_format, fmt, sizeof fmt);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8291
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
8292 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
8293 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
8294
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8295 /* 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
8296 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
8297 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8298
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8299
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8300 /* 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
8301 is initialized. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8302
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8303 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8304 my_png_error (png_ptr, msg)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8305 png_struct *png_ptr;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8306 char *msg;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8307 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8308 xassert (png_ptr != NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8309 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
8310 longjmp (png_ptr->jmpbuf, 1);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8311 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8312
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8313
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8314 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8315 my_png_warning (png_ptr, msg)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8316 png_struct *png_ptr;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8317 char *msg;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8318 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8319 xassert (png_ptr != NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8320 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
8321 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8322
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8323 /* Memory source for PNG decoding. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8324
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
8325 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
8326 {
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8327 unsigned char *bytes; /* The data */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8328 size_t len; /* How big is it? */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8329 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
8330 };
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
8331
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8332
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8333 /* 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
8334 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
8335 bytes from the input to DATA. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8336
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
8337 static void
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8338 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
8339 png_structp png_ptr;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8340 png_bytep data;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8341 png_size_t length;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8342 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8343 struct png_memory_storage *tbr
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8344 = (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
8345
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8346 if (length > tbr->len - tbr->index)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8347 png_error (png_ptr, "Read error");
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8348
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8349 bcopy (tbr->bytes + tbr->index, data, length);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8350 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
8351 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8352
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8353 /* 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
8354 successful. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8355
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8356 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8357 png_load (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8358 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8359 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8360 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8361 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
8362 Lisp_Object specified_data;
25715
feaedc03dbc8 (x_set_background_color): Remove unused variable(s).
Gerd Moellmann <gerd@gnu.org>
parents: 25691
diff changeset
8363 int x, y, i;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8364 XImage *ximg, *mask_img = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8365 struct gcpro gcpro1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8366 png_struct *png_ptr = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8367 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
8368 FILE *volatile fp = NULL;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8369 png_byte sig[8];
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
8370 png_byte * volatile pixels = NULL;
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
8371 png_byte ** volatile rows = NULL;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8372 png_uint_32 width, height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8373 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
8374 png_byte channels;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8375 png_uint_32 row_bytes;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8376 int transparent_p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8377 char *gamma_str;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8378 double screen_gamma, image_gamma;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8379 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
8380 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
8381
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8382 /* Find out what file to load. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8383 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
8384 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
8385 file = Qnil;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8386 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
8387
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
8388 if (NILP (specified_data))
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8389 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8390 file = x_find_image_file (specified_file);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8391 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
8392 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
8393 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
8394 UNGCPRO;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8395 return 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8396 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8397
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8398 /* Open the image file. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8399 fp = fopen (XSTRING (file)->data, "rb");
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8400 if (!fp)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8401 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
8402 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
8403 UNGCPRO;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8404 fclose (fp);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8405 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
8406 }
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8407
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8408 /* Check PNG signature. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8409 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
8410 || !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
8411 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
8412 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
8413 UNGCPRO;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8414 fclose (fp);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8415 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
8416 }
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8417 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8418 else
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8419 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8420 /* Read from memory. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8421 tbr.bytes = XSTRING (specified_data)->data;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8422 tbr.len = STRING_BYTES (XSTRING (specified_data));
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8423 tbr.index = 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8424
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8425 /* Check PNG signature. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8426 if (tbr.len < sizeof sig
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8427 || !png_check_sig (tbr.bytes, sizeof sig))
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8428 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
8429 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
8430 UNGCPRO;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8431 return 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8432 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8433
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8434 /* Need to skip past the signature. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8435 tbr.bytes += sizeof (sig);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8436 }
24994
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 /* 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
8439 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
8440 my_png_error, my_png_warning);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8441 if (!png_ptr)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8442 {
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
8443 if (fp) fclose (fp);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8444 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8445 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8446 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8447
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8448 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
8449 if (!info_ptr)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8450 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8451 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
8452 if (fp) fclose (fp);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8453 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8454 return 0;
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
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8457 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
8458 if (!end_info)
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 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
8461 if (fp) fclose (fp);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8462 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8463 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8464 }
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 /* 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
8467 detects an error. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8468 if (setjmp (png_ptr->jmpbuf))
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 error:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8471 if (png_ptr)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8472 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
8473 xfree (pixels);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8474 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
8475 if (fp) fclose (fp);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8476 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8477 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8478 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8479
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8480 /* 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
8481 if (!NILP (specified_data))
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8482 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
8483 else
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8484 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
8485
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8486 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
8487 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
8488 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
8489 &interlace_type, NULL, NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8490
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8491 /* 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
8492 construct a clipping mask. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8493 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
8494 transparent_p = 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8495 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8496 transparent_p = 0;
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 /* 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
8499 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
8500 transform other formats into that format. */
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 /* 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
8503 if (bit_depth == 16)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8504 png_set_strip_16 (png_ptr);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8505
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8506 /* 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
8507 if available. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8508 png_set_expand (png_ptr);
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 /* Convert grayscale images to RGB. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8511 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
8512 || 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
8513 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
8514
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8515 /* The value 2.2 is a guess for PC monitors from PNG example.c. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8516 gamma_str = getenv ("SCREEN_GAMMA");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8517 screen_gamma = gamma_str ? atof (gamma_str) : 2.2;
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 /* 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
8520
26293
65861669b393 (png_load) [PNG_READ_sRGB_SUPPORTED]: Put code using
Gerd Moellmann <gerd@gnu.org>
parents: 26088
diff changeset
8521 #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
8522 if (png_get_sRGB (png_ptr, info_ptr, &intent))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8523 /* There is a special chunk in the image specifying the gamma. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8524 png_set_sRGB (png_ptr, info_ptr, intent);
26293
65861669b393 (png_load) [PNG_READ_sRGB_SUPPORTED]: Put code using
Gerd Moellmann <gerd@gnu.org>
parents: 26088
diff changeset
8525 else
65861669b393 (png_load) [PNG_READ_sRGB_SUPPORTED]: Put code using
Gerd Moellmann <gerd@gnu.org>
parents: 26088
diff changeset
8526 #endif
65861669b393 (png_load) [PNG_READ_sRGB_SUPPORTED]: Put code using
Gerd Moellmann <gerd@gnu.org>
parents: 26088
diff changeset
8527 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
8528 /* Image contains gamma information. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8529 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
8530 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8531 /* Use a default of 0.5 for the image gamma. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8532 png_set_gamma (png_ptr, screen_gamma, 0.5);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8533
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8534 /* 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
8535 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
8536 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
8537 if (!transparent_p)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8538 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8539 png_color_16 *image_background;
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 if (png_get_bKGD (png_ptr, info_ptr, &image_background))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8542 /* 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
8543 combine the image. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8544 png_set_background (png_ptr, image_background,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8545 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
8546 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8547 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8548 /* 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
8549 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
8550 the frame's background instead. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8551 XColor color;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8552 Colormap cmap;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8553 png_color_16 frame_background;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8554
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
8555 cmap = FRAME_X_COLORMAP (f);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8556 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
8557 x_query_color (f, &color);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8558
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8559 bzero (&frame_background, sizeof frame_background);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8560 frame_background.red = color.red;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8561 frame_background.green = color.green;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8562 frame_background.blue = color.blue;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8563
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8564 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
8565 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
8566 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8567 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8568
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8569 /* Update info structure. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8570 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
8571
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8572 /* 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
8573 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
8574 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
8575 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
8576 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
8577 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
8578 xassert (channels == 3 || channels == 4);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8579
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8580 /* 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
8581 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
8582
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8583 /* Allocate memory for the image. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8584 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
8585 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
8586 for (i = 0; i < height; ++i)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8587 rows[i] = pixels + i * row_bytes;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8588
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8589 /* Read the entire image. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8590 png_read_image (png_ptr, rows);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8591 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
8592 if (fp)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8593 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8594 fclose (fp);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8595 fp = NULL;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8596 }
24994
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 /* 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
8599 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
8600 &img->pixmap))
31686
577372d71de8 (lookup_image): Block input while loading the image so
Gerd Moellmann <gerd@gnu.org>
parents: 31651
diff changeset
8601 goto error;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8602
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8603 /* 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
8604 contains an alpha channel. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8605 if (channels == 4
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8606 && !transparent_p
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
8607 && !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
8608 &mask_img, &img->mask))
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 x_destroy_x_image (ximg);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8611 XFreePixmap (FRAME_X_DISPLAY (f), img->pixmap);
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
8612 img->pixmap = None;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8613 goto error;
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
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8616 /* 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
8617 init_color_table ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8618
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8619 for (y = 0; y < height; ++y)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8620 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8621 png_byte *p = rows[y];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8622
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8623 for (x = 0; x < width; ++x)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8624 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8625 unsigned r, g, b;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8626
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8627 r = *p++ << 8;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8628 g = *p++ << 8;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8629 b = *p++ << 8;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8630 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
8631
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8632 /* 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
8633 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
8634 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
8635 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
8636 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
8637 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
8638
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8639 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
8640 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
8641 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
8642 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
8643
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8644 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
8645 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
8646 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
8647
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8648 if (channels == 4)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8649 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8650 if (mask_img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8651 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
8652 ++p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8653 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8654 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8655 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8656
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8657 /* Remember colors allocated for this image. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8658 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
8659 free_color_table ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8660
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8661 /* Clean up. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8662 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
8663 xfree (rows);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8664 xfree (pixels);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8665
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8666 img->width = width;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8667 img->height = height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8668
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8669 /* 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
8670 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
8671 x_destroy_x_image (ximg);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8672
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8673 /* Same for the mask. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8674 if (mask_img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8675 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8676 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
8677 x_destroy_x_image (mask_img);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8678 }
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 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8681 return 1;
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
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8684 #endif /* HAVE_PNG != 0 */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8685
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8686
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8687
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8688 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8689 JPEG
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8690 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8691
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8692 #if HAVE_JPEG
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8693
25390
4404ab9c802b [HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents: 25363
diff changeset
8694 /* 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
8695 jconfig.h. */
4404ab9c802b [HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents: 25363
diff changeset
8696 #ifdef HAVE_STDLIB_H
4404ab9c802b [HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents: 25363
diff changeset
8697 #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
8698 #undef HAVE_STDLIB_H
4404ab9c802b [HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents: 25363
diff changeset
8699 #endif /* HAVE_STLIB_H */
4404ab9c802b [HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents: 25363
diff changeset
8700
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8701 #include <jpeglib.h>
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8702 #include <jerror.h>
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8703 #include <setjmp.h>
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8704
25390
4404ab9c802b [HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents: 25363
diff changeset
8705 #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
8706 #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
8707 #endif
4404ab9c802b [HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents: 25363
diff changeset
8708
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8709 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
8710 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
8711
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8712 /* 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
8713
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8714 Lisp_Object Qjpeg;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8715
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8716 /* 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
8717
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8718 enum jpeg_keyword_index
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8719 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8720 JPEG_TYPE,
27053
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8721 JPEG_DATA,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8722 JPEG_FILE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8723 JPEG_ASCENT,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8724 JPEG_MARGIN,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8725 JPEG_RELIEF,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8726 JPEG_ALGORITHM,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8727 JPEG_HEURISTIC_MASK,
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8728 JPEG_MASK,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8729 JPEG_LAST
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8730 };
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 /* 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
8733 of valid user-defined image specifications. */
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 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
8736 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8737 {":type", IMAGE_SYMBOL_VALUE, 1},
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8738 {":data", IMAGE_STRING_VALUE, 0},
27053
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8739 {":file", IMAGE_STRING_VALUE, 0},
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
8740 {":ascent", IMAGE_ASCENT_VALUE, 0},
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8741 {":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8742 {":relief", IMAGE_INTEGER_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8743 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8744 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8745 {":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
8746 };
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 /* Structure describing the image type `jpeg'. */
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 static struct image_type jpeg_type =
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 &Qjpeg,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8753 jpeg_image_p,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8754 jpeg_load,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8755 x_clear_image,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8756 NULL
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8757 };
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
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8760 /* 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
8761
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8762 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8763 jpeg_image_p (object)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8764 Lisp_Object object;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8765 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8766 struct image_keyword fmt[JPEG_LAST];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8767
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8768 bcopy (jpeg_format, fmt, sizeof fmt);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8769
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
8770 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
8771 return 0;
27053
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8772
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8773 /* 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
8774 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
8775 }
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8776
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8777
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8778 struct my_jpeg_error_mgr
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8779 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8780 struct jpeg_error_mgr pub;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8781 jmp_buf setjmp_buffer;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8782 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8783
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
8784
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8785 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8786 my_error_exit (cinfo)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8787 j_common_ptr cinfo;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8788 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8789 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
8790 longjmp (mgr->setjmp_buffer, 1);
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
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
8793
27053
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8794 /* 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
8795 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
8796 libjpeg.doc from the JPEG lib distribution. */
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8797
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8798 static void
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8799 our_init_source (cinfo)
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8800 j_decompress_ptr cinfo;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8801 {
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8802 }
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8803
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8804
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8805 /* 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
8806 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
8807 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
8808
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8809 static boolean
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8810 our_fill_input_buffer (cinfo)
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8811 j_decompress_ptr cinfo;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8812 {
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8813 /* Insert a fake EOI marker. */
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8814 struct jpeg_source_mgr *src = cinfo->src;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8815 static JOCTET buffer[2];
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8816
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8817 buffer[0] = (JOCTET) 0xFF;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8818 buffer[1] = (JOCTET) JPEG_EOI;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8819
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8820 src->next_input_byte = buffer;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8821 src->bytes_in_buffer = 2;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8822 return TRUE;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8823 }
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8824
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8825
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8826 /* 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
8827 is the JPEG data source manager. */
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8828
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8829 static void
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8830 our_skip_input_data (cinfo, num_bytes)
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8831 j_decompress_ptr cinfo;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8832 long num_bytes;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8833 {
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8834 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
8835
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8836 if (src)
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8837 {
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8838 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
8839 ERREXIT (cinfo, JERR_INPUT_EOF);
27053
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8840
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8841 src->bytes_in_buffer -= num_bytes;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8842 src->next_input_byte += num_bytes;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8843 }
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8844 }
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8845
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8846
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8847 /* Method to terminate data source. Called by
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8848 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
8849
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8850 static void
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8851 our_term_source (cinfo)
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8852 j_decompress_ptr cinfo;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8853 {
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8854 }
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8855
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8856
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8857 /* 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
8858 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
8859 reading the image. */
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8860
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8861 static void
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8862 jpeg_memory_src (cinfo, data, len)
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8863 j_decompress_ptr cinfo;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8864 JOCTET *data;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8865 unsigned int len;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8866 {
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8867 struct jpeg_source_mgr *src;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8868
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8869 if (cinfo->src == NULL)
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8870 {
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8871 /* First time for this JPEG object? */
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8872 cinfo->src = (struct jpeg_source_mgr *)
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8873 (*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
8874 sizeof (struct jpeg_source_mgr));
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8875 src = (struct jpeg_source_mgr *) cinfo->src;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8876 src->next_input_byte = data;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8877 }
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8878
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8879 src = (struct jpeg_source_mgr *) cinfo->src;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8880 src->init_source = our_init_source;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8881 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
8882 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
8883 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
8884 src->term_source = our_term_source;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8885 src->bytes_in_buffer = len;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8886 src->next_input_byte = data;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8887 }
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8888
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8889
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8890 /* 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
8891 from the JPEG lib. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8892
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8893 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8894 jpeg_load (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8895 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8896 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8897 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8898 struct jpeg_decompress_struct cinfo;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8899 struct my_jpeg_error_mgr mgr;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8900 Lisp_Object file, specified_file;
27053
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8901 Lisp_Object specified_data;
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
8902 FILE * volatile fp = NULL;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8903 JSAMPARRAY buffer;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8904 int row_stride, x, y;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8905 XImage *ximg = NULL;
25715
feaedc03dbc8 (x_set_background_color): Remove unused variable(s).
Gerd Moellmann <gerd@gnu.org>
parents: 25691
diff changeset
8906 int rc;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8907 unsigned long *colors;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8908 int width, height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8909 struct gcpro gcpro1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8910
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8911 /* Open the JPEG file. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8912 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
8913 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
8914 file = Qnil;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8915 GCPRO1 (file);
27053
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8916
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8917 if (NILP (specified_data))
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8918 {
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8919 file = x_find_image_file (specified_file);
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8920 if (!STRINGP (file))
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8921 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
8922 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
8923 UNGCPRO;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8924 return 0;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8925 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8926
27053
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8927 fp = fopen (XSTRING (file)->data, "r");
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8928 if (fp == NULL)
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8929 {
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8930 image_error ("Cannot open `%s'", file, Qnil);
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8931 UNGCPRO;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8932 return 0;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8933 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8934 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8935
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8936 /* 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
8937 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
8938 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
8939 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
8940
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8941 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
8942 {
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8943 if (rc == 1)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8944 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8945 /* 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
8946 char buffer[JMSG_LENGTH_MAX];
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8947 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
8948 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
8949 build_string (buffer));
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8950 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8951
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8952 /* 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
8953 if (fp)
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
8954 fclose ((FILE *) fp);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8955 jpeg_destroy_decompress (&cinfo);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8956
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8957 /* 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
8958 x_destroy_x_image (ximg);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8959
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8960 /* Free pixmap and colors. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8961 x_clear_image (f, img);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8962
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8963 UNGCPRO;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8964 return 0;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8965 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8966
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8967 /* 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
8968 Read the JPEG image header. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8969 jpeg_create_decompress (&cinfo);
27053
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8970
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8971 if (NILP (specified_data))
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
8972 jpeg_stdio_src (&cinfo, (FILE *) fp);
27053
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8973 else
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
8974 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
8975 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
8976
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8977 jpeg_read_header (&cinfo, TRUE);
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 /* 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
8980 Start decompression. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8981 cinfo.quantize_colors = TRUE;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8982 jpeg_start_decompress (&cinfo);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8983 width = img->width = cinfo.output_width;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8984 height = img->height = cinfo.output_height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8985
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8986 /* 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
8987 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
8988 longjmp (mgr.setjmp_buffer, 2);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8989
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8990 /* 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
8991 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
8992 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
8993 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
8994 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
8995 {
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8996 int i, ir, ig, ib;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8997
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8998 if (cinfo.out_color_components > 2)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8999 ir = 0, ig = 1, ib = 2;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9000 else if (cinfo.out_color_components > 1)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9001 ir = 0, ig = 1, ib = 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9002 else
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9003 ir = 0, ig = 0, ib = 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9004
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9005 /* 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
9006 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
9007 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
9008 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
9009 init_color_table ();
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9010 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
9011 * sizeof *colors);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9012
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9013 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
9014 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9015 /* 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
9016 in the range 0..0xffff. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9017 int r = cinfo.colormap[ir][i] << 8;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9018 int g = cinfo.colormap[ig][i] << 8;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9019 int b = cinfo.colormap[ib][i] << 8;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9020 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
9021 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9022
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9023 /* Remember those colors actually allocated. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9024 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
9025 free_color_table ();
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9026 }
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 /* Read pixels. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9029 row_stride = width * cinfo.output_components;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9030 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
9031 row_stride, 1);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9032 for (y = 0; y < height; ++y)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9033 {
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9034 jpeg_read_scanlines (&cinfo, buffer, 1);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9035 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
9036 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
9037 }
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 /* Clean up. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9040 jpeg_finish_decompress (&cinfo);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9041 jpeg_destroy_decompress (&cinfo);
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9042 if (fp)
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
9043 fclose ((FILE *) fp);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9044
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9045 /* Put the image into the pixmap. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9046 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
9047 x_destroy_x_image (ximg);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9048 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9049 return 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9050 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9051
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9052 #endif /* HAVE_JPEG */
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
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9055
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9056 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9057 TIFF
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9058 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9059
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9060 #if HAVE_TIFF
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9061
25335
2de1796b006b remove tiff34 prefix from include.
Gerd Moellmann <gerd@gnu.org>
parents: 25320
diff changeset
9062 #include <tiffio.h>
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9063
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9064 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
9065 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
9066
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9067 /* 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
9068
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9069 Lisp_Object Qtiff;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9070
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9071 /* 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
9072
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9073 enum tiff_keyword_index
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9074 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9075 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
9076 TIFF_DATA,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9077 TIFF_FILE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9078 TIFF_ASCENT,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9079 TIFF_MARGIN,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9080 TIFF_RELIEF,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9081 TIFF_ALGORITHM,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9082 TIFF_HEURISTIC_MASK,
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
9083 TIFF_MASK,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9084 TIFF_LAST
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9085 };
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 /* 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
9088 of valid user-defined image specifications. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9089
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9090 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
9091 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9092 {":type", IMAGE_SYMBOL_VALUE, 1},
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9093 {":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
9094 {":file", IMAGE_STRING_VALUE, 0},
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
9095 {":ascent", IMAGE_ASCENT_VALUE, 0},
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9096 {":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9097 {":relief", IMAGE_INTEGER_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9098 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
9099 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
9100 {":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
9101 };
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 /* Structure describing the image type `tiff'. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9104
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9105 static struct image_type tiff_type =
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 &Qtiff,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9108 tiff_image_p,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9109 tiff_load,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9110 x_clear_image,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9111 NULL
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9112 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9113
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9114
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9115 /* 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
9116
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9117 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9118 tiff_image_p (object)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9119 Lisp_Object object;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9120 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9121 struct image_keyword fmt[TIFF_LAST];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9122 bcopy (tiff_format, fmt, sizeof fmt);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9123
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
9124 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
9125 return 0;
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9126
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
9127 /* 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
9128 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
9129 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9130
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9131
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9132 /* 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
9133 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
9134 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
9135
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
9136 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
9137 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
9138 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
9139 override. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9140
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9141 typedef struct
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9142 {
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
9143 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
9144 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
9145 int index;
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9146 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9147 tiff_memory_source;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9148
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
9149
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9150 static size_t
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9151 tiff_read_from_memory (data, buf, size)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9152 thandle_t data;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9153 tdata_t buf;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9154 tsize_t size;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9155 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9156 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
9157
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
9158 if (size > src->len - src->index)
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9159 return (size_t) -1;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9160 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
9161 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
9162 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
9163 }
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
9164
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
9165
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9166 static size_t
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9167 tiff_write_from_memory (data, buf, size)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9168 thandle_t data;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9169 tdata_t buf;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9170 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
9171 {
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
9172 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
9173 }
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
9174
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
9175
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9176 static toff_t
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9177 tiff_seek_in_memory (data, off, whence)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9178 thandle_t data;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9179 toff_t off;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9180 int whence;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9181 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9182 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
9183 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
9184
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
9185 switch (whence)
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9186 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9187 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
9188 idx = off;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9189 break;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9190
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9191 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
9192 idx = src->len + off;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9193 break;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9194
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9195 case SEEK_CUR: /* Go from current position. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9196 idx = src->index + off;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9197 break;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9198
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9199 default: /* Invalid `whence'. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9200 return -1;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9201 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9202
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9203 if (idx > src->len || idx < 0)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9204 return -1;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9205
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
9206 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
9207 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
9208 }
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
9209
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
9210
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9211 static int
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9212 tiff_close_memory (data)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9213 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
9214 {
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
9215 /* NOOP */
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9216 return 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9217 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9218
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
9219
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9220 static int
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9221 tiff_mmap_memory (data, pbase, psize)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9222 thandle_t data;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9223 tdata_t *pbase;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9224 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
9225 {
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
9226 /* It is already _IN_ memory. */
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9227 return 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9228 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9229
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
9230
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9231 static void
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9232 tiff_unmap_memory (data, base, size)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9233 thandle_t data;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9234 tdata_t base;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9235 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
9236 {
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
9237 /* 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
9238 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9239
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
9240
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9241 static toff_t
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9242 tiff_size_of_memory (data)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9243 thandle_t data;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9244 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9245 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
9246 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9247
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
9248
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9249 /* 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
9250 successful. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9251
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9252 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9253 tiff_load (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9254 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9255 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9256 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9257 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
9258 Lisp_Object specified_data;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9259 TIFF *tiff;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9260 int width, height, x, y;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9261 uint32 *buf;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9262 int rc;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9263 XImage *ximg;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9264 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
9265 tiff_memory_source memsrc;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9266
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9267 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
9268 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
9269 file = Qnil;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9270 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
9271
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
9272 if (NILP (specified_data))
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9273 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9274 /* Read from a file */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9275 file = x_find_image_file (specified_file);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9276 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
9277 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
9278 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
9279 UNGCPRO;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9280 return 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9281 }
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
9282
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9283 /* Try to open the image file. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9284 tiff = TIFFOpen (XSTRING (file)->data, "r");
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9285 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
9286 {
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9287 image_error ("Cannot open `%s'", file, Qnil);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9288 UNGCPRO;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9289 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
9290 }
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9291 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9292 else
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9293 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9294 /* Memory source! */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9295 memsrc.bytes = XSTRING (specified_data)->data;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9296 memsrc.len = STRING_BYTES (XSTRING (specified_data));
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9297 memsrc.index = 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9298
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9299 tiff = TIFFClientOpen ("memory_source", "r", &memsrc,
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9300 (TIFFReadWriteProc) tiff_read_from_memory,
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9301 (TIFFReadWriteProc) tiff_write_from_memory,
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9302 tiff_seek_in_memory,
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9303 tiff_close_memory,
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9304 tiff_size_of_memory,
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9305 tiff_mmap_memory,
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9306 tiff_unmap_memory);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9307
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9308 if (!tiff)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9309 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
9310 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
9311 UNGCPRO;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9312 return 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9313 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9314 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9315
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9316 /* 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
9317 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
9318 TIFFGetField (tiff, TIFFTAG_IMAGEWIDTH, &width);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9319 TIFFGetField (tiff, TIFFTAG_IMAGELENGTH, &height);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9320 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
9321
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9322 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
9323 TIFFClose (tiff);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9324 if (!rc)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9325 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
9326 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
9327 xfree (buf);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9328 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9329 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9330 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9331
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9332 /* 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
9333 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
9334 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9335 xfree (buf);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9336 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9337 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9338 }
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 /* Initialize the color table. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9341 init_color_table ();
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 /* 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
9344 for (y = 0; y < height; ++y)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9345 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9346 uint32 *row = buf + y * width;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9347
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9348 for (x = 0; x < width; ++x)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9349 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9350 uint32 abgr = row[x];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9351 int r = TIFFGetR (abgr) << 8;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9352 int g = TIFFGetG (abgr) << 8;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9353 int b = TIFFGetB (abgr) << 8;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9354 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
9355 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9356 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9357
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9358 /* 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
9359 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
9360 free_color_table ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9361
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9362 /* 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
9363 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
9364 x_destroy_x_image (ximg);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9365 xfree (buf);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9366
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9367 img->width = width;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9368 img->height = height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9369
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9370 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9371 return 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9372 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9373
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9374 #endif /* HAVE_TIFF != 0 */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9375
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9376
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9377
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9378 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9379 GIF
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9380 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9381
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9382 #if HAVE_GIF
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9383
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9384 #include <gif_lib.h>
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9385
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9386 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
9387 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
9388
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9389 /* 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
9390
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9391 Lisp_Object Qgif;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9392
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9393 /* 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
9394
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9395 enum gif_keyword_index
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9396 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9397 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
9398 GIF_DATA,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9399 GIF_FILE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9400 GIF_ASCENT,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9401 GIF_MARGIN,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9402 GIF_RELIEF,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9403 GIF_ALGORITHM,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9404 GIF_HEURISTIC_MASK,
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
9405 GIF_MASK,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9406 GIF_IMAGE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9407 GIF_LAST
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9408 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9409
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9410 /* 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
9411 of valid user-defined image specifications. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9412
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9413 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
9414 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9415 {":type", IMAGE_SYMBOL_VALUE, 1},
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9416 {":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
9417 {":file", IMAGE_STRING_VALUE, 0},
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
9418 {":ascent", IMAGE_ASCENT_VALUE, 0},
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9419 {":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9420 {":relief", IMAGE_INTEGER_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9421 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9422 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
9423 {":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
9424 {":image", IMAGE_NON_NEGATIVE_INTEGER_VALUE, 0}
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9425 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9426
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9427 /* Structure describing the image type `gif'. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9428
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9429 static struct image_type gif_type =
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9430 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9431 &Qgif,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9432 gif_image_p,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9433 gif_load,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9434 x_clear_image,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9435 NULL
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9436 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9437
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
9438
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9439 /* 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
9440
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9441 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9442 gif_image_p (object)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9443 Lisp_Object object;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9444 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9445 struct image_keyword fmt[GIF_LAST];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9446 bcopy (gif_format, fmt, sizeof fmt);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9447
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
9448 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
9449 return 0;
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9450
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
9451 /* 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
9452 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
9453 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9454
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
9455
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
9456 /* 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
9457 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
9458
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9459 typedef struct
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9460 {
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
9461 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
9462 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
9463 int index;
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9464 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9465 gif_memory_source;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9466
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
9467
27153
31b7a2a8ea20 (current_gif_memory_src): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 27071
diff changeset
9468 /* 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
9469 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
9470 a UserData field in the GifFileType structure. */
31b7a2a8ea20 (current_gif_memory_src): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 27071
diff changeset
9471 static gif_memory_source *current_gif_memory_src;
31b7a2a8ea20 (current_gif_memory_src): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 27071
diff changeset
9472
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9473 static int
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9474 gif_read_from_memory (file, buf, len)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9475 GifFileType *file;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9476 GifByteType *buf;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9477 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
9478 {
27153
31b7a2a8ea20 (current_gif_memory_src): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 27071
diff changeset
9479 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
9480
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9481 if (len > src->len - src->index)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9482 return -1;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9483
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9484 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
9485 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
9486 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
9487 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9488
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9489
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9490 /* 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
9491 successful. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9492
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9493 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9494 gif_load (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9495 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9496 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9497 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9498 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
9499 Lisp_Object specified_data;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9500 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
9501 XImage *ximg;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9502 ColorMapObject *gif_color_map;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9503 unsigned long pixel_colors[256];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9504 GifFileType *gif;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9505 struct gcpro gcpro1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9506 Lisp_Object image;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9507 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
9508 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
9509 unsigned char *raster;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9510
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9511 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
9512 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
9513 file = Qnil;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9514 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
9515
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
9516 if (NILP (specified_data))
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9517 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9518 file = x_find_image_file (specified_file);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9519 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
9520 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
9521 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
9522 UNGCPRO;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9523 return 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9524 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9525
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9526 /* Open the GIF file. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9527 gif = DGifOpenFileName (XSTRING (file)->data);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9528 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
9529 {
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9530 image_error ("Cannot open `%s'", file, Qnil);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9531 UNGCPRO;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9532 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
9533 }
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9534 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9535 else
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9536 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9537 /* Read from memory! */
27153
31b7a2a8ea20 (current_gif_memory_src): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 27071
diff changeset
9538 current_gif_memory_src = &memsrc;
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9539 memsrc.bytes = XSTRING (specified_data)->data;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9540 memsrc.len = STRING_BYTES (XSTRING (specified_data));
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9541 memsrc.index = 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9542
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9543 gif = DGifOpen(&memsrc, gif_read_from_memory);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9544 if (!gif)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9545 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
9546 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
9547 UNGCPRO;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9548 return 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9549 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9550 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9551
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9552 /* Read entire contents. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9553 rc = DGifSlurp (gif);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9554 if (rc == GIF_ERROR)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9555 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
9556 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
9557 DGifCloseFile (gif);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9558 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9559 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9560 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9561
25620
1c991744ce13 (QCindex): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25593
diff changeset
9562 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
9563 ino = INTEGERP (image) ? XFASTINT (image) : 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9564 if (ino >= gif->ImageCount)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9565 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
9566 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
9567 image, img->spec);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9568 DGifCloseFile (gif);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9569 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9570 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9571 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9572
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9573 width = img->width = gif->SWidth;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9574 height = img->height = gif->SHeight;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9575
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9576 /* 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
9577 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
9578 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9579 DGifCloseFile (gif);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9580 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9581 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9582 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9583
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9584 /* Allocate colors. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9585 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
9586 if (!gif_color_map)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9587 gif_color_map = gif->SColorMap;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9588 init_color_table ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9589 bzero (pixel_colors, sizeof pixel_colors);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9590
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9591 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
9592 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9593 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
9594 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
9595 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
9596 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
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 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
9600 free_color_table ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9601
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9602 /* 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
9603 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
9604 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
9605 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
9606 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
9607 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
9608 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
9609 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
9610 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
9611
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9612 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
9613 for (x = 0; x < width; ++x)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9614 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
9615
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9616 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
9617 for (x = 0; x < width; ++x)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9618 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
9619
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9620 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
9621 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9622 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
9623 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
9624 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
9625 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
9626 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9627
27066
30697e7cb5a2 (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27060
diff changeset
9628 /* 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
9629 `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
9630 problems with bytes >= 0x80. */
30697e7cb5a2 (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27060
diff changeset
9631 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
9632
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9633 if (gif->SavedImages[ino].ImageDesc.Interlace)
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 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
9636 static int interlace_increment[] = {8, 8, 4, 2};
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9637 int pass, inc;
26032
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
9638 int row = interlace_start[0];
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
9639
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
9640 pass = 0;
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
9641
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
9642 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
9643 {
26032
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
9644 if (row >= image_height)
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
9645 {
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
9646 row = interlace_start[++pass];
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
9647 while (row >= image_height)
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
9648 row = interlace_start[++pass];
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
9649 }
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
9650
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
9651 for (x = 0; x < image_width; x++)
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
9652 {
27066
30697e7cb5a2 (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27060
diff changeset
9653 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
9654 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
9655 pixel_colors[i]);
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
9656 }
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
9657
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
9658 row += interlace_increment[pass];
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9659 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9660 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9661 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9662 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9663 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
9664 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
9665 {
27066
30697e7cb5a2 (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27060
diff changeset
9666 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
9667 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
9668 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9669 }
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 DGifCloseFile (gif);
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 /* 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
9674 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
9675 x_destroy_x_image (ximg);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9676
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9677 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9678 return 1;
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 #endif /* HAVE_GIF != 0 */
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
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9684
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9685 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9686 Ghostscript
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9687 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9688
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9689 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
9690 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
9691 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
9692
25628
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
9693 /* 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
9694
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
9695 Lisp_Object Qpostscript;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9696
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9697 /* Keyword symbols. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9698
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9699 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
9700
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9701 /* 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
9702
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9703 enum gs_keyword_index
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9704 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9705 GS_TYPE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9706 GS_PT_WIDTH,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9707 GS_PT_HEIGHT,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9708 GS_FILE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9709 GS_LOADER,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9710 GS_BOUNDING_BOX,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9711 GS_ASCENT,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9712 GS_MARGIN,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9713 GS_RELIEF,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9714 GS_ALGORITHM,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9715 GS_HEURISTIC_MASK,
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
9716 GS_MASK,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9717 GS_LAST
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9718 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9719
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9720 /* 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
9721 of valid user-defined image specifications. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9722
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9723 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
9724 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9725 {":type", IMAGE_SYMBOL_VALUE, 1},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9726 {":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
9727 {":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
9728 {":file", IMAGE_STRING_VALUE, 1},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9729 {":loader", IMAGE_FUNCTION_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9730 {":bounding-box", IMAGE_DONT_CHECK_VALUE_TYPE, 1},
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
9731 {":ascent", IMAGE_ASCENT_VALUE, 0},
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9732 {":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9733 {":relief", IMAGE_INTEGER_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9734 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
9735 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
9736 {":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
9737 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9738
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9739 /* Structure describing the image type `ghostscript'. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9740
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9741 static struct image_type gs_type =
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9742 {
25628
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
9743 &Qpostscript,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9744 gs_image_p,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9745 gs_load,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9746 gs_clear_image,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9747 NULL
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9748 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9749
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9750
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9751 /* 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
9752
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9753 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9754 gs_clear_image (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9755 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9756 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9757 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9758 /* 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
9759 xfree (img->data.ptr_val);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9760 x_clear_image (f, img);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9761 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9762
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9763
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9764 /* 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
9765 specification. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9766
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9767 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9768 gs_image_p (object)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9769 Lisp_Object object;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9770 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9771 struct image_keyword fmt[GS_LAST];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9772 Lisp_Object tem;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9773 int i;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9774
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9775 bcopy (gs_format, fmt, sizeof fmt);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9776
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
9777 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
9778 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9779
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9780 /* 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
9781 tem = fmt[GS_BOUNDING_BOX].value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9782 if (CONSP (tem))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9783 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9784 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
9785 if (!CONSP (tem) || !INTEGERP (XCAR (tem)))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9786 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9787 if (!NILP (tem))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9788 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9789 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9790 else if (VECTORP (tem))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9791 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9792 if (XVECTOR (tem)->size != 4)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9793 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9794 for (i = 0; i < 4; ++i)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9795 if (!INTEGERP (XVECTOR (tem)->contents[i]))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9796 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9797 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9798 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9799 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9800
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9801 return 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9802 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9803
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9804
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9805 /* 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
9806 if successful. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9807
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9808 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9809 gs_load (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9810 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9811 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9812 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9813 char buffer[100];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9814 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
9815 struct gcpro gcpro1, gcpro2;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9816 Lisp_Object frame;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9817 double in_width, in_height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9818 Lisp_Object pixel_colors = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9819
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9820 /* 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
9821 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
9822 = 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
9823 info. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9824 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
9825 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
9826 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
9827 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
9828 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
9829 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
9830
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9831 /* Create the pixmap. */
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
9832 xassert (img->pixmap == None);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9833 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
9834 img->width, img->height,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9835 DefaultDepthOfScreen (FRAME_X_SCREEN (f)));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9836
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9837 if (!img->pixmap)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9838 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
9839 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
9840 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9841 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9842
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9843 /* 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
9844 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
9845 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
9846 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
9847 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
9848
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9849 sprintf (buffer, "%lu %lu",
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9850 (unsigned long) FRAME_X_WINDOW (f),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9851 (unsigned long) img->pixmap);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9852 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
9853
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9854 sprintf (buffer, "%lu %lu",
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9855 FRAME_FOREGROUND_PIXEL (f),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9856 FRAME_BACKGROUND_PIXEL (f));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9857 pixel_colors = build_string (buffer);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9858
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9859 XSETFRAME (frame, f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9860 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
9861 if (NILP (loader))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9862 loader = intern ("gs-load-image");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9863
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9864 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
9865 make_number (img->width),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9866 make_number (img->height),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9867 window_and_pixmap_id,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9868 pixel_colors);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9869 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9870 return PROCESSP (img->data.lisp_val);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9871 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9872
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9873
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9874 /* 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
9875 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
9876 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
9877
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9878 void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9879 x_kill_gs_process (pixmap, f)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9880 Pixmap pixmap;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9881 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9882 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9883 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
9884 int class, i;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9885 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9886
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9887 /* Find the image containing PIXMAP. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9888 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
9889 if (c->images[i]->pixmap == pixmap)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9890 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9891
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9892 /* 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
9893 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
9894 xassert (i < c->used);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9895 img = c->images[i];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9896 xassert (PROCESSP (img->data.lisp_val));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9897 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
9898 img->data.lisp_val = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9899
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9900 /* 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
9901 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
9902 img->pixmap. */
28144
71ebba3566ec (X_I18N_INHIBITED): Don't define.
Gerd Moellmann <gerd@gnu.org>
parents: 28096
diff changeset
9903 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
9904 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
9905 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9906 XImage *ximg;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9907
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9908 BLOCK_INPUT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9909
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9910 /* 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
9911 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
9912 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
9913 if (ximg)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9914 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9915 int x, y;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9916
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9917 /* Initialize the color table. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9918 init_color_table ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9919
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9920 /* 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
9921 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
9922 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
9923 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
9924 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
9925 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9926 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
9927 lookup_pixel_color (f, pixel);
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
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9930 /* 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
9931 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
9932 free_color_table ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9933 XDestroyImage (ximg);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9934
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9935 #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
9936 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
9937 freeing the colors. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9938 /* 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
9939 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
9940 reference counts right, free them once. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9941 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
9942 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
9943 #endif
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 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9946 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
9947 img->spec, Qnil);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9948
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9949 UNBLOCK_INPUT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9950 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9951 }
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 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9956 Window properties
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9957 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9958
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9959 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
9960 Sx_change_window_property, 2, 3, 0,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9961 "Change window property PROP to VALUE on the X window of FRAME.\n\
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9962 PROP and VALUE must be strings. FRAME nil or omitted means use the\n\
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9963 selected frame. Value is VALUE.")
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9964 (prop, value, frame)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9965 Lisp_Object frame, prop, value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9966 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9967 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
9968 Atom prop_atom;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9969
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9970 CHECK_STRING (prop, 1);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9971 CHECK_STRING (value, 2);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9972
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9973 BLOCK_INPUT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9974 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
9975 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
9976 prop_atom, XA_STRING, 8, PropModeReplace,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9977 XSTRING (value)->data, XSTRING (value)->size);
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 /* 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
9980 XFlush (FRAME_X_DISPLAY (f));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9981 UNBLOCK_INPUT;
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 return value;
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
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 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
9988 Sx_delete_window_property, 1, 2, 0,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9989 "Remove window property PROP from X window of FRAME.\n\
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9990 FRAME nil or omitted means use the selected frame. Value is PROP.")
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9991 (prop, frame)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9992 Lisp_Object prop, frame;
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 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
9995 Atom prop_atom;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9996
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9997 CHECK_STRING (prop, 1);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9998 BLOCK_INPUT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9999 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
10000 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
10001
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10002 /* 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
10003 XFlush (FRAME_X_DISPLAY (f));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10004 UNBLOCK_INPUT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10005
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10006 return prop;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10007 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10008
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10009
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10010 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
10011 1, 2, 0,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10012 "Value is the value of window property PROP on FRAME.\n\
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10013 If FRAME is nil or omitted, use the selected frame. Value is nil\n\
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10014 if FRAME hasn't a property with name PROP or if PROP has no string\n\
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10015 value.")
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10016 (prop, frame)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10017 Lisp_Object prop, frame;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10018 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10019 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
10020 Atom prop_atom;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10021 int rc;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10022 Lisp_Object prop_value = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10023 char *tmp_data = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10024 Atom actual_type;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10025 int actual_format;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10026 unsigned long actual_size, bytes_remaining;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10027
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10028 CHECK_STRING (prop, 1);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10029 BLOCK_INPUT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10030 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
10031 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
10032 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
10033 &actual_type, &actual_format, &actual_size,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10034 &bytes_remaining, (unsigned char **) &tmp_data);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10035 if (rc == Success)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10036 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10037 int size = bytes_remaining;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10038
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10039 XFree (tmp_data);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10040 tmp_data = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10041
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10042 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
10043 prop_atom, 0, bytes_remaining,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10044 False, XA_STRING,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10045 &actual_type, &actual_format,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10046 &actual_size, &bytes_remaining,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10047 (unsigned char **) &tmp_data);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10048 if (rc == Success)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10049 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
10050
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10051 XFree (tmp_data);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10052 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10053
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10054 UNBLOCK_INPUT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10055 return prop_value;
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
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10058
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10059
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10060 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10061 Busy cursor
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10062 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10063
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10064 /* If non-null, an asynchronous timer that, when it expires, displays
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10065 a busy cursor on all frames. */
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10066
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10067 static struct atimer *busy_cursor_atimer;
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10068
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10069 /* Non-zero means a busy cursor is currently shown. */
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10070
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10071 static int busy_cursor_shown_p;
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10072
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10073 /* Number of seconds to wait before displaying a busy cursor. */
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10074
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10075 static Lisp_Object Vbusy_cursor_delay;
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10076
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10077 /* Default number of seconds to wait before displaying a busy
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10078 cursor. */
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10079
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10080 #define DEFAULT_BUSY_CURSOR_DELAY 1
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10081
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10082 /* Function prototypes. */
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10083
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10084 static void show_busy_cursor P_ ((struct atimer *));
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10085 static void hide_busy_cursor P_ ((void));
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10086
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10087
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10088 /* Cancel a currently active busy-cursor timer, and start a new one. */
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10089
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10090 void
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10091 start_busy_cursor ()
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10092 {
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10093 EMACS_TIME delay;
27915
e5b8e194d279 (start_busy_cursor): Allow floats for busy-cursor-delay.
Gerd Moellmann <gerd@gnu.org>
parents: 27902
diff changeset
10094 int secs, usecs = 0;
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10095
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10096 cancel_busy_cursor ();
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10097
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10098 if (INTEGERP (Vbusy_cursor_delay)
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10099 && XINT (Vbusy_cursor_delay) > 0)
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10100 secs = XFASTINT (Vbusy_cursor_delay);
27915
e5b8e194d279 (start_busy_cursor): Allow floats for busy-cursor-delay.
Gerd Moellmann <gerd@gnu.org>
parents: 27902
diff changeset
10101 else if (FLOATP (Vbusy_cursor_delay)
e5b8e194d279 (start_busy_cursor): Allow floats for busy-cursor-delay.
Gerd Moellmann <gerd@gnu.org>
parents: 27902
diff changeset
10102 && XFLOAT_DATA (Vbusy_cursor_delay) > 0)
e5b8e194d279 (start_busy_cursor): Allow floats for busy-cursor-delay.
Gerd Moellmann <gerd@gnu.org>
parents: 27902
diff changeset
10103 {
e5b8e194d279 (start_busy_cursor): Allow floats for busy-cursor-delay.
Gerd Moellmann <gerd@gnu.org>
parents: 27902
diff changeset
10104 Lisp_Object tem;
e5b8e194d279 (start_busy_cursor): Allow floats for busy-cursor-delay.
Gerd Moellmann <gerd@gnu.org>
parents: 27902
diff changeset
10105 tem = Ftruncate (Vbusy_cursor_delay, Qnil);
e5b8e194d279 (start_busy_cursor): Allow floats for busy-cursor-delay.
Gerd Moellmann <gerd@gnu.org>
parents: 27902
diff changeset
10106 secs = XFASTINT (tem);
e5b8e194d279 (start_busy_cursor): Allow floats for busy-cursor-delay.
Gerd Moellmann <gerd@gnu.org>
parents: 27902
diff changeset
10107 usecs = (XFLOAT_DATA (Vbusy_cursor_delay) - secs) * 1000000;
e5b8e194d279 (start_busy_cursor): Allow floats for busy-cursor-delay.
Gerd Moellmann <gerd@gnu.org>
parents: 27902
diff changeset
10108 }
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10109 else
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10110 secs = DEFAULT_BUSY_CURSOR_DELAY;
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10111
27915
e5b8e194d279 (start_busy_cursor): Allow floats for busy-cursor-delay.
Gerd Moellmann <gerd@gnu.org>
parents: 27902
diff changeset
10112 EMACS_SET_SECS_USECS (delay, secs, usecs);
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10113 busy_cursor_atimer = start_atimer (ATIMER_RELATIVE, delay,
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10114 show_busy_cursor, NULL);
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10115 }
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10116
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10117
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10118 /* Cancel the busy cursor timer if active, hide a busy cursor if
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10119 shown. */
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10120
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10121 void
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10122 cancel_busy_cursor ()
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10123 {
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10124 if (busy_cursor_atimer)
27902
27af8b008c69 (cancel_busy_cursor): Set busy_cursor_atimer to null
Gerd Moellmann <gerd@gnu.org>
parents: 27864
diff changeset
10125 {
27af8b008c69 (cancel_busy_cursor): Set busy_cursor_atimer to null
Gerd Moellmann <gerd@gnu.org>
parents: 27864
diff changeset
10126 cancel_atimer (busy_cursor_atimer);
27af8b008c69 (cancel_busy_cursor): Set busy_cursor_atimer to null
Gerd Moellmann <gerd@gnu.org>
parents: 27864
diff changeset
10127 busy_cursor_atimer = NULL;
27af8b008c69 (cancel_busy_cursor): Set busy_cursor_atimer to null
Gerd Moellmann <gerd@gnu.org>
parents: 27864
diff changeset
10128 }
27af8b008c69 (cancel_busy_cursor): Set busy_cursor_atimer to null
Gerd Moellmann <gerd@gnu.org>
parents: 27864
diff changeset
10129
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10130 if (busy_cursor_shown_p)
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10131 hide_busy_cursor ();
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10132 }
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10133
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10134
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10135 /* Timer function of busy_cursor_atimer. TIMER is equal to
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10136 busy_cursor_atimer.
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10137
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10138 Display a busy cursor on all frames by mapping the frames'
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10139 busy_window. Set the busy_p flag in the frames' output_data.x
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10140 structure to indicate that a busy cursor is shown on the
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10141 frames. */
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10142
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10143 static void
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10144 show_busy_cursor (timer)
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10145 struct atimer *timer;
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10146 {
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10147 /* The timer implementation will cancel this timer automatically
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10148 after this function has run. Set busy_cursor_atimer to null
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10149 so that we know the timer doesn't have to be canceled. */
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10150 busy_cursor_atimer = NULL;
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10151
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10152 if (!busy_cursor_shown_p)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10153 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10154 Lisp_Object rest, frame;
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10155
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10156 BLOCK_INPUT;
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10157
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10158 FOR_EACH_FRAME (rest, frame)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10159 if (FRAME_X_P (XFRAME (frame)))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10160 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10161 struct frame *f = XFRAME (frame);
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10162
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10163 f->output_data.x->busy_p = 1;
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10164
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10165 if (!f->output_data.x->busy_window)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10166 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10167 unsigned long mask = CWCursor;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10168 XSetWindowAttributes attrs;
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10169
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10170 attrs.cursor = f->output_data.x->busy_cursor;
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10171
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10172 f->output_data.x->busy_window
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10173 = XCreateWindow (FRAME_X_DISPLAY (f),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10174 FRAME_OUTER_WINDOW (f),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10175 0, 0, 32000, 32000, 0, 0,
26474
027b7c42a65b (Fx_show_busy_cursor): Doc-fix.
Gerd Moellmann <gerd@gnu.org>
parents: 26401
diff changeset
10176 InputOnly,
027b7c42a65b (Fx_show_busy_cursor): Doc-fix.
Gerd Moellmann <gerd@gnu.org>
parents: 26401
diff changeset
10177 CopyFromParent,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10178 mask, &attrs);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10179 }
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10180
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10181 XMapRaised (FRAME_X_DISPLAY (f), f->output_data.x->busy_window);
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10182 XFlush (FRAME_X_DISPLAY (f));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10183 }
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10184
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10185 busy_cursor_shown_p = 1;
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10186 UNBLOCK_INPUT;
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10187 }
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10188 }
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10189
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10190
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10191 /* Hide the busy cursor on all frames, if it is currently shown. */
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10192
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10193 static void
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10194 hide_busy_cursor ()
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10195 {
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10196 if (busy_cursor_shown_p)
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10197 {
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10198 Lisp_Object rest, frame;
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10199
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10200 BLOCK_INPUT;
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10201 FOR_EACH_FRAME (rest, frame)
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10202 {
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10203 struct frame *f = XFRAME (frame);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10204
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10205 if (FRAME_X_P (f)
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10206 /* Watch out for newly created frames. */
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10207 && f->output_data.x->busy_window)
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10208 {
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10209 XUnmapWindow (FRAME_X_DISPLAY (f), f->output_data.x->busy_window);
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10210 /* Sync here because XTread_socket looks at the busy_p flag
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10211 that is reset to zero below. */
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10212 XSync (FRAME_X_DISPLAY (f), False);
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10213 f->output_data.x->busy_p = 0;
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10214 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10215 }
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10216
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10217 busy_cursor_shown_p = 0;
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10218 UNBLOCK_INPUT;
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10219 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10220 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10221
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
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 Tool tips
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10226 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10227
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10228 static Lisp_Object x_create_tip_frame P_ ((struct x_display_info *,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10229 Lisp_Object));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10230
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10231 /* The frame of a currently visible tooltip, or null. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10232
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10233 struct frame *tip_frame;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10234
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10235 /* 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
10236 fires. */
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 Lisp_Object tip_timer;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10239 Window tip_window;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10240
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10241 /* Create a frame for a tooltip on the display described by DPYINFO.
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10242 PARMS is a list of frame parameters. Value is the frame. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10243
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10244 static Lisp_Object
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10245 x_create_tip_frame (dpyinfo, parms)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10246 struct x_display_info *dpyinfo;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10247 Lisp_Object parms;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10248 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10249 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10250 Lisp_Object frame, tem;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10251 Lisp_Object name;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10252 long window_prompting = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10253 int width, height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10254 int count = specpdl_ptr - specpdl;
25715
feaedc03dbc8 (x_set_background_color): Remove unused variable(s).
Gerd Moellmann <gerd@gnu.org>
parents: 25691
diff changeset
10255 struct gcpro gcpro1, gcpro2, gcpro3;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10256 struct kboard *kb;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10257
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10258 check_x ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10259
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10260 /* 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
10261 this frame has a specified name. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10262 Vx_resource_name = Vinvocation_name;
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 #ifdef MULTI_KBOARD
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10265 kb = dpyinfo->kboard;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10266 #else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10267 kb = &the_only_kboard;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10268 #endif
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10269
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10270 /* 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
10271 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
10272 if (!STRINGP (name)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10273 && !EQ (name, Qunbound)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10274 && !NILP (name))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10275 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
10276 Vx_resource_name = name;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10277
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10278 frame = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10279 GCPRO3 (parms, name, frame);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10280 tip_frame = f = make_frame (1);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10281 XSETFRAME (frame, f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10282 FRAME_CAN_HAVE_SCROLL_BARS (f) = 0;
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 f->output_method = output_x_window;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10285 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
10286 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
10287 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
10288 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
10289 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
10290 f->output_data.x->scroll_bar_background_pixel = -1;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10291 f->icon_name = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10292 FRAME_X_DISPLAY_INFO (f) = dpyinfo;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10293 #ifdef MULTI_KBOARD
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10294 FRAME_KBOARD (f) = kb;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10295 #endif
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10296 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
10297 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
10298
29882
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
10299 /* 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
10300 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
10301 {
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
10302 Lisp_Object black;
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
10303 struct gcpro gcpro1;
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
10304
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
10305 black = build_string ("black");
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
10306 GCPRO1 (black);
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
10307 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
10308 = 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
10309 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
10310 = 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
10311 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
10312 = 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
10313 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
10314 = 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
10315 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
10316 = 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
10317 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
10318 = 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
10319 UNGCPRO;
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
10320 }
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
10321
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10322 /* 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
10323 be set. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10324 if (EQ (name, Qunbound) || NILP (name))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10325 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10326 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
10327 f->explicit_name = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10328 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10329 else
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 f->name = name;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10332 f->explicit_name = 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10333 /* 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
10334 specbind (Qx_resource_name, name);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10335 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10336
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10337 /* Extract the window parameters from the supplied values
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10338 that are needed to determine window geometry. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10339 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10340 Lisp_Object font;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10341
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10342 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
10343
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10344 BLOCK_INPUT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10345 /* 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
10346 if (STRINGP (font))
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 tem = Fquery_fontset (font, Qnil);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10349 if (STRINGP (tem))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10350 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
10351 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10352 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
10353 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10354
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10355 /* 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
10356 if (!STRINGP (font))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10357 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
10358 if (!STRINGP (font))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10359 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
10360 if (! STRINGP (font))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10361 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
10362 if (! STRINGP (font))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10363 /* 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
10364 and takes too long. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10365 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
10366 /* 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
10367 if (! STRINGP (font))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10368 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
10369 UNBLOCK_INPUT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10370 if (! STRINGP (font))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10371 font = build_string ("fixed");
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 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
10374 "font", "Font", RES_TYPE_STRING);
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
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10377 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
10378 "borderWidth", "BorderWidth", RES_TYPE_NUMBER);
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 /* 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
10381 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
10382 it). */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10383 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
10384 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10385 Lisp_Object value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10386
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10387 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
10388 "internalBorder", "internalBorder", RES_TYPE_NUMBER);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10389 if (! EQ (value, Qunbound))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10390 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
10391 parms);
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
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10394 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
10395 "internalBorderWidth", "internalBorderWidth",
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10396 RES_TYPE_NUMBER);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10397
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10398 /* 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
10399 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
10400 "foreground", "Foreground", RES_TYPE_STRING);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10401 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
10402 "background", "Background", RES_TYPE_STRING);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10403 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
10404 "pointerColor", "Foreground", RES_TYPE_STRING);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10405 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
10406 "cursorColor", "Foreground", RES_TYPE_STRING);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10407 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
10408 "borderColor", "BorderColor", RES_TYPE_STRING);
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 /* 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
10411 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
10412 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
10413 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
10414 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
10415 happen. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10416 init_frame_faces (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10417
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10418 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
10419 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
10420
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10421 if (window_prompting & XNegative)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10422 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10423 if (window_prompting & YNegative)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10424 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
10425 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10426 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
10427 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10428 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10429 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10430 if (window_prompting & YNegative)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10431 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
10432 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10433 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
10434 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10435
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10436 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
10437 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10438 XSetWindowAttributes attrs;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10439 unsigned long mask;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10440
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10441 BLOCK_INPUT;
33657
e9cf01c7cda6 (x_create_tip_frame): Use CWSaveUnder only if the
Gerd Moellmann <gerd@gnu.org>
parents: 33601
diff changeset
10442 mask = CWBackPixel | CWOverrideRedirect | CWEventMask;
e9cf01c7cda6 (x_create_tip_frame): Use CWSaveUnder only if the
Gerd Moellmann <gerd@gnu.org>
parents: 33601
diff changeset
10443 if (DoesSaveUnders (dpyinfo->screen))
e9cf01c7cda6 (x_create_tip_frame): Use CWSaveUnder only if the
Gerd Moellmann <gerd@gnu.org>
parents: 33601
diff changeset
10444 mask |= CWSaveUnder;
e9cf01c7cda6 (x_create_tip_frame): Use CWSaveUnder only if the
Gerd Moellmann <gerd@gnu.org>
parents: 33601
diff changeset
10445
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
10446 /* 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
10447 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
10448 3.2.8). */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10449 attrs.override_redirect = True;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10450 attrs.save_under = True;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10451 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
10452 /* 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
10453 attrs.event_mask = StructureNotifyMask;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10454 tip_window
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10455 = FRAME_X_WINDOW (f)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10456 = XCreateWindow (FRAME_X_DISPLAY (f),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10457 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
10458 /* x, y, width, height */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10459 0, 0, 1, 1,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10460 /* Border. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10461 1,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10462 CopyFromParent, InputOutput, CopyFromParent,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10463 mask, &attrs);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10464 UNBLOCK_INPUT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10465 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10466
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10467 x_make_gc (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10468
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10469 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
10470 "autoRaise", "AutoRaiseLower", RES_TYPE_BOOLEAN);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10471 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
10472 "autoLower", "AutoRaiseLower", RES_TYPE_BOOLEAN);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10473 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
10474 "cursorType", "CursorType", RES_TYPE_SYMBOL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10475
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10476 /* 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
10477 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
10478 f->height. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10479 width = f->width;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10480 height = f->height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10481 f->height = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10482 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
10483 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
10484
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10485 f->no_split = 1;
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 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10488
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10489 /* 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
10490 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
10491 visible won't work. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10492 Vframe_list = Fcons (frame, Vframe_list);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10493
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10494 /* 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
10495 its display. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10496 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
10497
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10498 return unbind_to (count, frame);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10499 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10500
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10501
30224
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10502 DEFUN ("x-show-tip", Fx_show_tip, Sx_show_tip, 1, 6, 0,
25550
05f27fc24f81 (Fx_show_tip): Improve documentation.
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
10503 "Show STRING in a \"tooltip\" window on frame FRAME.\n\
30224
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10504 A tooltip window is a small X window displaying a string.\n\
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10505 \n\
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10506 FRAME nil or omitted means use the selected frame.\n\
30224
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10507 \n\
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10508 PARMS is an optional list of frame parameters which can be\n\
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10509 used to change the tooltip's appearance.\n\
30224
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10510 \n\
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10511 Automatically hide the tooltip after TIMEOUT seconds.\n\
30224
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10512 TIMEOUT nil means use the default timeout of 5 seconds.\n\
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10513 \n\
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10514 If the list of frame parameters PARAMS contains a `left' parameters,\n\
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10515 the tooltip is displayed at that x-position. Otherwise it is\n\
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10516 displayed at the mouse position, with offset DX added (default is 5 if\n\
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10517 DX isn't specified). Likewise for the y-position; if a `top' frame\n\
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10518 parameter is specified, it determines the y-position of the tooltip\n\
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10519 window, otherwise it is displayed at the mouse position, with offset\n\
33589
5832e9020859 (Fx_show_tip): Use default y-offset of -10 so that
Gerd Moellmann <gerd@gnu.org>
parents: 33443
diff changeset
10520 DY added (default is -10).")
30224
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10521 (string, frame, parms, timeout, dx, dy)
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10522 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
10523 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10524 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10525 struct window *w;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10526 Window root, child;
30224
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10527 Lisp_Object buffer, top, left;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10528 struct buffer *old_buffer;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10529 struct text_pos pos;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10530 int i, width, height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10531 int root_x, root_y, win_x, win_y;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10532 unsigned pmask;
26980
f0d5e95ccce9 (Fx_show_tip): Gcpro `timeout' too.
Dave Love <fx@gnu.org>
parents: 26978
diff changeset
10533 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
10534 int old_windows_or_buffers_changed = windows_or_buffers_changed;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10535 int count = specpdl_ptr - specpdl;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10536
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10537 specbind (Qinhibit_redisplay, Qt);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10538
26980
f0d5e95ccce9 (Fx_show_tip): Gcpro `timeout' too.
Dave Love <fx@gnu.org>
parents: 26978
diff changeset
10539 GCPRO4 (string, parms, frame, timeout);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10540
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10541 CHECK_STRING (string, 0);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10542 f = check_x_frame (frame);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10543 if (NILP (timeout))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10544 timeout = make_number (5);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10545 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10546 CHECK_NATNUM (timeout, 2);
30224
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10547
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10548 if (NILP (dx))
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10549 dx = make_number (5);
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10550 else
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10551 CHECK_NUMBER (dx, 5);
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10552
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10553 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
10554 dy = make_number (-10);
30224
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10555 else
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10556 CHECK_NUMBER (dy, 6);
24994
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 /* Hide a previous tip, if any. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10559 Fx_hide_tip ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10560
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10561 /* Add default values to frame parameters. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10562 if (NILP (Fassq (Qname, parms)))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10563 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
10564 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
10565 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
10566 if (NILP (Fassq (Qborder_width, parms)))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10567 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
10568 if (NILP (Fassq (Qborder_color, parms)))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10569 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
10570 if (NILP (Fassq (Qbackground_color, parms)))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10571 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
10572 parms);
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 /* 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
10575 variable tip_frame. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10576 frame = x_create_tip_frame (FRAME_X_DISPLAY_INFO (f), parms);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10577 tip_frame = f = XFRAME (frame);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10578
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10579 /* Set up the frame's root window. Currently we use a size of 80
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10580 columns x 40 lines. If someone wants to show a larger tip, he
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10581 will loose. I don't think this is a realistic case. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10582 w = XWINDOW (FRAME_ROOT_WINDOW (f));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10583 w->left = w->top = make_number (0);
28464
cad4cc0508a0 Fix Lisp_Object/int type confusion revealed by making Lisp_Object a union type:
Ken Raeburn <raeburn@raeburn.org>
parents: 28410
diff changeset
10584 w->width = make_number (80);
cad4cc0508a0 Fix Lisp_Object/int type confusion revealed by making Lisp_Object a union type:
Ken Raeburn <raeburn@raeburn.org>
parents: 28410
diff changeset
10585 w->height = make_number (40);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10586 adjust_glyphs (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10587 w->pseudo_window_p = 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10588
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10589 /* 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
10590 buffer = Fget_buffer_create (build_string (" *tip*"));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10591 Fset_window_buffer (FRAME_ROOT_WINDOW (f), buffer);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10592 old_buffer = current_buffer;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10593 set_buffer_internal_1 (XBUFFER (buffer));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10594 Ferase_buffer ();
28464
cad4cc0508a0 Fix Lisp_Object/int type confusion revealed by making Lisp_Object a union type:
Ken Raeburn <raeburn@raeburn.org>
parents: 28410
diff changeset
10595 Finsert (1, &string);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10596 clear_glyph_matrix (w->desired_matrix);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10597 clear_glyph_matrix (w->current_matrix);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10598 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
10599 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
10600
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10601 /* 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
10602 width = height = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10603 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
10604 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10605 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
10606 struct glyph *last;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10607 int row_width;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10608
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10609 /* 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
10610 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
10611 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10612
25082
ba6bf065b287 (x_create_tip_frame): Don't set bitmapIcon resource.
Gerd Moellmann <gerd@gnu.org>
parents: 25075
diff changeset
10613 /* 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
10614 row->full_width_p = 1;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10615
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
10616 /* 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
10617 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
10618 if (row->used[TEXT_AREA])
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10619 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10620 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
10621 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
10622 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10623 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10624 row_width = row->pixel_width;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10625
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10626 height += row->height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10627 width = max (width, row_width);
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
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10630 /* 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
10631 window should have. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10632 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
10633 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
10634
30224
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10635 /* User-specified position? */
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10636 left = Fcdr (Fassq (Qleft, parms));
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10637 top = Fcdr (Fassq (Qtop, parms));
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10638
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10639 /* 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
10640 show it. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10641 BLOCK_INPUT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10642 XQueryPointer (FRAME_X_DISPLAY (f), 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
10643 &root, &child, &root_x, &root_y, &win_x, &win_y, &pmask);
30224
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10644 UNBLOCK_INPUT;
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10645
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10646 root_x += XINT (dx);
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10647 root_y += XINT (dy);
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10648
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10649 if (INTEGERP (left))
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10650 root_x = XINT (left);
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10651 if (INTEGERP (top))
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10652 root_y = XINT (top);
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10653
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10654 BLOCK_INPUT;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10655 XMoveResizeWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
30224
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
10656 root_x, root_y - height, width, height);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10657 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
10658 UNBLOCK_INPUT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10659
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10660 /* Draw into the window. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10661 w->must_be_updated_p = 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10662 update_single_window (w, 1);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10663
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10664 /* Restore original current buffer. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10665 set_buffer_internal_1 (old_buffer);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10666 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
10667
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10668 /* 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
10669 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
10670 intern ("x-hide-tip"));
26954
e388d69f4269 (Fx_show_tip): Add missing UNGCPRO.
Dave Love <fx@gnu.org>
parents: 26876
diff changeset
10671
e388d69f4269 (Fx_show_tip): Add missing UNGCPRO.
Dave Love <fx@gnu.org>
parents: 26876
diff changeset
10672 UNGCPRO;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10673 return unbind_to (count, Qnil);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10674 }
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 DEFUN ("x-hide-tip", Fx_hide_tip, Sx_hide_tip, 0, 0, 0,
25550
05f27fc24f81 (Fx_show_tip): Improve documentation.
Gerd Moellmann <gerd@gnu.org>
parents: 25544
diff changeset
10678 "Hide the current tooltip window, if there is any.\n\
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10679 Value is t is tooltip was open, nil otherwise.")
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10680 ()
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 int count = specpdl_ptr - specpdl;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10683 int deleted_p = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10684
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10685 specbind (Qinhibit_redisplay, Qt);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10686
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10687 if (!NILP (tip_timer))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10688 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10689 call1 (intern ("cancel-timer"), tip_timer);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10690 tip_timer = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10691 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10692
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10693 if (tip_frame)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10694 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10695 Lisp_Object frame;
33713
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
10696
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10697 XSETFRAME (frame, tip_frame);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10698 Fdelete_frame (frame, Qt);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10699 tip_frame = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10700 deleted_p = 1;
33713
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
10701
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
10702 #ifdef USE_LUCID
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
10703 /* 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
10704 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
10705 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
10706 {
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
10707 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
10708 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
10709 extern void xlwmenu_redisplay P_ ((Widget));
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
10710
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
10711 if (!DoesSaveUnders (FRAME_X_DISPLAY_INFO (f)->screen)
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
10712 && w != None)
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
10713 {
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
10714 BLOCK_INPUT;
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
10715 xlwmenu_redisplay (w);
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
10716 UNBLOCK_INPUT;
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
10717 }
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
10718 }
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
10719 #endif /* USE_LUCID */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10720 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10721
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10722 return unbind_to (count, deleted_p ? Qt : Qnil);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10723 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10724
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10725
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10726
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10727 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10728 File selection dialog
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10729 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10730
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10731 #ifdef USE_MOTIF
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10732
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10733 /* 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
10734
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10735 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10736 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
10737 Widget widget;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10738 XtPointer call_data, client_data;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10739 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10740 int *result = (int *) client_data;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10741 XmAnyCallbackStruct *cb = (XmAnyCallbackStruct *) call_data;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10742 *result = cb->reason;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10743 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10744
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10745
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10746 DEFUN ("x-file-dialog", Fx_file_dialog, Sx_file_dialog, 2, 4, 0,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10747 "Read file name, prompting with PROMPT in directory DIR.\n\
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10748 Use a file selection dialog.\n\
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10749 Select DEFAULT-FILENAME in the dialog's file selection box, if\n\
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10750 specified. Don't let the user enter a file name in the file\n\
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10751 selection dialog's entry field, if MUSTMATCH is non-nil.")
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10752 (prompt, dir, default_filename, mustmatch)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10753 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
10754 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10755 int result;
25679
8b09c5927f1c (QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
10756 struct frame *f = SELECTED_FRAME ();
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10757 Lisp_Object file = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10758 Widget dialog, text, list, help;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10759 Arg al[10];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10760 int ac = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10761 extern XtAppContext Xt_app_con;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10762 char *title;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10763 XmString dir_xmstring, pattern_xmstring;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10764 int popup_activated_flag;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10765 int count = specpdl_ptr - specpdl;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10766 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
10767
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10768 GCPRO5 (prompt, dir, default_filename, mustmatch, file);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10769 CHECK_STRING (prompt, 0);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10770 CHECK_STRING (dir, 1);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10771
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10772 /* Prevent redisplay. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10773 specbind (Qinhibit_redisplay, Qt);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10774
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10775 BLOCK_INPUT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10776
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10777 /* 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
10778 directory and using "*" as pattern. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10779 dir = Fexpand_file_name (dir, Qnil);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10780 dir_xmstring = XmStringCreateLocalized (XSTRING (dir)->data);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10781 pattern_xmstring = XmStringCreateLocalized ("*");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10782
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10783 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
10784 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
10785 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
10786 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
10787 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
10788 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
10789 "fsb", al, ac);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10790 XmStringFree (dir_xmstring);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10791 XmStringFree (pattern_xmstring);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10792
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10793 /* Add callbacks for OK and Cancel. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10794 XtAddCallback (dialog, XmNokCallback, file_dialog_cb,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10795 (XtPointer) &result);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10796 XtAddCallback (dialog, XmNcancelCallback, file_dialog_cb,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10797 (XtPointer) &result);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10798
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10799 /* 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
10800 help = XmFileSelectionBoxGetChild (dialog, XmDIALOG_HELP_BUTTON);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10801 XtSetSensitive (help, False);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10802
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10803 /* Mark OK button as default. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10804 XtVaSetValues (XmFileSelectionBoxGetChild (dialog, XmDIALOG_OK_BUTTON),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10805 XmNshowAsDefault, True, NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10806
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10807 /* 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
10808 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
10809 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
10810 the result file name, then. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10811 text = XmFileSelectionBoxGetChild (dialog, XmDIALOG_TEXT);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10812 if (!NILP (mustmatch))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10813 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10814 Widget label;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10815 label = XmFileSelectionBoxGetChild (dialog, XmDIALOG_SELECTION_LABEL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10816 XtSetSensitive (text, False);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10817 XtSetSensitive (label, False);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10818 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10819
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10820 /* 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
10821 XtManageChild (dialog);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10822
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10823 /* 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
10824 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
10825 list = XmFileSelectionBoxGetChild (dialog, XmDIALOG_LIST);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10826 if (STRINGP (default_filename))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10827 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10828 XmString default_xmstring;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10829 int item_pos;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10830
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10831 default_xmstring
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10832 = XmStringCreateLocalized (XSTRING (default_filename)->data);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10833
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10834 if (!XmListItemExists (list, default_xmstring))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10835 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10836 /* 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
10837 XmListAddItem (list, default_xmstring, 0);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10838 item_pos = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10839 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10840 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10841 item_pos = XmListItemPos (list, default_xmstring);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10842 XmStringFree (default_xmstring);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10843
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10844 /* 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
10845 XmListSelectPos (list, item_pos, True);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10846 XmListSetPos (list, item_pos);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10847 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10848
29866
c31c4d7dd0e0 (Fx_file_dialog) [HAVE_MOTIF_2_1]: Handle events
Gerd Moellmann <gerd@gnu.org>
parents: 29728
diff changeset
10849 #ifdef HAVE_MOTIF_2_1
c31c4d7dd0e0 (Fx_file_dialog) [HAVE_MOTIF_2_1]: Handle events
Gerd Moellmann <gerd@gnu.org>
parents: 29728
diff changeset
10850
c31c4d7dd0e0 (Fx_file_dialog) [HAVE_MOTIF_2_1]: Handle events
Gerd Moellmann <gerd@gnu.org>
parents: 29728
diff changeset
10851 /* Process events until the user presses Cancel or OK. */
c31c4d7dd0e0 (Fx_file_dialog) [HAVE_MOTIF_2_1]: Handle events
Gerd Moellmann <gerd@gnu.org>
parents: 29728
diff changeset
10852 result = 0;
c31c4d7dd0e0 (Fx_file_dialog) [HAVE_MOTIF_2_1]: Handle events
Gerd Moellmann <gerd@gnu.org>
parents: 29728
diff changeset
10853 while (result == 0 || XtAppPending (Xt_app_con))
c31c4d7dd0e0 (Fx_file_dialog) [HAVE_MOTIF_2_1]: Handle events
Gerd Moellmann <gerd@gnu.org>
parents: 29728
diff changeset
10854 XtAppProcessEvent (Xt_app_con, XtIMAll);
c31c4d7dd0e0 (Fx_file_dialog) [HAVE_MOTIF_2_1]: Handle events
Gerd Moellmann <gerd@gnu.org>
parents: 29728
diff changeset
10855
c31c4d7dd0e0 (Fx_file_dialog) [HAVE_MOTIF_2_1]: Handle events
Gerd Moellmann <gerd@gnu.org>
parents: 29728
diff changeset
10856 #else /* not HAVE_MOTIF_2_1 */
c31c4d7dd0e0 (Fx_file_dialog) [HAVE_MOTIF_2_1]: Handle events
Gerd Moellmann <gerd@gnu.org>
parents: 29728
diff changeset
10857
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10858 /* Process all events until the user presses Cancel or OK. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10859 for (result = 0; result == 0;)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10860 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10861 XEvent event;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10862 Widget widget, parent;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10863
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10864 XtAppNextEvent (Xt_app_con, &event);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10865
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10866 /* See if the receiver of the event is one of the widgets of
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10867 the file selection dialog. If so, dispatch it. If not,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10868 discard it. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10869 widget = XtWindowToWidget (event.xany.display, event.xany.window);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10870 parent = widget;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10871 while (parent && parent != dialog)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10872 parent = XtParent (parent);
29866
c31c4d7dd0e0 (Fx_file_dialog) [HAVE_MOTIF_2_1]: Handle events
Gerd Moellmann <gerd@gnu.org>
parents: 29728
diff changeset
10873
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10874 if (parent == dialog
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10875 || (event.type == Expose
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10876 && !process_expose_from_menu (event)))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10877 XtDispatchEvent (&event);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10878 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10879
29866
c31c4d7dd0e0 (Fx_file_dialog) [HAVE_MOTIF_2_1]: Handle events
Gerd Moellmann <gerd@gnu.org>
parents: 29728
diff changeset
10880 #endif /* not HAVE_MOTIF_2_1 */
c31c4d7dd0e0 (Fx_file_dialog) [HAVE_MOTIF_2_1]: Handle events
Gerd Moellmann <gerd@gnu.org>
parents: 29728
diff changeset
10881
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10882 /* Get the result. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10883 if (result == XmCR_OK)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10884 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10885 XmString text;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10886 String data;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10887
30573
3bb43339533c (Fx_file_dialog): Use NULL instead of 0 at the end of
Gerd Moellmann <gerd@gnu.org>
parents: 30383
diff changeset
10888 XtVaGetValues (dialog, XmNtextString, &text, NULL);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10889 XmStringGetLtoR (text, XmFONTLIST_DEFAULT_TAG, &data);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10890 XmStringFree (text);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10891 file = build_string (data);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10892 XtFree (data);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10893 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10894 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10895 file = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10896
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10897 /* Clean up. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10898 XtUnmanageChild (dialog);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10899 XtDestroyWidget (dialog);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10900 UNBLOCK_INPUT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10901 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10902
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10903 /* Make "Cancel" equivalent to C-g. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10904 if (NILP (file))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10905 Fsignal (Qquit, Qnil);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10906
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10907 return unbind_to (count, file);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10908 }
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 #endif /* USE_MOTIF */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10911
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10912
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10913
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 Initialization
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10916 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10917
21846
486ac68ce051 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21779
diff changeset
10918 void
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10919 syms_of_xfns ()
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10920 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10921 /* 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
10922 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
10923
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
10924 /* 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
10925 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
10926 /*&&& init symbols here &&&*/
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
10927 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
10928 staticpro (&Qauto_raise);
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
10929 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
10930 staticpro (&Qauto_lower);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
10931 Qbar = intern ("bar");
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
10932 staticpro (&Qbar);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
10933 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
10934 staticpro (&Qborder_color);
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
10935 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
10936 staticpro (&Qborder_width);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
10937 Qbox = intern ("box");
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
10938 staticpro (&Qbox);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
10939 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
10940 staticpro (&Qcursor_color);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
10941 Qcursor_type = intern ("cursor-type");
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
10942 staticpro (&Qcursor_type);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
10943 Qgeometry = intern ("geometry");
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
10944 staticpro (&Qgeometry);
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
10945 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
10946 staticpro (&Qicon_left);
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
10947 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
10948 staticpro (&Qicon_top);
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
10949 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
10950 staticpro (&Qicon_type);
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
10951 Qicon_name = intern ("icon-name");
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
10952 staticpro (&Qicon_name);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
10953 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
10954 staticpro (&Qinternal_border_width);
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
10955 Qleft = intern ("left");
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
10956 staticpro (&Qleft);
16254
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
10957 Qright = intern ("right");
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
10958 staticpro (&Qright);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
10959 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
10960 staticpro (&Qmouse_color);
1874
19cf50641d6c * frame.c (Fframe_parameters): Report the `minibuffer' parameter of
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
10961 Qnone = intern ("none");
19cf50641d6c * frame.c (Fframe_parameters): Report the `minibuffer' parameter of
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
10962 staticpro (&Qnone);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
10963 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
10964 staticpro (&Qparent_id);
8942
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
10965 Qscroll_bar_width = intern ("scroll-bar-width");
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
10966 staticpro (&Qscroll_bar_width);
2328
82e4fed9cdd6 * xfns.c (Fx_parse_geometry): Renamed from Fx_geometry.
Jim Blandy <jimb@redhat.com>
parents: 2295
diff changeset
10967 Qsuppress_icon = intern ("suppress-icon");
82e4fed9cdd6 * xfns.c (Fx_parse_geometry): Renamed from Fx_geometry.
Jim Blandy <jimb@redhat.com>
parents: 2295
diff changeset
10968 staticpro (&Qsuppress_icon);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10969 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
10970 staticpro (&Qundefined_color);
1994
73ce9dd21093 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1932
diff changeset
10971 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
10972 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
10973 Qvisibility = intern ("visibility");
9bce20507666 Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents: 2283
diff changeset
10974 staticpro (&Qvisibility);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
10975 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
10976 staticpro (&Qwindow_id);
23793
3f48dda0547a (Qouter_window_id): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 23411
diff changeset
10977 Qouter_window_id = intern ("outer-window-id");
3f48dda0547a (Qouter_window_id): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 23411
diff changeset
10978 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
10979 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
10980 staticpro (&Qx_frame_parameter);
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
10981 Qx_resource_name = intern ("x-resource-name");
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
10982 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
10983 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
10984 staticpro (&Quser_position);
02cc4eee5928 (x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents: 7209
diff changeset
10985 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
10986 staticpro (&Quser_size);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10987 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
10988 staticpro (&Qscroll_bar_foreground);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10989 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
10990 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
10991 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
10992 staticpro (&Qscreen_gamma);
28690
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
10993 Qline_spacing = intern ("line-spacing");
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
10994 staticpro (&Qline_spacing);
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
10995 Qcenter = intern ("center");
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
10996 staticpro (&Qcenter);
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
10997 Qcompound_text = intern ("compound-text");
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
10998 staticpro (&Qcompound_text);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
10999 /* 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
11000
26876
578acd06aa3b Include intervals.h.
Kenichi Handa <handa@m17n.org>
parents: 26808
diff changeset
11001 /* Text property `display' should be nonsticky by default. */
578acd06aa3b Include intervals.h.
Kenichi Handa <handa@m17n.org>
parents: 26808
diff changeset
11002 Vtext_property_default_nonsticky
578acd06aa3b Include intervals.h.
Kenichi Handa <handa@m17n.org>
parents: 26808
diff changeset
11003 = Fcons (Fcons (Qdisplay, Qt), Vtext_property_default_nonsticky);
578acd06aa3b Include intervals.h.
Kenichi Handa <handa@m17n.org>
parents: 26808
diff changeset
11004
578acd06aa3b Include intervals.h.
Kenichi Handa <handa@m17n.org>
parents: 26808
diff changeset
11005
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11006 Qlaplace = intern ("laplace");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11007 staticpro (&Qlaplace);
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
11008 Qemboss = intern ("emboss");
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
11009 staticpro (&Qemboss);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
11010 Qedge_detection = intern ("edge-detection");
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
11011 staticpro (&Qedge_detection);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
11012 Qheuristic = intern ("heuristic");
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
11013 staticpro (&Qheuristic);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
11014 QCmatrix = intern (":matrix");
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
11015 staticpro (&QCmatrix);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
11016 QCcolor_adjustment = intern (":color-adjustment");
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
11017 staticpro (&QCcolor_adjustment);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
11018 QCmask = intern (":mask");
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
11019 staticpro (&QCmask);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
11020
18631
62bcc6aff013 (x_set_font): Funcall Qface_set_after_frame_default.
Richard M. Stallman <rms@gnu.org>
parents: 18612
diff changeset
11021 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
11022 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
11023
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11024 Fput (Qundefined_color, Qerror_conditions,
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11025 Fcons (Qundefined_color, Fcons (Qerror, Qnil)));
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11026 Fput (Qundefined_color, Qerror_message,
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11027 build_string ("Undefined color"));
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11028
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11029 init_x_parm_symbols ();
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11030
31651
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
11031 DEFVAR_BOOL ("cross-disabled-images", &cross_disabled_images,
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
11032 "Non-nil means always draw a cross over disabled images.\n\
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
11033 Disabled images are those having an `:algorithm disabled' property.\n\
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
11034 A cross is always drawn on black & white displays.");
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
11035 cross_disabled_images = 0;
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
11036
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
11037 DEFVAR_LISP ("x-bitmap-file-path", &Vx_bitmap_file_path,
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
11038 "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
11039 Vx_bitmap_file_path = decode_env_path ((char *) 0, PATH_BITMAPS);
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
11040
4328
3d43e65a593d (syms_of_xfns): Use DEFVAR_LISP, not DEFVAR_INT, for Vx_pointer_shape.
Roland McGrath <roland@gnu.org>
parents: 4309
diff changeset
11041 DEFVAR_LISP ("x-pointer-shape", &Vx_pointer_shape,
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
11042 "The shape of the pointer when over text.\n\
2936
f9956cdb0d1d (syms_of_xfns): Don't make Lisp vars
Richard M. Stallman <rms@gnu.org>
parents: 2885
diff changeset
11043 Changing the value does not affect existing frames\n\
f9956cdb0d1d (syms_of_xfns): Don't make Lisp vars
Richard M. Stallman <rms@gnu.org>
parents: 2885
diff changeset
11044 unless you set the mouse color.");
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11045 Vx_pointer_shape = Qnil;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11046
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
11047 DEFVAR_LISP ("x-resource-name", &Vx_resource_name,
16966
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
11048 "The name Emacs uses to look up X resources.\n\
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
11049 `x-get-resource' uses this as the first component of the instance name\n\
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
11050 when requesting resource values.\n\
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
11051 Emacs initially sets `x-resource-name' to the name under which Emacs\n\
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
11052 was invoked, or to the value specified with the `-name' or `-rn'\n\
16966
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
11053 switches, if present.\n\
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
11054 \n\
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
11055 It may be useful to bind this variable locally around a call\n\
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
11056 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
11057 Vx_resource_name = Qnil;
3170
647229114f47 * xfns.c: Make resource manager work correctly even when
Jim Blandy <jimb@redhat.com>
parents: 3141
diff changeset
11058
16966
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
11059 DEFVAR_LISP ("x-resource-class", &Vx_resource_class,
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
11060 "The class Emacs uses to look up X resources.\n\
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
11061 `x-get-resource' uses this as the first component of the instance class\n\
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
11062 when requesting resource values.\n\
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
11063 Emacs initially sets `x-resource-class' to \"Emacs\".\n\
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
11064 \n\
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
11065 Setting this variable permanently is not a reasonable thing to do,\n\
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
11066 but binding this variable locally around a call to `x-get-resource'\n\
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11067 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
11068 Vx_resource_class = build_string (EMACS_CLASS);
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
11069
7683
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
11070 #if 0 /* This doesn't really do anything. */
16396
4e4cc27b2a2a (x_set_internal_border_width): Only change
Richard M. Stallman <rms@gnu.org>
parents: 16357
diff changeset
11071 DEFVAR_LISP ("x-nontext-pointer-shape", &Vx_nontext_pointer_shape,
7683
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
11072 "The shape of the pointer when not over text.\n\
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
11073 This variable takes effect when you create a new frame\n\
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
11074 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
11075 #endif
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11076 Vx_nontext_pointer_shape = Qnil;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11077
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11078 DEFVAR_LISP ("x-busy-pointer-shape", &Vx_busy_pointer_shape,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11079 "The shape of the pointer when Emacs is busy.\n\
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11080 This variable takes effect when you create a new frame\n\
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11081 or when you set the mouse color.");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11082 Vx_busy_pointer_shape = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11083
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11084 DEFVAR_BOOL ("display-busy-cursor", &display_busy_cursor_p,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11085 "Non-zero means Emacs displays a busy cursor on window systems.");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11086 display_busy_cursor_p = 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11087
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
11088 DEFVAR_LISP ("busy-cursor-delay", &Vbusy_cursor_delay,
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
11089 "*Seconds to wait before displaying a busy-cursor.\n\
27915
e5b8e194d279 (start_busy_cursor): Allow floats for busy-cursor-delay.
Gerd Moellmann <gerd@gnu.org>
parents: 27902
diff changeset
11090 Value must be an integer or float.");
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
11091 Vbusy_cursor_delay = make_number (DEFAULT_BUSY_CURSOR_DELAY);
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
11092
7683
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
11093 #if 0 /* This doesn't really do anything. */
16396
4e4cc27b2a2a (x_set_internal_border_width): Only change
Richard M. Stallman <rms@gnu.org>
parents: 16357
diff changeset
11094 DEFVAR_LISP ("x-mode-pointer-shape", &Vx_mode_pointer_shape,
7683
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
11095 "The shape of the pointer when over the mode line.\n\
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
11096 This variable takes effect when you create a new frame\n\
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
11097 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
11098 #endif
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11099 Vx_mode_pointer_shape = Qnil;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11100
16396
4e4cc27b2a2a (x_set_internal_border_width): Only change
Richard M. Stallman <rms@gnu.org>
parents: 16357
diff changeset
11101 DEFVAR_LISP ("x-sensitive-text-pointer-shape",
7683
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
11102 &Vx_sensitive_text_pointer_shape,
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
11103 "The shape of the pointer when over mouse-sensitive text.\n\
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
11104 This variable takes effect when you create a new frame\n\
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
11105 or when you set the mouse color.");
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
11106 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
11107
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11108 DEFVAR_LISP ("x-cursor-fore-pixel", &Vx_cursor_fore_pixel,
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11109 "A string indicating the foreground color of the cursor box.");
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11110 Vx_cursor_fore_pixel = Qnil;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11111
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11112 DEFVAR_LISP ("x-no-window-manager", &Vx_no_window_manager,
12209
5537ed125771 (syms_of_xfns): Initialize Vx_no_window_manager. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12190
diff changeset
11113 "Non-nil if no X window manager is in use.\n\
5537ed125771 (syms_of_xfns): Initialize Vx_no_window_manager. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12190
diff changeset
11114 Emacs doesn't try to figure this out; this is always nil\n\
5537ed125771 (syms_of_xfns): Initialize Vx_no_window_manager. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12190
diff changeset
11115 unless you set it to something else.");
5537ed125771 (syms_of_xfns): Initialize Vx_no_window_manager. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12190
diff changeset
11116 /* 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
11117 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
11118 Vx_no_window_manager = Qnil;
8170
d92a24366b22 (x_toolkit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8103
diff changeset
11119
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
11120 DEFVAR_LISP ("x-pixel-size-width-font-regexp",
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
11121 &Vx_pixel_size_width_font_regexp,
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
11122 "Regexp matching a font name whose width is the same as `PIXEL_SIZE'.\n\
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
11123 \n\
17106
5075619fac7a (syms_of_xfns): Documentation of
Kenichi Handa <handa@m17n.org>
parents: 17048
diff changeset
11124 Since Emacs gets width of a font matching with this regexp from\n\
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
11125 PIXEL_SIZE field of the name, font finding mechanism gets faster for\n\
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
11126 such a font. This is especially effective for such large fonts as\n\
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
11127 Chinese, Japanese, and Korean.");
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
11128 Vx_pixel_size_width_font_regexp = Qnil;
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
11129
25628
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
11130 DEFVAR_LISP ("image-cache-eviction-delay", &Vimage_cache_eviction_delay,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11131 "Time after which cached images are removed from the cache.\n\
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11132 When an image has not been displayed this many seconds, remove it\n\
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11133 from the image cache. Value must be an integer or nil with nil\n\
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11134 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
11135 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
11136
8170
d92a24366b22 (x_toolkit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8103
diff changeset
11137 #ifdef USE_X_TOOLKIT
8192
091cd6243cae (syms_of_xfns): Provide x-toolkit in toolkit version.
Richard M. Stallman <rms@gnu.org>
parents: 8170
diff changeset
11138 Fprovide (intern ("x-toolkit"));
8170
d92a24366b22 (x_toolkit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8103
diff changeset
11139 #endif
12094
a9fda5417acf (syms_of_xfns): Provide motif in Motif version.
Karl Heuer <kwzh@gnu.org>
parents: 12080
diff changeset
11140 #ifdef USE_MOTIF
a9fda5417acf (syms_of_xfns): Provide motif in Motif version.
Karl Heuer <kwzh@gnu.org>
parents: 12080
diff changeset
11141 Fprovide (intern ("motif"));
a9fda5417acf (syms_of_xfns): Provide motif in Motif version.
Karl Heuer <kwzh@gnu.org>
parents: 12080
diff changeset
11142 #endif
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11143
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11144 defsubr (&Sx_get_resource);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11145
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11146 /* X window properties. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11147 defsubr (&Sx_change_window_property);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11148 defsubr (&Sx_delete_window_property);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11149 defsubr (&Sx_window_property);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11150
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
11151 defsubr (&Sxw_display_color_p);
8779
12c6296bbb4b (Fx_display_grayscale_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8758
diff changeset
11152 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
11153 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
11154 defsubr (&Sxw_color_values);
4279
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
11155 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
11156 defsubr (&Sx_server_vendor);
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
11157 defsubr (&Sx_server_version);
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
11158 defsubr (&Sx_display_pixel_width);
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
11159 defsubr (&Sx_display_pixel_height);
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
11160 defsubr (&Sx_display_mm_width);
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
11161 defsubr (&Sx_display_mm_height);
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
11162 defsubr (&Sx_display_screens);
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
11163 defsubr (&Sx_display_planes);
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
11164 defsubr (&Sx_display_color_cells);
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
11165 defsubr (&Sx_display_visual_class);
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
11166 defsubr (&Sx_display_backing_store);
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
11167 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
11168 defsubr (&Sx_parse_geometry);
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
11169 defsubr (&Sx_create_frame);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11170 defsubr (&Sx_open_connection);
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
11171 defsubr (&Sx_close_connection);
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
11172 defsubr (&Sx_display_list);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11173 defsubr (&Sx_synchronize);
28044
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
11174 defsubr (&Sx_focus_frame);
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
11175
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
11176 /* Setting callback functions for fontset handler. */
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
11177 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
11178
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11179 #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
11180 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
11181 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
11182 #endif
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11183
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
11184 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
11185 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
11186 query_font_func = x_query_font;
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
11187 set_frame_fontset_func = x_set_font;
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
11188 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
11189
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11190 /* Images. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11191 Qxbm = intern ("xbm");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11192 staticpro (&Qxbm);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11193 QCtype = intern (":type");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11194 staticpro (&QCtype);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11195 QCalgorithm = intern (":algorithm");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11196 staticpro (&QCalgorithm);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11197 QCheuristic_mask = intern (":heuristic-mask");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11198 staticpro (&QCheuristic_mask);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11199 QCcolor_symbols = intern (":color-symbols");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11200 staticpro (&QCcolor_symbols);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11201 QCascent = intern (":ascent");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11202 staticpro (&QCascent);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11203 QCmargin = intern (":margin");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11204 staticpro (&QCmargin);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11205 QCrelief = intern (":relief");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11206 staticpro (&QCrelief);
25628
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
11207 Qpostscript = intern ("postscript");
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
11208 staticpro (&Qpostscript);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11209 QCloader = intern (":loader");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11210 staticpro (&QCloader);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11211 QCbounding_box = intern (":bounding-box");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11212 staticpro (&QCbounding_box);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11213 QCpt_width = intern (":pt-width");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11214 staticpro (&QCpt_width);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11215 QCpt_height = intern (":pt-height");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11216 staticpro (&QCpt_height);
25620
1c991744ce13 (QCindex): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25593
diff changeset
11217 QCindex = intern (":index");
1c991744ce13 (QCindex): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25593
diff changeset
11218 staticpro (&QCindex);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11219 Qpbm = intern ("pbm");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11220 staticpro (&Qpbm);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11221
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11222 #if HAVE_XPM
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11223 Qxpm = intern ("xpm");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11224 staticpro (&Qxpm);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11225 #endif
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11226
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11227 #if HAVE_JPEG
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11228 Qjpeg = intern ("jpeg");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11229 staticpro (&Qjpeg);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11230 #endif
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11231
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11232 #if HAVE_TIFF
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11233 Qtiff = intern ("tiff");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11234 staticpro (&Qtiff);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11235 #endif
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11236
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11237 #if HAVE_GIF
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11238 Qgif = intern ("gif");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11239 staticpro (&Qgif);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11240 #endif
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11241
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11242 #if HAVE_PNG
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11243 Qpng = intern ("png");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11244 staticpro (&Qpng);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11245 #endif
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11246
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11247 defsubr (&Sclear_image_cache);
29938
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
11248 defsubr (&Simage_size);
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
11249 defsubr (&Simage_mask_p);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11250
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
11251 busy_cursor_atimer = NULL;
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
11252 busy_cursor_shown_p = 0;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11253
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11254 defsubr (&Sx_show_tip);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11255 defsubr (&Sx_hide_tip);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11256 staticpro (&tip_timer);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11257 tip_timer = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11258
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11259 #ifdef USE_MOTIF
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11260 defsubr (&Sx_file_dialog);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11261 #endif
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11262 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11263
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11264
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11265 void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11266 init_xfns ()
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11267 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11268 image_types = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11269 Vimage_types = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11270
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11271 define_image_type (&xbm_type);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11272 define_image_type (&gs_type);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11273 define_image_type (&pbm_type);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11274
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11275 #if HAVE_XPM
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11276 define_image_type (&xpm_type);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11277 #endif
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11278
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11279 #if HAVE_JPEG
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11280 define_image_type (&jpeg_type);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11281 #endif
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11282
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11283 #if HAVE_TIFF
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11284 define_image_type (&tiff_type);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11285 #endif
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11286
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11287 #if HAVE_GIF
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11288 define_image_type (&gif_type);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11289 #endif
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11290
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11291 #if HAVE_PNG
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11292 define_image_type (&png_type);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11293 #endif
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11294 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11295
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11296 #endif /* HAVE_X_WINDOWS */